Author: Alex Gaynor <alex.gay...@gmail.com> Branch: numpy-dtype-refactor Changeset: r49459:9e74aaa8665b Date: 2011-11-15 22:45 -0500 http://bitbucket.org/pypy/pypy/changeset/9e74aaa8665b/
Log: expose more stuff at app level 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 @@ -16,6 +16,12 @@ 'True_': 'types.Bool.True', 'False_': 'types.Bool.False', + + 'generic': 'interp_boxes.W_GenericBox', + 'number': 'interp_boxes.W_NumberBox', + 'integer': 'interp_boxes.W_IntegerBox', + 'signedinteger': 'interp_boxes.W_SignedIntegerBox', + 'int8': 'interp_boxes.W_Int8Box', } # 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 @@ -167,6 +167,10 @@ __module__ = "numpy", ) +W_Int8Box.typedef = TypeDef("int8", W_SignedIntegerBox.typedef, + __module__ = "numpy", +) + if LONG_BIT == 32: long_name = "int32" elif LONG_BIT == 64: diff --git a/pypy/module/micronumpy/interp_dtype.py b/pypy/module/micronumpy/interp_dtype.py --- a/pypy/module/micronumpy/interp_dtype.py +++ b/pypy/module/micronumpy/interp_dtype.py @@ -1,8 +1,9 @@ from pypy.interpreter.baseobjspace import Wrappable from pypy.interpreter.error import OperationError from pypy.interpreter.gateway import interp2app -from pypy.interpreter.typedef import TypeDef, GetSetProperty, interp_attrproperty -from pypy.module.micronumpy import types, signature +from pypy.interpreter.typedef import (TypeDef, GetSetProperty, + interp_attrproperty, interp_attrproperty_w) +from pypy.module.micronumpy import types, signature, interp_boxes from pypy.rlib.objectmodel import specialize from pypy.rlib.rarithmetic import LONG_BIT from pypy.rpython.lltypesystem import lltype, rffi @@ -14,13 +15,14 @@ FLOATINGLTR = "f" class W_Dtype(Wrappable): - def __init__(self, itemtype, num, kind, name, char, alternate_constructors=[]): + def __init__(self, itemtype, num, kind, name, char, w_box_type, alternate_constructors=[]): self.signature = signature.BaseSignature() self.itemtype = itemtype self.num = num self.kind = kind self.name = name self.char = char + self.w_box_type = w_box_type self.alternate_constructors = alternate_constructors def malloc(self, length): @@ -62,6 +64,8 @@ for dtype in cache.builtin_dtypes: if w_dtype in dtype.alternate_constructors: return dtype + if w_dtype is dtype.w_box_type: + return dtype raise OperationError(space.w_TypeError, space.wrap("data type not understood")) def descr_str(self, space): @@ -85,6 +89,7 @@ num = interp_attrproperty("num", cls=W_Dtype), kind = interp_attrproperty("kind", cls=W_Dtype), + type = interp_attrproperty_w("w_box_type", cls=W_Dtype), itemsize = GetSetProperty(W_Dtype.descr_get_itemsize), shape = GetSetProperty(W_Dtype.descr_get_shape), ) @@ -98,6 +103,7 @@ kind=BOOLLTR, name="bool", char="?", + w_box_type = space.gettypefor(interp_boxes.W_BoolBox), alternate_constructors=[space.w_bool], ) self.w_int8dtype = W_Dtype( @@ -106,6 +112,7 @@ kind=SIGNEDLTR, name="int8", char="b", + w_box_type = space.gettypefor(interp_boxes.W_Int8Box) ) self.w_uint8dtype = W_Dtype( types.UInt8(), @@ -113,6 +120,7 @@ kind=UNSIGNEDLTR, name="uint8", char="B", + w_box_type = space.gettypefor(interp_boxes.W_UInt8Box), ) self.w_int16dtype = W_Dtype( types.Int16(), @@ -120,6 +128,7 @@ kind=SIGNEDLTR, name="int16", char="h", + w_box_type = space.gettypefor(interp_boxes.W_Int16Box), ) self.w_uint16dtype = W_Dtype( types.UInt16(), @@ -127,6 +136,7 @@ kind=UNSIGNEDLTR, name="uint16", char="H", + w_box_type = space.gettypefor(interp_boxes.W_UInt16Box), ) self.w_int32dtype = W_Dtype( types.Int32(), @@ -134,13 +144,15 @@ kind=SIGNEDLTR, name="int32", char="i", - ) + w_box_type = space.gettypefor(interp_boxes.W_Int32Box), + ) self.w_uint32dtype = W_Dtype( types.UInt32(), num=6, kind=UNSIGNEDLTR, name="uint32", char="I", + w_box_type = space.gettypefor(interp_boxes.W_UInt32Box), ) if LONG_BIT == 32: name = "int32" @@ -152,6 +164,7 @@ kind=SIGNEDLTR, name=name, char="l", + w_box_type = space.gettypefor(interp_boxes.W_LongBox), alternate_constructors=[space.w_int], ) self.w_ulongdtype = W_Dtype( @@ -160,6 +173,7 @@ kind=UNSIGNEDLTR, name="u" + name, char="L", + w_box_type = space.gettypefor(interp_boxes.W_ULongBox), ) self.w_int64dtype = W_Dtype( types.Int64(), @@ -167,6 +181,7 @@ kind=SIGNEDLTR, name="int64", char="q", + w_box_type = space.gettypefor(interp_boxes.W_Int64Box), alternate_constructors=[space.w_long], ) self.w_uint64dtype = W_Dtype( @@ -175,6 +190,7 @@ kind=UNSIGNEDLTR, name="uint64", char="Q", + w_box_type = space.gettypefor(interp_boxes.W_UInt64Box), ) self.w_float32dtype = W_Dtype( types.Float32(), @@ -182,6 +198,7 @@ kind=FLOATINGLTR, name="float32", char="f", + w_box_type = space.gettypefor(interp_boxes.W_Float32Box), ) self.w_float64dtype = W_Dtype( types.Float64(), @@ -189,6 +206,7 @@ kind=FLOATINGLTR, name="float64", char="d", + w_box_type = space.gettypefor(interp_boxes.W_Float64Box), alternate_constructors=[space.w_float], ) 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 @@ -165,3 +165,13 @@ # You can't subclass dtype raises(TypeError, type, "Foo", (dtype,), {}) + +class AppTestTypes(BaseNumpyAppTest): + def test_int8(self): + import numpy + + assert numpy.int8.mro() == [numpy.int8, numpy.signedinteger, numpy.integer, numpy.number, numpy.generic, object] + + a = numpy.array([1, 2, 3], numpy.int8) + assert type(a[1]) is numpy.int8 + assert numpy.dtype("int8").type is numpy.int8 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit