[Python-3000-checkins] r59390 - python/branches/py3k/Lib/numbers.py

guido.van.rossum python-3000-checkins at python.org
Thu Dec 6 18:45:33 CET 2007


Author: guido.van.rossum
Date: Thu Dec  6 18:45:33 2007
New Revision: 59390

Modified:
   python/branches/py3k/Lib/numbers.py
Log:
Small set of updates (with Jeffrey's OK).


Modified: python/branches/py3k/Lib/numbers.py
==============================================================================
--- python/branches/py3k/Lib/numbers.py	(original)
+++ python/branches/py3k/Lib/numbers.py	Thu Dec  6 18:45:33 2007
@@ -43,6 +43,7 @@
 
 Inexact.register(complex)
 Inexact.register(float)
+# Inexact.register(decimal.Decimal)
 
 
 class Complex(Number):
@@ -97,7 +98,7 @@
 
     def __pos__(self):
         """+self"""
-        return self
+        raise NotImplementedError
 
     def __sub__(self, other):
         """self - other"""
@@ -119,7 +120,7 @@
 
     @abstractmethod
     def __div__(self, other):
-        """self / other"""
+        """self / other; should promote to float or complex when necessary."""
         raise NotImplementedError
 
     @abstractmethod
@@ -129,7 +130,7 @@
 
     @abstractmethod
     def __pow__(self, exponent):
-        """Like division, self**exponent should promote to complex when necessary."""
+        """self**exponent; should promote to float or complex when necessary."""
         raise NotImplementedError
 
     @abstractmethod
@@ -152,9 +153,7 @@
         """self == other"""
         raise NotImplementedError
 
-    def __ne__(self, other):
-        """self != other"""
-        return not (self == other)
+    # __ne__ is inherited from object and negates whatever __eq__ does.
 
 Complex.register(complex)
 
@@ -180,8 +179,30 @@
         """trunc(self): Truncates self to an Integral.
 
         Returns an Integral i such that:
-          * i>0 iff self>0
-          * abs(i) <= abs(self).
+          * i>0 iff self>0;
+          * abs(i) <= abs(self);
+          * for any Integral j satisfying the first two conditions,
+            abs(i) >= abs(j) [i.e. i has "maximal" abs among those].
+        i.e. "truncate towards 0".
+        """
+        raise NotImplementedError
+
+    @abstractmethod
+    def __floor__(self):
+        """Finds the greatest Integral <= self."""
+        raise NotImplementedError
+
+    @abstractmethod
+    def __ceil__(self):
+        """Finds the least Integral >= self."""
+        raise NotImplementedError
+
+    @abstractmethod
+    def __round__(self, ndigits:"Integral"=None):
+        """Rounds self to ndigits decimal places, defaulting to 0.
+
+        If ndigits is omitted or None, returns an Integral, otherwise
+        returns a Real. Rounds half toward even.
         """
         raise NotImplementedError
 
@@ -241,7 +262,7 @@
     @property
     def real(self):
         """Real numbers are their real component."""
-        return self
+        return +self
 
     @property
     def imag(self):
@@ -250,9 +271,10 @@
 
     def conjugate(self):
         """Conjugate is a no-op for Reals."""
-        return self
+        return +self
 
 Real.register(float)
+# Real.register(decimal.Decimal)
 
 
 class Rational(Real, Exact):
@@ -358,7 +380,7 @@
     @property
     def numerator(self):
         """Integers are their own numerators."""
-        return self
+        return +self
 
     @property
     def denominator(self):


More information about the Python-3000-checkins mailing list