#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.

Reply via email to