Author: Matti Picus <[email protected]>
Branch: numpypy-nditer
Changeset: r69782:160a895c16a7
Date: 2014-03-07 16:48 +0200
http://bitbucket.org/pypy/pypy/changeset/160a895c16a7/
Log: cleanup, fix (almost all) -A applevel issues
diff --git a/pypy/module/micronumpy/iterators.py
b/pypy/module/micronumpy/iterators.py
--- a/pypy/module/micronumpy/iterators.py
+++ b/pypy/module/micronumpy/iterators.py
@@ -145,6 +145,7 @@
if dtype is None:
dtype = arr.implementation.dtype
self.dtype = dtype
+ self.arr = arr
if backward:
self.slicesize = shape[0]
self.gap = [support.product(shape[1:]) * dtype.elsize]
@@ -158,7 +159,7 @@
else:
shape = [support.product(shape)]
strides, backstrides = calc_strides(shape, dtype, order)
- size = 0
+ size = 1
self.slicesize = support.product(shape)
self.gap = strides
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
@@ -149,6 +149,8 @@
if item == 'external_loop':
nditer.external_loop = True
elif item == 'buffered':
+ raise OperationError(space.w_NotImplementedError, space.wrap(
+ 'nditer buffered not implemented yet'))
nditer.buffered = True
elif item == 'c_index':
nditer.tracked_index = 'C'
@@ -167,6 +169,8 @@
elif item == 'refs_ok':
nditer.refs_ok = True
elif item == 'reduce_ok':
+ raise OperationError(space.w_NotImplementedError, space.wrap(
+ 'nditer reduce_ok not implemented yet'))
nditer.reduce_ok = True
elif item == 'zerosize_ok':
nditer.zerosize_ok = True
@@ -270,6 +274,9 @@
len(self.seq), parse_op_flag)
if not space.is_none(w_op_axes):
self.set_op_axes(space, w_op_axes)
+ if not space.is_none(w_op_dtypes):
+ raise OperationError(space.w_NotImplementedError, space.wrap(
+ 'nditer op_dtypes kwarg not implemented yet'))
self.iters=[]
self.shape = iter_shape = shape_agreement_multiple(space, self.seq)
if self.tracked_index != "":
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
@@ -1,14 +1,16 @@
import py
from pypy.module.micronumpy.test.test_base import BaseNumpyAppTest
+from pypy.conftest import option
def raises(*args, **kwargs):
#sometimes ValueError, sometimes TypeError, but we don't really care which
- exc = py.test.raises((ValueError, TypeError), *args, **kwargs)
+ exc = py.test.raises((ValueError, TypeError), *args[1:], **kwargs)
return exc
class AppTestNDIter(BaseNumpyAppTest):
def setup_class(cls):
BaseNumpyAppTest.setup_class.im_func(cls)
+ cls.w_runAppDirect = cls.space.wrap(option.runappdirect)
def test_basic(self):
from numpy import arange, nditer
@@ -111,26 +113,38 @@
it.iternext()
assert r == [(0, 0), (1, 2), (2, 4), (3, 1), (4, 3), (5, 5)]
it = nditer(a, flags=['multi_index'], op_flags=['writeonly'])
+ if not self.runAppDirect:
+ raises(NotImplementedError, 'it[0] = 3')
+ skip('nditer.__setitem__ not implmented')
while not it.finished:
it[0] = it.multi_index[1] - it.multi_index[0]
it.iternext()
assert (a == [[0, 1, 2], [-1, 0, 1]]).all()
b = zeros((2, 3))
- exc = raises(nditer, b, flags=['c_index', 'external_loop'])
+ exc = raises(ValueError, nditer, b, flags=['c_index', 'external_loop'])
assert str(exc.value).startswith("Iterator flag EXTERNAL_LOOP cannot")
def test_buffered(self):
from numpy import arange, nditer, array
a = arange(6).reshape(2,3)
r = []
+ if not self.runAppDirect:
+ raises(NotImplementedError, "nditer(a, flags=['external_loop',
'buffered'], order='F')")
+ skip('nditer buffered flag not implmented')
for x in nditer(a, flags=['external_loop', 'buffered'], order='F'):
r.append(x)
- assert (array(r) == [0, 3, 1, 4, 2, 5]).all()
+ array_r = array(r)
+ assert len(array_r.shape) == 2
+ assert array_r.shape == (1, 6)
+ assert (array_r == [0, 3, 1, 4, 2, 5]).all()
def test_op_dtype(self):
from numpy import arange, nditer, sqrt, array
a = arange(6).reshape(2,3) - 3
- exc = raises(nditer, a, op_dtypes=['complex'])
+ if not self.runAppDirect:
+ raises(NotImplementedError, nditer, a, op_dtypes=['complex'])
+ skip('nditer op_dtypes kwarg not implemented yet')
+ exc = raises(ValueError, nditer, a, op_dtypes=['complex'])
assert str(exc.value).startswith("Iterator operand required copying or
buffering")
r = []
for x in nditer(a, op_flags=['readonly','copy'],
@@ -148,6 +162,9 @@
def test_casting(self):
from numpy import arange, nditer
a = arange(6.)
+ if not self.runAppDirect:
+ raises(NotImplementedError, nditer, a, flags=['buffered'],
op_dtypes=['float32'])
+ skip('nditer casting not implemented yet')
exc = raises(ValueError, nditer, a, flags=['buffered'],
op_dtypes=['float32'])
assert str(exc.value).startswith("Iterator operand 0 dtype could not
be cast")
r = []
@@ -198,7 +215,7 @@
c = square2([1, 2, 3], out=b)
assert (c == [1., 4., 9.]).all()
assert (b == c).all()
- exc = raises(square2, arange(6).reshape(2, 3), out=b)
+ exc = raises(ValueError, square2, arange(6).reshape(2, 3), out=b)
assert str(exc.value).startswith('non-broadcastable output')
def test_outer_product(self):
@@ -217,6 +234,9 @@
from numpy import nditer, arange, array
a = arange(24).reshape(2, 3, 4)
b = array(0)
+ if not self.runAppDirect:
+ raises(NotImplementedError, nditer, [a, b], flags=['reduce_ok'])
+ skip('nditer reduce_ok not implemented yet')
#reduction operands must be readwrite
for x, y in nditer([a, b], flags=['reduce_ok', 'external_loop'],
op_flags=[['readonly'], ['readwrite']]):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit