#9315: sage-4.4.3, 4.4.4: Basic pickling bug in finite fields
--------------------------------+-------------------------------------------
Reporter: was | Owner: AlexGhitza
Type: defect | Status: new
Priority: major | Milestone: sage-4.5
Component: basic arithmetic | Keywords:
Author: | Upstream: N/A
Reviewer: | Merged:
Work_issues: |
--------------------------------+-------------------------------------------
Old description:
> {{{
>
> wst...@redhawk:~/db/modsym-2010$ sage modp.sage
> data/000000/gamma0-aplist-mod2-000002-0008-10000.sobj
> data/000000/gamma0-aplist-mod2-000003-0004-10000.sobj
> data/000000/gamma0-aplist-mod2-000077-0002-10000.sobj
> Traceback (most recent call last):
> File "modp.py", line 57, in <module>
> go()
> File "modp.py", line 52, in go
> all(Integer(0),Integer(2))
> File "/usr/local/sage/local/lib/python2.6/site-
> packages/sage/parallel/decorate.py", line 101, in g
> return f(*args, **kwds)
> File "modp.py", line 48, in all
> modp(d + '/' + name, p)
> File "modp.py", line 27, in modp
> save(X, name)
> File "sage_object.pyx", line 763, in sage.structure.sage_object.save
> (sage/structure/sage_object.c:7999)
> File "finite_field_base.pyx", line 674, in
> sage.rings.finite_rings.finite_field_base.FiniteField.__reduce__
> (sage/rings/finite_rings/finite_field_base.c:4937)
> TypeError: 'NoneType' object is unsubscriptable
> wst...@redhawk:~/db/modsym-2010$
> }}}
>
> More details to come!
New description:
If you try to pickle *any* residue class field, then it breaks!
{{{
sage: K.<a> = NumberField(x^2 + 1)
sage: F = K.factor(3)[0][0].residue_field()
sage: dumps(F)
---------------------------------------------------------------------------
TypeError Traceback (most recent call
last)
/home/wstein/db/modsym-2010/<ipython console> in <module>()
/usr/local/sage/local/lib/python2.6/site-
packages/sage/structure/sage_object.so in sage.structure.sage_object.dumps
(sage/structure/sage_object.c:8367)()
/usr/local/sage/local/lib/python2.6/site-
packages/sage/rings/finite_rings/finite_field_base.so in
sage.rings.finite_rings.finite_field_base.FiniteField.__reduce__
(sage/rings/finite_rings/finite_field_base.c:4937)()
TypeError: 'NoneType' object is unsubscriptable
>
/home/wstein/db/modsym-2010/finite_field_base.pyx(674)sage.rings.finite_rings.finite_field_base.FiniteField.__reduce__
(sage/rings/finite_rings/finite_field_base.c:4937)()
}}}
--
Comment(by was):
There is a function in finite_field_base.pyx that tries to pickle. It has
doctests but clearly can *never* actually work if run, i.e., it is never
actually tested. Here's the function:
{{{
def __reduce__(self):
"""
Used in pickling.
EXAMPLES::
sage: A = FiniteField(127)
sage: A == loads(dumps(A)) # indirect doctest
True
sage: B = FiniteField(3^3,'b')
sage: B == loads(dumps(B))
True
sage: C = FiniteField(2^16,'c')
sage: C == loads(dumps(C))
True
sage: D = FiniteField(3^20,'d')
sage: D == loads(dumps(D))
True
"""
return self._factory_data[0].reduce_data(self)
}}}
However, _factory_data is not defined anywhere else in the source code:
{{{
wst...@redhawk:~/build/sage-4.4.4.alpha1/devel/sage/sage/rings/finite_rings$
grep _factory_data *.pyx *.pxd
*.py
finite_field_base.pyx: return
self._factory_data[0].reduce_data(self)
}}}
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/9315#comment:1>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.