Author: Brian Kearns <bdkea...@gmail.com>
Branch: 
Changeset: r67941:8e73b35beb24
Date: 2013-11-10 21:42 -0500
http://bitbucket.org/pypy/pypy/changeset/8e73b35beb24/

Log:    provide len for numpy dtypes

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
@@ -254,6 +254,11 @@
             raise OperationError(space.w_KeyError, space.wrap(
                 "Field named '%s' not found." % item))
 
+    def descr_len(self, space):
+        if self.fields is None:
+            return space.wrap(0)
+        return space.wrap(len(self.fields))
+
     def descr_reduce(self, space):
         w_class = space.type(self)
 
@@ -397,6 +402,7 @@
     __eq__ = interp2app(W_Dtype.descr_eq),
     __ne__ = interp2app(W_Dtype.descr_ne),
     __getitem__ = interp2app(W_Dtype.descr_getitem),
+    __len__ = interp2app(W_Dtype.descr_len),
 
     __reduce__ = interp2app(W_Dtype.descr_reduce),
     __setstate__ = interp2app(W_Dtype.descr_setstate),
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
@@ -221,6 +221,13 @@
             for i in range(5):
                 assert b[i] == i * 2
 
+    def test_len(self):
+        import numpy as np
+        d = np.dtype('int32')
+        assert len(d) == 0
+        d = np.dtype([('x', 'i4'), ('y', 'i4')])
+        assert len(d) == 2
+
     def test_shape(self):
         from numpypy import dtype
         assert dtype(long).shape == ()
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to