[pypy-commit] pypy numpypy-axisops: jit_merge_point translates, zjit test for sum() of 2d array fails

mattip noreply at buildbot.pypy.org
Sat Jan 7 22:04:41 CET 2012


Author: mattip
Branch: numpypy-axisops
Changeset: r51127:579c843af22b
Date: 2012-01-07 22:57 +0200
http://bitbucket.org/pypy/pypy/changeset/579c843af22b/

Log:	jit_merge_point translates, zjit test for sum() of 2d array fails

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
@@ -36,6 +36,14 @@
     get_printable_location=signature.new_printable_location('slice'),
 )
 
+axisreduce_driver = jit.JitDriver(
+    greens=['shapelen', 'sig'],
+    virtualizables=['frame'],
+    reds=['self','result', 'ri', 'frame', 'nextval', 'dtype', 'value'],
+    get_printable_location=signature.new_printable_location('reduce'),
+)
+
+
 def _find_shape_and_elems(space, w_iterable):
     shape = [space.len_w(w_iterable)]
     batch = space.listview(w_iterable)
@@ -297,7 +305,7 @@
     descr_min = _reduce_ufunc_impl("minimum")
 
     def _reduce_argmax_argmin_impl(op_name):
-        axisreduce_driver = jit.JitDriver(
+        reduce_driver = jit.JitDriver(
             greens=['shapelen', 'sig'],
             reds=['result', 'idx', 'frame', 'self', 'cur_best', 'dtype'],
             get_printable_location=signature.new_printable_location(op_name),
@@ -312,7 +320,7 @@
             result = 0
             idx = 1
             while not frame.done():
-                axisreduce_driver.jit_merge_point(sig=sig,
+                reduce_driver.jit_merge_point(sig=sig,
                                               shapelen=shapelen,
                                               self=self, dtype=dtype,
                                               frame=frame, result=result,
@@ -760,7 +768,6 @@
         self.dtype = res_dtype
         self.dim = dim
         self.identity = identity
-        self.computing = False
 
     def _del_sources(self):
         self.values = None
@@ -783,13 +790,6 @@
         return value
 
     def compute(self):
-        reduce_driver = jit.JitDriver(
-            greens=['shapelen', 'sig', 'self'],
-            reds=['result', 'ri', 'frame', 'nextval', 'dtype', 'value'],
-            get_printable_location=\
-                              signature.new_printable_location(self.binfunc),
-        )
-        self.computing = True
         dtype = self.dtype
         result = W_NDimArray(self.size, self.shape, dtype)
         self.values = self.values.get_concrete()
@@ -798,9 +798,9 @@
         ri = ArrayIterator(result.size)
         frame = sig.create_frame(self.values, dim=self.dim)
         value = self.get_identity(sig, frame, shapelen)
-        nextval = 0.
+        nextval = sig.eval(frame, self.values).convert_to(dtype)
         while not frame.done():
-            reduce_driver.jit_merge_point(frame=frame, self=self,
+            axisreduce_driver.jit_merge_point(frame=frame, self=self,
                                           value=value, sig=sig,
                                           shapelen=shapelen, ri=ri,
                                           nextval=nextval, dtype=dtype,
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
@@ -344,3 +344,7 @@
 
     def eval(self, frame, arr):
         return self.right.eval(frame, arr)
+
+    def debug_repr(self):
+        return 'ReduceSig(%s, %s, %s)' % (self.name, self.left.debug_repr(),
+                                          self.right.debug_repr())
diff --git a/pypy/module/micronumpy/test/test_numarray.py b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -743,6 +743,7 @@
     def test_reduceND(self):
         from numpypy import arange
         a = arange(15).reshape(5, 3)
+        assert a.sum() == 105
         assert (a.sum(0) == [30, 35, 40]).all()
         assert (a.sum(1) == [3, 12, 21, 30, 39]).all()
         assert (a.max(0) == [12, 13, 14]).all()
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
@@ -115,16 +115,15 @@
                                 "int_add": 1, "int_ge": 1, "guard_false": 1,
                                 "jump": 1, 'arraylen_gc': 1})
 
-    def define_sum2d():
+    def define_axissum():
         return """
         a = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
-        b = sum(a,0)
-        b -> 1
+        b = sum(a) #,0)
+        #b -> 1
         """
 
     def test_axissum(self):
-        py.test.skip("2dsum")
-        result = self.run("sum2d")
+        result = self.run("axissum")
         assert result == 30
         self.check_simple_loop({"getinteriorfield_raw": 2, "float_add": 2,
                                 "int_add": 1, "int_ge": 1, "guard_false": 1,


More information about the pypy-commit mailing list