#10981: algebraic real field  partial_fraction_decomposition bug
----------------------------+-----------------------------------------------
   Reporter:  mariah        |          Owner:  AlexGhitza     
       Type:  defect        |         Status:  positive_review
   Priority:  major         |      Milestone:  sage-4.7.2     
  Component:  algebra       |       Keywords:  sd32           
Work_issues:                |       Upstream:  N/A            
   Reviewer:  Simon Spicer  |         Author:  William Stein  
     Merged:                |   Dependencies:                 
----------------------------+-----------------------------------------------
Description changed by leif:

Old description:

> {{{
> sage: x= AA['x'].gen()
> sage: P= 1/(1+x^4)
> sage: P.partial_fraction_decomposition()
> ---------------------------------------------------------------------------
> AttributeError                            Traceback (most recent call
> last)
>
> /home/mariah/<ipython console> in <module>()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/categories/quotient_fields.pyc in
> partial_fraction_decomposition(self)
>     173                 # note that the product below is non-empty, since
> the case
>     174                 # of only one factor has been dealt with above
> --> 175                 n = numer * prod([r for r in factors if r !=
> d]).inverse_mod(d) % d # we know the inverse exists as the two are
> relatively prime
>     176                 parts.append(n/d)
>     177             return whole, parts
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/rings/polynomial/polynomial_element.so in
> sage.rings.polynomial.polynomial_element.Polynomial.inverse_mod
> (sage/rings/polynomial/polynomial_element.c:9816)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/element.so in
> sage.structure.element.PrincipalIdealDomainElement.xgcd
> (sage/structure/element.c:15524)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/rings/polynomial/polynomial_element.so in
> sage.rings.polynomial.polynomial_element.Polynomial._xgcd
> (sage/rings/polynomial/polynomial_element.c:33988)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/rings/polynomial/polynomial_element.so in
> sage.rings.polynomial.polynomial_element.Polynomial.__div__
> (sage/rings/polynomial/polynomial_element.c:12221)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/element.so in
> sage.structure.element.RingElement.__mul__
> (sage/structure/element.c:11449)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/coerce.so in
> sage.structure.coerce.CoercionModel_cache_maps.bin_op
> (sage/structure/coerce.c:6105)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/coerce_actions.so in
> sage.structure.coerce_actions.RightModuleAction._call_
> (sage/structure/coerce_actions.c:5782)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/rings/polynomial/polynomial_element.so in
> sage.rings.polynomial.polynomial_element.Polynomial_generic_dense._lmul_
> (sage/rings/polynomial/polynomial_element.c:40358)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/element.so in
> sage.structure.element.Element.__nonzero__
> (sage/structure/element.c:5806)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/element.so in
> sage.structure.element.Element.__richcmp__
> (sage/structure/element.c:7169)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/element.so in
> sage.structure.element.Element._richcmp (sage/structure/element.c:7052)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/rings/qqbar.pyc in __cmp__(self, other)
>    3400         if self is other: return 0
>    3401         if other._descr.is_rational() and
> other._descr.rational_value() == 0:
> -> 3402             return self.sign()
>    3403         elif self._descr.is_rational() and
> self._descr.rational_value() == 0:
>    3404             return -other.sign()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/rings/qqbar.pyc in sign(self)
>    3597             0
>    3598         """
> -> 3599         if self._value.lower() > 0:
>    3600             return 1
>    3601         elif self._value.upper() < 0:
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/element.so in
> sage.structure.element.Element.__getattr__
> (sage/structure/element.c:2715)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/parent.so in
> sage.structure.parent.getattr_from_other_class
> (sage/structure/parent.c:2841)()
>
> /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
> /site-packages/sage/structure/parent.so in
> sage.structure.parent.raise_attribute_error
> (sage/structure/parent.c:2636)()
>
> AttributeError: 'sage.rings.complex_interval.ComplexIntervalFieldElement'
> object has no attribute 'lower'
> sage:
> }}}

New description:

 {{{
 sage: x= AA['x'].gen()
 sage: P= 1/(1+x^4)
 sage: P.partial_fraction_decomposition()
 ---------------------------------------------------------------------------
 AttributeError                            Traceback (most recent call
 last)

 /home/mariah/<ipython console> in <module>()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/categories/quotient_fields.pyc in
 partial_fraction_decomposition(self)
     173                 # note that the product below is non-empty, since
 the case
     174                 # of only one factor has been dealt with above
 --> 175                 n = numer * prod([r for r in factors if r !=
 d]).inverse_mod(d) % d # we know the inverse exists as the two are
 relatively prime
     176                 parts.append(n/d)
     177             return whole, parts

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/rings/polynomial/polynomial_element.so in
 sage.rings.polynomial.polynomial_element.Polynomial.inverse_mod
 (sage/rings/polynomial/polynomial_element.c:9816)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/element.so in
 sage.structure.element.PrincipalIdealDomainElement.xgcd
 (sage/structure/element.c:15524)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/rings/polynomial/polynomial_element.so in
 sage.rings.polynomial.polynomial_element.Polynomial._xgcd
 (sage/rings/polynomial/polynomial_element.c:33988)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/rings/polynomial/polynomial_element.so in
 sage.rings.polynomial.polynomial_element.Polynomial.__div__
 (sage/rings/polynomial/polynomial_element.c:12221)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/element.so in
 sage.structure.element.RingElement.__mul__
 (sage/structure/element.c:11449)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/coerce.so in
 sage.structure.coerce.CoercionModel_cache_maps.bin_op
 (sage/structure/coerce.c:6105)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/coerce_actions.so in
 sage.structure.coerce_actions.RightModuleAction._call_
 (sage/structure/coerce_actions.c:5782)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/rings/polynomial/polynomial_element.so in
 sage.rings.polynomial.polynomial_element.Polynomial_generic_dense._lmul_
 (sage/rings/polynomial/polynomial_element.c:40358)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/element.so in
 sage.structure.element.Element.__nonzero__
 (sage/structure/element.c:5806)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/element.so in
 sage.structure.element.Element.__richcmp__
 (sage/structure/element.c:7169)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/element.so in
 sage.structure.element.Element._richcmp (sage/structure/element.c:7052)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/rings/qqbar.pyc in __cmp__(self, other)
    3400         if self is other: return 0
    3401         if other._descr.is_rational() and
 other._descr.rational_value() == 0:
 -> 3402             return self.sign()
    3403         elif self._descr.is_rational() and
 self._descr.rational_value() == 0:
    3404             return -other.sign()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/rings/qqbar.pyc in sign(self)
    3597             0
    3598         """
 -> 3599         if self._value.lower() > 0:
    3600             return 1
    3601         elif self._value.upper() < 0:

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/element.so in
 sage.structure.element.Element.__getattr__
 (sage/structure/element.c:2715)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/parent.so in
 sage.structure.parent.getattr_from_other_class
 (sage/structure/parent.c:2841)()

 /home/mariah/sage/sage-4.6.2-x86_64-Linux-core2-fc/local/lib/python2.6
 /site-packages/sage/structure/parent.so in
 sage.structure.parent.raise_attribute_error
 (sage/structure/parent.c:2636)()

 AttributeError: 'sage.rings.complex_interval.ComplexIntervalFieldElement'
 object has no attribute 'lower'
 sage:
 }}}

 ----

 Apply [attachment:trac_10981.patch] to the Sage library.

--

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10981#comment:6>
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