[pypy-commit] pypy refactor-signature: RPythonization

fijal noreply at buildbot.pypy.org
Thu Dec 15 09:34:59 CET 2011


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: refactor-signature
Changeset: r50532:78db9015b5f0
Date: 2011-12-15 10:14 +0200
http://bitbucket.org/pypy/pypy/changeset/78db9015b5f0/

Log:	RPythonization

diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -893,6 +893,7 @@
         self.strides = strides
         self.backstrides = backstrides
         BaseArray.__init__(self, shape, parent.order)
+        assert isinstance(parent, W_NDimArray)
         self.parent = parent
         self.invalidates = parent.invalidates
 
@@ -1113,7 +1114,7 @@
     )
     arr = W_NDimArray(size, shape[:], dtype=dtype, order=order)
     shapelen = len(shape)
-    arr_iter = ArrayIterator(arr)
+    arr_iter = ArrayIterator(arr.size)
     for i in range(len(elems_w)):
         w_elem = elems_w[i]
         dtype.setitem(arr.storage, arr_iter.offset,
diff --git a/pypy/module/micronumpy/signature.py b/pypy/module/micronumpy/signature.py
--- a/pypy/module/micronumpy/signature.py
+++ b/pypy/module/micronumpy/signature.py
@@ -40,9 +40,8 @@
     def __init__(self, iterators):
         self = hint(self, access_directly=True)
         self.iterators = iterators
-        self.final_iter = None
         for i, iter in enumerate(self.iterators):
-            if not isinstance(iter, ConstantIterator) or not isinstance(iter, BroadcastIterator):
+            if not isinstance(iter, ConstantIterator):# or not isinstance(iter, BroadcastIterator):
                 self.final_iter = i
                 break
         else:
@@ -93,11 +92,16 @@
         return 'Array'
 
     def _create_iter(self, iterlist, arr):
+        from pypy.module.micronumpy.interp_numarray import W_NDimArray
+        arr = arr.get_concrete()
+        assert isinstance(arr, W_NDimArray)
         if self.iter_no >= len(iterlist):
             iterlist.append(ArrayIterator(arr.size))
 
     def eval(self, frame, arr):
+        from pypy.module.micronumpy.interp_numarray import W_NDimArray
         arr = arr.get_concrete()
+        assert isinstance(arr, W_NDimArray)
         iter = frame.iterators[self.iter_no]
         return arr.dtype.getitem(arr.storage, iter.offset)
 
@@ -111,6 +115,8 @@
             iterlist.append(iter)
 
     def eval(self, frame, arr):
+        from pypy.module.micronumpy.interp_numarray import Scalar
+        assert isinstance(arr, Scalar)
         return arr.value
 
 class ViewSignature(Signature):
@@ -139,6 +145,8 @@
             iterlist.append(ViewIterator(arr))
 
     def eval(self, frame, arr):
+        from pypy.module.micronumpy.interp_numarray import W_NDimSlice
+        assert isinstance(arr, W_NDimSlice)
         arr = arr.get_concrete()
         iter = frame.iterators[self.iter_no]
         return arr.find_dtype().getitem(arr.parent.storage, iter.offset)
@@ -148,7 +156,7 @@
         return 'FlatIter(%s)' % self.child.debug_repr()
 
     def _create_iter(self, iterlist, arr):
-        XXX
+        raise NotImplementedError
 
 class Call1(Signature):
     def __init__(self, func, child):
@@ -170,9 +178,13 @@
         self.child._invent_numbering(cache, allnumbers)
 
     def _create_iter(self, iterlist, arr):
+        from pypy.module.micronumpy.interp_numarray import Call1
+        assert isinstance(arr, Call1)
         self.child._create_iter(iterlist, arr.values)
 
     def eval(self, frame, arr):
+        from pypy.module.micronumpy.interp_numarray import Call1
+        assert isinstance(arr, Call1)
         v = self.child.eval(frame, arr.values).convert_to(arr.res_dtype)
         return self.unfunc(arr.res_dtype, v)
 
@@ -197,10 +209,15 @@
         self.right._invent_numbering(cache, allnumbers)
 
     def _create_iter(self, iterlist, arr):
+        from pypy.module.micronumpy.interp_numarray import Call2
+        
+        assert isinstance(arr, Call2)
         self.left._create_iter(iterlist, arr.left)
         self.right._create_iter(iterlist, arr.right)
 
     def eval(self, frame, arr):
+        from pypy.module.micronumpy.interp_numarray import Call2
+        assert isinstance(arr, Call2)
         lhs = self.left.eval(frame, arr.left).convert_to(arr.calc_dtype)
         rhs = self.right.eval(frame, arr.right).convert_to(arr.calc_dtype)
         return self.binfunc(arr.calc_dtype, lhs, rhs)
diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -48,9 +48,11 @@
             interp = InterpreterState(codes[i])
             interp.run(space)
             w_res = interp.results[-1]
-            if isinstance(w_res, BaseArray):
-                w_res = w_res.eval(w_res.start_iter())
-
+            if isinstance(w_res, W_NDimArray):
+                concr = w_res.get_concrete()
+                sig = concr.find_sig()
+                frame = sig.create_frame(w_res)
+                w_res = sig.eval(frame, concr)
             if isinstance(w_res, interp_boxes.W_Float64Box):
                 return w_res.value
             elif isinstance(w_res, interp_boxes.W_BoolBox):


More information about the pypy-commit mailing list