[pypy-svn] r23255 - pypy/dist/pypy/objspace/std

stephan at codespeak.net stephan at codespeak.net
Sun Feb 12 14:45:51 CET 2006


Author: stephan
Date: Sun Feb 12 14:45:49 2006
New Revision: 23255

Modified:
   pypy/dist/pypy/objspace/std/complexobject.py
   pypy/dist/pypy/objspace/std/complextype.py
Log:
pypy-c can be build now with WITHCOMPLEX (model.py) enabled. But it's still not fully conformant :(


Modified: pypy/dist/pypy/objspace/std/complexobject.py
==============================================================================
--- pypy/dist/pypy/objspace/std/complexobject.py	(original)
+++ pypy/dist/pypy/objspace/std/complexobject.py	Sun Feb 12 14:45:49 2006
@@ -18,8 +18,9 @@
         w_self.realval = float(realval)
         w_self.imagval = float(imgval)
 
-    def __repr__(self):
-        return "<W_ComplexObject(%f,%f)>" % (self.realval, self.imagval)
+    def __repr__(w_self):
+        """ representation for debugging purposes """
+        return "<W_ComplexObject(%f,%f)>" % (w_self.realval, w_self.imagval)
 
 registerimplementation(W_ComplexObject)
 
@@ -73,7 +74,7 @@
         rr, ir = c_1
     elif r1 == 0.0 and i1 == 0.0:
         if i2 != 0.0 or r2 < 0.0:
-            raise ZeroDivisionError("0.0 to a negative or complex power")
+            raise ZeroDivisionError
         rr, ir = (0.0, 0.0)
     else:
         vabs = math.hypot(r1,i1)
@@ -144,24 +145,26 @@
         combined = -2
     return space.newint(combined)
 
-def _w2t(w_complex):
+def _w2t(space, w_complex):
+    "convert an interplevel complex object to a tuple representation"
+    assert space.is_true(space.isinstance(w_complex, space.w_complex))
     return w_complex.realval, w_complex.imagval
 
 def _t2w(space, c):
     return W_ComplexObject(space, c[0], c[1])
 
 def add__Complex_Complex(space, w_complex1, w_complex2):
-    return _t2w(space, _sum(_w2t(w_complex1), _w2t(w_complex2)))
+    return _t2w(space, _sum(_w2t(space, w_complex1), _w2t(space, w_complex2)))
 
 def sub__Complex_Complex(space, w_complex1, w_complex2):
-    return _t2w(space, _diff(_w2t(w_complex1), _w2t(w_complex2)))
+    return _t2w(space, _diff(_w2t(space, w_complex1), _w2t(space, w_complex2)))
 
 def mul__Complex_Complex(space, w_complex1, w_complex2):
-    return _t2w(space, _prod(_w2t(w_complex1), _w2t(w_complex2)))
+    return _t2w(space, _prod(_w2t(space, w_complex1), _w2t(space, w_complex2)))
 
 def div__Complex_Complex(space, w_complex1, w_complex2):
     try:
-        return _t2w(space, _quot(_w2t(w_complex1), _w2t(w_complex2)))
+        return _t2w(space, _quot(_w2t(space, w_complex1), _w2t(space, w_complex2)))
     except ZeroDivisionError, e:
         raise OperationError(space.w_ZeroDivisionError, space.wrap(str(e)))
 
@@ -169,28 +172,28 @@
 
 def mod__Complex_Complex(space, w_complex1, w_complex2):
     try:
-        div = _quot(_w2t(w_complex1), _w2t(w_complex2))
+        div = _quot(_w2t(space, w_complex1), _w2t(space, w_complex2))
     except ZeroDivisionError, e:
         raise OperationError(space.w_ZeroDivisionError, space.wrap("complex remainder"))
     div = (math.floor(div[0]), 0.0)
-    mod = _diff(_w2t(w_complex1), _prod(_w2t(w_complex2), div))
+    mod = _diff(_w2t(space, w_complex1), _prod(_w2t(space, w_complex2), div))
 
     return _t2w(space, mod)
 
 def divmod__Complex_Complex(space, w_complex1, w_complex2):
     try:
