[pypy-commit] pypy numpy-dtype-refactor-complex: added real and imag descriptors to complex objs
alex_gaynor
noreply at buildbot.pypy.org
Mon Dec 5 19:57:55 CET 2011
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: numpy-dtype-refactor-complex
Changeset: r50176:7a810c2bdf0d
Date: 2011-12-05 13:51 -0500
http://bitbucket.org/pypy/pypy/changeset/7a810c2bdf0d/
Log: added real and imag descriptors to complex objs
diff --git a/pypy/module/micronumpy/interp_boxes.py b/pypy/module/micronumpy/interp_boxes.py
--- a/pypy/module/micronumpy/interp_boxes.py
+++ b/pypy/module/micronumpy/interp_boxes.py
@@ -1,7 +1,7 @@
from pypy.interpreter.baseobjspace import Wrappable
from pypy.interpreter.error import operationerrfmt
from pypy.interpreter.gateway import interp2app
-from pypy.interpreter.typedef import TypeDef
+from pypy.interpreter.typedef import TypeDef, GetSetProperty
from pypy.objspace.std.complextype import complex_typedef
from pypy.objspace.std.floattype import float_typedef
from pypy.objspace.std.inttype import int_typedef
@@ -65,6 +65,14 @@
dtype = self.get_dtype(space)
return space.wrap(dtype.itemtype.bool(self))
+ def descr_get_real(self, space):
+ dtype = self.get_dtype(space)
+ return dtype.itemtype.real(self)
+
+ def descr_get_imag(self, space):
+ dtype = self.get_dtype(space)
+ return dtype.itemtype.imag(self)
+
def _binop_impl(ufunc_name):
def impl(self, space, w_other):
from pypy.module.micronumpy import interp_ufuncs
@@ -197,6 +205,9 @@
__neg__ = interp2app(W_GenericBox.descr_neg),
__abs__ = interp2app(W_GenericBox.descr_abs),
+
+ real = GetSetProperty(W_GenericBox.descr_get_real),
+ imag = GetSetProperty(W_GenericBox.descr_get_imag),
)
W_BoolBox.typedef = TypeDef("bool_", W_GenericBox.typedef,
diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py
--- a/pypy/module/micronumpy/types.py
+++ b/pypy/module/micronumpy/types.py
@@ -34,6 +34,15 @@
)
return dispatcher
+def raw_unary_op(func):
+ specialize.argtype(1)
+ @functools.wraps(func)
+ def dispatcher(self, v):
+ return func(self,
+ self.for_computation(self.unbox(v))
+ )
+ return dispatcher
+
def raw_binary_op(func):
specialize.argtype(1, 2)(func)
@functools.wraps(func)
@@ -429,20 +438,28 @@
def __init__(self, itemtypes):
BaseCompositeType.__init__(self, itemtypes)
- [self.real, self.imag] = self.itemtypes
+ [self.real_type, self.imag_type] = self.itemtypes
def coerce(self, space, w_item):
if isinstance(w_item, self.BoxType):
return w_item
real, imag = space.unpackcomplex(w_item)
- return self.box([self.real.box(real), self.imag.box(imag)])
-
+ return self.box([self.real_type.box(real), self.imag_type.box(imag)])
+
def for_computation(self, (real, imag)):
return [
- self.real.for_computation(self.real.unbox(real)),
- self.imag.for_computation(self.imag.unbox(imag)),
+ self.real_type.for_computation(self.real_type.unbox(real)),
+ self.imag_type.for_computation(self.imag_type.unbox(imag)),
]
@raw_binary_op
def eq(self, (real1, imag1), (real2, imag2)):
return real1 == real2 and imag1 == imag2
+
+ @raw_unary_op
+ def real(self, (real, imag)):
+ return self.real_type.box(real)
+
+ @raw_unary_op
+ def imag(self, (real, imag)):
+ return self.imag_type.box(imag)
\ No newline at end of file
More information about the pypy-commit
mailing list