Author: Matti Picus <[email protected]>
Branch: numpypy-nditer
Changeset: r70696:2b882cea5282
Date: 2014-04-17 10:20 +0300
http://bitbucket.org/pypy/pypy/changeset/2b882cea5282/

Log:    test, fix op_dtypes and scalar operands

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
@@ -136,7 +136,6 @@
         return self.array.getitem_bool(self.offset)
 
     def setitem(self, elem):
-        print 'setting',self.offset,'to',elem
         self.array.setitem(self.offset, elem)
 
 class SliceIterator(ArrayIter):
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
@@ -5,7 +5,7 @@
 from pypy.module.micronumpy.base import W_NDimArray, convert_to_array
 from pypy.module.micronumpy.strides import (calculate_broadcast_strides,
                                              shape_agreement, 
shape_agreement_multiple)
-from pypy.module.micronumpy.iterators import ArrayIter, SliceIterator, 
ScalarIter
+from pypy.module.micronumpy.iterators import ArrayIter, SliceIterator
 from pypy.module.micronumpy.concrete import SliceArray
 from pypy.module.micronumpy.descriptor import decode_w_dtype
 from pypy.module.micronumpy import ufuncs
@@ -203,7 +203,7 @@
         raise NotImplementedError('not implemented yet')
 
 def get_iter(space, order, arr, shape, dtype):
-    imp = arr.implementation.astype(space, dtype)
+    imp = arr.implementation
     backward = is_backward(imp, order)
     if arr.is_scalar():
         return ArrayIter(imp, 1, [], [], [])
@@ -349,9 +349,13 @@
                 seq_d = self.seq[i].get_dtype()
                 if not selfd:
                     self.dtypes[i] = seq_d
-                elif selfd != seq_d and not 'r' in self.op_flags[i].tmp_copy:
-                    raise OperationError(space.w_TypeError, space.wrap(
-                        "Iterator operand required copying or buffering for 
operand %d" % i))
+                elif selfd != seq_d:
+                    if not 'r' in self.op_flags[i].tmp_copy:
+                        raise OperationError(space.w_TypeError, space.wrap(
+                            "Iterator operand required copying or buffering 
for operand %d" % i))
+                    impl = self.seq[i].implementation
+                    new_impl = impl.astype(space, selfd)
+                    self.seq[i] = W_NDimArray(new_impl)
         else:
             #copy them from seq
             self.dtypes = [s.get_dtype() for s in self.seq]
@@ -364,7 +368,6 @@
                 self.iters.append(BoxIterator(get_iter(space, self.order,
                                     self.seq[i], iter_shape, self.dtypes[i]),
                                  self.op_flags[i]))
-
     def set_op_axes(self, space, w_op_axes):
         if space.len_w(w_op_axes) != len(self.seq):
             raise OperationError(space.w_ValueError, space.wrap("op_axes must 
be a tuple/list matching the number of ops"))
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
@@ -158,13 +158,8 @@
         multi = nditer([None, array([2, 3], dtype='int64'), array(2., 
dtype='double')],
                        op_dtypes = ['int64', 'int64', 'float64'],
                        op_flags = [['writeonly', 'allocate'], ['readonly'], 
['readonly']])
-        print 'starting the real mccoy'
         for a, b, c in multi:
-            print 'in loop'
             a[...] = b * c
-        print multi.operands[0]
-        print multi.operands[1]
-        print multi.operands[2]
         assert (multi.operands[0] == [4, 6]).all()
 
     def test_casting(self):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to