diff --git a/src/sage/matrix/matrix_polynomial_dense.pyx b/src/sage/matrix/matrix_polynomial_dense.pyx index 31a13cd83d6..79e9eae4b1b 100644 --- a/src/sage/matrix/matrix_polynomial_dense.pyx +++ b/src/sage/matrix/matrix_polynomial_dense.pyx @@ -675,7 +675,7 @@ cdef class Matrix_polynomial_dense(Matrix_generic_dense): sage: M.reverse([2,3,-1]) Traceback (most recent call last): ... - OverflowError: can't convert negative value to unsigned long + ValueError: degree argument must be a non-negative integer, got -1 .. SEEALSO:: diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index 42ecff9add5..295b2b59757 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -7672,9 +7672,11 @@ cdef class Polynomial(CommutativePolynomial): cdef unsigned long d if degree is not None: + if degree < 0: + raise ValueError("degree argument must be a non-negative integer, got %s" % (degree)) d = degree if d != degree: - raise ValueError("degree argument must be a non-negative integer, got %s"%(degree)) + raise ValueError("degree argument must be a non-negative integer, got %s" % (degree)) if len(v) < degree+1: v.reverse() v = [self.base_ring().zero()]*(degree+1-len(v)) + v diff --git a/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx b/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx index fc0e2431b9c..8498f3dd760 100644 --- a/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx +++ b/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx @@ -1827,9 +1827,11 @@ cdef class Polynomial_integer_dense_flint(Polynomial): cdef Polynomial_integer_dense_flint res = self._new() cdef unsigned long d if degree is not None: + if degree < 0: + raise ValueError("degree argument must be a non-negative integer, got %s" % (degree)) d = degree if d != degree: - raise ValueError("degree argument must be a non-negative integer, got %s" % degree) + raise ValueError("degree argument must be a non-negative integer, got %s" % (degree)) # FLINT expects length fmpz_poly_reverse(res._poly, self._poly, d+1) else: diff --git a/src/sage/rings/polynomial/polynomial_zmod_flint.pyx b/src/sage/rings/polynomial/polynomial_zmod_flint.pyx index 3a66198d568..1df2497b4ad 100644 --- a/src/sage/rings/polynomial/polynomial_zmod_flint.pyx +++ b/src/sage/rings/polynomial/polynomial_zmod_flint.pyx @@ -815,9 +815,11 @@ cdef class Polynomial_zmod_flint(Polynomial_template): cdef Polynomial_zmod_flint res = self._new() cdef unsigned long d if degree is not None: + if degree < 0: + raise ValueError("degree argument must be a non-negative integer, got %s" % (degree)) d = degree if d != degree: - raise ValueError("degree argument must be a non-negative integer, got %s"%(degree)) + raise ValueError("degree argument must be a non-negative integer, got %s" % (degree)) nmod_poly_reverse(&res.x, &self.x, d+1) # FLINT expects length else: nmod_poly_reverse(&res.x, &self.x, nmod_poly_length(&self.x)) diff --git a/src/sage/rings/polynomial/polynomial_zz_pex.pyx b/src/sage/rings/polynomial/polynomial_zz_pex.pyx index 60968b412da..295bc4fccbe 100644 --- a/src/sage/rings/polynomial/polynomial_zz_pex.pyx +++ b/src/sage/rings/polynomial/polynomial_zz_pex.pyx @@ -513,13 +513,18 @@ cdef class Polynomial_ZZ_pEX(Polynomial_template): sage: f.reverse(degree=200) 2*x^200 + 3*x^199 + 5*x^198 + 7*x^197 + 11*x^196 + 13*x^195 + 17*x^194 + 19*x^193 sage: f.reverse(degree=0) - Traceback (most recent call last): - ... - ValueError: degree argument must be a non-negative integer, got 0 + 2 sage: f.reverse(degree=-5) Traceback (most recent call last): ... ValueError: degree argument must be a non-negative integer, got -5 + + Check that this implementation is compatible with the generic one:: + + sage: p = R([0,1,0,2]) + sage: all(p.reverse(d) == Polynomial.reverse(p, d) + ....: for d in [None, 0, 1, 2, 3, 4]) + True """ self._parent._modulus.restore() @@ -533,11 +538,10 @@ cdef class Polynomial_ZZ_pEX(Polynomial_template): # When a degree has been supplied, ensure it is a valid input cdef unsigned long d if degree is not None: - if degree <= 0: + if degree < 0: raise ValueError("degree argument must be a non-negative integer, got %s" % (degree)) - try: - d = degree - except ValueError: + d = degree + if d != degree: raise ValueError("degree argument must be a non-negative integer, got %s" % (degree)) ZZ_pEX_reverse_hi(r.x, ( self).x, d) else: