[pypy-commit] pypy numpy-dtype-refactor: expose some more stuff at app-levle

alex_gaynor noreply at buildbot.pypy.org
Wed Nov 16 23:06:30 CET 2011


Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: numpy-dtype-refactor
Changeset: r49482:64e5eaa5e5ba
Date: 2011-11-16 17:06 -0500
http://bitbucket.org/pypy/pypy/changeset/64e5eaa5e5ba/

Log:	expose some more stuff at app-levle

diff --git a/pypy/module/micronumpy/__init__.py b/pypy/module/micronumpy/__init__.py
--- a/pypy/module/micronumpy/__init__.py
+++ b/pypy/module/micronumpy/__init__.py
@@ -21,7 +21,11 @@
         'number': 'interp_boxes.W_NumberBox',
         'integer': 'interp_boxes.W_IntegerBox',
         'signedinteger': 'interp_boxes.W_SignedIntegerBox',
+        'bool_': 'interp_boxes.W_BoolBox',
         'int8': 'interp_boxes.W_Int8Box',
+        'inexact': 'interp_boxes.W_InexactBox',
+        'floating': 'interp_boxes.W_FloatingBox',
+        'float64': 'interp_boxes.W_Float64Box',
     }
 
     # ufuncs
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
@@ -2,6 +2,7 @@
 from pypy.interpreter.error import operationerrfmt
 from pypy.interpreter.gateway import interp2app
 from pypy.interpreter.typedef import TypeDef
+from pypy.objspace.std.floattype import float_typedef
 from pypy.objspace.std.inttype import int_typedef
 from pypy.objspace.std.typeobject import W_TypeObject
 from pypy.rlib.rarithmetic import LONG_BIT
@@ -41,6 +42,9 @@
             w_subtype.get_module_type_name()
         )
 
+    def descr_str(self, space):
+        return self.descr_repr(space)
+
     def descr_repr(self, space):
         return space.wrap(self.get_dtype(space).itemtype.str_format(self))
 
@@ -54,6 +58,10 @@
         assert isinstance(box, W_Float64Box)
         return space.wrap(box.value)
 
+    def descr_nonzero(self, space):
+        dtype = self.get_dtype(space)
+        return space.wrap(dtype.itemtype.bool(self))
+
     def _binop_impl(ufunc_name):
         def impl(self, space, w_other):
             from pypy.module.micronumpy import interp_ufuncs
@@ -77,7 +85,11 @@
     descr_mul = _binop_impl("multiply")
     descr_div = _binop_impl("divide")
     descr_eq = _binop_impl("equal")
+    descr_ne = _binop_impl("not_equal")
     descr_lt = _binop_impl("less")
+    descr_le = _binop_impl("less_equal")
+    descr_gt = _binop_impl("greater")
+    descr_ge = _binop_impl("greater_equal")
 
     descr_rmul = _binop_right_impl("multiply")
 
@@ -86,7 +98,7 @@
 
 
 class W_BoolBox(W_GenericBox, PrimitiveBox):
-    pass
+    get_dtype = dtype_getter("bool")
 
 class W_NumberBox(W_GenericBox):
     _attrs_ = ()
@@ -148,9 +160,11 @@
     __module__ = "numpy",
 
     __new__ = interp2app(W_GenericBox.descr__new__.im_func),
+    __str__ = interp2app(W_GenericBox.descr_str),
     __repr__ = interp2app(W_GenericBox.descr_repr),
     __int__ = interp2app(W_GenericBox.descr_int),
     __float__ = interp2app(W_GenericBox.descr_float),
+    __nonzero__ = interp2app(W_GenericBox.descr_nonzero),
 
     __add__ = interp2app(W_GenericBox.descr_add),
     __sub__ = interp2app(W_GenericBox.descr_sub),
@@ -160,7 +174,11 @@
     __rmul__ = interp2app(W_GenericBox.descr_rmul),
 
     __eq__ = interp2app(W_GenericBox.descr_eq),
+    __ne__ = interp2app(W_GenericBox.descr_ne),
     __lt__ = interp2app(W_GenericBox.descr_lt),
+    __le__ = interp2app(W_GenericBox.descr_le),
+    __gt__ = interp2app(W_GenericBox.descr_gt),
+    __ge__ = interp2app(W_GenericBox.descr_ge),
 
     __neg__ = interp2app(W_GenericBox.descr_neg),
     __abs__ = interp2app(W_GenericBox.descr_abs),
@@ -228,4 +246,16 @@
 
 W_InexactBox.typedef = TypeDef("inexact", W_NumberBox.typedef,
     __module__ = "numpy",
+)
+
+W_FloatingBox.typedef = TypeDef("floating", W_InexactBox.typedef,
+    __module__ = "numpy",
+)
+
+W_Float32Box.typedef = TypeDef("float32", W_FloatingBox.typedef,
+    __module__ = "numpy",
+)
+
+W_Float64Box.typedef = TypeDef("float64", (W_FloatingBox.typedef, float_typedef),
+    __module__ = "numpy",
 )
\ No newline at end of file
diff --git a/pypy/module/micronumpy/test/test_dtypes.py b/pypy/module/micronumpy/test/test_dtypes.py
--- a/pypy/module/micronumpy/test/test_dtypes.py
+++ b/pypy/module/micronumpy/test/test_dtypes.py
@@ -175,6 +175,17 @@
         exc = raises(TypeError, numpy.signedinteger, 0)
         assert str(exc.value) == "cannot create 'numpy.signedinteger' instances"
 
+        raises(TypeError, numpy.floating, 0)
+        raises(TypeError, numpy.inexact, 0)
+
+    def test_bool(self):
+        import numpy
+
+        assert numpy.bool_.mro() == [numpy.bool_, numpy.generic, object]
+        assert numpy.bool_(3) is numpy.True_
+        assert numpy.bool_("") is numpy.False_
+        assert type(numpy.True_) is type(numpy.False_) is numpy.bool_
+
     def test_int8(self):
         import numpy
 
@@ -188,4 +199,15 @@
         assert x == -128
         assert x != 128
         assert type(x) is numpy.int8
-        assert repr(x) == "-128"
\ No newline at end of file
+        assert repr(x) == "-128"
+
+    def test_float64(self):
+        import numpy
+
+        assert numpy.float64.mro() == [numpy.float64, numpy.floating, numpy.inexact, numpy.number, numpy.generic, float, object]
+
+        a  = numpy.array([1, 2, 3], numpy.float64)
+        assert type(a[1]) is numpy.float64
+        assert numpy.dtype(float).type is numpy.float64
+
+        assert numpy.float64(2.0) == 2.0


More information about the pypy-commit mailing list