Author: Brian Kearns <bdkea...@gmail.com> Branch: numpy-refactor Changeset: r69494:6a347d1b5fb7 Date: 2014-02-27 00:45 -0500 http://bitbucket.org/pypy/pypy/changeset/6a347d1b5fb7/
Log: clean up reduce axis arg errors diff --git a/pypy/module/micronumpy/interp_support.py b/pypy/module/micronumpy/interp_support.py --- a/pypy/module/micronumpy/interp_support.py +++ b/pypy/module/micronumpy/interp_support.py @@ -3,7 +3,6 @@ from rpython.rtyper.lltypesystem import lltype, rffi from pypy.module.micronumpy import descriptor, loop from rpython.rlib.rstring import strip_spaces -from rpython.rlib.rarithmetic import maxint from pypy.module.micronumpy.base import W_NDimArray FLOAT_SIZE = rffi.sizeof(lltype.Float) @@ -85,16 +84,3 @@ return _fromstring_bin(space, s, count, length, dtype) else: return _fromstring_text(space, s, count, sep, length, dtype) - -def unwrap_axis_arg(space, shapelen, w_axis): - if space.is_none(w_axis): - axis = maxint - else: - axis = space.int_w(w_axis) - if axis < -shapelen or axis >= shapelen: - raise oefmt(space.w_ValueError, - "axis entry %d is out of bounds [%d, %d)", - axis, -shapelen, shapelen) - if axis < 0: - axis += shapelen - return axis diff --git a/pypy/module/micronumpy/test/test_ufuncs.py b/pypy/module/micronumpy/test/test_ufuncs.py --- a/pypy/module/micronumpy/test/test_ufuncs.py +++ b/pypy/module/micronumpy/test/test_ufuncs.py @@ -763,8 +763,17 @@ assert add.reduce(1) == 1 assert list(maximum.reduce(zeros((2, 0)), axis=0)) == [] - raises(ValueError, maximum.reduce, zeros((2, 0)), axis=None) - raises(ValueError, maximum.reduce, zeros((2, 0)), axis=1) + exc = raises(ValueError, maximum.reduce, zeros((2, 0)), axis=None) + assert exc.value[0] == ('zero-size array to reduction operation ' + 'maximum which has no identity') + exc = raises(ValueError, maximum.reduce, zeros((2, 0)), axis=1) + assert exc.value[0] == ('zero-size array to reduction operation ' + 'maximum which has no identity') + + a = zeros((2, 2)) + 1 + assert (add.reduce(a, axis=1) == [2, 2]).all() + exc = raises(ValueError, add.reduce, a, axis=2) + assert exc.value[0] == "'axis' entry is out of bounds" def test_reduce_1d(self): from numpypy import array, add, maximum, less, float16, complex64 diff --git a/pypy/module/micronumpy/ufuncs.py b/pypy/module/micronumpy/ufuncs.py --- a/pypy/module/micronumpy/ufuncs.py +++ b/pypy/module/micronumpy/ufuncs.py @@ -4,9 +4,8 @@ from pypy.interpreter.typedef import TypeDef, GetSetProperty, interp_attrproperty from pypy.module.micronumpy import boxes, descriptor, loop from rpython.rlib import jit -from rpython.rlib.rarithmetic import LONG_BIT +from rpython.rlib.rarithmetic import LONG_BIT, maxint from rpython.tool.sourcetools import func_with_new_name -from pypy.module.micronumpy.interp_support import unwrap_axis_arg from pypy.module.micronumpy.strides import shape_agreement from pypy.module.micronumpy.base import convert_to_array, W_NDimArray from pypy.module.micronumpy import constants as NPY @@ -175,7 +174,14 @@ if obj.is_scalar(): return obj.get_scalar_value() shapelen = len(obj_shape) - axis = unwrap_axis_arg(space, shapelen, w_axis) + if space.is_none(w_axis): + axis = maxint + else: + axis = space.int_w(w_axis) + if axis < -shapelen or axis >= shapelen: + raise oefmt(space.w_ValueError, "'axis' entry is out of bounds") + if axis < 0: + axis += shapelen assert axis >= 0 dtype = descriptor.decode_w_dtype(space, dtype) if dtype is None: @@ -192,8 +198,9 @@ for i in range(shapelen): if space.is_none(w_axis) or i == axis: if obj_shape[i] == 0: - raise oefmt(space.w_ValueError, "zero-size array to " - "%s.reduce without identity", self.name) + raise oefmt(space.w_ValueError, + "zero-size array to reduction operation %s " + "which has no identity", self.name) if shapelen > 1 and axis < shapelen: temp = None if cumulative: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit