[pypy-commit] pypy default: Separated the any/all reduce functions for numpy arrays
justinpeel
noreply at buildbot.pypy.org
Tue Jul 12 00:47:10 CEST 2011
Author: Justin Peel <notmuchtotell at gmail.com>
Branch:
Changeset: r45483:b81b9f3ab263
Date: 2011-07-11 08:12 -0600
http://bitbucket.org/pypy/pypy/changeset/b81b9f3ab263/
Log: Separated the any/all reduce functions for numpy arrays
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
@@ -181,42 +181,52 @@
return space.wrap(loop(self, self.eval(0), size))
return func_with_new_name(impl, "reduce_%s_impl" % function.__name__)
- def _reduce_any_all_impl(function, init, cond):
+ def _reduce_all_impl(function, init, cond):
reduce_driver = jit.JitDriver(greens=['signature'],
reds = ['i', 'size', 'result', 'self'])
def loop(self, result, size):
i = 0
- if cond:
- while i < size:
- reduce_driver.jit_merge_point(signature=self.signature,
- self=self, size=size, i=i,
- result=result)
- result = function(result, self.eval(i))
- if result:
- break
- i += 1
- else:
- while i < size:
- reduce_driver.jit_merge_point(signature=self.signature,
- self=self, size=size, i=i,
- result=result)
- result = function(result, self.eval(i))
- if not result:
- break
- i += 1
+ while i < size:
+ reduce_driver.jit_merge_point(signature=self.signature,
+ self=self, size=size, i=i,
+ result=result)
+ result = function(result, self.eval(i))
+ if not result:
+ break
+ i += 1
return result
def impl(self, space):
size = self.find_size()
return space.wrap(loop(self, init, size))
- return func_with_new_name(impl, "reduce_%s_impl" % function.__name__)
+ return func_with_new_name(impl, "reduce_all_impl")
+
+ def _reduce_any_impl(function, init, cond):
+ reduce_driver = jit.JitDriver(greens=['signature'],
+ reds = ['i', 'size', 'result', 'self'])
+
+ def loop(self, result, size):
+ i = 0
+ while i < size:
+ reduce_driver.jit_merge_point(signature=self.signature,
+ self=self, size=size, i=i,
+ result=result)
+ result = function(result, self.eval(i))
+ if result:
+ break
+ i += 1
+ return result
+ def impl(self, space):
+ size = self.find_size()
+ return space.wrap(loop(self, init, size))
+ return func_with_new_name(impl, "reduce_any_impl")
descr_sum = _reduce_sum_prod_impl(add, 0.0)
descr_prod = _reduce_sum_prod_impl(mul, 1.0)
descr_max = _reduce_max_min_impl(maximum)
descr_min = _reduce_max_min_impl(minimum)
- descr_all = _reduce_any_all_impl(and_bool, True, False)
- descr_any = _reduce_any_all_impl(or_bool, False, True)
+ descr_all = _reduce_all_impl(and_bool, True, False)
+ descr_any = _reduce_any_impl(or_bool, False, True)
def descr_dot(self, space, w_other):
if isinstance(w_other, BaseArray):
More information about the pypy-commit
mailing list