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

Reply via email to