[pypy-commit] pypy default: fix real/imag on numpy scalars
bdkearns
noreply at buildbot.pypy.org
Tue Feb 25 03:59:29 CET 2014
Author: Brian Kearns <bdkearns at gmail.com>
Branch:
Changeset: r69385:96340d2a63eb
Date: 2014-02-24 19:53 -0500
http://bitbucket.org/pypy/pypy/changeset/96340d2a63eb/
Log: fix real/imag on numpy scalars
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
@@ -352,6 +352,12 @@
w_meth = space.getattr(self.descr_ravel(space), space.wrap('reshape'))
return space.call_args(w_meth, __args__)
+ def descr_get_real(self, space):
+ return self.get_dtype(space).itemtype.real(self)
+
+ def descr_get_imag(self, space):
+ return self.get_dtype(space).itemtype.imag(self)
+
w_flags = None
def descr_get_flags(self, space):
if self.w_flags is None:
@@ -423,25 +429,13 @@
return space.call_method(self.item(space), 'as_integer_ratio')
class W_ComplexFloatingBox(W_InexactBox):
- def descr_get_real(self, space):
- dtype = self._COMPONENTS_BOX._get_dtype(space)
- box = self.convert_real_to(dtype)
- assert isinstance(box, self._COMPONENTS_BOX)
- return space.wrap(box)
-
- def descr_get_imag(self, space):
- dtype = self._COMPONENTS_BOX._get_dtype(space)
- box = self.convert_imag_to(dtype)
- assert isinstance(box, self._COMPONENTS_BOX)
- return space.wrap(box)
+ pass
class W_Complex64Box(ComplexBox, W_ComplexFloatingBox):
descr__new__, _get_dtype, descr_reduce = new_dtype_getter("complex64")
- _COMPONENTS_BOX = W_Float32Box
class W_Complex128Box(ComplexBox, W_ComplexFloatingBox):
descr__new__, _get_dtype, descr_reduce = new_dtype_getter("complex128")
- _COMPONENTS_BOX = W_Float64Box
if long_double_size in (8, 12, 16):
class W_FloatLongBox(W_FloatingBox, PrimitiveBox):
@@ -449,7 +443,6 @@
class W_ComplexLongBox(ComplexBox, W_ComplexFloatingBox):
descr__new__, _get_dtype, descr_reduce = new_dtype_getter(NPY.CLONGDOUBLELTR)
- _COMPONENTS_BOX = W_FloatLongBox
class W_FlexibleBox(W_GenericBox):
_attrs_ = ['arr', 'ofs', 'dtype']
@@ -635,6 +628,8 @@
strides = GetSetProperty(W_GenericBox.descr_get_shape),
ndim = GetSetProperty(W_GenericBox.descr_get_ndim),
T = GetSetProperty(W_GenericBox.descr_self),
+ real = GetSetProperty(W_GenericBox.descr_get_real),
+ imag = GetSetProperty(W_GenericBox.descr_get_imag),
flags = GetSetProperty(W_GenericBox.descr_get_flags),
)
@@ -768,16 +763,12 @@
__new__ = interp2app(W_Complex64Box.descr__new__.im_func),
__reduce__ = interp2app(W_Complex64Box.descr_reduce),
__complex__ = interp2app(W_GenericBox.item),
- real = GetSetProperty(W_ComplexFloatingBox.descr_get_real),
- imag = GetSetProperty(W_ComplexFloatingBox.descr_get_imag),
)
W_Complex128Box.typedef = TypeDef("complex128", (W_ComplexFloatingBox.typedef, complex_typedef),
__module__ = "numpy",
__new__ = interp2app(W_Complex128Box.descr__new__.im_func),
__reduce__ = interp2app(W_Complex128Box.descr_reduce),
- real = GetSetProperty(W_ComplexFloatingBox.descr_get_real),
- imag = GetSetProperty(W_ComplexFloatingBox.descr_get_imag),
)
if long_double_size in (8, 12, 16):
@@ -792,8 +783,6 @@
__new__ = interp2app(W_ComplexLongBox.descr__new__.im_func),
__reduce__ = interp2app(W_ComplexLongBox.descr_reduce),
__complex__ = interp2app(W_GenericBox.item),
- real = GetSetProperty(W_ComplexFloatingBox.descr_get_real),
- imag = GetSetProperty(W_ComplexFloatingBox.descr_get_imag),
)
W_FlexibleBox.typedef = TypeDef("flexible", W_GenericBox.typedef,
diff --git a/pypy/module/micronumpy/test/test_scalar.py b/pypy/module/micronumpy/test/test_scalar.py
--- a/pypy/module/micronumpy/test/test_scalar.py
+++ b/pypy/module/micronumpy/test/test_scalar.py
@@ -171,6 +171,18 @@
assert b == v
raises(IndexError, "v['blah']")
+ def test_realimag(self):
+ import numpy as np
+ a = np.int64(2)
+ assert a.real == 2
+ assert a.imag == 0
+ a = np.float64(2.5)
+ assert a.real == 2.5
+ assert a.imag == 0.0
+ a = np.complex64(2.5-1.5j)
+ assert a.real == 2.5
+ assert a.imag == -1.5
+
def test_view(self):
import numpy as np
import sys
diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -10,7 +10,7 @@
from pypy.module.micronumpy.base import W_NDimArray
-class TestNumpyJIt(LLJitMixin):
+class TestNumpyJit(LLJitMixin):
graph = None
interp = None
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
@@ -1594,7 +1594,7 @@
class ComplexLong(ComplexFloating, BaseType):
T = rffi.DOUBLE
BoxType = interp_boxes.W_ComplexLongBox
- ComponentBoxType = interp_boxes.W_Float64Box
+ ComponentBoxType = interp_boxes.W_FloatLongBox
elif interp_boxes.long_double_size in (12, 16):
class FloatLong(BaseType, Float):
More information about the pypy-commit
mailing list