[pypy-commit] pypy numpy-dtype-refactor: more updates
alex_gaynor
noreply at buildbot.pypy.org
Fri Nov 11 17:02:13 CET 2011
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: numpy-dtype-refactor
Changeset: r49321:6c74c22f9687
Date: 2011-11-10 14:24 -0500
http://bitbucket.org/pypy/pypy/changeset/6c74c22f9687/
Log: more updates
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
@@ -78,6 +78,9 @@
def descr_get_itemsize(self, space):
return space.wrap(self.itemtype.get_element_size())
+ def descr_get_shape(self, space):
+ return space.newtuple([])
+
W_Dtype.typedef = TypeDef("dtype",
__module__ = "numpy",
__new__ = interp2app(W_Dtype.descr__new__.im_func),
@@ -88,7 +91,9 @@
num = interp_attrproperty("num", cls=W_Dtype),
kind = interp_attrproperty("kind", cls=W_Dtype),
itemsize = GetSetProperty(W_Dtype.descr_get_itemsize),
+ shape = GetSetProperty(W_Dtype.descr_get_shape),
)
+W_Dtype.typedef.acceptable_as_base_class = False
class DtypeCache(object):
def __init__(self, space):
diff --git a/pypy/module/micronumpy/interp_ufuncs.py b/pypy/module/micronumpy/interp_ufuncs.py
--- a/pypy/module/micronumpy/interp_ufuncs.py
+++ b/pypy/module/micronumpy/interp_ufuncs.py
@@ -188,14 +188,14 @@
# Everything promotes to float, and bool promotes to everything.
if dt2.kind == interp_dtype.FLOATINGLTR or dt1.kind == interp_dtype.BOOLLTR:
# Float32 + 8-bit int = Float64
- if dt2.num == 11 and dt1.num_bytes >= 4:
- return space.fromcache(interp_dtype.W_Float64Dtype)
+ if dt2.num == 11 and dt1.itemtype.get_element_size() >= 4:
+ return interp_dtype.get_dtype_cache(space).w_float64dtype
return dt2
# for now this means mixing signed and unsigned
if dt2.kind == interp_dtype.SIGNEDLTR:
# if dt2 has a greater number of bytes, then just go with it
- if dt1.num_bytes < dt2.num_bytes:
+ if dt1.itemtype.get_element_size() < dt2.itemtype.get_element_size():
return dt2
# we need to promote both dtypes
dtypenum = dt2.num + 2
@@ -205,10 +205,11 @@
# UInt64 + signed = Float64
if dt2.num == 10:
dtypenum += 1
- newdtype = interp_dtype.ALL_DTYPES[dtypenum]
+ newdtype = interp_dtype.get_dtype_cache(space).builtin_dtypes[dtypenum]
- if newdtype.num_bytes > dt2.num_bytes or newdtype.kind == interp_dtype.FLOATINGLTR:
- return space.fromcache(newdtype)
+ if (newdtype.itemtype.get_element_size() > dt2.itemtype.get_element_size() or
+ newdtype.kind == interp_dtype.FLOATINGLTR):
+ return newdtype
else:
# we only promoted to long on 32-bit or to longlong on 64-bit
# this is really for dealing with the Long and Ulong dtypes
@@ -216,7 +217,7 @@
dtypenum += 2
else:
dtypenum += 3
- return space.fromcache(interp_dtype.ALL_DTYPES[dtypenum])
+ return interp_dtype.get_dtype_cache(space).builtin_dtypes[dtypenum]
def find_unaryop_result_dtype(space, dt, promote_to_float=False,
promote_bools=False, promote_to_largest=False):
More information about the pypy-commit
mailing list