Author: Ronan Lamy <[email protected]>
Branch: longdouble2
Changeset: r62879:a23ba7c93c56
Date: 2013-03-29 16:05 +0000
http://bitbucket.org/pypy/pypy/changeset/a23ba7c93c56/
Log: Store the unwrappped BoxType on the dtype.
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
@@ -50,7 +50,7 @@
class W_Dtype(W_Root):
_immutable_fields_ = ["itemtype", "num", "kind"]
- def __init__(self, itemtype, num, kind, name, char, w_box_type,
+ def __init__(self, itemtype, num, kind, name, char, BoxType,
alternate_constructors=[], aliases=[],
fields=None, fieldnames=None, native=True):
self.itemtype = itemtype
@@ -58,7 +58,7 @@
self.kind = kind
self.name = name
self.char = char
- self.w_box_type = w_box_type
+ self.BoxType = BoxType
self.alternate_constructors = alternate_constructors
self.aliases = aliases
self.fields = fields
@@ -140,6 +140,9 @@
return space.w_None
return space.newtuple([space.wrap(name) for name in self.fieldnames])
+ def descr_get_type(self, space):
+ return space.gettypefor(self.BoxType)
+
@unwrap_spec(item=str)
def descr_getitem(self, space, item):
if self.fields is None:
@@ -183,10 +186,10 @@
return self.itemtype.get_element_size()
class W_ComplexDtype(W_Dtype):
- def __init__(self, itemtype, num, kind, name, char, w_box_type,
+ def __init__(self, itemtype, num, kind, name, char, BoxType,
alternate_constructors=[], aliases=[],
fields=None, fieldnames=None, native=True, float_type=None):
- W_Dtype.__init__(self, itemtype, num, kind, name, char, w_box_type,
+ W_Dtype.__init__(self, itemtype, num, kind, name, char, BoxType,
alternate_constructors=alternate_constructors,
aliases=aliases,
fields=fields, fieldnames=fieldnames, native=native)
self.float_type = float_type
@@ -223,7 +226,7 @@
fieldnames.append(fldname)
itemtype = types.RecordType(ofs_and_items, offset)
return W_Dtype(itemtype, 20, VOIDLTR, "void" + str(8 *
itemtype.get_element_size()),
- "V", space.gettypefor(interp_boxes.W_VoidBox),
fields=fields,
+ "V", interp_boxes.W_VoidBox, fields=fields,
fieldnames=fieldnames)
def dtype_from_dict(space, w_dict):
@@ -245,11 +248,11 @@
itemtype = types.StringType(size)
basename = 'string'
num = 18
- w_box_type = space.gettypefor(interp_boxes.W_StringBox)
+ BoxType = interp_boxes.W_StringBox
elif char == 'V':
num = 20
basename = 'void'
- w_box_type = space.gettypefor(interp_boxes.W_VoidBox)
+ BoxType = interp_boxes.W_VoidBox
raise OperationError(space.w_NotImplementedError, space.wrap(
"pure void dtype"))
else:
@@ -257,10 +260,10 @@
basename = 'unicode'
itemtype = types.UnicodeType(size)
num = 19
- w_box_type = space.gettypefor(interp_boxes.W_UnicodeBox)
+ BoxType = interp_boxes.W_UnicodeBox
return W_Dtype(itemtype, num, char,
basename + str(8 * itemtype.get_element_size()),
- char, w_box_type)
+ char, BoxType)
def dtype_from_spec(space, name):
raise OperationError(space.w_NotImplementedError, space.wrap(
@@ -292,7 +295,7 @@
for dtype in cache.builtin_dtypes:
if w_dtype in dtype.alternate_constructors:
return dtype
- if w_dtype is dtype.w_box_type:
+ if w_dtype is dtype.descr_get_type(space):
return dtype
raise OperationError(space.w_TypeError, space.wrap("data type %r not
understood" % w_dtype))
@@ -309,7 +312,7 @@
num = interp_attrproperty("num", cls=W_Dtype),
kind = interp_attrproperty("kind", cls=W_Dtype),
char = interp_attrproperty("char", cls=W_Dtype),
- type = interp_attrproperty_w("w_box_type", cls=W_Dtype),
+ type = GetSetProperty(W_Dtype.descr_get_type),
byteorder = GetSetProperty(W_Dtype.descr_get_byteorder),
itemsize = GetSetProperty(W_Dtype.descr_get_itemsize),
alignment = GetSetProperty(W_Dtype.descr_get_alignment),
@@ -334,7 +337,7 @@
kind=STRINGLTR,
name='string',
char='S' + str(size),
- w_box_type = space.gettypefor(interp_boxes.W_StringBox),
+ BoxType = interp_boxes.W_StringBox,
)
def new_unicode_dtype(space, size):
@@ -344,7 +347,7 @@
kind=UNICODELTR,
name='unicode',
char='U' + str(size),
- w_box_type = space.gettypefor(interp_boxes.W_UnicodeBox),
+ BoxType = interp_boxes.W_UnicodeBox,
)
@@ -356,7 +359,7 @@
kind=BOOLLTR,
name="bool",
char="?",
- w_box_type=space.gettypefor(interp_boxes.W_BoolBox),
+ BoxType=interp_boxes.W_BoolBox,
alternate_constructors=[space.w_bool],
)
self.w_int8dtype = W_Dtype(
@@ -365,7 +368,7 @@
kind=SIGNEDLTR,
name="int8",
char="b",
- w_box_type=space.gettypefor(interp_boxes.W_Int8Box)
+ BoxType=interp_boxes.W_Int8Box
)
self.w_uint8dtype = W_Dtype(
types.UInt8(),
@@ -373,7 +376,7 @@
kind=UNSIGNEDLTR,
name="uint8",
char="B",
- w_box_type=space.gettypefor(interp_boxes.W_UInt8Box),
+ BoxType=interp_boxes.W_UInt8Box,
)
self.w_int16dtype = W_Dtype(
types.Int16(),
@@ -381,7 +384,7 @@
kind=SIGNEDLTR,
name="int16",
char="h",
- w_box_type=space.gettypefor(interp_boxes.W_Int16Box),
+ BoxType=interp_boxes.W_Int16Box,
)
self.w_uint16dtype = W_Dtype(
types.UInt16(),
@@ -389,7 +392,7 @@
kind=UNSIGNEDLTR,
name="uint16",
char="H",
- w_box_type=space.gettypefor(interp_boxes.W_UInt16Box),
+ BoxType=interp_boxes.W_UInt16Box,
)
self.w_int32dtype = W_Dtype(
types.Int32(),
@@ -397,7 +400,7 @@
kind=SIGNEDLTR,
name="int32",
char="i",
- w_box_type=space.gettypefor(interp_boxes.W_Int32Box),
+ BoxType=interp_boxes.W_Int32Box,
)
self.w_uint32dtype = W_Dtype(
types.UInt32(),
@@ -405,7 +408,7 @@
kind=UNSIGNEDLTR,
name="uint32",
char="I",
- w_box_type=space.gettypefor(interp_boxes.W_UInt32Box),
+ BoxType=interp_boxes.W_UInt32Box,
)
if LONG_BIT == 32:
name = "int32"
@@ -417,7 +420,7 @@
kind=SIGNEDLTR,
name=name,
char="l",
- w_box_type=space.gettypefor(interp_boxes.W_LongBox),
+ BoxType=interp_boxes.W_LongBox,
alternate_constructors=[space.w_int,
space.gettypefor(interp_boxes.W_IntegerBox),
space.gettypefor(interp_boxes.W_SignedIntegerBox),
@@ -430,7 +433,7 @@
kind=UNSIGNEDLTR,
name="u" + name,
char="L",
- w_box_type=space.gettypefor(interp_boxes.W_ULongBox),
+ BoxType=interp_boxes.W_ULongBox,
alternate_constructors=[
space.gettypefor(interp_boxes.W_UnsignedIntegerBox),
],
aliases=['uint'],
@@ -441,7 +444,7 @@
kind=SIGNEDLTR,
name="int64",
char="q",
- w_box_type=space.gettypefor(interp_boxes.W_Int64Box),
+ BoxType=interp_boxes.W_Int64Box,
alternate_constructors=[space.w_long],
)
self.w_uint64dtype = W_Dtype(
@@ -450,7 +453,7 @@
kind=UNSIGNEDLTR,
name="uint64",
char="Q",
- w_box_type=space.gettypefor(interp_boxes.W_UInt64Box),
+ BoxType=interp_boxes.W_UInt64Box,
)
self.w_float32dtype = W_Dtype(
types.Float32_instance,
@@ -458,7 +461,7 @@
kind=FLOATINGLTR,
name="float32",
char="f",
- w_box_type=space.gettypefor(interp_boxes.W_Float32Box),
+ BoxType=interp_boxes.W_Float32Box,
)
self.w_float64dtype = W_Dtype(
types.Float64_instance,
@@ -466,7 +469,7 @@
kind=FLOATINGLTR,
name="float64",
char="d",
- w_box_type = space.gettypefor(interp_boxes.W_Float64Box),
+ BoxType = interp_boxes.W_Float64Box,
alternate_constructors=[space.w_float,
space.gettypefor(interp_boxes.W_NumberBox),
],
@@ -478,7 +481,7 @@
kind=COMPLEXLTR,
name="complex64",
char="F",
- w_box_type = space.gettypefor(interp_boxes.W_Complex64Box),
+ BoxType = interp_boxes.W_Complex64Box,
float_type = self.w_float32dtype,
)
self.w_complex128dtype = W_ComplexDtype(
@@ -487,7 +490,7 @@
kind=COMPLEXLTR,
name="complex128",
char="D",
- w_box_type = space.gettypefor(interp_boxes.W_Complex128Box),
+ BoxType = interp_boxes.W_Complex128Box,
alternate_constructors=[space.w_complex],
aliases=["complex"],
float_type = self.w_float64dtype,
@@ -499,7 +502,7 @@
kind=FLOATINGLTR,
name="",
char="g",
- w_box_type=space.gettypefor(interp_boxes.W_LongDoubleBox),
+ BoxType=interp_boxes.W_LongDoubleBox,
aliases=["longdouble", "longfloat"],
)
self.w_clongdouble = W_ComplexDtype(
@@ -508,7 +511,7 @@
kind=COMPLEXLTR,
name="",
char="G",
- w_box_type = space.gettypefor(interp_boxes.W_CLongDoubleBox),
+ BoxType = interp_boxes.W_CLongDoubleBox,
alternate_constructors=[space.w_complex],
aliases=["clongdouble", "clongfloat"],
float_type = self.w_longdouble,
@@ -534,7 +537,7 @@
kind=STRINGLTR,
name='string',
char='S',
- w_box_type = space.gettypefor(interp_boxes.W_StringBox),
+ BoxType = interp_boxes.W_StringBox,
alternate_constructors=[space.w_str],
)
self.w_unicodedtype = W_Dtype(
@@ -543,7 +546,7 @@
kind=UNICODELTR,
name='unicode',
char='U',
- w_box_type = space.gettypefor(interp_boxes.W_UnicodeBox),
+ BoxType = interp_boxes.W_UnicodeBox,
alternate_constructors=[space.w_unicode],
)
self.w_voiddtype = W_Dtype(
@@ -552,7 +555,7 @@
kind=VOIDLTR,
name='void',
char='V',
- w_box_type = space.gettypefor(interp_boxes.W_VoidBox),
+ BoxType = interp_boxes.W_VoidBox,
#alternate_constructors=[space.w_buffer],
# XXX no buffer in space
#alternate_constructors=[space.gettypefor(interp_boxes.W_GenericBox)],
@@ -564,7 +567,7 @@
kind=FLOATINGLTR,
name="float16",
char="e",
- w_box_type=space.gettypefor(interp_boxes.W_Float16Box),
+ BoxType=interp_boxes.W_Float16Box,
)
ptr_size = rffi.sizeof(rffi.CCHARP)
if ptr_size == 4:
@@ -589,7 +592,7 @@
kind=INTPLTR,
name='intp',
char=INTPLTR,
- w_box_type = space.gettypefor(intp_box),
+ BoxType = intp_box,
)
self.w_uintpdtype = W_Dtype(
uintp_type,
@@ -597,7 +600,7 @@
kind=UINTPLTR,
name='uintp',
char=UINTPLTR,
- w_box_type = space.gettypefor(uintp_box),
+ BoxType = uintp_box,
)
float_dtypes = [self.w_float16dtype,
self.w_float32dtype, self.w_float64dtype,
@@ -637,7 +640,7 @@
itemtype = getattr(types, 'NonNative' + itemtypename)()
self.dtypes_by_name[new_name] = W_Dtype(
itemtype,
- dtype.num, dtype.kind, new_name, dtype.char, dtype.w_box_type,
+ dtype.num, dtype.kind, new_name, dtype.char, dtype.BoxType,
native=False)
if dtype.kind != dtype.char:
can_name = dtype.char
@@ -646,7 +649,7 @@
new_name = nonnative_byteorder_prefix + can_name
self.dtypes_by_name[new_name] = W_Dtype(
itemtype,
- dtype.num, dtype.kind, new_name, dtype.char,
dtype.w_box_type,
+ dtype.num, dtype.kind, new_name, dtype.char, dtype.BoxType,
native=False)
for alias in dtype.aliases:
@@ -723,7 +726,7 @@
w_maxobj = space.wrap(r_ulonglong(1 << (itemsize*8)) - 1)
w_minobj = space.wrap(0)
items_w = items_w + [w_maxobj, w_minobj]
- items_w = items_w + [dtype.w_box_type]
+ items_w = items_w + [dtype.descr_get_type(space)]
space.setitem(w_typeinfo, space.wrap(k), space.newtuple(items_w))
self.w_typeinfo = w_typeinfo
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit