Author: Brian Kearns <bdkea...@gmail.com> Branch: Changeset: r71097:c691b2acd560 Date: 2014-04-30 14:24 -0400 http://bitbucket.org/pypy/pypy/changeset/c691b2acd560/
Log: fix numpy.maximum/minimum on nans 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 @@ -310,7 +310,7 @@ assert math.isnan(fmod(v, 2)) def test_minimum(self): - from numpypy import array, minimum + from numpypy import array, minimum, nan, isnan a = array([-5.0, -0.0, 1.0]) b = array([ 3.0, -2.0,-3.0]) @@ -318,8 +318,12 @@ for i in range(3): assert c[i] == min(a[i], b[i]) + arg1 = array([0, nan, nan]) + arg2 = array([nan, 0, nan]) + assert isnan(minimum(arg1, arg2)).all() + def test_maximum(self): - from numpypy import array, maximum + from numpypy import array, maximum, nan, isnan a = array([-5.0, -0.0, 1.0]) b = array([ 3.0, -2.0,-3.0]) @@ -327,6 +331,10 @@ for i in range(3): assert c[i] == max(a[i], b[i]) + arg1 = array([0, nan, nan]) + arg2 = array([nan, 0, nan]) + assert isnan(maximum(arg1, arg2)).all() + x = maximum(2, 3) assert x == 3 assert isinstance(x, (int, long)) diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py --- a/pypy/module/micronumpy/types.py +++ b/pypy/module/micronumpy/types.py @@ -705,20 +705,20 @@ return math.fabs(v) @simple_binary_op + def max(self, v1, v2): + return v1 if v1 >= v2 or rfloat.isnan(v1) else v2 + + @simple_binary_op + def min(self, v1, v2): + return v1 if v1 <= v2 or rfloat.isnan(v1) else v2 + + @simple_binary_op def fmax(self, v1, v2): - if rfloat.isnan(v2): - return v1 - elif rfloat.isnan(v1): - return v2 - return max(v1, v2) + return v1 if v1 >= v2 or rfloat.isnan(v2) else v2 @simple_binary_op def fmin(self, v1, v2): - if rfloat.isnan(v2): - return v1 - elif rfloat.isnan(v1): - return v2 - return min(v1, v2) + return v1 if v1 <= v2 or rfloat.isnan(v2) else v2 @simple_binary_op def fmod(self, v1, v2): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit