[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