Author: Alex Gaynor <alex.gay...@gmail.com> Branch: numpy-dtype-refactor Changeset: r49460:a099f70075f5 Date: 2011-11-16 00:23 -0500 http://bitbucket.org/pypy/pypy/changeset/a099f70075f5/
Log: allowisntantiating numpy boxes from applevel 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,4 +1,5 @@ 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.objspace.std.inttype import int_typedef @@ -27,6 +28,17 @@ class W_GenericBox(Wrappable): _attrs_ = () + def descr__new__(space, w_subtype, w_value): + from pypy.module.micronumpy.interp_dtype import get_dtype_cache + # XXX: not correct if w_subtype is a user defined subclass of a builtin + # type, this whole thing feels a little wrong. + for dtype in get_dtype_cache(space).builtin_dtypes: + if w_subtype is dtype.w_box_type: + return dtype.coerce(space, w_value) + raise operationerrfmt(space.w_TypeError, "cannot create '%s' instances", + w_subtype.get_module_type_name() + ) + def descr_repr(self, space): return space.wrap(self.get_dtype(space).itemtype.str_format(self)) @@ -87,7 +99,7 @@ pass class W_Int8Box(W_SignedIntegerBox, PrimitiveBox): - pass + get_dtype = dtype_getter("int8") class W_UInt8Box(W_UnsignedIntgerBox, PrimitiveBox): pass @@ -133,6 +145,7 @@ W_GenericBox.typedef = TypeDef("generic", __module__ = "numpy", + __new__ = interp2app(W_GenericBox.descr__new__.im_func), __repr__ = interp2app(W_GenericBox.descr_repr), __int__ = interp2app(W_GenericBox.descr_int), __float__ = interp2app(W_GenericBox.descr_float), @@ -171,6 +184,26 @@ __module__ = "numpy", ) +W_UInt8Box.typedef = TypeDef("uint8", W_UnsignedIntgerBox.typedef, + __module__ = "numpy", +) + +W_Int16Box.typedef = TypeDef("int16", W_SignedIntegerBox.typedef, + __module__ = "numpy", +) + +W_UInt16Box.typedef = TypeDef("uint16", W_UnsignedIntgerBox.typedef, + __module__ = "numpy", +) + +W_Int32Box.typedef = TypeDef("int32", W_SignedIntegerBox.typedef, + __module__ = "numpy", +) + +W_UInt32Box.typedef = TypeDef("uint32", W_UnsignedIntgerBox.typedef, + __module__ = "numpy", +) + if LONG_BIT == 32: long_name = "int32" elif LONG_BIT == 64: @@ -179,6 +212,18 @@ __module__ = "numpy", ) +W_ULongBox.typedef = TypeDef("u" + long_name, W_UnsignedIntgerBox.typedef, + __module__ = "numpy", +) + W_Int64Box.typedef = TypeDef("int64", (W_SignedIntegerBox.typedef,) + MIXIN_64, __module__ = "numpy", +) + +W_UInt64Box.typedef = TypeDef("uint64", W_UnsignedIntgerBox.typedef, + __module__ = "numpy", +) + +W_InexactBox.typedef = TypeDef("inexact", W_NumberBox.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 @@ -167,6 +167,14 @@ raises(TypeError, type, "Foo", (dtype,), {}) class AppTestTypes(BaseNumpyAppTest): + def test_abstract_types(self): + import numpy + raises(TypeError, numpy.generic, 0) + raises(TypeError, numpy.number, 0) + raises(TypeError, numpy.integer, 0) + exc = raises(TypeError, numpy.signedinteger, 0) + assert str(exc.value) == "cannot create 'numpy.signedinteger' instances" + def test_int8(self): import numpy @@ -175,3 +183,9 @@ a = numpy.array([1, 2, 3], numpy.int8) assert type(a[1]) is numpy.int8 assert numpy.dtype("int8").type is numpy.int8 + + x = numpy.int8(128) + assert x == -128 + assert x != 128 + assert type(x) is numpy.int8 + assert repr(x) == "-128" \ No newline at end of file _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit