Author: Ronan Lamy <[email protected]>
Branch: ufunc-reduce
Changeset: r78685:0501a9b82ad2
Date: 2015-07-27 19:26 +0100
http://bitbucket.org/pypy/pypy/changeset/0501a9b82ad2/
Log: move code around
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
@@ -339,10 +339,44 @@
out = space.call_method(obj, '__array_wrap__', out)
return out
+ axis_flags = [False] * shapelen
+ for i in axes:
+ if axis_flags[i]:
+ raise oefmt(space.w_ValueError, "duplicate value in 'axis'")
+ axis_flags[i] = True
+
+
_, dtype, _ = self.find_specialization(space, dtype, dtype, out,
casting='unsafe')
call__array_wrap__ = True
- if shapelen > 1 and axis < shapelen:
+ if shapelen == len(axes):
+ if out:
+ call__array_wrap__ = False
+ if out.ndims() > 0:
+ raise oefmt(space.w_ValueError,
+ "output parameter for reduction operation %s
has "
+ "too many dimensions", self.name)
+ dtype = out.get_dtype()
+ res = loop.compute_reduce(space, obj, dtype, self.func,
self.done_func,
+ self.identity)
+ if out:
+ out.set_scalar_value(res)
+ return out
+ if keepdims:
+ shape = [1] * len(obj_shape)
+ out = W_NDimArray.from_shape(space, shape, dtype,
w_instance=obj)
+ out.implementation.setitem(0, res)
+ res = out
+ elif not space.is_w(space.type(w_obj),
space.gettypefor(W_NDimArray)):
+ # subtypes return a ndarray subtype, not a scalar
+ out = W_NDimArray.from_shape(space, [1], dtype, w_instance=obj)
+ out.implementation.setitem(0, res)
+ res = out
+ if call__array_wrap__:
+ res = space.call_method(obj, '__array_wrap__', res)
+ return res
+
+ else:
temp = None
if keepdims:
shape = obj_shape[:axis] + [1] + obj_shape[axis + 1:]
@@ -381,31 +415,6 @@
if call__array_wrap__:
out = space.call_method(obj, '__array_wrap__', out)
return out
- if out:
- call__array_wrap__ = False
- if out.ndims() > 0:
- raise oefmt(space.w_ValueError,
- "output parameter for reduction operation %s has "
- "too many dimensions", self.name)
- dtype = out.get_dtype()
- res = loop.compute_reduce(space, obj, dtype, self.func, self.done_func,
- self.identity)
- if out:
- out.set_scalar_value(res)
- return out
- if keepdims:
- shape = [1] * len(obj_shape)
- out = W_NDimArray.from_shape(space, shape, dtype, w_instance=obj)
- out.implementation.setitem(0, res)
- res = out
- elif not space.is_w(space.type(w_obj), space.gettypefor(W_NDimArray)):
- # subtypes return a ndarray subtype, not a scalar
- out = W_NDimArray.from_shape(space, [1], dtype, w_instance=obj)
- out.implementation.setitem(0, res)
- res = out
- if call__array_wrap__:
- res = space.call_method(obj, '__array_wrap__', res)
- return res
def descr_outer(self, space, __args__):
return self._outer(space, __args__)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit