#11728: Multiplication(?) buggy in AA
-----------------------+----------------------------------------------------
Reporter: spice | Owner: AlexGhitza
Type: defect | Status: new
Priority: major | Milestone: sage-4.7.2
Component: algebra | Keywords: algebra, AA, QQbar
Work_issues: | Upstream: N/A
Reviewer: | Author:
Merged: | Dependencies:
-----------------------+----------------------------------------------------
Something is rotten in the state of AlgebraicReal. Multiplying some
elements of AA seems to be broken in strange and interesting ways.
{{{
sage: a = QQbar((-1)^(1/4)); a
0.7071067811865475? + 0.7071067811865475?*I
sage: b = AA(a^3-a); b
-1.414213562373095?
sage: b*1
-1.414213562373095?
sage: b.as_number_field_element()
(Cyclotomic Field of order 8 and degree 4, zeta8^3 - zeta8, Ring morphism:
From: Cyclotomic Field of order 8 and degree 4
To: Algebraic Field
Defn: zeta8 |--> 0.7071067811865475? + 0.7071067811865475?*I)
sage: b*1
---------------------------------------------------------------------------
TypeError Traceback (most recent call
last)
/Users/sage/sage-4.7.2.alpha2/devel/sage-dev/sage/<ipython console> in
<module>()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/IPython/Prompts.pyc in __call__(self, arg)
549
550 # and now call a possibly user-defined print mechanism
--> 551 manipulated_val = self.display(arg)
552
553 # user display hooks can change the variable to be
stored in
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/IPython/Prompts.pyc in _display(self, arg)
575 return IPython.generics.result_display(arg)
576 except TryNext:
--> 577 return self.shell.hooks.result_display(arg)
578
579 # Assign the default display method:
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/IPython/hooks.pyc in __call__(self, *args, **kw)
139 #print "prio",prio,"cmd",cmd #dbg
140 try:
--> 141 ret = cmd(*args, **kw)
142 return ret
143 except ipapi.TryNext, exc:
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/misc/displayhook.pyc in result_display(ip_self, obj)
148 # IPython's default result_display() uses the
IPython.genutils.Term.cout stream.
149 # See also local/lib/python2.6/site-packages/IPython/hooks.py.
--> 150 print_obj(IPython.genutils.Term.cout, obj)
151
152 def displayhook(obj):
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/misc/displayhook.pyc in print_obj(out_stream, obj)
140 if _check_tall_list_and_print(out_stream, obj):
141 return
--> 142 print >>out_stream, `obj`
143
144 def result_display(ip_self, obj):
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/structure/sage_object.so in
sage.structure.sage_object.SageObject.__repr__
(sage/structure/sage_object.c:1463)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/qqbar.pyc in _repr_(self)
2214 return repr(CIF(self._value))
2215 else:
-> 2216 return repr(RIF(self._value))
2217
2218 def _sage_input_(self, sib, coerce):
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/real_mpfi.so in
sage.rings.real_mpfi.RealIntervalField_class.__call__
(sage/rings/real_mpfi.c:4285)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/real_mpfi.so in
sage.rings.real_mpfi.RealIntervalFieldElement.__init__
(sage/rings/real_mpfi.c:7725)()
TypeError: Unable to convert number to real interval.
}}}
As far as I can tell, problems arise if the representation of the
AlgebraicReal element is in term of non-real elements in QQbar.
This also seems to be the root cause of the following (from patch #10981):
{{{
sage: P = AA[x](1+x^4); P
x^4 + 1
sage: a1,a2 = P.factor()[0][0],P.factor()[1][0]; a1,a2
(x^2 - 1.414213562373095?*x + 1.000000000000000?, x^2 +
1.414213562373095?*x + 1.000000000000000?)
sage: a1*a2
x^4 + 1.000000000000000?
sage: a1,a2
(x^2 - 1.414213562373095?*x + 1, x^2 + 1.414213562373095?*x + 1)
sage: a1*a2
---------------------------------------------------------------------------
TypeError Traceback (most recent call
last)
/Users/sage/sage-4.7.2.alpha2/devel/sage-dev/sage/<ipython console> in
<module>()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/structure/element.so in
sage.structure.element.RingElement.__mul__
(sage/structure/element.c:12051)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/polynomial/polynomial_element.so in
sage.rings.polynomial.polynomial_element.Polynomial._mul_
(sage/rings/polynomial/polynomial_element.c:10928)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/polynomial/polynomial_element.so in
sage.rings.polynomial.polynomial_element.Polynomial._mul_karatsuba
(sage/rings/polynomial/polynomial_element.c:16309)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/polynomial/polynomial_element.so in
sage.rings.polynomial.polynomial_element.do_karatsuba
(sage/rings/polynomial/polynomial_element.c:36878)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/polynomial/polynomial_element.so in
sage.rings.polynomial.polynomial_element.do_karatsuba
(sage/rings/polynomial/polynomial_element.c:36759)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/structure/element.so in
sage.structure.element.RingElement.__mul__
(sage/structure/element.c:12051)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/structure/element.so in
sage.structure.element.RingElement._mul_
(sage/structure/element.c:12195)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/qqbar.pyc in _mul_(self, other)
2277 sdk = sd.kind()
2278 odk = od.kind()
-> 2279 return type(self)(_mul_algo[sdk, odk](self, other, False))
2280
2281 def _div_(self, other):
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/qqbar.pyc in __init__(self, x)
3384 class AlgebraicReal(AlgebraicNumber_base):
3385 def __init__(self, x):
-> 3386 AlgebraicNumber_base.__init__(self, AA, x)
3387
3388 def __reduce__(self):
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/qqbar.pyc in __init__(self, parent, x)
2186 raise TypeError, "Illegal initializer for algebraic
number"
2187
-> 2188 self._value = self._descr._interval_fast(64)
2189
2190 def _repr_(self):
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/qqbar.pyc in _interval_fast(self, prec)
5660 op = self._op
5661
-> 5662 lv = self._left._interval_fast(prec)
5663 rv = self._right._interval_fast(prec)
5664
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/qqbar.pyc in _interval_fast(self, prec)
3638
3639 def _interval_fast(self, prec):
-> 3640 return self.interval_fast(RealIntervalField(prec))
3641
3642 def interval_exact(self, field):
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/qqbar.pyc in interval_fast(self, field)
2794 """
2795 if field.prec() == self._value.prec():
-> 2796 return field(self._value)
2797 elif field.prec() > self._value.prec():
2798 self._more_precision()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/real_mpfi.so in
sage.rings.real_mpfi.RealIntervalField_class.__call__
(sage/rings/real_mpfi.c:4285)()
/Users/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-
packages/sage/rings/real_mpfi.so in
sage.rings.real_mpfi.RealIntervalFieldElement.__init__
(sage/rings/real_mpfi.c:7725)()
TypeError: Unable to convert number to real interval.
sage:
}}}
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/11728>
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.