Martin Albrecht <[EMAIL PROTECTED]> writes:

> Hi everyone,
>
> attached is a patch to make the is_zero -> __nonzero__ change, to summarize:
>
>> Conclusions:
>>   (1) Do not eliminate the is_zero method.   I.e., it should still be
>>         possible to write x.is_zero() for x an element.
>
> It is in element.pyx. Nick, does the documentation satisfy your request or 
> should it be more prominent?
>
>>   (2) Do implement __nonzero__, and redefine is_zero in the base to be
>>           def is_zero(self):
>>                return not self.__nonzero__()
>
> See above.
>
>>   (3) Make sure no derived classes define is_zero; they should instead
>>        always define __nonzero__.
>
> Almost, done. Exception:

This list of exceptions is interesting.  Is it possible that is_zero
is in the wrong place in the hierarchy?

And the precision issues are more widespread; is_zero for reals, etc,
has the same issues.

Other than that, +1 include from me.

Nick

> ./libs/ntl/ntl.pyx:    def is_zero(self):
> ./libs/ntl/ntl.pyx:    def is_zero(self):
> ./libs/ntl/ntl.pyx:    def is_zero(ntl_GF2E self):
> ./libs/ntl/ntl.pyx:    def is_zero(self):
>
> Does not inherit from Element.
>
> ./modular/hecke/module.py:    def is_zero(self):
>
> Does not inherit from Element.
>
> ./structure/element.pyx:    def is_zero(self):
>
> Does not inherit from Element.
>
> ./rings/morphism.py:    def is_zero(self):
>
> Does not inherit from Element.
>
> ./rings/number_field/number_field_ideal.py:    def is_zero(self):
> ./rings/number_field/number_field_ideal.py:    def is_zero(self):
>
> Does not inherit from Element.
>
> ./rings/padics/padic_lazy_element.py:    def is_zero(self, prec):
> ./rings/padics/padic_capped_relative_element.py:    def is_zero(self, prec = 
> None):
> ./rings/padics/padic_extension_generic_element.py:    def is_zero(self, prec):
> ./rings/padics/padic_ring_fixed_mod_element.py.orig:    def is_zero(self, 
> prec 
> = None):
> ./rings/padics/local_generic_element.py:    def is_zero(self, prec):
> ./rings/padics/padic_ring_fixed_mod_element.py:    def is_zero(self, prec = 
> None):
>
> Require additional prec parameter which doesn't fit into the __nonzero__ 
> concept, so I left it as is. Ideas?
>
> Martin
>
> -- 
> name: Martin Albrecht
> _pgp: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x8EF0DC99
> _www: http://www.informatik.uni-bremen.de/~malb
> _jab: [EMAIL PROTECTED]
>
>
> >
>
> # HG changeset patch
> # User 'Martin Albrecht <[EMAIL PROTECTED]>'
> # Date 1176936753 -7200
> # Node ID 7a77bea899e0a396854646ff62bfee5240ab0857
> # Parent  a62ae3f310f2a583235aaf13c382f52fa5b276d8
> is_zero methods replaced by __nonzero__ methods, is_zero now in Element as 
> "not self.__nonzero__()"
>
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/interfaces/gap.py
> --- a/sage/interfaces/gap.py  Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/interfaces/gap.py  Thu Apr 19 00:52:33 2007 +0200
> @@ -591,6 +591,9 @@ class GapElement(ExpectElement):
>              raise RuntimeError, "An error occured creating an object in %s 
> from:\n'%s'\n%s"%(self.parent().name(), self._createu, s)
>          return s
>  
> +    def __nonzero__(self):
> +        return self.bool()
> +
>      def __len__(self):
>          """
>          EXAMPLES:
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/interfaces/macaulay2.py
> --- a/sage/interfaces/macaulay2.py    Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/interfaces/macaulay2.py    Thu Apr 19 00:52:33 2007 +0200
> @@ -376,9 +376,9 @@ class Macaulay2Element(ExpectElement):
>          else:
>              return self.parent().new('%s %% %s'%(self.name(), x.name()))
>  
> -    def is_zero(self):
> +    def __nonzero__(self):
>          P = self.parent()
> -        return P.eval('%s == 0'%self.name()) == 'true'        
> +        return P.eval('%s == 0'%self.name()) == 'false'        
>  
>      def sage_polystring(self):
>       """
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/interfaces/singular.py
> --- a/sage/interfaces/singular.py     Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/interfaces/singular.py     Thu Apr 19 00:52:33 2007 +0200
> @@ -793,9 +793,9 @@ class SingularElement(ExpectElement):
>          else:
>              P.eval('%s[%s] = %s'%(self.name(), n, value.name()))
>  
> -    def is_zero(self):
> +    def __nonzero__(self):
>          P = self.parent()
> -        return P.eval('%s == 0'%self.name()) == '1'
> +        return P.eval('%s == 0'%self.name()) == '0'
>              
>      def sage_polystring(self):
>       """
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/libs/cf/cf.pyxe
> --- a/sage/libs/cf/cf.pyxe    Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/libs/cf/cf.pyxe    Thu Apr 19 00:52:33 2007 +0200
> @@ -872,15 +872,13 @@ cdef class CanonicalForm:
>          #}embed
>          return bool(CF_isOne(self.thisptr))
>  
> -    def is_zero(CanonicalForm self):
> -        """
> -        This predicate returns true if self represents the zero
> -        element of the current base domain. Like the predicate is_one
> -        using the predicate f.is_zero() is also faster than a
> -        comparison via f == 0.
> +    def __nonzero__(CanonicalForm self):
> +        """
> +        This predicate returns true if self does not represent the zero
> +        element of the current base domain. 
>          """
>          #embed{ int CF_isZero(void *e)
> -        return ((CanonicalForm*)e)->isZero();
> +        return not ((CanonicalForm*)e)->isZero();
>          #}embed
>  
>          return bool(CF_isZero(self.thisptr))
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/matrix/matrix_integer_dense.pyx
> --- a/sage/matrix/matrix_integer_dense.pyx    Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/matrix/matrix_integer_dense.pyx    Thu Apr 19 00:52:33 2007 +0200
> @@ -496,14 +496,14 @@ cdef class Matrix_integer_dense(matrix_d
>      # def _list(self):
>      # def _dict(self):
>  
> -    def is_zero(self):
> +    def __nonzero__(self):
>          cdef mpz_t *a, *b
>          cdef Py_ssize_t i, j
>          cdef int k
>          for i from 0 <= i < self._nrows * self._ncols:
>              if mpz_cmp_si(self._entries[i], 0):
> -                return False
> -        return True
> +                return True
> +        return False
>  
>      def _multiply_linbox(self, Matrix right):
>          """
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/modular/modform/element.py
> --- a/sage/modular/modform/element.py Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/modular/modform/element.py Thu Apr 19 00:52:33 2007 +0200
> @@ -102,8 +102,8 @@ class ModularFormElement(element.HeckeMo
>                    "case not implemented yet."
>          return chi
>      
> -    def is_zero(self):
> -        return self.element().is_zero()
> +    def __nonzero__(self):
> +        return not self.element().is_zero()
>      
>      def level(self):
>          return self.parent().level()
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/contfrac.py
> --- a/sage/rings/contfrac.py  Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/contfrac.py  Thu Apr 19 00:52:33 2007 +0200
> @@ -763,9 +763,9 @@ class ContinuedFraction(FieldElement):
>          """
>          return self._rational_().is_one()
>  
> -    def is_zero(self):
> -        """
> -        Return True if self is zero.
> +    def __nonzero__(self):
> +        """
> +        Return False if self is zero.
>          
>          EXAMPLES:
>              sage: continued_fraction(0).is_zero()
> @@ -773,7 +773,7 @@ class ContinuedFraction(FieldElement):
>              sage: continued_fraction(1).is_zero()
>              False
>          """
> -        return self._rational_().is_zero()
> +        return not self._rational_().is_zero()
>  
>      def _pari_(self):
>          """
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/finite_field_givaro.pyx
> --- a/sage/rings/finite_field_givaro.pyx      Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/finite_field_givaro.pyx      Thu Apr 19 00:52:33 2007 +0200
> @@ -1224,9 +1224,9 @@ cdef class FiniteField_givaroElement(Fin
>          """
>          return (<FiniteField_givaro>self._parent)
>  
> -    def is_zero(FiniteField_givaroElement self):
> +    def __nonzero__(FiniteField_givaroElement self):
>          r"""
> -        Return True if \code{self == k(0)}.
> +        Return True if \code{self != k(0)}.
>  
>          EXAMPLES:
>              sage: k.<a> = GF(3^4); k
> @@ -1236,7 +1236,7 @@ cdef class FiniteField_givaroElement(Fin
>              sage: k(0).is_zero()
>              True        
>          """
> -        return 
> bool((<FiniteField_givaro>self._parent).objectptr.isZero(self.element))
> +        return not 
> bool((<FiniteField_givaro>self._parent).objectptr.isZero(self.element))
>          
>      def is_one(FiniteField_givaroElement self):
>          r"""
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/ideal.py
> --- a/sage/rings/ideal.py     Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/ideal.py     Thu Apr 19 00:52:33 2007 +0200
> @@ -185,8 +185,8 @@ class Ideal_generic(MonoidElement):
>          # check if x, which is assumed to be in the ambient ring, is 
> actually in this ideal.
>          raise NotImplementedError
>  
> -    def is_zero(self):
> -        return self.gens() == [self.ring()(0)]
> +    def __nonzero__(self):
> +        return self.gens() != [self.ring()(0)]
>  
>      def base_ring(self):
>          return self.ring().base_ring()
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/integer.pyx
> --- a/sage/rings/integer.pyx  Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/integer.pyx  Thu Apr 19 00:52:33 2007 +0200
> @@ -1066,9 +1066,6 @@ cdef class Integer(sage.structure.elemen
>      def __long__(self):
>          return mpz_get_pylong(self.value)
>  
> -    def __nonzero__(self):
> -        return not self.is_zero()
> -
>      def __float__(self):
>          return mpz_get_d(self.value)
>  
> @@ -1317,9 +1314,9 @@ cdef class Integer(sage.structure.elemen
>          """
>          return bool(mpz_cmp_si(self.value, 1) == 0)
>  
> -    def is_zero(self):
> +    def __nonzero__(self):
>          r"""
> -        Returns \code{True} if the integers is $0$, otherwise \code{False}.
> +        Returns \code{True} if the integers is not $0$, otherwise 
> \code{False}.
>  
>          EXAMPLES:
>              sage: Integer(1).is_zero()
> @@ -1327,7 +1324,7 @@ cdef class Integer(sage.structure.elemen
>              sage: Integer(0).is_zero()
>              True
>          """
> -        return bool(mpz_cmp_si(self.value, 0) == 0)
> +        return bool(mpz_cmp_si(self.value, 0) != 0)
>  
>      def is_unit(self):
>          r"""
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/integer_mod.pyx
> --- a/sage/rings/integer_mod.pyx      Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/integer_mod.pyx      Thu Apr 19 00:52:33 2007 +0200
> @@ -834,9 +834,9 @@ cdef class IntegerMod_gmp(IntegerMod_abs
>          """
>          return bool(mpz_cmp_si(self.value, 1) == 0)
>  
> -    def is_zero(IntegerMod_gmp self):
> -        """
> -        Returns \code{True} if this is $0$, otherwise \code{False}.
> +    def __nonzero__(IntegerMod_gmp self):
> +        """
> +        Returns \code{True} if this is not $0$, otherwise \code{False}.
>  
>          EXAMPLES:
>              sage: mod(13,5^23).is_zero()
> @@ -844,7 +844,7 @@ cdef class IntegerMod_gmp(IntegerMod_abs
>              sage: (mod(25,5^23)^23).is_zero()
>              True
>          """
> -        return bool(mpz_cmp_si(self.value, 0) == 0)
> +        return bool(mpz_cmp_si(self.value, 0) != 0)
>  
>      def is_unit(self):
>          return bool(self.lift().gcd(self.modulus()) == 1)
> @@ -1159,9 +1159,9 @@ cdef class IntegerMod_int(IntegerMod_abs
>          """
>          return bool(self.ivalue == 1)
>  
> -    def is_zero(IntegerMod_int self):
> -        """
> -        Returns \code{True} if this is $0$, otherwise \code{False}.
> +    def __nonzero__(IntegerMod_int self):
> +        """
> +        Returns \code{True} if this is not $0$, otherwise \code{False}.
>  
>          EXAMPLES:
>              sage: mod(13,5).is_zero()
> @@ -1169,7 +1169,7 @@ cdef class IntegerMod_int(IntegerMod_abs
>              sage: mod(25,5).is_zero()
>              True
>          """
> -        return bool(self.ivalue == 0)
> +        return bool(self.ivalue != 0)
>  
>      def is_unit(IntegerMod_int self):
>          return bool(gcd_int(self.ivalue, self.__modulus.int32) == 1)
> @@ -1670,9 +1670,9 @@ cdef class IntegerMod_int64(IntegerMod_a
>          """
>          return bool(self.ivalue == 1)
>  
> -    def is_zero(IntegerMod_int64 self):
> -        """
> -        Returns \code{True} if this is $0$, otherwise \code{False}.
> +    def __nonzero__(IntegerMod_int64 self):
> +        """
> +        Returns \code{True} if this is not $0$, otherwise \code{False}.
>  
>          EXAMPLES:
>              sage: mod(13,5^10).is_zero()
> @@ -1680,7 +1680,7 @@ cdef class IntegerMod_int64(IntegerMod_a
>              sage: mod(5^12,5^10).is_zero()
>              True
>          """
> -        return bool(self.ivalue == 0)
> +        return bool(self.ivalue != 0)
>  
>      def is_unit(IntegerMod_int64 self):
>          return bool(gcd_int64(self.ivalue, self.__modulus.int64) == 1)
> @@ -2222,4 +2222,4 @@ def slow_lucas(k, P, Q=1):
>      elif k == 1:
>          return P
>      else:
> -        return P*slow_lucas(k-1, P, Q) - Q*slow_lucas(k-2, P, Q)
> \ No newline at end of file
> +        return P*slow_lucas(k-1, P, Q) - Q*slow_lucas(k-2, P, Q)
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/laurent_series_ring_element.py
> --- a/sage/rings/laurent_series_ring_element.py       Wed Apr 18 15:18:44 
> 2007 +0200
> +++ b/sage/rings/laurent_series_ring_element.py       Thu Apr 19 00:52:33 
> 2007 +0200
> @@ -111,7 +111,7 @@ class LaurentSeries(ring_element.RingEle
>          """
>          return self.__u.is_unit()
>  
> -    def is_zero(self):
> +    def __nonzero__(self):
>          """
>          EXAMPLES:
>              sage: x = Frac(QQ[['x']]).0
> @@ -122,7 +122,7 @@ class LaurentSeries(ring_element.RingEle
>              sage: z.is_zero()
>              1
>          """
> -        return self.__u.is_zero()
> +        return not self.__u.is_zero()
>          
>      def _im_gens_(self, codomain, im_gens):
>          return codomain(self(im_gens[0]))
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/multi_polynomial_element.py
> --- a/sage/rings/multi_polynomial_element.py  Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/multi_polynomial_element.py  Thu Apr 19 00:52:33 2007 +0200
> @@ -970,13 +970,13 @@ class MPolynomial_polydict(Polynomial_si
>              return self._richcmp_(right,3)
>          return self._MPolynomial__element != right._MPolynomial__element
>  
> -    def is_zero(self):
> -        """
> -        Returns True if self == 0
> +    def __nonzero__(self):
> +        """
> +        Returns True if self != 0
>  
>          \note{This is much faster than actually writing self == 0}
>          """
> -        return self._MPolynomial__element.dict()=={}
> +        return self._MPolynomial__element.dict()!={}
>  
>      
> ############################################################################
>      # END: Some functions added by Martin Albrecht <[EMAIL PROTECTED]>
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/polynomial_element.pyx
> --- a/sage/rings/polynomial_element.pyx       Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/polynomial_element.pyx       Thu Apr 19 00:52:33 2007 +0200
> @@ -1242,9 +1242,6 @@ cdef class Polynomial(CommutativeAlgebra
>         
>      def is_gen(self):
>          return bool(self._is_gen)
> -
> -    def is_zero(self):
> -        return bool(self.degree() == -1)
>  
>      def leading_coefficient(self):
>          return self[self.degree()]
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/polynomial_pyx.pyx
> --- a/sage/rings/polynomial_pyx.pyx   Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/polynomial_pyx.pyx   Thu Apr 19 00:52:33 2007 +0200
> @@ -1143,8 +1143,8 @@ cdef class Polynomial_rational(sage.stru
>      def degree(self):
>          return self.pq.degree 
>  
> -    def is_zero(self):
> -        return self.pq.degree == -1
> +    def __nonzero__(self):
> +        return self.pq.degree != -1
>  
>      def list(self):
>          return PQ_list(self.pq)
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/power_series_ring_element.py
> --- a/sage/rings/power_series_ring_element.py Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/power_series_ring_element.py Thu Apr 19 00:52:33 2007 +0200
> @@ -604,9 +604,9 @@ class PowerSeries(ring_element.RingEleme
>          # endif
>          return self._mul_(right, prec)
>  
> -    def is_zero(self):
> -        """
> -        Return True if this power series equals 0.
> +    def __nonzero__(self):
> +        """
> +        Return True if this power series doesn't equal 0.
>  
>          EXAMPLES:
>              sage: R.<q> = ZZ[[ ]]; R
> @@ -621,7 +621,7 @@ class PowerSeries(ring_element.RingEleme
>              sage: (0 + O(q^1000)).is_zero()
>              True
>          """
> -        return self.polynomial().is_zero()
> +        return not self.polynomial().is_zero()
>  
>      def is_unit(self):
>          """
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/quotient_ring_element.py
> --- a/sage/rings/quotient_ring_element.py     Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/quotient_ring_element.py     Thu Apr 19 00:52:33 2007 +0200
> @@ -79,8 +79,8 @@ class QuotientRingElement(ring_element.R
>      def lift(self):
>          return self.__rep
>  
> -    def is_zero(self):
> -        return self.__rep in self.parent().defining_ideal()
> +    def __nonzero__(self):
> +        return self.__rep not in self.parent().defining_ideal()
>  
>      def is_unit(self):
>          if self.__rep.is_unit():
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/rational.pyx
> --- a/sage/rings/rational.pyx Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/rational.pyx Thu Apr 19 00:52:33 2007 +0200
> @@ -686,9 +686,6 @@ cdef class Rational(sage.structure.eleme
>          mpq_neg(x.value, self.value)
>          return x
>  
> -    def __nonzero__(self):
> -        return not self.numerator().is_zero()
> -
>      def __abs__(self):
>          cdef Rational x
>          x = <Rational> PY_NEW(Rational)                        
> @@ -1037,8 +1034,8 @@ cdef class Rational(sage.structure.eleme
>      def is_one(self):
>          return bool(mpz_cmp_si(mpq_numref(self.value), 1) == 0)
>  
> -    def is_zero(self):
> -        return bool(mpz_cmp_si(mpq_numref(self.value), 0) == 0)
> +    def __nonzero__(self):
> +        return bool(mpz_cmp_si(mpq_numref(self.value), 0) != 0)
>      
>      cdef _lshift(self, long int exp):
>          r"""
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/rings/sparse_poly.pyx
> --- a/sage/rings/sparse_poly.pyx      Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/rings/sparse_poly.pyx      Thu Apr 19 00:52:33 2007 +0200
> @@ -130,7 +130,7 @@ cdef class Polynomial:
>      def is_irreducible(self):
>          raise NotImplementedError
>  
> -    def is_zero(self):
> +    def __nonzero__(self):
>          raise NotImplementedError
>  
>      def leading_coefficient(self):
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/schemes/elliptic_curves/ell_point.py
> --- a/sage/schemes/elliptic_curves/ell_point.py       Wed Apr 18 15:18:44 
> 2007 +0200
> +++ b/sage/schemes/elliptic_curves/ell_point.py       Thu Apr 19 00:52:33 
> 2007 +0200
> @@ -142,7 +142,7 @@ class EllipticCurvePoint_field(SchemeMor
>          """
>          return self.scheme()
>  
> -    def is_zero(self):
> +    def __nonzero__(self):
>          """
>          Return True if this is the zero point on the curve.
>  
> @@ -156,7 +156,7 @@ class EllipticCurvePoint_field(SchemeMor
>              sage: P.is_zero()
>              False
>          """
> -        return self[2] == 0
> +        return self[2] != 0
>  
>      def is_finite_order(self):
>          """
> diff -r a62ae3f310f2 -r 7a77bea899e0 
> sage/schemes/hyperelliptic_curves/jacobian_morphism.py
> --- a/sage/schemes/hyperelliptic_curves/jacobian_morphism.py  Wed Apr 18 
> 15:18:44 2007 +0200
> +++ b/sage/schemes/hyperelliptic_curves/jacobian_morphism.py  Thu Apr 19 
> 00:52:33 2007 +0200
> @@ -177,5 +177,5 @@ class JacobianMorphism_divisor_class(Sch
>      def __rmul__(self, n):
>          return self.__mul__(n)
>  
> -    def is_zero(self):
> -        return self.__polys[0] == 1
> +    def __nonzero__(self):
> +        return self.__polys[0] != 1
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/structure/element.pyx
> --- a/sage/structure/element.pyx      Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/structure/element.pyx      Thu Apr 19 00:52:33 2007 +0200
> @@ -313,8 +313,21 @@ cdef class Element(sage_object.SageObjec
>          s = str(self)
>          return PyBool_FromLong(s.find("+") == -1 and s.find("-") == -1 and 
> s.find(" ") == -1)
>  
> +    def __nonzero__(self):
> +        """
> +        Return True if self does not equal self.parent()(0).
> +        """
> +        return PyBool_FromLong(self != self._parent(0))
> +
>      def is_zero(self):
> -        return PyBool_FromLong(self == self._parent(0))
> +        """
> +        Return True if self equals self.parent()(0). The default
> +        implementation is to fall back to 'not self.__nonzero__'.
> +
> +        NOTE: Do not re-implement this method in your subclass but
> +        implement __nonzero__ instead.
> +        """
> +        return PyBool_FromLong(not self)
>  
>      def _cmp_(left, right):
>          return left._cmp(right)
> @@ -439,10 +452,7 @@ cdef class ModuleElement(Element):
>      """
>      Generic element of a module.
>      """
> -    ##################################################    
> -    def is_zero(self):
> -        return PyBool_FromLong(self == self._parent(0))
> -
> +    
>      ##################################################
>      # Addition
>      ##################################################    
> @@ -1050,9 +1060,6 @@ def is_RingElement(x):
>  
>  cdef class RingElement(ModuleElement):
>      ##################################################
> -    def is_zero(self):
> -        return PyBool_FromLong(self == self.parent()(0))
> -
>      def is_one(self):
>          return PyBool_FromLong(self == self.parent()(1))
>  
> diff -r a62ae3f310f2 -r 7a77bea899e0 sage/structure/formal_sum.py
> --- a/sage/structure/formal_sum.py    Wed Apr 18 15:18:44 2007 +0200
> +++ b/sage/structure/formal_sum.py    Thu Apr 19 00:52:33 2007 +0200
> @@ -154,13 +154,13 @@ class FormalSum(ModuleElement):
>      def _rmul_(self, s):
>          return self.__class__([(s*c, x) for (c, x) in self], check=False, 
> parent=self.parent())
>  
> -    def is_zero(self):
> +    def __nonzero__(self):
>          if len(self._data) == 0:
> -            return True
> +            return False
>          for c, _ in self._data:
>              if not c.is_zero():
> -                return False
> -        return True
> +                return True
> +        return False
>  
>      def reduce(self):
>          if len(self) == 0:

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to