Author: Sergey Matyunin <[email protected]>
Branch: numpy_broadcast_nd
Changeset: r84230:b58fe1445add
Date: 2016-05-01 18:19 +0200
http://bitbucket.org/pypy/pypy/changeset/b58fe1445add/

Log:    Fixed nested call of numpy.broadcast

diff --git a/pypy/module/micronumpy/broadcast.py 
b/pypy/module/micronumpy/broadcast.py
--- a/pypy/module/micronumpy/broadcast.py
+++ b/pypy/module/micronumpy/broadcast.py
@@ -37,11 +37,22 @@
         except OverflowError as e:
             raise oefmt(space.w_ValueError, "broadcast dimensions too large.")
 
-        self.list_iter_state = [W_FlatIterator(arr, self.shape, 
arr.get_order() != self.order)
-                                for arr in self.seq]
+        self.list_iter_state = self._prepare_iterators()
 
         self.done = False
 
+    def _prepare_iterators(self):
+        res = []
+        for arr in self.seq:
+            if isinstance(arr, W_Broadcast):
+                res.extend([self._create_iterator(it.base) for it in 
arr.list_iter_state])
+            else:
+                res.append(self._create_iterator(arr))
+        return res
+
+    def _create_iterator(self, arr):
+        return W_FlatIterator(arr, self.shape, arr.get_order() != self.order)
+
     def get_shape(self):
         return self.shape
 
@@ -49,10 +60,17 @@
         return self.order
 
     def get_dtype(self):
-        return self.seq[0].get_dtype() #XXX Fixme
+        return self.seq[0].get_dtype()  # XXX Fixme
 
     def get_size(self):
-        return 0  #XXX Fixme
+        return self.size
+
+    def is_scalar(self):
+        return self.ndims() == 0
+
+    def ndims(self):
+        return len(self.get_shape())
+    ndims._always_inline_ = True
 
     def create_iter(self, shape=None, backward_broadcast=False):
         return self, self.list_iter_state # XXX Fixme
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to