diff --git a/src/sage/rings/asymptotic/asymptotic_ring.py b/src/sage/rings/asymptotic/asymptotic_ring.py index 1c4158d92d4..fd25735f6a0 100644 --- a/src/sage/rings/asymptotic/asymptotic_ring.py +++ b/src/sage/rings/asymptotic/asymptotic_ring.py @@ -779,7 +779,7 @@ def __hash__(self): return hash(str(self)) - def __nonzero__(self): + def __bool__(self): r""" Return whether this asymptotic expansion is not identically zero. @@ -803,6 +803,7 @@ def __nonzero__(self): """ return bool(self._summands_) + __nonzero__ =__bool__ def __eq__(self, other): r""" diff --git a/src/sage/rings/complex_arb.pyx b/src/sage/rings/complex_arb.pyx index a43dbf63c97..6828eab8c16 100644 --- a/src/sage/rings/complex_arb.pyx +++ b/src/sage/rings/complex_arb.pyx @@ -1402,7 +1402,7 @@ cdef class ComplexBall(RingElement): return (arb_is_nonzero(acb_realref(self.value)) or arb_is_nonzero(acb_imagref(self.value))) - def __nonzero__(self): + def __bool__(self): """ Return ``True`` iff this complex ball is not the zero ball, i.e. if the midpoint and radius of its real and imaginary parts are not all zero. @@ -1427,6 +1427,8 @@ cdef class ComplexBall(RingElement): """ return not acb_is_zero(self.value) + __nonzero__ =__bool__ + def is_exact(self): """ Return ``True`` iff the radius of this ball is zero. diff --git a/src/sage/rings/complex_interval.pyx b/src/sage/rings/complex_interval.pyx index 0a65cd58f2e..61828eef54d 100644 --- a/src/sage/rings/complex_interval.pyx +++ b/src/sage/rings/complex_interval.pyx @@ -1389,26 +1389,26 @@ cdef class ComplexIntervalFieldElement(sage.structure.element.FieldElement): """ raise TypeError("can't convert complex interval to complex") - def __nonzero__(self): + def __bool__(self): """ Return ``True`` if ``self`` is not known to be exactly zero. EXAMPLES:: - sage: CIF(RIF(0, 0), RIF(0, 0)).__nonzero__() - False sage: bool(CIF(RIF(0, 0), RIF(0, 0))) False - sage: CIF(RIF(1), RIF(0)).__nonzero__() + sage: bool(CIF(RIF(1), RIF(0))) True - sage: CIF(RIF(0), RIF(1)).__nonzero__() + sage: bool(CIF(RIF(0), RIF(1))) True - sage: CIF(RIF(1, 2), RIF(0)).__nonzero__() + sage: bool(CIF(RIF(1, 2), RIF(0))) True - sage: CIF(RIF(-1, 1), RIF(-1, 1)).__nonzero__() + sage: bool(CIF(RIF(-1, 1), RIF(-1, 1))) True """ - return self.real().__nonzero__() or self.imag().__nonzero__() + return self.real().__bool__() or self.imag().__bool__() + + __nonzero__ =__bool__ cpdef _richcmp_(left, right, int op): r""" diff --git a/src/sage/rings/complex_mpc.pyx b/src/sage/rings/complex_mpc.pyx index 92e6ad9f700..aa9c88195a7 100644 --- a/src/sage/rings/complex_mpc.pyx +++ b/src/sage/rings/complex_mpc.pyx @@ -1243,7 +1243,7 @@ cdef class MPComplexNumber(sage.structure.element.FieldElement): elif cim<0: return -1 else: return 0 - def __nonzero__(self): + def __bool__(self): """ Return ``True`` if ``self`` is not zero. @@ -1258,6 +1258,8 @@ cdef class MPComplexNumber(sage.structure.element.FieldElement): """ return not (mpfr_zero_p(self.value.re) and mpfr_zero_p(self.value.im)) + __nonzero__ =__bool__ + def is_square(self): r""" This function always returns true as `\CC` is algebraically closed. diff --git a/src/sage/rings/complex_number.pyx b/src/sage/rings/complex_number.pyx index beadf16b075..cb68ef7e34d 100644 --- a/src/sage/rings/complex_number.pyx +++ b/src/sage/rings/complex_number.pyx @@ -859,7 +859,7 @@ cdef class ComplexNumber(sage.structure.element.FieldElement): real_string, digit_precision_bound, imag_string, digit_precision_bound) - def __nonzero__(self): + def __bool__(self): """ Return ``True`` if ``self`` is not zero. This is an internal function; use :meth:`is_zero()` instead. @@ -872,6 +872,8 @@ cdef class ComplexNumber(sage.structure.element.FieldElement): """ return not (mpfr_zero_p(self.__re) and mpfr_zero_p(self.__im)) + __nonzero__ =__bool__ + def prec(self): """ Return precision of this complex number. diff --git a/src/sage/rings/continued_fraction.py b/src/sage/rings/continued_fraction.py index 4ce33c8f294..f3317a03188 100644 --- a/src/sage/rings/continued_fraction.py +++ b/src/sage/rings/continued_fraction.py @@ -986,7 +986,7 @@ def ceil(self): return self.quotient(0) return self.quotient(0)+1 - def __nonzero__(self): + def __bool__(self): """ Return False if self is zero. @@ -1003,6 +1003,8 @@ def __nonzero__(self): """ return bool(self.quotient(0)) or self.quotient(1) is not Infinity + __nonzero__ =__bool__ + def is_zero(self): r""" Test whether ``self`` is zero. diff --git a/src/sage/rings/finite_rings/element_givaro.pyx b/src/sage/rings/finite_rings/element_givaro.pyx index 7e077bc6e97..dafd3c8e624 100644 --- a/src/sage/rings/finite_rings/element_givaro.pyx +++ b/src/sage/rings/finite_rings/element_givaro.pyx @@ -926,7 +926,7 @@ cdef class FiniteField_givaroElement(FinitePolyExtElement): """ return self.element - def __nonzero__(FiniteField_givaroElement self): + def __bool__(FiniteField_givaroElement self): r""" Return ``True`` if ``self != k(0)``. @@ -941,6 +941,8 @@ cdef class FiniteField_givaroElement(FinitePolyExtElement): """ return not self._cache.objectptr.isZero(self.element) + __nonzero__ =__bool__ + def is_one(FiniteField_givaroElement self): r""" Return ``True`` if ``self == k(1)``. diff --git a/src/sage/rings/finite_rings/element_ntl_gf2e.pyx b/src/sage/rings/finite_rings/element_ntl_gf2e.pyx index b1ffd765c1e..19bad4bc1a6 100644 --- a/src/sage/rings/finite_rings/element_ntl_gf2e.pyx +++ b/src/sage/rings/finite_rings/element_ntl_gf2e.pyx @@ -574,7 +574,7 @@ cdef class FiniteField_ntl_gf2eElement(FinitePolyExtElement): return " + ".join(reversed(_repr)) - def __nonzero__(FiniteField_ntl_gf2eElement self): + def __bool__(FiniteField_ntl_gf2eElement self): r""" Return ``True`` if ``self != k(0)``. @@ -591,6 +591,8 @@ cdef class FiniteField_ntl_gf2eElement(FinitePolyExtElement): (self._parent._cache).F.restore() return not bool(GF2E_IsZero(self.x)) + __nonzero__ =__bool__ + def is_one(FiniteField_ntl_gf2eElement self): r""" Return ``True`` if ``self == k(1)``. diff --git a/src/sage/rings/finite_rings/element_pari_ffelt.pyx b/src/sage/rings/finite_rings/element_pari_ffelt.pyx index a61d3e0b26d..55dc48f9b10 100644 --- a/src/sage/rings/finite_rings/element_pari_ffelt.pyx +++ b/src/sage/rings/finite_rings/element_pari_ffelt.pyx @@ -560,7 +560,8 @@ cdef class FiniteFieldElement_pari_ffelt(FinitePolyExtElement): """ return not bool(FF_equal0(self.val)) - __nonzero__ = is_unit + __bool__ = is_unit + __nonzero__ =__bool__ def __pos__(FiniteFieldElement_pari_ffelt self): """ diff --git a/src/sage/rings/finite_rings/integer_mod.pyx b/src/sage/rings/finite_rings/integer_mod.pyx index 1b1d38852ae..6e6b479c109 100644 --- a/src/sage/rings/finite_rings/integer_mod.pyx +++ b/src/sage/rings/finite_rings/integer_mod.pyx @@ -1901,7 +1901,7 @@ cdef class IntegerMod_gmp(IntegerMod_abstract): """ return mpz_cmp_si(self.value, 1) == 0 - def __nonzero__(IntegerMod_gmp self): + def __bool__(IntegerMod_gmp self): """ Returns ``True`` if this is not `0`, otherwise ``False``. @@ -1915,6 +1915,8 @@ cdef class IntegerMod_gmp(IntegerMod_abstract): """ return mpz_cmp_si(self.value, 0) != 0 + __nonzero__ =__bool__ + cpdef bint is_unit(self): """ Return True iff this element is a unit. @@ -2297,7 +2299,7 @@ cdef class IntegerMod_int(IntegerMod_abstract): """ return self.ivalue == 1 - def __nonzero__(IntegerMod_int self): + def __bool__(IntegerMod_int self): """ Returns ``True`` if this is not `0`, otherwise ``False``. @@ -2311,6 +2313,8 @@ cdef class IntegerMod_int(IntegerMod_abstract): """ return self.ivalue != 0 + __nonzero__ =__bool__ + cpdef bint is_unit(IntegerMod_int self): """ Return True iff this element is a unit @@ -3114,7 +3118,7 @@ cdef class IntegerMod_int64(IntegerMod_abstract): """ return self.ivalue == 1 - def __nonzero__(IntegerMod_int64 self): + def __bool__(IntegerMod_int64 self): """ Returns ``True`` if this is not `0`, otherwise ``False``. @@ -3128,6 +3132,8 @@ cdef class IntegerMod_int64(IntegerMod_abstract): """ return self.ivalue != 0 + __nonzero__ =__bool__ + cpdef bint is_unit(IntegerMod_int64 self): """ Return True iff this element is a unit. diff --git a/src/sage/rings/fraction_field_element.pyx b/src/sage/rings/fraction_field_element.pyx index e2368fa0c3e..a8a0d395c63 100644 --- a/src/sage/rings/fraction_field_element.pyx +++ b/src/sage/rings/fraction_field_element.pyx @@ -869,7 +869,7 @@ cdef class FractionFieldElement(FieldElement): """ return self.__numerator.valuation(v) - self.__denominator.valuation(v) - def __nonzero__(self): + def __bool__(self): """ Return ``True`` if this element is nonzero. @@ -878,16 +878,18 @@ cdef class FractionFieldElement(FieldElement): sage: F = ZZ['x,y'].fraction_field() sage: x,y = F.gens() sage: t = F(0)/x - sage: t.__nonzero__() + sage: bool(t) False :: - sage: (1/x).__nonzero__() + sage: bool(1/x) True """ return not self.__numerator.is_zero() + __nonzero__ =__bool__ + def is_zero(self): """ Return ``True`` if this element is equal to zero. diff --git a/src/sage/rings/function_field/function_field_element.pyx b/src/sage/rings/function_field/function_field_element.pyx index 21eb0ca74b7..b4c17de2df0 100644 --- a/src/sage/rings/function_field/function_field_element.pyx +++ b/src/sage/rings/function_field/function_field_element.pyx @@ -346,7 +346,7 @@ cdef class FunctionFieldElement_polymod(FunctionFieldElement): """ return self._x._repr(name=self.parent().variable_name()) - def __nonzero__(self): + def __bool__(self): """ EXAMPLES:: @@ -361,6 +361,8 @@ cdef class FunctionFieldElement_polymod(FunctionFieldElement): """ return not not self._x + __nonzero__ =__bool__ + def __hash__(self): """ TESTS:: @@ -560,7 +562,7 @@ cdef class FunctionFieldElement_rational(FunctionFieldElement): """ return repr(self._x) - def __nonzero__(self): + def __bool__(self): """ EXAMPLES:: diff --git a/src/sage/rings/ideal.py b/src/sage/rings/ideal.py index a4e100b7c8e..e8815a1718a 100644 --- a/src/sage/rings/ideal.py +++ b/src/sage/rings/ideal.py @@ -386,7 +386,7 @@ def _contains_(self, x): """ raise NotImplementedError - def __nonzero__(self): + def __bool__(self): r""" Return ``True`` if this ideal is not `(0)`. @@ -419,6 +419,8 @@ def __nonzero__(self): return True return False + __nonzero__ =__bool__ + def base_ring(self): r""" Returns the base ring of this ideal. diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx index d7369cf3d66..9fc26138ce2 100644 --- a/src/sage/rings/integer.pyx +++ b/src/sage/rings/integer.pyx @@ -4293,7 +4293,7 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement): """ return mpz_cmp_si(self.value, 1) == 0 - def __nonzero__(self): + def __bool__(self): r""" Returns ``True`` if the integer is not `0`, otherwise ``False``. @@ -4306,6 +4306,8 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement): """ return mpz_sgn(self.value) != 0 + __nonzero__ =__bool__ + def is_integral(self): """ Return ``True`` since integers are integral, i.e., diff --git a/src/sage/rings/laurent_series_ring_element.pyx b/src/sage/rings/laurent_series_ring_element.pyx index 6c57351295e..e3ceded54cf 100644 --- a/src/sage/rings/laurent_series_ring_element.pyx +++ b/src/sage/rings/laurent_series_ring_element.pyx @@ -221,9 +221,11 @@ cdef class LaurentSeries(AlgebraElement): return self.__u.is_monomial() - def __nonzero__(self): + def __bool__(self): return not not self.__u + __nonzero__ =__bool__ + def _im_gens_(self, codomain, im_gens): return codomain(self(im_gens[0])) diff --git a/src/sage/rings/morphism.pyx b/src/sage/rings/morphism.pyx index 851408e69ad..7e25e0dfcfc 100644 --- a/src/sage/rings/morphism.pyx +++ b/src/sage/rings/morphism.pyx @@ -602,7 +602,7 @@ cdef class RingHomomorphism(RingMap): raise TypeError("parent must be a ring homset") RingMap.__init__(self, parent) - def __nonzero__(self): + def __bool__(self): """ Every ring map is nonzero unless the domain or codomain is the 0 ring, since there is no zero map between rings, since 1 goes @@ -626,6 +626,8 @@ cdef class RingHomomorphism(RingMap): """ return bool(self.codomain().one()) + __nonzero__ =__bool__ + def _repr_type(self): """ Used internally in printing this morphism. diff --git a/src/sage/rings/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py index 142f38b6d0a..4c4ef193f86 100644 --- a/src/sage/rings/multi_power_series_ring_element.py +++ b/src/sage/rings/multi_power_series_ring_element.py @@ -220,7 +220,7 @@ class MPowerSeries(PowerSeries): # # _mul_prec : works just fine # - # __nonzero__ : works just fine + # __bool__ : works just fine # """ Multivariate power series; these are the elements of Multivariate Power diff --git a/src/sage/rings/number_field/number_field_element.pyx b/src/sage/rings/number_field/number_field_element.pyx index a03cce2d7c6..7bfad4cbf14 100644 --- a/src/sage/rings/number_field/number_field_element.pyx +++ b/src/sage/rings/number_field/number_field_element.pyx @@ -2265,27 +2265,27 @@ cdef class NumberFieldElement(FieldElement): """ return self._mul_(~right) - def __nonzero__(self): + def __bool__(self): """ Return True if this number field element is nonzero. EXAMPLES:: sage: m. = CyclotomicField(17) - sage: m(0).__nonzero__() + sage: bool(m(0)) False - sage: b.__nonzero__() + sage: bool(b) True - Nonzero is used by the bool command:: + ``__bool__`` is used by the bool command:: sage: bool(b + 1) True - sage: bool(m(0)) - False """ return not IsZero_ZZX(self.__numerator) + __nonzero__ =__bool__ + cpdef _neg_(self): r""" EXAMPLE:: diff --git a/src/sage/rings/number_field/number_field_element_quadratic.pyx b/src/sage/rings/number_field/number_field_element_quadratic.pyx index efdcec9b6fc..0a5950ce158 100644 --- a/src/sage/rings/number_field/number_field_element_quadratic.pyx +++ b/src/sage/rings/number_field/number_field_element_quadratic.pyx @@ -1317,7 +1317,7 @@ cdef class NumberFieldElement_quadratic(NumberFieldElement_absolute): h += 42082631 * mpz_pythonhash(self.b) return h - def __nonzero__(self): + def __bool__(self): """ Check whether this element is not zero. @@ -1331,6 +1331,8 @@ cdef class NumberFieldElement_quadratic(NumberFieldElement_absolute): """ return mpz_cmp_ui(self.a, 0) != 0 or mpz_cmp_ui(self.b, 0) != 0 + __nonzero__ =__bool__ + def _integer_(self, Z=None): """ EXAMPLES: diff --git a/src/sage/rings/padics/CA_template.pxi b/src/sage/rings/padics/CA_template.pxi index 5a23eb2e96e..c87b7fd9351 100644 --- a/src/sage/rings/padics/CA_template.pxi +++ b/src/sage/rings/padics/CA_template.pxi @@ -605,7 +605,7 @@ cdef class CAElement(pAdicTemplateElement): return True return mpz_cmp_si((absprec).value, val) <= 0 - def __nonzero__(self): + def __bool__(self): """ Whether this element should be considered true in a boolean context. @@ -621,6 +621,8 @@ cdef class CAElement(pAdicTemplateElement): """ return not ciszero(self.value, self.prime_pow) + __nonzero__ =__bool__ + def is_equal_to(self, _right, absprec=None): r""" Determines whether the inputs are equal modulo diff --git a/src/sage/rings/padics/CR_template.pxi b/src/sage/rings/padics/CR_template.pxi index 2415d28e7d9..cb307c21ad3 100644 --- a/src/sage/rings/padics/CR_template.pxi +++ b/src/sage/rings/padics/CR_template.pxi @@ -959,7 +959,7 @@ cdef class CRElement(pAdicTemplateElement): return True return mpz_cmp_si((absprec).value, self.ordp) <= 0 - def __nonzero__(self): + def __bool__(self): """ Returns True if self is distinguishable from zero. @@ -975,6 +975,8 @@ cdef class CRElement(pAdicTemplateElement): """ return self.relprec != 0 + __nonzero__ =__bool__ + def is_equal_to(self, _right, absprec=None): r""" Returns whether self is equal to right modulo diff --git a/src/sage/rings/padics/FM_template.pxi b/src/sage/rings/padics/FM_template.pxi index 6a44d5cd491..22d644513e6 100644 --- a/src/sage/rings/padics/FM_template.pxi +++ b/src/sage/rings/padics/FM_template.pxi @@ -481,7 +481,7 @@ cdef class FMElement(pAdicTemplateElement): cdef long val = self.valuation_c() return mpz_cmp_si((absprec).value, val) <= 0 - def __nonzero__(self): + def __bool__(self): """ Returns True if this element is distinguishable from zero. @@ -497,6 +497,8 @@ cdef class FMElement(pAdicTemplateElement): """ return not ciszero(self.value, self.prime_pow) + __nonzero__ =__bool__ + def is_equal_to(self, _right, absprec=None): r""" Returns whether this element is equal to ``right`` modulo `p^{\mbox{absprec}}`. diff --git a/src/sage/rings/polynomial/laurent_polynomial.pyx b/src/sage/rings/polynomial/laurent_polynomial.pyx index 8e4ffc2e2c7..b6ffd69fbf7 100644 --- a/src/sage/rings/polynomial/laurent_polynomial.pyx +++ b/src/sage/rings/polynomial/laurent_polynomial.pyx @@ -161,7 +161,7 @@ cdef class LaurentPolynomial_univariate(LaurentPolynomial_generic): """ return self.__u.is_zero() - def __nonzero__(self): + def __bool__(self): """ Check if ``self`` is non-zero. @@ -177,6 +177,8 @@ cdef class LaurentPolynomial_univariate(LaurentPolynomial_generic): """ return not self.__u.is_zero() + __nonzero__ =__bool__ + def _im_gens_(self, codomain, im_gens): """ Return the image of ``self`` under the morphism defined by diff --git a/src/sage/rings/polynomial/multi_polynomial_element.py b/src/sage/rings/polynomial/multi_polynomial_element.py index 5ca295c3652..8f769df553a 100644 --- a/src/sage/rings/polynomial/multi_polynomial_element.py +++ b/src/sage/rings/polynomial/multi_polynomial_element.py @@ -1464,7 +1464,7 @@ def __ne__(self,right): return CommutativeRingElement.__ne__(self, right) return self._MPolynomial_element__element != right._MPolynomial_element__element - def __nonzero__(self): + def __bool__(self): """ Returns True if self != 0 @@ -1474,6 +1474,8 @@ def __nonzero__(self): """ return self._MPolynomial_element__element.dict()!={} + __nonzero__ =__bool__ + def _floordiv_(self, right): r""" Quotient of division of self by other. This is denoted //. diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx index 81f64bb3e57..5ff7f128af8 100644 --- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx +++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx @@ -3888,7 +3888,7 @@ cdef class MPolynomial_libsingular(sage.rings.polynomial.multi_polynomial.MPolyn else: return False - def __nonzero__(self): + def __bool__(self): """ EXAMPLES:: @@ -3903,6 +3903,8 @@ cdef class MPolynomial_libsingular(sage.rings.polynomial.multi_polynomial.MPolyn else: return False + __nonzero__ =__bool__ + cpdef _floordiv_(self, right): """ Perform division with remainder and return the quotient. diff --git a/src/sage/rings/polynomial/pbori.pyx b/src/sage/rings/polynomial/pbori.pyx index 49c1a23213d..685514abd85 100644 --- a/src/sage/rings/polynomial/pbori.pyx +++ b/src/sage/rings/polynomial/pbori.pyx @@ -3532,7 +3532,7 @@ cdef class BooleanPolynomial(MPolynomial): """ return self._pbpoly.isZero() - def __nonzero__(self): + def __bool__(self): r""" Check if ``self`` is zero. @@ -3554,6 +3554,8 @@ cdef class BooleanPolynomial(MPolynomial): """ return not self._pbpoly.isZero() + __nonzero__ =__bool__ + def is_one(BooleanPolynomial self): """ Check if self is 1. diff --git a/src/sage/rings/polynomial/plural.pyx b/src/sage/rings/polynomial/plural.pyx index 83d632afc45..f048791bf59 100644 --- a/src/sage/rings/polynomial/plural.pyx +++ b/src/sage/rings/polynomial/plural.pyx @@ -2629,7 +2629,7 @@ cdef class NCPolynomial_plural(RingElement): else: return False - def __nonzero__(self): + def __bool__(self): """ EXAMPLES:: @@ -2648,6 +2648,8 @@ cdef class NCPolynomial_plural(RingElement): else: return False + __nonzero__ =__bool__ + ##################################################################### diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index 0a44c18ce87..0e4b1c89619 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -930,7 +930,7 @@ cdef class Polynomial(CommutativeAlgebraElement): if c: return c return 0 - def __nonzero__(self): + def __bool__(self): """ EXAMPLES:: @@ -943,6 +943,8 @@ cdef class Polynomial(CommutativeAlgebraElement): """ return self.degree() >= 0 + __nonzero__ =__bool__ + def __getitem__(self, n): r""" Return the `n`-th coefficient of ``self``. @@ -8976,7 +8978,7 @@ cdef class Polynomial_generic_dense(Polynomial): """ return make_generic_polynomial, (self._parent, self.__coeffs) - def __nonzero__(self): + def __bool__(self): return len(self.__coeffs) > 0 cdef int __normalize(self) except -1: @@ -8986,7 +8988,7 @@ cdef class Polynomial_generic_dense(Polynomial): Check that exceptions are propagated correctly (:trac:`18274`):: sage: class BrokenRational(Rational): - ....: def __nonzero__(self): + ....: def __bool__(self): ....: raise NotImplementedError("cannot check whether number is non-zero") sage: z = BrokenRational() sage: R. = QQ[] diff --git a/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx b/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx index b143507c8e2..1f62a0f0b78 100644 --- a/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx +++ b/src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx @@ -749,22 +749,24 @@ cdef class Polynomial_integer_dense_flint(Polynomial): """ return (fmpz_poly_degree(self.__poly) == -1) - def __nonzero__(self): + def __bool__(self): """ Check if self is not zero. EXAMPLES:: sage: R. = ZZ[] - sage: R(0).__nonzero__() + sage: bool(R(0)) False - sage: R(1).__nonzero__() + sage: bool(R(1)) True - sage: x.__nonzero__() + sage: bool(x) True """ return not (fmpz_poly_degree(self.__poly) == -1) + __nonzero__ =__bool__ + @coerce_binop def gcd(self, right): r""" diff --git a/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx b/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx index 6517f1b6100..460026f8d9b 100644 --- a/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx +++ b/src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx @@ -1043,7 +1043,7 @@ cdef class Polynomial_dense_modn_ntl_zz(Polynomial_dense_mod_n): def is_gen(self): return zz_pX_IsX(self.x) - def __nonzero__(self): + def __bool__(self): """ TESTS:: @@ -1056,6 +1056,8 @@ cdef class Polynomial_dense_modn_ntl_zz(Polynomial_dense_mod_n): """ return not zz_pX_IsZero(self.x) + __nonzero__ =__bool__ + def valuation(self): """ Returns the valuation of self, that is, the power of the @@ -1604,7 +1606,7 @@ cdef class Polynomial_dense_modn_ntl_ZZ(Polynomial_dense_mod_n): return n return infinity - def __nonzero__(self): + def __bool__(self): """ TESTS:: diff --git a/src/sage/rings/polynomial/polynomial_rational_flint.pyx b/src/sage/rings/polynomial/polynomial_rational_flint.pyx index b6c1b25e7cb..4a63dd57e98 100644 --- a/src/sage/rings/polynomial/polynomial_rational_flint.pyx +++ b/src/sage/rings/polynomial/polynomial_rational_flint.pyx @@ -712,7 +712,7 @@ cdef class Polynomial_rational_flint(Polynomial): """ return fmpq_poly_is_one(self.__poly) - def __nonzero__(self): + def __bool__(self): """ Returns whether or not self is non-zero. @@ -727,6 +727,8 @@ cdef class Polynomial_rational_flint(Polynomial): """ return not fmpq_poly_is_zero(self.__poly) + __nonzero__ =__bool__ + ########################################################################### # Shifting # ########################################################################### diff --git a/src/sage/rings/polynomial/polynomial_template.pxi b/src/sage/rings/polynomial/polynomial_template.pxi index 20b584f18e8..8cd2ba5838a 100644 --- a/src/sage/rings/polynomial/polynomial_template.pxi +++ b/src/sage/rings/polynomial/polynomial_template.pxi @@ -517,7 +517,7 @@ cdef class Polynomial_template(Polynomial): raise ValueError("Cannot coerce polynomial with degree %d to integer."%(self.degree())) return int(self[0]) - def __nonzero__(self): + def __bool__(self): """ EXAMPLE:: @@ -529,6 +529,8 @@ cdef class Polynomial_template(Polynomial): """ return not celement_is_zero(&self.x, (self)._cparent) + __nonzero__ =__bool__ + cpdef int _cmp_(left, right) except -2: """ EXAMPLE:: diff --git a/src/sage/rings/polynomial/skew_polynomial_element.pyx b/src/sage/rings/polynomial/skew_polynomial_element.pyx index 66fc5790115..a139662a7a0 100644 --- a/src/sage/rings/polynomial/skew_polynomial_element.pyx +++ b/src/sage/rings/polynomial/skew_polynomial_element.pyx @@ -1675,7 +1675,7 @@ cdef class SkewPolynomial(AlgebraElement): return (self.degree() == self.valuation() and self.leading_coefficient()._is_atomic()) - def __nonzero__(self): + def __bool__(self): r""" Test whether ``self`` is nonzero. @@ -1685,14 +1685,16 @@ cdef class SkewPolynomial(AlgebraElement): sage: sigma = R.hom([t+1]) sage: S. = R['x',sigma] sage: a = x + 1 - sage: a.__nonzero__() + sage: bool(a) True sage: b = S.zero() - sage: b.__nonzero__() + sage: bool(b) False """ return not self.is_zero() + __nonzero__ =__bool__ + def base_ring(self): r""" Return the base ring of ``self``. diff --git a/src/sage/rings/power_series_poly.pyx b/src/sage/rings/power_series_poly.pyx index 3785a69f38a..5bec0b1434a 100644 --- a/src/sage/rings/power_series_poly.pyx +++ b/src/sage/rings/power_series_poly.pyx @@ -140,22 +140,24 @@ cdef class PowerSeries_poly(PowerSeries): """ return self.__f.degree() - def __nonzero__(self): + def __bool__(self): """ Return True if self is nonzero, and False otherwise. EXAMPLES:: sage: R. = GF(11)[[]] - sage: (1 + t + O(t^18)).__nonzero__() + sage: bool(1 + t + O(t^18)) True - sage: R(0).__nonzero__() + sage: bool(R(0)) False - sage: O(t^18).__nonzero__() + sage: bool(O(t^18)) False """ return not not self.__f + __nonzero__ =__bool__ + def __call__(self, *x, **kwds): """ Evaluate the series at x=a. diff --git a/src/sage/rings/power_series_ring_element.pyx b/src/sage/rings/power_series_ring_element.pyx index 77c12ec97aa..8feec98b14e 100644 --- a/src/sage/rings/power_series_ring_element.pyx +++ b/src/sage/rings/power_series_ring_element.pyx @@ -906,7 +906,7 @@ cdef class PowerSeries(AlgebraElement): # endif return prec - def __nonzero__(self): + def __bool__(self): """ Return True if this power series is not equal to 0. @@ -926,6 +926,8 @@ cdef class PowerSeries(AlgebraElement): """ return not not self.polynomial() + __nonzero__ =__bool__ + def is_unit(self): """ Return True if this power series is invertible. diff --git a/src/sage/rings/qqbar.py b/src/sage/rings/qqbar.py index c0edcbe28df..636a0212a8b 100644 --- a/src/sage/rings/qqbar.py +++ b/src/sage/rings/qqbar.py @@ -3805,7 +3805,7 @@ def __ne__(self, other): """ return not self == other - def __nonzero__(self): + def __bool__(self): """ Check whether self is equal is nonzero. This is fast if interval arithmetic proves that self is nonzero, but may be @@ -3813,9 +3813,9 @@ def __nonzero__(self): EXAMPLES:: - sage: (QQbar.zeta(2) + 1).__nonzero__() + sage: bool(QQbar.zeta(2) + 1) False - sage: (QQbar.zeta(7) / (2^500)).__nonzero__() + sage: bool(QQbar.zeta(7) / (2^500)) True """ val = self._value @@ -3832,7 +3832,9 @@ def __nonzero__(self): # Sigh... self.exactify() - return self.__nonzero__() + return self.__bool__() + + __nonzero__ =__bool__ def __pow__(self, e): r""" ``self**p`` returns the `p`'th power of self (where `p` can diff --git a/src/sage/rings/quotient_ring_element.py b/src/sage/rings/quotient_ring_element.py index 8e59d6d114d..a2eadebf625 100644 --- a/src/sage/rings/quotient_ring_element.py +++ b/src/sage/rings/quotient_ring_element.py @@ -126,7 +126,7 @@ def lift(self): """ return self.__rep - def __nonzero__(self): + def __bool__(self): """ Return True if quotient ring element is non-zero in the quotient ring `R/I`, by determining whether the element @@ -143,13 +143,13 @@ def __nonzero__(self): TESTS:: - sage: S(0).__nonzero__() - False - sage: (a-a).__nonzero__() + sage: bool(a - a) False """ return self.__rep not in self.parent().defining_ideal() + __nonzero__ =__bool__ + def is_unit(self): """ Return True if self is a unit in the quotient ring. diff --git a/src/sage/rings/rational.pyx b/src/sage/rings/rational.pyx index 25c23ac9d99..08da03bb94c 100644 --- a/src/sage/rings/rational.pyx +++ b/src/sage/rings/rational.pyx @@ -16,7 +16,7 @@ AUTHORS: - David Harvey (2006-09-15): added nth_root - Pablo De Napoli (2007-04-01): corrected the implementations of - multiplicative_order, is_one; optimized __nonzero__ ; documented: + multiplicative_order, is_one; optimized __bool__ ; documented: lcm,gcd - John Cremona (2009-05-15): added support for local and global @@ -2551,7 +2551,7 @@ cdef class Rational(sage.structure.element.FieldElement): mpq_neg(x.value, self.value) return x - def __nonzero__(self): + def __bool__(self): """ Return ``True`` if this rational number is nonzero. @@ -2559,9 +2559,7 @@ cdef class Rational(sage.structure.element.FieldElement): EXAMPLES:: - sage: (-4/17).__nonzero__() - True - sage: (0/5).__nonzero__() + sage: bool(0/5) False sage: bool(-4/17) True @@ -2569,6 +2567,8 @@ cdef class Rational(sage.structure.element.FieldElement): # A rational number is zero iff its numerator is zero. return mpq_sgn(self.value) != 0 + __nonzero__ =__bool__ + def __abs__(self): """ Return the absolute value of this rational number. diff --git a/src/sage/rings/real_arb.pyx b/src/sage/rings/real_arb.pyx index 7b42a18e89a..391c0dd477c 100644 --- a/src/sage/rings/real_arb.pyx +++ b/src/sage/rings/real_arb.pyx @@ -2006,7 +2006,7 @@ cdef class RealBall(RingElement): """ return arb_is_nonzero(self.value) - def __nonzero__(self): + def __bool__(self): """ Return ``True`` iff this ball is not the zero ball, i.e. if it its midpoint and radius are not both zero. @@ -2031,6 +2031,8 @@ cdef class RealBall(RingElement): """ return not arb_is_zero(self.value) + __nonzero__ =__bool__ + def is_exact(self): """ Return ``True`` iff the radius of this ball is zero. diff --git a/src/sage/rings/real_interval_absolute.pyx b/src/sage/rings/real_interval_absolute.pyx index ec9f72afc39..0a1479c13df 100644 --- a/src/sage/rings/real_interval_absolute.pyx +++ b/src/sage/rings/real_interval_absolute.pyx @@ -567,7 +567,7 @@ cdef class RealIntervalAbsoluteElement(FieldElement): cdef bint is_exact(self): return not self._diameter - def __nonzero__(self): + def __bool__(self): """ Return ``True`` for anything except exact zero. @@ -584,6 +584,8 @@ cdef class RealIntervalAbsoluteElement(FieldElement): """ return not not self._mantissa or not not self._diameter + __nonzero__ =__bool__ + def __neg__(self): """ TESTS:: diff --git a/src/sage/rings/real_lazy.pyx b/src/sage/rings/real_lazy.pyx index 26542878f33..caa30177ccb 100644 --- a/src/sage/rings/real_lazy.pyx +++ b/src/sage/rings/real_lazy.pyx @@ -988,7 +988,7 @@ cdef class LazyWrapper(LazyFieldElement): """ return self._value - def __nonzero__(self): + def __bool__(self): """ Check to see if ``self`` is not zero. @@ -1002,6 +1002,8 @@ cdef class LazyWrapper(LazyFieldElement): """ return not not self._value + __nonzero__ =__bool__ + def __hash__(self): """ Return the hash value of ``self``. diff --git a/src/sage/rings/real_mpfi.pyx b/src/sage/rings/real_mpfi.pyx index 3357b958fb3..259bded4c93 100644 --- a/src/sage/rings/real_mpfi.pyx +++ b/src/sage/rings/real_mpfi.pyx @@ -3731,25 +3731,27 @@ cdef class RealIntervalFieldElement(RingElement): elif op == 5: #>= return mpfr_lessequal_p(&rt.value.right, <.value.left) - def __nonzero__(self): + def __bool__(self): """ Return ``True`` if ``self`` is not known to be exactly zero. EXAMPLES:: - sage: RIF(0).__nonzero__() + sage: bool(RIF(0)) False - sage: RIF(1).__nonzero__() + sage: bool(RIF(1)) True - sage: RIF(1, 2).__nonzero__() + sage: bool(RIF(1, 2)) True - sage: RIF(0, 1).__nonzero__() + sage: bool(RIF(0, 1)) True - sage: RIF(-1, 1).__nonzero__() + sage: bool(RIF(-1, 1)) True """ return not (mpfr_zero_p(&self.value.left) and mpfr_zero_p(&self.value.right)) + __nonzero__ =__bool__ + cpdef int _cmp_(left, right) except -2: """ Compare two intervals lexicographically. diff --git a/src/sage/rings/real_mpfr.pyx b/src/sage/rings/real_mpfr.pyx index ce26f34475a..a2388fc63b3 100644 --- a/src/sage/rings/real_mpfr.pyx +++ b/src/sage/rings/real_mpfr.pyx @@ -3784,30 +3784,32 @@ cdef class RealNumber(sage.structure.element.RingElement): """ return mpfr_integer_p(self.value) != 0 - def __nonzero__(self): + def __bool__(self): """ Return ``True`` if ``self`` is nonzero. EXAMPLES:: - sage: RR(1).__nonzero__() + sage: bool(RR(1)) True - sage: RR(0).__nonzero__() + sage: bool(RR(0)) False - sage: RR('inf').__nonzero__() + sage: bool(RR('inf')) True TESTS: Check that :trac:`20502` is fixed:: - sage: RR('nan').__nonzero__() + sage: bool(RR('nan')) True sage: RR('nan').is_zero() False """ return not mpfr_zero_p(self.value) + __nonzero__ =__bool__ + cpdef int _cmp_(left, right) except -2: """ Return ``-1`` if exactly one of the numbers is ``NaN``. Return ``-1`` diff --git a/src/sage/rings/universal_cyclotomic_field.py b/src/sage/rings/universal_cyclotomic_field.py index a94af63f105..19f5d5679a4 100644 --- a/src/sage/rings/universal_cyclotomic_field.py +++ b/src/sage/rings/universal_cyclotomic_field.py @@ -275,7 +275,7 @@ def __init__(self, parent, obj): self._obj = obj FieldElement.__init__(self, parent) - def __nonzero__(self): + def __bool__(self): r""" TESTS:: @@ -285,6 +285,8 @@ def __nonzero__(self): """ return bool(self._obj) + __nonzero__ =__bool__ + def __reduce__(self): r""" TESTS::