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

Reply via email to