Author: mattip Branch: numpypy-axisops Changeset: r50920:e3824eb2fc4c Date: 2011-12-28 03:38 +0200 http://bitbucket.org/pypy/pypy/changeset/e3824eb2fc4c/
Log: more finely distinguish between different 'promote_?' s 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 @@ -282,16 +282,17 @@ descr_rpow = _binop_right_impl("power") descr_rmod = _binop_right_impl("mod") - def _reduce_ufunc_impl(ufunc_name): + def _reduce_ufunc_impl(ufunc_name, promote_to_largest = False): def impl(self, space, w_dim=None): if w_dim is None: w_dim = space.wrap(w_dim) return getattr(interp_ufuncs.get(space), ufunc_name).reduce(space, - self, True, w_dim) + self, True, promote_to_largest, w_dim) return func_with_new_name(impl, "reduce_%s_impl" % ufunc_name) descr_sum = _reduce_ufunc_impl("add") - descr_prod = _reduce_ufunc_impl("multiply") + descr_sum_promote = _reduce_ufunc_impl("add", True) + descr_prod = _reduce_ufunc_impl("multiply", True) descr_max = _reduce_ufunc_impl("maximum") descr_min = _reduce_ufunc_impl("minimum") @@ -318,6 +319,7 @@ idx=idx, cur_best=cur_best) new_best = getattr(dtype.itemtype, op_name)(cur_best, sig.eval(frame, self)) + print 'new_best',new_best.value,'cur_best',cur_best.value if dtype.itemtype.ne(new_best, cur_best): result = idx cur_best = new_best @@ -560,7 +562,7 @@ return w_result def descr_mean(self, space): - return space.div(self.descr_sum(space), space.wrap(self.size)) + return space.div(self.descr_sum_promote(space), space.wrap(self.size)) def descr_nonzero(self, space): if self.size > 1: diff --git a/pypy/module/micronumpy/interp_ufuncs.py b/pypy/module/micronumpy/interp_ufuncs.py --- a/pypy/module/micronumpy/interp_ufuncs.py +++ b/pypy/module/micronumpy/interp_ufuncs.py @@ -101,9 +101,9 @@ array([[ 1, 5], [ 9, 13]]) ''' - return self.reduce(space, w_obj, False, w_dim) + return self.reduce(space, w_obj, False, False, w_dim) - def reduce(self, space, w_obj, multidim, w_dim): + def reduce(self, space, w_obj, multidim, promote_to_largest, w_dim): from pypy.module.micronumpy.interp_numarray import convert_to_array, Scalar if self.argcount != 2: raise OperationError(space.w_ValueError, space.wrap("reduce only " @@ -122,7 +122,9 @@ size = obj.size dtype = find_unaryop_result_dtype( space, obj.find_dtype(), - promote_to_float=self.promote_to_float + promote_to_float=self.promote_to_float, + promote_to_largest = promote_to_largest, + promote_bools = True ) shapelen = len(obj.shape) if self.identity is None and size == 0: 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 @@ -722,7 +722,7 @@ raises(TypeError, 'a.sum(2, 3)') def test_sumND(self): - skip('Not finished yet') + from numpypy import arange a = arange(15).reshape(5, 3) assert (a.sum(0) == [30, 35, 40]).all() assert (a.sum(1) == [3, 12, 21, 30, 39]).all() _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit