Author: Ronan Lamy <[email protected]>
Branch: fix-result-types
Changeset: r77513:c2116486a402
Date: 2015-05-24 17:16 +0100
http://bitbucket.org/pypy/pypy/changeset/c2116486a402/

Log:    In ufunc.accumulate(), the output dtype isn't necessarily the same
        as calc_dtype

diff --git a/pypy/module/micronumpy/loop.py b/pypy/module/micronumpy/loop.py
--- a/pypy/module/micronumpy/loop.py
+++ b/pypy/module/micronumpy/loop.py
@@ -214,9 +214,10 @@
         obj_state = obj_iter.next(obj_state)
     return cur_value
 
-reduce_cum_driver = jit.JitDriver(name='numpy_reduce_cum_driver',
-                                  greens = ['shapelen', 'func', 'dtype'],
-                                  reds = 'auto')
+reduce_cum_driver = jit.JitDriver(
+    name='numpy_reduce_cum_driver',
+    greens=['shapelen', 'func', 'dtype', 'out_dtype'],
+    reds='auto')
 
 def compute_reduce_cumulative(space, obj, out, calc_dtype, func, identity):
     obj_iter, obj_state = obj.create_iter()
@@ -230,12 +231,14 @@
     else:
         cur_value = identity.convert_to(space, calc_dtype)
     shapelen = len(obj.get_shape())
+    out_dtype = out.get_dtype()
     while not obj_iter.done(obj_state):
-        reduce_cum_driver.jit_merge_point(shapelen=shapelen, func=func,
-                                          dtype=calc_dtype)
+        reduce_cum_driver.jit_merge_point(
+            shapelen=shapelen, func=func,
+            dtype=calc_dtype, out_dtype=out_dtype)
         rval = obj_iter.getitem(obj_state).convert_to(space, calc_dtype)
         cur_value = func(calc_dtype, cur_value, rval)
-        out_iter.setitem(out_state, cur_value)
+        out_iter.setitem(out_state, out_dtype.coerce(space, cur_value))
         out_state = out_iter.next(out_state)
         obj_state = obj_iter.next(obj_state)
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to