[pypy-commit] pypy default: fix numpy.nditer constructor
bdkearns
noreply at buildbot.pypy.org
Fri May 2 08:03:03 CEST 2014
Author: Brian Kearns <bdkearns at gmail.com>
Branch:
Changeset: r71182:497fe4c88cd9
Date: 2014-05-02 00:39 -0400
http://bitbucket.org/pypy/pypy/changeset/497fe4c88cd9/
Log: fix numpy.nditer constructor
diff --git a/pypy/module/micronumpy/__init__.py b/pypy/module/micronumpy/__init__.py
--- a/pypy/module/micronumpy/__init__.py
+++ b/pypy/module/micronumpy/__init__.py
@@ -23,7 +23,7 @@
'set_string_function': 'appbridge.set_string_function',
'typeinfo': 'descriptor.get_dtype_cache(space).w_typeinfo',
- 'nditer': 'nditer.nditer',
+ 'nditer': 'nditer.W_NDIter',
}
for c in ['MAXDIMS', 'CLIP', 'WRAP', 'RAISE']:
interpleveldefs[c] = 'space.wrap(constants.%s)' % c
diff --git a/pypy/module/micronumpy/nditer.py b/pypy/module/micronumpy/nditer.py
--- a/pypy/module/micronumpy/nditer.py
+++ b/pypy/module/micronumpy/nditer.py
@@ -492,13 +492,15 @@
w_op_dtypes=WrappedDefault(None), order=str,
w_casting=WrappedDefault(None), w_op_axes=WrappedDefault(None),
w_itershape=WrappedDefault(None), w_buffersize=WrappedDefault(None))
-def nditer(space, w_seq, w_flags, w_op_flags, w_op_dtypes, w_casting, w_op_axes,
- w_itershape, w_buffersize, order='K'):
+def descr__new__(space, w_subtype, w_seq, w_flags, w_op_flags, w_op_dtypes,
+ w_casting, w_op_axes, w_itershape, w_buffersize, order='K'):
return W_NDIter(space, w_seq, w_flags, w_op_flags, w_op_dtypes, w_casting, w_op_axes,
w_itershape, w_buffersize, order)
-W_NDIter.typedef = TypeDef(
- 'nditer',
+W_NDIter.typedef = TypeDef('nditer',
+ __module__ = 'numpy',
+ __new__ = interp2app(descr__new__),
+
__iter__ = interp2app(W_NDIter.descr_iter),
__getitem__ = interp2app(W_NDIter.descr_getitem),
__setitem__ = interp2app(W_NDIter.descr_setitem),
@@ -530,3 +532,4 @@
shape = GetSetProperty(W_NDIter.descr_get_shape),
value = GetSetProperty(W_NDIter.descr_get_value),
)
+W_NDIter.typedef.acceptable_as_base_class = False
diff --git a/pypy/module/micronumpy/test/test_nditer.py b/pypy/module/micronumpy/test/test_nditer.py
--- a/pypy/module/micronumpy/test/test_nditer.py
+++ b/pypy/module/micronumpy/test/test_nditer.py
@@ -3,6 +3,19 @@
class AppTestNDIter(BaseNumpyAppTest):
+ def test_type(self):
+ import numpy as np
+ assert type(np.nditer) is type
+ assert np.nditer.__name__ == 'nditer'
+ assert np.nditer.__module__ == 'numpy'
+ try:
+ class Sub(np.nditer):
+ pass
+ except TypeError as e:
+ assert "not an acceptable base" in str(e)
+ else:
+ assert False
+
def test_basic(self):
from numpy import arange, nditer, ndarray
a = arange(6).reshape(2,3)
More information about the pypy-commit
mailing list