[pypy-commit] pypy numpy-comparison: Returning False for "arr == None". Preparations for "zeors(3) == zeros(4)" to
snus_mumrik
noreply at buildbot.pypy.org
Wed Oct 19 23:49:14 CEST 2011
Author: Ilya Osadchiy <osadchiy.ilya at gmail.com>
Branch: numpy-comparison
Changeset: r48246:58762c30991d
Date: 2011-10-01 21:26 +0300
http://bitbucket.org/pypy/pypy/changeset/58762c30991d/
Log: Returning False for "arr == None". Preparations for "zeors(3) ==
zeros(4)" to return False
diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -74,8 +74,24 @@
descr_pow = _binop_impl("power")
descr_mod = _binop_impl("mod")
- descr_eq = _binop_impl("equal")
- descr_ne = _binop_impl("not_equal")
+ def _eq_ne_impl(ufunc_name, fallback_res):
+ assert isinstance(fallback_res, bool)
+ def impl(self, space, w_other):
+ # Unlike ufunc, operator may return simple bool
+ if space.is_w(w_other, space.w_None):
+ # Special case
+ return space.wrap(fallback_res)
+ try:
+ return getattr(interp_ufuncs.get(space), ufunc_name).call(space, [self, w_other])
+ except OperationError, e:
+ if e.match(space, space.w_ValueError):
+ # For the case when arrays of incompatible size are compared
+ return space.wrap(fallback_res)
+ raise
+ return func_with_new_name(impl, "binop_%s_impl" % ufunc_name)
+
+ descr_eq = _eq_ne_impl("equal", False)
+ descr_ne = _eq_ne_impl("not_equal", True)
descr_lt = _binop_impl("less")
descr_le = _binop_impl("less_equal")
descr_gt = _binop_impl("greater")
diff --git a/pypy/module/micronumpy/test/test_numarray.py b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -577,6 +577,15 @@
for i in xrange(5):
assert c[i] == func(b[i], 3)
+ def test_eq_ne(self):
+ from numpy import array
+ a = array(range(5))
+ assert (a == None) is False
+ assert (a != None) is True
+ # TODO: uncomment after size check is implemented
+ # b = array(range(2))
+ # assert (a == b) is False
+ # assert (a != b) is True
class AppTestSupport(object):
def setup_class(cls):
More information about the pypy-commit
mailing list