#1367: [with patch, positive review] weird bug creating fractional ideal in
relative number field
---------------------------+------------------------------------------------
 Reporter:  was            |        Owner:  was     
     Type:  defect         |       Status:  closed  
 Priority:  major          |    Milestone:  sage-3.3
Component:  number theory  |   Resolution:  fixed   
 Keywords:                 |  
---------------------------+------------------------------------------------
Changes (by mabshoff):

  * status:  new => closed
  * resolution:  => fixed

Old description:

> I noticed this bug when thinking about implementing factorization of
> integers
> in a general relative number field (via the absolute field corresponding
> to it).  If this bug were fixed, then general factorization would be
> trivial to implement, as suggested by the example below.
>
> {{{
> sage: K.<a,b> = NumberField([x^2 + 1, x^2 + 2])
> sage: A = K.absolute_field('z')
> sage: I = A.factor_integer(3)[0][0]
> sage: from_A, to_A = A.structure()
> sage: G = [from_A(z) for z in I.gens()]; G
> [3, (-2*b - 1)*a + b - 1]
> sage: K.fractional_ideal(G)
> ---------------------------------------------------------------------------
> <type 'exceptions.TypeError'>             Traceback (most recent call
> last)
>
> /Users/was/s/devel/sage-main/sage/rings/number_field/<ipython console> in
> <module>()
>
> /Users/was/s/local/lib/python2.5/site-packages/IPython/Prompts.py in
> __call__(self, arg)
>     521
>     522             # and now call a possibly user-defined print
> mechanism
> --> 523             manipulated_val = self.display(arg)
>     524
>     525             # user display hooks can change the variable to be
> stored in
>
> /Users/was/s/local/lib/python2.5/site-packages/IPython/Prompts.py in
> _display(self, arg)
>     545         """
>     546
> --> 547         return self.shell.hooks.result_display(arg)
>     548
>     549     # Assign the default display method:
>
> /Users/was/s/local/lib/python2.5/site-packages/IPython/hooks.py in
> __call__(self, *args, **kw)
>     132             #print "prio",prio,"cmd",cmd #dbg
>     133             try:
> --> 134                 ret = cmd(*args, **kw)
>     135                 return ret
>     136             except ipapi.TryNext, exc:
>
> /Users/was/s/local/lib/python2.5/site-packages/IPython/hooks.py in
> result_display(self, arg)
>     160
>     161     if self.rc.pprint:
> --> 162         out = pformat(arg)
>     163         if '\n' in out:
>     164             # So that multi-line strings line up with the left
> column of
>
> /Users/was/s/local/lib/python2.5/pprint.py in pformat(self, object)
>     109     def pformat(self, object):
>     110         sio = _StringIO()
> --> 111         self._format(object, sio, 0, 0, {}, 0)
>     112         return sio.getvalue()
>     113
>
> /Users/was/s/local/lib/python2.5/pprint.py in _format(self, object,
> stream, indent, allowance, context, level)
>     127             self._readable = False
>     128             return
> --> 129         rep = self._repr(object, context, level - 1)
>     130         typ = _type(object)
>     131         sepLines = _len(rep) > (self._width - 1 - indent -
> allowance)
>
> /Users/was/s/local/lib/python2.5/pprint.py in _repr(self, object,
> context, level)
>     193     def _repr(self, object, context, level):
>     194         repr, readable, recursive = self.format(object,
> context.copy(),
> --> 195                                                 self._depth,
> level)
>     196         if not readable:
>     197             self._readable = False
>
> /Users/was/s/local/lib/python2.5/pprint.py in format(self, object,
> context, maxlevels, level)
>     205         and whether the object represents a recursive construct.
>     206         """
> --> 207         return _safe_repr(object, context, maxlevels, level)
>     208
>     209
>
> /Users/was/s/local/lib/python2.5/pprint.py in _safe_repr(object, context,
> maxlevels, level)
>     290         return format % _commajoin(components), readable,
> recursive
>     291
> --> 292     rep = repr(object)
>     293     return rep, (rep and not rep.startswith('<')), False
>     294
>
> /Users/was/s/local/lib/python2.5/site-
> packages/sage/rings/number_field/number_field_ideal.py in __repr__(self)
>     215
>     216     def __repr__(self):
> --> 217         return "Fractional ideal %s"%self._repr_short()
>     218
>     219     def _repr_short(self):
>
> /Users/was/s/local/lib/python2.5/site-
> packages/sage/rings/number_field/number_field_ideal.py in
> _repr_short(self)
>     232         # makes things insanely slow in general.
>     233         # When I fix this, I *have* to also change the _latex_
> method.
> --> 234         return '(%s)'%(', '.join([str(x) for x in
> self.gens_reduced()]))
>     235
>     236     def __div__(self, other):
>

>

>

> /Users/was/s/local/lib/python2.5/site-
> packages/sage/rings/number_field/number_field_ideal_rel.py in
> gens_reduced(self)
>      84             S = L['x']
>      85             gens = L.pari_rnf().rnfidealtwoelt(self.pari_rhnf())
> ---> 86             gens = [ L(R(x.lift().lift())) for x in gens ]
>      87             ## Make sure that gens[1] is in L, not K
>      88             Lcoeff = [ L(x) for x in list(gens[1].polynomial()) ]
>
> /Users/was/s/local/lib/python2.5/site-
> packages/sage/rings/number_field/number_field.py in __call__(self, x)
>    3321             return self.base_field()(x)
>    3322
> -> 3323         return self._element_class(self, x)
>    3324
>    3325     def _coerce_impl(self, x):
>
> /Users/was/s/devel/sage-
> main/sage/rings/number_field/number_field_element.pyx in
> sage.rings.number_field.number_field_element.NumberFieldElement.__init__()
>     231         num = f * den
>     232         for i from 0 <= i <= num.degree():
> --> 233             (<Integer>ZZ(num[i]))._to_ZZ(&coeff)
>     234             ZZX_SetCoeff( self.__numerator, i, coeff )
>     235
>
> /Users/was/s/devel/sage-main/sage/rings/number_field/integer_ring.pyx in
> sage.rings.integer_ring.IntegerRing_class.__call__()
>
> <type 'exceptions.TypeError'>: Unable to coerce -b - 2 to an integer
>
> }}}

