[pypy-commit] pypy default: fix dtype from commastring
bdkearns
noreply at buildbot.pypy.org
Sun Feb 23 20:02:32 CET 2014
Author: Brian Kearns <bdkearns at gmail.com>
Branch:
Changeset: r69287:cf3918b33b35
Date: 2014-02-23 03:26 -0500
http://bitbucket.org/pypy/pypy/changeset/cf3918b33b35/
Log: fix dtype from commastring
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
@@ -357,26 +357,31 @@
self.w_box_type, endian, size=self.size)
-def dtype_from_list(space, w_lst):
+ at specialize.arg(2)
+def dtype_from_list(space, w_lst, simple):
lst_w = space.listview(w_lst)
fields = {}
offset = 0
fieldnames = []
for i in range(len(lst_w)):
w_elem = lst_w[i]
- w_shape = space.newtuple([])
- if space.len_w(w_elem) == 3:
- w_fldname, w_flddesc, w_shape = space.fixedview(w_elem)
- if not base.issequence_w(space, w_shape):
- w_shape = space.newtuple([w_shape])
+ if simple:
+ subdtype = descr__new__(space, space.gettypefor(W_Dtype), w_elem)
+ fldname = 'f%d' % i
else:
- w_fldname, w_flddesc = space.fixedview(w_elem, 2)
- subdtype = descr__new__(space, space.gettypefor(W_Dtype), w_flddesc, w_shape=w_shape)
- fldname = space.str_w(w_fldname)
- if fldname == '':
- fldname = 'f%d' % i
- if fldname in fields:
- raise oefmt(space.w_ValueError, "two fields with the same name")
+ w_shape = space.newtuple([])
+ if space.len_w(w_elem) == 3:
+ w_fldname, w_flddesc, w_shape = space.fixedview(w_elem)
+ if not base.issequence_w(space, w_shape):
+ w_shape = space.newtuple([w_shape])
+ else:
+ w_fldname, w_flddesc = space.fixedview(w_elem, 2)
+ subdtype = descr__new__(space, space.gettypefor(W_Dtype), w_flddesc, w_shape=w_shape)
+ fldname = space.str_w(w_fldname)
+ if fldname == '':
+ fldname = 'f%d' % i
+ if fldname in fields:
+ raise oefmt(space.w_ValueError, "two fields with the same name")
assert isinstance(subdtype, W_Dtype)
fields[fldname] = (offset, subdtype)
offset += subdtype.get_size()
@@ -403,7 +408,7 @@
return descr__new__(space, space.gettypefor(W_Dtype),
space.getitem(w_lst, space.wrap(0)))
else:
- return dtype_from_list(space, w_lst)
+ return dtype_from_list(space, w_lst, True)
def descr__new__(space, w_subtype, w_dtype, w_align=None, w_copy=None, w_shape=None):
@@ -446,7 +451,7 @@
return variable_dtype(space, name)
raise oefmt(space.w_TypeError, 'data type "%s" not understood', name)
elif space.isinstance_w(w_dtype, space.w_list):
- return dtype_from_list(space, w_dtype)
+ return dtype_from_list(space, w_dtype, False)
elif space.isinstance_w(w_dtype, space.w_tuple):
w_dtype0 = space.getitem(w_dtype, space.wrap(0))
w_dtype1 = space.getitem(w_dtype, space.wrap(1))
More information about the pypy-commit
mailing list