[pypy-commit] pypy fix-result-types: fix return type for unary ufuncs on object scalars
rlamy
noreply at buildbot.pypy.org
Fri May 15 19:08:58 CEST 2015
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: fix-result-types
Changeset: r77341:55bc2289b455
Date: 2015-05-15 18:09 +0100
http://bitbucket.org/pypy/pypy/changeset/55bc2289b455/
Log: fix return type for unary ufuncs on object scalars
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
@@ -403,6 +403,12 @@
b = negative(a + a)
assert (b == [[-2, -4], [-6, -8]]).all()
+ class Obj(object):
+ def __neg__(self):
+ return 'neg'
+ x = Obj()
+ assert type(negative(x)) is str
+
def test_abs(self):
from numpy import array, absolute
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
@@ -21,6 +21,7 @@
get_storage_as_int, is_rhs_priority_higher)
from .casting import (
find_unaryop_result_dtype, find_binop_result_dtype, can_cast_type)
+from .boxes import W_ObjectBox
def done_if_true(dtype, val):
return dtype.itemtype.bool(val)
@@ -459,7 +460,8 @@
w_val = self.func(in_dtype, w_arg.convert_to(space, in_dtype))
if out is None:
if out_dtype.is_object():
- w_val = w_arg
+ assert isinstance(w_val, W_ObjectBox)
+ return w_val.w_obj
return w_val
w_val = out_dtype.coerce(space, w_val)
if out.is_scalar():
More information about the pypy-commit
mailing list