[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