Easy fix at https://trac.sagemath.org/ticket/34653, please review!

Martin

On Thursday, 13 October 2022 at 00:05:37 UTC+2 Martin R wrote:

> OK, I think now I am down to what's quite clearly a bug:
>
> sage: P.<x,y> = PolynomialRing(SR)
> sage: R.<z> = PolynomialRing(P, sparse=False); R
> Univariate Polynomial Ring in z over Multivariate Polynomial Ring in x, y 
> over Symbolic Ring
> sage: A = -x*z^2 + x*z
> sage: B = -x
> sage: A // B
> z^2 - z
> sage: P.<x,y> = PolynomialRing(SR)
> sage: R.<z> = PolynomialRing(P, sparse=True); R
> Sparse Univariate Polynomial Ring in z over Multivariate Polynomial Ring 
> in x, y over Symbolic Ring
> sage: A = -x*z^2 + x*z
> sage: B = -x
> sage: A // B
> ---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call last)
> File 
> ~/sage-develop/src/sage/rings/polynomial/polynomial_element_generic.py:852, 
> in Polynomial_generic_sparse.quo_rem(self, other)
>     851 try:
> --> 852     c = R(rem.leading_coefficient() * ~other.leading_coefficient())
>     853 except TypeError:
>
> File ~/sage-develop/src/sage/structure/parent.pyx:897, in 
> sage.structure.parent.Parent.__call__()
>     896 if no_extra_args:
> --> 897     return mor._call_(x)
>     898 else:
>
> File ~/sage-develop/src/sage/structure/coerce_maps.pyx:161, in 
> sage.structure.coerce_maps.DefaultConvertMap_unique._call_()
>     160     print(type(C._element_constructor), C._element_constructor)
> --> 161 raise
>     162 
>
> File ~/sage-develop/src/sage/structure/coerce_maps.pyx:156, in 
> sage.structure.coerce_maps.DefaultConvertMap_unique._call_()
>     155 try:
> --> 156     return C._element_constructor(x)
>     157 except Exception:
>
> File ~/sage-develop/src/sage/rings/polynomial/polynomial_ring.py:456, in 
> PolynomialRing_general._element_constructor_(self, x, check, is_gen, 
> construct, **kwds)
>     455     else:
> --> 456         raise TypeError("denominator must be a unit")
>     457 elif isinstance(x, pari_gen):
>
> TypeError: denominator must be a unit
>
> During handling of the above exception, another exception occurred:
>
> ArithmeticError                           Traceback (most recent call last)
> Input In [39], in <cell line: 1>()
> ----> 1 A // B
>
> File ~/sage-develop/src/sage/structure/element.pyx:1840, in 
> sage.structure.element.Element.__floordiv__()
>    1838     return (<Element>left)._floordiv_(right)
>    1839 if BOTH_ARE_ELEMENT(cl):
> -> 1840     return coercion_model.bin_op(left, right, floordiv)
>    1841 
>    1842 try:
>
> File ~/sage-develop/src/sage/structure/coerce.pyx:1204, in 
> sage.structure.coerce.CoercionModel.bin_op()
>    1202     self._record_exception()
>    1203 else:
> -> 1204     return PyObject_CallObject(op, xy)
>    1205 
>    1206 if op is mul:
>
> File ~/sage-develop/src/sage/structure/element.pyx:1838, in 
> sage.structure.element.Element.__floordiv__()
>    1836 cdef int cl = classify_elements(left, right)
>    1837 if HAVE_SAME_PARENT(cl):
> -> 1838     return (<Element>left)._floordiv_(right)
>    1839 if BOTH_ARE_ELEMENT(cl):
>    1840     return coercion_model.bin_op(left, right, floordiv)
>
> File ~/sage-develop/src/sage/rings/polynomial/polynomial_element.pyx:2872, 
> in sage.rings.polynomial.polynomial_element.Polynomial._floordiv_()
>    2870     # quite typical when removing gcds...
>    2871     return self
> -> 2872 Q, _ = self.quo_rem(right)
>    2873 return Q
>    2874 
>
> File ~/sage-develop/src/sage/structure/element.pyx:4498, in 
> sage.structure.element.coerce_binop.new_method()
>    4496 def new_method(self, other, *args, **kwargs):
>    4497     if have_same_parent(self, other):
> -> 4498         return method(self, other, *args, **kwargs)
>    4499     else:
>    4500         a, b = coercion_model.canonical_coercion(self, other)
>
> File 
> ~/sage-develop/src/sage/rings/polynomial/polynomial_element_generic.py:854, 
> in Polynomial_generic_sparse.quo_rem(self, other)
>     852     c = R(rem.leading_coefficient() * ~other.leading_coefficient())
>     853 except TypeError:
> --> 854     raise ArithmeticError("Division non exact (consider coercing 
> to polynomials over the fraction field)")
>     855 e = rem.degree() - d
>     856 quo += c*R.one().shift(e)
>
> ArithmeticError: Division non exact (consider coercing to polynomials over 
> the fraction field)
> sage: 
>
> On Wednesday, 12 October 2022 at 23:50:04 UTC+2 Martin R wrote:
>
>> Possibly related:
>>
>> sage: P.<x,y> = PolynomialRing(SR)
>> sage: R.<z> = PolynomialRing(P); R
>> Univariate Polynomial Ring in z over Multivariate Polynomial Ring in x, y 
>> over Symbolic Ring
>> sage: num = -x*z^2 + x*z
>> sage: den = x*z^2 + (-x-1)*z + 1
>> sage: num.gcd(den)
>> z - 1
>> sage: P.<x,y> = PolynomialRing(SR)
>> sage: R.<z> = PolynomialRing(P, sparse=True); R
>> Sparse Univariate Polynomial Ring in z over Multivariate Polynomial Ring 
>> in x, y over Symbolic Ring
>> sage: num = -x*z^2 + x*z
>> sage: den = x*z^2 + (-x-1)*z + 1
>> sage: num.gcd(den)
>>
>>
>> ---------------------------------------------------------------------------
>> TypeError                                 Traceback (most recent call 
>> last)
>> File 
>> ~/sage-develop/src/sage/rings/polynomial/polynomial_element_generic.py:852, 
>> in Polynomial_generic_sparse.quo_rem(self, other)
>>     851 try:
>> --> 852     c = R(rem.leading_coefficient() * 
>> ~other.leading_coefficient())
>>     853 except TypeError:
>>
>>
>> File ~/sage-develop/src/sage/structure/parent.pyx:897, in 
>> sage.structure.parent.Parent.__call__()
>>     896 if no_extra_args:
>> --> 897     return mor._call_(x)
>>     898 else:
>>
>> File ~/sage-develop/src/sage/structure/coerce_maps.pyx:161, in 
>> sage.structure.coerce_maps.DefaultConvertMap_unique._call_()
>>     160     print(type(C._element_constructor), C._element_constructor)
>> --> 161 raise
>>     162 
>>
>> File ~/sage-develop/src/sage/structure/coerce_maps.pyx:156, in 
>> sage.structure.coerce_maps.DefaultConvertMap_unique._call_()
>>     155 try:
>> --> 156     return C._element_constructor(x)
>>     157 except Exception:
>>
>> File ~/sage-develop/src/sage/rings/polynomial/polynomial_ring.py:456, in 
>> PolynomialRing_general._element_constructor_(self, x, check, is_gen, 
>> construct, **kwds)
>>     455     else:
>> --> 456         raise TypeError("denominator must be a unit")
>>     457 elif isinstance(x, pari_gen):
>>
>> TypeError: denominator must be a unit
>>
>>
>> During handling of the above exception, another exception occurred:
>>
>> ArithmeticError                           Traceback (most recent call 
>> last)
>> Input In [82], in <cell line: 1>()
>> ----> 1 num.gcd(den)
>>
>>
>> File ~/sage-develop/src/sage/structure/element.pyx:4498, in 
>> sage.structure.element.coerce_binop.new_method()
>>    4496 def new_method(self, other, *args, **kwargs):
>>    4497     if have_same_parent(self, other):
>> -> 4498         return method(self, other, *args, **kwargs)
>>    4499     else:
>>    4500         a, b = coercion_model.canonical_coercion(self, other)
>>
>> File 
>> ~/sage-develop/src/sage/rings/polynomial/polynomial_element_generic.py:935, 
>> in Polynomial_generic_sparse.gcd(self, other, algorithm)
>>     933     return S(g)
>>     934 elif algorithm=="generic":
>> --> 935     return Polynomial.gcd(self,other)
>>     936 else:
>>     937     raise ValueError("Unknown algorithm '%s'" % algorithm)
>>
>>
>> File ~/sage-develop/src/sage/structure/element.pyx:4498, in 
>> sage.structure.element.coerce_binop.new_method()
>>    4496 def new_method(self, other, *args, **kwargs):
>>    4497     if have_same_parent(self, other):
>> -> 4498         return method(self, other, *args, **kwargs)
>>    4499     else:
>>    4500         a, b = coercion_model.canonical_coercion(self, other)
>>
>> File 
>> ~/sage-develop/src/sage/rings/polynomial/polynomial_element.pyx:4918, in 
>> sage.rings.polynomial.polynomial_element.Polynomial.gcd()
>>    4916         raise NotImplementedError("%s does not provide a gcd 
>> implementation for univariate polynomials"%self._parent._base)
>>    4917     else:
>> -> 4918         return doit(self, other)
>>    4919 
>>    4920 @coerce_binop
>>
>> File 
>> ~/sage-develop/src/sage/categories/unique_factorization_domains.py:185, in 
>> UniqueFactorizationDomains.ParentMethods._gcd_univariate_polynomial(self, 
>> f, g)
>>     182         break
>>     184 d = a.gcd(b)
>> --> 185 A = A // a
>>     186 B = B // b
>>     187 g = h = 1
>>
>> File ~/sage-develop/src/sage/structure/element.pyx:1840, in 
>> sage.structure.element.Element.__floordiv__()
>>    1838     return (<Element>left)._floordiv_(right)
>>    1839 if BOTH_ARE_ELEMENT(cl):
>> -> 1840     return coercion_model.bin_op(left, right, floordiv)
>>    1841 
>>    1842 try:
>>
>> File ~/sage-develop/src/sage/structure/coerce.pyx:1204, in 
>> sage.structure.coerce.CoercionModel.bin_op()
>>    1202     self._record_exception()
>>    1203 else:
>> -> 1204     return PyObject_CallObject(op, xy)
>>    1205 
>>    1206 if op is mul:
>>
>> File ~/sage-develop/src/sage/structure/element.pyx:1838, in 
>> sage.structure.element.Element.__floordiv__()
>>    1836 cdef int cl = classify_elements(left, right)
>>    1837 if HAVE_SAME_PARENT(cl):
>> -> 1838     return (<Element>left)._floordiv_(right)
>>    1839 if BOTH_ARE_ELEMENT(cl):
>>    1840     return coercion_model.bin_op(left, right, floordiv)
>>
>> File 
>> ~/sage-develop/src/sage/rings/polynomial/polynomial_element.pyx:2872, in 
>> sage.rings.polynomial.polynomial_element.Polynomial._floordiv_()
>>    2870     # quite typical when removing gcds...
>>    2871     return self
>> -> 2872 Q, _ = self.quo_rem(right)
>>    2873 return Q
>>    2874 
>>
>> File ~/sage-develop/src/sage/structure/element.pyx:4498, in 
>> sage.structure.element.coerce_binop.new_method()
>>    4496 def new_method(self, other, *args, **kwargs):
>>    4497     if have_same_parent(self, other):
>> -> 4498         return method(self, other, *args, **kwargs)
>>    4499     else:
>>    4500         a, b = coercion_model.canonical_coercion(self, other)
>>
>> File 
>> ~/sage-develop/src/sage/rings/polynomial/polynomial_element_generic.py:854, 
>> in Polynomial_generic_sparse.quo_rem(self, other)
>>     852     c = R(rem.leading_coefficient() * 
>> ~other.leading_coefficient())
>>     853 except TypeError:
>> --> 854     raise ArithmeticError("Division non exact (consider coercing 
>> to polynomials over the fraction field)")
>>     855 e = rem.degree() - d
>>     856 quo += c*R.one().shift(e)
>>
>> ArithmeticError: Division non exact (consider coercing to polynomials 
>> over the fraction field)
>>
>> On Wednesday, 12 October 2022 at 22:39:46 UTC+2 Martin R wrote:
>>
>>> I am not sure whether the following is to be expected.
>>>
>>> Martin
>>>
>>> sage: R.<x> = SR[]
>>> sage: S.<z> = R[]
>>> sage: (x*z).quo_rem(S(x))
>>>
>>> ---------------------------------------------------------------------------
>>> TypeError                                 Traceback (most recent call 
>>> last)
>>> File 
>>> ~/sage-develop/src/sage/rings/polynomial/polynomial_element.pyx:11713, in 
>>> sage.rings.polynomial.polynomial_element.Polynomial_generic_dense.quo_rem()
>>>   11712 try:
>>> > 11713     q = R(q)
>>>   11714 except TypeError:
>>>
>>> File ~/sage-develop/src/sage/structure/parent.pyx:897, in 
>>> sage.structure.parent.Parent.__call__()
>>>     896 if no_extra_args:
>>> --> 897     return mor._call_(x)
>>>     898 else:
>>>
>>> File ~/sage-develop/src/sage/categories/map.pyx:788, in 
>>> sage.categories.map.Map._call_()
>>>     787 
>>> --> 788     cpdef Element _call_(self, x):
>>>     789         """
>>>
>>> File ~/sage-develop/src/sage/rings/fraction_field.py:1254, in 
>>> FractionFieldEmbeddingSection._call_(self, x, check)
>>>    1250 if check and not den.is_unit():
>>>    1251     # This should probably be a ValueError.
>>>    1252     # However, too much existing code is expecting this to throw 
>>> a
>>>    1253     # TypeError, so we decided to keep it for the time being.
>>> -> 1254     raise TypeError("fraction must have unit denominator")
>>>    1255 return num * den.inverse_of_unit()
>>>
>>> TypeError: fraction must have unit denominator
>>>
>>> During handling of the above exception, another exception occurred:
>>>
>>> ArithmeticError                           Traceback (most recent call 
>>> last)
>>> Input In [41], in <cell line: 1>()
>>> ----> 1 (x*z).quo_rem(S(x))
>>>
>>> File ~/sage-develop/src/sage/structure/element.pyx:4498, in 
>>> sage.structure.element.coerce_binop.new_method()
>>>    4496 def new_method(self, other, *args, **kwargs):
>>>    4497     if have_same_parent(self, other):
>>> -> 4498         return method(self, other, *args, **kwargs)
>>>    4499     else:
>>>    4500         a, b = coercion_model.canonical_coercion(self, other)
>>>
>>> File 
>>> ~/sage-develop/src/sage/rings/polynomial/polynomial_element.pyx:11715, in 
>>> sage.rings.polynomial.polynomial_element.Polynomial_generic_dense.quo_rem()
>>>   11713     q = R(q)
>>>   11714 except TypeError:
>>> > 11715     raise ArithmeticError("division non exact (consider coercing 
>>> to polynomials over the fraction field)")
>>>   11716 for j from n+k-2 >= j >= k:
>>>   11717     x[j] -= q * y[j-k]
>>>
>>> ArithmeticError: division non exact (consider coercing to polynomials 
>>> over the fraction field)
>>> sage: 
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/4c408222-0627-40f2-9a87-354beef538d7n%40googlegroups.com.

Reply via email to