[pypy-commit] pypy default: implement dtype.descr for record types
bdkearns
noreply at buildbot.pypy.org
Fri Dec 20 04:34:50 CET 2013
Author: Brian Kearns <bdkearns at gmail.com>
Branch:
Changeset: r68504:7a6f7ca7c635
Date: 2013-12-19 22:23 -0500
http://bitbucket.org/pypy/pypy/changeset/7a6f7ca7c635/
Log: implement dtype.descr for record types
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
@@ -157,8 +157,20 @@
return space.newlist([space.newtuple([space.wrap(""),
self.descr_get_str(space)])])
else:
- raise OperationError(space.w_NotImplementedError, space.wrap(
- "descr not implemented for record types"))
+ descr = []
+ for name in self.fieldnames:
+ subdtype = self.fields[name][1]
+ subdescr = [space.wrap(name)]
+ if subdtype.is_record_type():
+ subdescr.append(subdtype.descr_get_descr(space))
+ elif subdtype.subdtype is not None:
+ subdescr.append(subdtype.subdtype.descr_get_str(space))
+ else:
+ subdescr.append(subdtype.descr_get_str(space))
+ if subdtype.shape != []:
+ subdescr.append(subdtype.descr_get_shape(space))
+ descr.append(space.newtuple(subdescr))
+ return space.newlist(descr)
def descr_get_base(self, space):
return space.wrap(self.base)
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
@@ -849,12 +849,12 @@
import numpy as np
assert np.dtype('<i8').descr == [('', '<i8')]
assert np.dtype('|S4').descr == [('', '|S4')]
+ assert np.dtype(('<i8', (5,))).descr == [('', '|V40')]
d = [('test', '<i8'), ('blah', '<i2', (2, 3))]
- import sys
- if '__pypy__' in sys.builtin_module_names:
- raises(NotImplementedError, "np.dtype(d).descr")
- else:
- assert np.dtype(d).descr == d
+ assert np.dtype(d).descr == d
+ a = [('x', '<i8'), ('y', '<f8')]
+ b = [('x', '<i4'), ('y', a)]
+ assert np.dtype(b).descr == b
class AppTestStrUnicodeDtypes(BaseNumpyAppTest):
def test_mro(self):
More information about the pypy-commit
mailing list