-        div = _quot(_w2t(w_complex1), _w2t(w_complex2))
+        div = _quot(_w2t(space, w_complex1), _w2t(space, w_complex2))
     except ZeroDivisionError, e:
         raise OperationError(space.w_ZeroDivisionError, space.wrap("complex divmod()"))
     div = (math.floor(div[0]), 0.0)
-    mod = _diff(_w2t(w_complex1), _prod(_w2t(w_complex2), div))
+    mod = _diff(_w2t(space, w_complex1), _prod(_w2t(space, w_complex2), div))
     w_div = _t2w(space, div)
     w_mod = _t2w(space, mod)
     return space.newtuple([w_div, w_mod])
 
 def floordiv__Complex_Complex(space, w_complex1, w_complex2):
     try:
-        div = _quot(_w2t(w_complex1), _w2t(w_complex2))
+        div = _quot(_w2t(space, w_complex1), _w2t(space, w_complex2))
     except ZeroDivisionError, e:
         raise OperationError(space.w_ZeroDivisionError, space.wrap("complex floordiv()"))
     div = (math.floor(div[0]), 0.0)
@@ -200,8 +203,8 @@
     if not isinstance(thirdArg, W_NoneObject):
         raise OperationError(space.w_ValueError, space.wrap('complex modulo'))
     try:
-        v = _w2t(w_complex1)
-        exponent = _w2t(w_complex2)
+        v = _w2t(space, w_complex1)
+        exponent = _w2t(space, w_complex2)
         int_exponent = int(exponent[0])
         if exponent[1] == 0.0 and exponent[0] == int_exponent:
             p = _powi(v, int_exponent)

Modified: pypy/dist/pypy/objspace/std/complextype.py
==============================================================================
--- pypy/dist/pypy/objspace/std/complextype.py	(original)
+++ pypy/dist/pypy/objspace/std/complextype.py	Sun Feb 12 14:45:49 2006
@@ -12,7 +12,7 @@
 def _split_complex(s):
     slen = len(s)
     if slen == 0:
-        raise ValueError('complex() arg is a malformed string')
+        raise ValueError
     realstart = 0
     realstop = 0
     imagstart = 0
@@ -42,7 +42,7 @@
     if i >= slen:
         newstop = realstop - 1
         if newstop < 0:
-            raise ValueError('complex() arg is a malformed string')
+            raise ValueError
         if s[newstop] in ('j','J'):
             if realstart == newstop:
                 imagpart = '1.0'
@@ -56,14 +56,14 @@
     if s[i] == '-' or s[i] == '+':
         imagsign = s[i]
     if imagsign == ' ':
-        raise ValueError('complex() arg is a malformed string')
+        raise ValueError
 
     i+=1
     # whitespace
     while i < slen and s[i] == ' ':
         i += 1
     if i >= slen:
-        raise ValueError('complex() arg is a malformed string')
+        raise ValueError
 
     imagstart = i
     pc = s[i]
@@ -75,16 +75,16 @@
 
     imagstop = i - 1
     if imagstop < 0:
-        raise ValueError('complex() arg is a malformed string')
+        raise ValueError
     if s[imagstop] not in ('j','J'):
-        raise ValueError('complex() arg is a malformed string')
+        raise ValueError
     if imagstop < imagstart:
-        raise ValueError('complex() arg is a malformed string')
+        raise ValueError
 
     while i<slen and s[i] == ' ':
         i += 1
     if i <  slen:
-        raise ValueError('complex() arg is a malformed string')
+        raise ValueError
 
     realpart = s[realstart:realstop]
     if imagstart == imagstop:
@@ -152,12 +152,8 @@
     else:
         if space.eq_w(w_imag,space.w_None):
             w_imag = space.wrap(0.0)
-        try:
-
-            realval = space.float_w(w_real)
-            imagval = space.float_w(w_imag)
-        except ValueError, e:
-            raise OperationError(space.w_ValueError, space.wrap(e.msg))
+        realval = space.float_w(w_real)
+        imagval = space.float_w(w_imag)
     w_obj = space.allocate_instance(W_ComplexObject, w_complextype)
     W_ComplexObject.__init__(w_obj, space, realval, imagval)
 



More information about the Pypy-commit mailing list