New description:

 I noticed this bug when thinking about implementing factorization of
 integers
 in a general relative number field (via the absolute field corresponding
 to it).  If this bug were fixed, then general factorization would be
 trivial to implement, as suggested by the example below.

 {{{
 sage: K.<a,b> = NumberField([x^2 + 1, x^2 + 2])
 sage: A = K.absolute_field('z')
 sage: I = A.factor_integer(3)[0][0]
 sage: from_A, to_A = A.structure()
 sage: G = [from_A(z) for z in I.gens()]; G
 [3, (-2*b - 1)*a + b - 1]
 sage: K.fractional_ideal(G)
 ---------------------------------------------------------------------------
 <type 'exceptions.TypeError'>             Traceback (most recent call
 last)

 /Users/was/s/devel/sage-main/sage/rings/number_field/<ipython console> in
 <module>()

 /Users/was/s/local/lib/python2.5/site-packages/IPython/Prompts.py in
 __call__(self, arg)
     521
     522             # and now call a possibly user-defined print mechanism
 --> 523             manipulated_val = self.display(arg)
     524
     525             # user display hooks can change the variable to be
 stored in

 /Users/was/s/local/lib/python2.5/site-packages/IPython/Prompts.py in
 _display(self, arg)
     545         """
     546
 --> 547         return self.shell.hooks.result_display(arg)
     548
     549     # Assign the default display method:

 /Users/was/s/local/lib/python2.5/site-packages/IPython/hooks.py in
 __call__(self, *args, **kw)
     132             #print "prio",prio,"cmd",cmd #dbg
     133             try:
 --> 134                 ret = cmd(*args, **kw)
     135                 return ret
     136             except ipapi.TryNext, exc:

 /Users/was/s/local/lib/python2.5/site-packages/IPython/hooks.py in
 result_display(self, arg)
     160
     161     if self.rc.pprint:
 --> 162         out = pformat(arg)
     163         if '\n' in out:
     164             # So that multi-line strings line up with the left
 column of

 /Users/was/s/local/lib/python2.5/pprint.py in pformat(self, object)
     109     def pformat(self, object):
     110         sio = _StringIO()
 --> 111         self._format(object, sio, 0, 0, {}, 0)
     112         return sio.getvalue()
     113

 /Users/was/s/local/lib/python2.5/pprint.py in _format(self, object,
 stream, indent, allowance, context, level)
     127             self._readable = False
     128             return
 --> 129         rep = self._repr(object, context, level - 1)
     130         typ = _type(object)
     131         sepLines = _len(rep) > (self._width - 1 - indent -
 allowance)

 /Users/was/s/local/lib/python2.5/pprint.py in _repr(self, object, context,
 level)
     193     def _repr(self, object, context, level):
     194         repr, readable, recursive = self.format(object,
 context.copy(),
 --> 195                                                 self._depth,
 level)
     196         if not readable:
     197             self._readable = False

 /Users/was/s/local/lib/python2.5/pprint.py in format(self, object,
 context, maxlevels, level)
     205         and whether the object represents a recursive construct.
     206         """
 --> 207         return _safe_repr(object, context, maxlevels, level)
     208
     209

 /Users/was/s/local/lib/python2.5/pprint.py in _safe_repr(object, context,
 maxlevels, level)
     290         return format % _commajoin(components), readable,
 recursive
     291
 --> 292     rep = repr(object)
     293     return rep, (rep and not rep.startswith('<')), False
     294

 /Users/was/s/local/lib/python2.5/site-
 packages/sage/rings/number_field/number_field_ideal.py in __repr__(self)
     215
     216     def __repr__(self):
 --> 217         return "Fractional ideal %s"%self._repr_short()
     218
     219     def _repr_short(self):

 /Users/was/s/local/lib/python2.5/site-
 packages/sage/rings/number_field/number_field_ideal.py in
 _repr_short(self)
     232         # makes things insanely slow in general.
     233         # When I fix this, I *have* to also change the _latex_
 method.
 --> 234         return '(%s)'%(', '.join([str(x) for x in
 self.gens_reduced()]))
     235
     236     def __div__(self, other):







 /Users/was/s/local/lib/python2.5/site-
 packages/sage/rings/number_field/number_field_ideal_rel.py in
 gens_reduced(self)
      84             S = L['x']
      85             gens = L.pari_rnf().rnfidealtwoelt(self.pari_rhnf())
 ---> 86             gens = [ L(R(x.lift().lift())) for x in gens ]
      87             ## Make sure that gens[1] is in L, not K
      88             Lcoeff = [ L(x) for x in list(gens[1].polynomial()) ]

 /Users/was/s/local/lib/python2.5/site-
 packages/sage/rings/number_field/number_field.py in __call__(self, x)
    3321             return self.base_field()(x)
    3322
 -> 3323         return self._element_class(self, x)
    3324
    3325     def _coerce_impl(self, x):

 /Users/was/s/devel/sage-
 main/sage/rings/number_field/number_field_element.pyx in
 sage.rings.number_field.number_field_element.NumberFieldElement.__init__()
     231         num = f * den
     232         for i from 0 <= i <= num.degree():
 --> 233             (<Integer>ZZ(num[i]))._to_ZZ(&coeff)
     234             ZZX_SetCoeff( self.__numerator, i, coeff )
     235

 /Users/was/s/devel/sage-main/sage/rings/number_field/integer_ring.pyx in
 sage.rings.integer_ring.IntegerRing_class.__call__()

 <type 'exceptions.TypeError'>: Unable to coerce -b - 2 to an integer

 }}}

Comment:

 Merged trac_1367-prebase.patch and trac_1367.2.patch in Sage 3.3.alpha3.

 Cheers,

 Michael

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/1367#comment:21>
Sage <http://sagemath.org/>
Sage - Open Source Mathematical Software: Building the Car Instead of 
Reinventing the Wheel
--~--~---------~--~----~------------~-------~--~----~
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