Skip to content

Commit 7b6eb13

Browse files
author
Release Manager
committed
gh-37611: Ensure degree and total degree return `Integer` type for `MPolynomial_polydict` class This is a follow up PR to #37605 which ensures that `degree()` and `total_degree()` return a sage `Integer` type instead of a python `int` for the `MPolynomial_polydict` class. However, `f.degrees()` returns something of type `sage.rings.polynomial.polydict.ETuple` which has elements as `int`. I am loathed to change this to return `Integer` in case of performance regression, so the following status of `MPolynomial_polydict` is the following: ```py sage: R.<x, y> = PolynomialRing(QQbar) sage: f = 1 + x + y^2 sage: type(f.degree()) <class 'sage.rings.integer.Integer'> sage: type(f.degree(x)) <class 'sage.rings.integer.Integer'> sage: type(f.degree(y)) <class 'sage.rings.integer.Integer'> sage: type(f.total_degree()) <class 'sage.rings.integer.Integer'> sage: type(f.degrees()) <class 'sage.rings.polynomial.polydict.ETuple'> sage: type(f.degrees()[0]) <class 'int'> ``` I would like advice on how to proceed with the `degrees()` function. Is leaving it in it's current state OK? Fixes #37603 URL: #37611 Reported by: Giacomo Pope Reviewer(s): Giacomo Pope, grhkm21
2 parents 9734dd9 + a866b12 commit 7b6eb13

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

src/sage/rings/polynomial/multi_polynomial_element.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -668,10 +668,21 @@ def degree(self, x=None, std_grading=False):
668668
sage: R.<x,y> = GF(3037000453)[] # needs sage.rings.finite_rings
669669
sage: R.zero().degree(x)
670670
-1
671+
672+
Ensure that :issue:`37603` is fixed::
673+
674+
sage: R.<x,y,z> = PolynomialRing(QQbar)
675+
sage: f = 3*x^2 - 2*y + 7*x^2*y^2 + 5
676+
sage: type(f.degree())
677+
<class 'sage.rings.integer.Integer'>
678+
sage: type(f.degree(x))
679+
<class 'sage.rings.integer.Integer'>
680+
sage: type(f.degree(x)) == type(f.degree(y)) == type(f.degree(z))
681+
True
671682
"""
672683
if x is None:
673684
if std_grading or not self.parent().term_order().is_weighted_degree_order():
674-
return self.element().degree(None)
685+
return Integer(self.element().degree(None))
675686
return self.weighted_degree(self.parent().term_order().weights())
676687
if isinstance(x, MPolynomial):
677688
if not x.parent() is self.parent():
@@ -683,7 +694,7 @@ def degree(self, x=None, std_grading=False):
683694
raise TypeError("x must be one of the generators of the parent")
684695
else:
685696
raise TypeError("x must be one of the generators of the parent")
686-
return self.element().degree(x.element())
697+
return Integer(self.element().degree(x.element()))
687698

688699
def total_degree(self):
689700
"""
@@ -712,6 +723,16 @@ def total_degree(self):
712723
sage: f = z^9 + 10*x^4 + y^8*x^2
713724
sage: f.total_degree()
714725
10
726+
727+
TESTS:
728+
729+
Ensure that :issue:`37603` is fixed::
730+
sage: R.<x,y,z> = QQbar[]
731+
sage: f = 2*x*y^3*z^2
732+
sage: f.total_degree()
733+
6
734+
sage: type(f.total_degree())
735+
<class 'sage.rings.integer.Integer'>
715736
"""
716737
return self.degree()
717738

0 commit comments

Comments
 (0)