[pypy-commit] pypy default: fix validation of missing r/w op_flag to nditer
bdkearns
noreply at buildbot.pypy.org
Fri Apr 18 18:45:33 CEST 2014
Author: Brian Kearns <bdkearns at gmail.com>
Branch:
Changeset: r70755:9f3d775f07b7
Date: 2014-04-18 11:58 -0400
http://bitbucket.org/pypy/pypy/changeset/9f3d775f07b7/
Log: fix validation of missing r/w op_flag to nditer
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
@@ -80,7 +80,7 @@
class OpFlag(object):
def __init__(self):
- self.rw = 'r'
+ self.rw = ''
self.broadcast = True
self.force_contig = False
self.force_align = False
@@ -145,7 +145,11 @@
else:
raise OperationError(space.w_ValueError, space.wrap(
'op_flags must be a tuple or array of per-op flag-tuples'))
- if op_flag.rw == 'r':
+ if op_flag.rw == '':
+ raise oefmt(space.w_ValueError,
+ "None of the iterator flags READWRITE, READONLY, or "
+ "WRITEONLY were specified for an operand")
+ elif op_flag.rw == 'r':
op_flag.get_it_item = (get_readonly_item, get_readonly_slice)
elif op_flag.rw == 'rw':
op_flag.get_it_item = (get_readwrite_item, get_readwrite_slice)
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
@@ -143,21 +143,17 @@
a = arange(6).reshape(2,3) - 3
exc = raises(TypeError, nditer, a, op_dtypes=['complex'])
assert str(exc.value).startswith("Iterator operand required copying or buffering")
+ exc = raises(ValueError, nditer, a, op_flags=['copy'], op_dtypes=['complex128'])
+ assert str(exc.value) == "None of the iterator flags READWRITE, READONLY, or WRITEONLY were specified for an operand"
r = []
for x in nditer(a, op_flags=['readonly','copy'],
op_dtypes=['complex128']):
r.append(sqrt(x))
assert abs((array(r) - [1.73205080757j, 1.41421356237j, 1j, 0j,
- 1+0j, 1.41421356237+0j]).sum()) < 1e-5
- r = []
- for x in nditer(a, op_flags=['copy'],
- op_dtypes=['complex128']):
- r.append(sqrt(x))
- assert abs((array(r) - [1.73205080757j, 1.41421356237j, 1j, 0j,
- 1+0j, 1.41421356237+0j]).sum()) < 1e-5
+ 1+0j, 1.41421356237+0j]).sum()) < 1e-5
multi = nditer([None, array([2, 3], dtype='int64'), array(2., dtype='double')],
- op_dtypes = ['int64', 'int64', 'float64'],
- op_flags = [['writeonly', 'allocate'], ['readonly'], ['readonly']])
+ op_dtypes=['int64', 'int64', 'float64'],
+ op_flags=[['writeonly', 'allocate'], ['readonly'], ['readonly']])
for a, b, c in multi:
a[...] = b * c
assert (multi.operands[0] == [4, 6]).all()
More information about the pypy-commit
mailing list