[pypy-commit] pypy default: test, fix for returning scalar from reduce function, fixes pypy/numpy #57
mattip
pypy.commits at gmail.com
Sun Oct 16 07:38:38 EDT 2016
Author: Matti Picus <matti.picus at gmail.com>
Branch:
Changeset: r87828:d86329133431
Date: 2016-10-16 14:30 +0300
http://bitbucket.org/pypy/pypy/changeset/d86329133431/
Log: test, fix for returning scalar from reduce function, fixes
pypy/numpy #57
diff --git a/pypy/module/micronumpy/test/dummy_module.py b/pypy/module/micronumpy/test/dummy_module.py
--- a/pypy/module/micronumpy/test/dummy_module.py
+++ b/pypy/module/micronumpy/test/dummy_module.py
@@ -27,7 +27,8 @@
globals()['uint'] = dtype('uint').type
types = ['Generic', 'Number', 'Integer', 'SignedInteger', 'UnsignedInteger',
- 'Inexact', 'Floating', 'ComplexFloating', 'Flexible', 'Character']
+ 'Inexact', 'Floating', 'ComplexFloating', 'Flexible', 'Character',
+ ]
for t in types:
globals()[t.lower()] = typeinfo[t]
@@ -40,4 +41,4 @@
return a
def isscalar(a):
- return type(a) in [typeinfo[t] for t in types]
+ return any([isinstance(a, typeinfo[t]) for t in types])
diff --git a/pypy/module/micronumpy/test/test_ndarray.py b/pypy/module/micronumpy/test/test_ndarray.py
--- a/pypy/module/micronumpy/test/test_ndarray.py
+++ b/pypy/module/micronumpy/test/test_ndarray.py
@@ -1486,7 +1486,7 @@
assert d[1] == 12
def test_sum(self):
- from numpy import array, zeros, float16, complex64, str_
+ from numpy import array, zeros, float16, complex64, str_, isscalar, add
a = array(range(5))
assert a.sum() == 10
assert a[:4].sum() == 6
@@ -1515,6 +1515,13 @@
assert list(zeros((0, 2)).sum(axis=1)) == []
+ a = array([1, 2, 3, 4]).sum()
+ s = isscalar(a)
+ assert s is True
+ a = add.reduce([1.0, 2, 3, 4])
+ s = isscalar(a)
+ assert s is True,'%r is not a scalar' % type(a)
+
def test_reduce_nd(self):
from numpy import arange, array
a = arange(15).reshape(5, 3)
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
@@ -288,10 +288,8 @@
_, dtype, _ = self.find_specialization(space, dtype, dtype, out,
casting='unsafe')
- call__array_wrap__ = True
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 "
@@ -302,15 +300,20 @@
if out:
out.set_scalar_value(res)
return out
+ w_NDimArray = space.gettypefor(W_NDimArray)
+ call__array_wrap__ = False
if keepdims:
shape = [1] * len(obj_shape)
out = W_NDimArray.from_shape(space, shape, dtype, w_instance=obj)
out.implementation.setitem(0, res)
+ call__array_wrap__ = True
res = out
- elif not space.is_w(space.type(w_obj), space.gettypefor(W_NDimArray)):
+ elif (space.issubtype_w(space.type(w_obj), w_NDimArray) and
+ not space.is_w(space.type(w_obj), 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)
+ call__array_wrap__ = True
res = out
if call__array_wrap__:
res = space.call_method(obj, '__array_wrap__', res, space.w_None)
@@ -359,8 +362,7 @@
return out
loop.reduce(
space, self.func, obj, axis_flags, dtype, out, self.identity)
- if call__array_wrap__:
- out = space.call_method(obj, '__array_wrap__', out, space.w_None)
+ out = space.call_method(obj, '__array_wrap__', out, space.w_None)
return out
def descr_outer(self, space, args_w):
More information about the pypy-commit
mailing list