[pypy-commit] pypy numpy-indexing-by-arrays-2: add & and |
fijal
noreply at buildbot.pypy.org
Tue Jan 17 10:29:48 CET 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-indexing-by-arrays-2
Changeset: r51383:35596eb33a6f
Date: 2012-01-17 11:29 +0200
http://bitbucket.org/pypy/pypy/changeset/35596eb33a6f/
Log: add & and |
diff --git a/pypy/module/micronumpy/__init__.py b/pypy/module/micronumpy/__init__.py
--- a/pypy/module/micronumpy/__init__.py
+++ b/pypy/module/micronumpy/__init__.py
@@ -85,6 +85,8 @@
("subtract", "subtract"),
('sqrt', 'sqrt'),
("tan", "tan"),
+ ('bitwise_and', 'bitwise_and'),
+ ('bitwise_or', 'bitwise_or'),
]:
interpleveldefs[exposed] = "interp_ufuncs.get(space).%s" % impl
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
@@ -270,6 +270,9 @@
descr_gt = _binop_impl("greater")
descr_ge = _binop_impl("greater_equal")
+ descr_and = _binop_impl("bitwise_and")
+ descr_or = _binop_impl("bitwise_or")
+
def _binop_right_impl(ufunc_name):
def impl(self, space, w_other):
w_other = scalar_w(space,
@@ -1279,6 +1282,9 @@
__gt__ = interp2app(BaseArray.descr_gt),
__ge__ = interp2app(BaseArray.descr_ge),
+ __and__ = interp2app(BaseArray.descr_and),
+ __or__ = interp2app(BaseArray.descr_or),
+
__repr__ = interp2app(BaseArray.descr_repr),
__str__ = interp2app(BaseArray.descr_str),
__array_interface__ = GetSetProperty(BaseArray.descr_array_iface),
diff --git a/pypy/module/micronumpy/interp_ufuncs.py b/pypy/module/micronumpy/interp_ufuncs.py
--- a/pypy/module/micronumpy/interp_ufuncs.py
+++ b/pypy/module/micronumpy/interp_ufuncs.py
@@ -425,6 +425,8 @@
("add", "add", 2, {"identity": 0}),
("subtract", "sub", 2),
("multiply", "mul", 2, {"identity": 1}),
+ ("bitwise_and", "bitwise_and", 2, {"identity": 1}),
+ ("bitwise_or", "bitwise_or", 2, {"identity": 0}),
("divide", "div", 2, {"promote_bools": True}),
("mod", "mod", 2, {"promote_bools": True}),
("power", "pow", 2, {"promote_bools": True}),
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
@@ -1318,6 +1318,7 @@
assert (a[a > 3] == [4, 5, 6, 7, 8, 9]).all()
a = arange(10).reshape(5, 2)
assert (a[a > 3] == [4, 5, 6, 7, 8, 9]).all()
+ assert (a[a & 1] == [0, 2, 4, 6, 8]).all()
class AppTestSupport(BaseNumpyAppTest):
def setup_class(cls):
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
@@ -347,11 +347,19 @@
raises(ValueError, maximum.reduce, [])
def test_reduceND(self):
- from numpypy import add, arange
+ from _numpypy import add, arange
a = arange(12).reshape(3, 4)
assert (add.reduce(a, 0) == [12, 15, 18, 21]).all()
assert (add.reduce(a, 1) == [6.0, 22.0, 38.0]).all()
+ def test_bitwise(self):
+ from _numpypy import bitwise_and, bitwise_or, arange
+ a = arange(6).reshape(2, 3)
+ assert (a & 1 == [[0, 1, 0], [1, 0, 1]]).all()
+ assert (a & 1 == bitwise_and(a, 1)).all()
+ assert (a | 1 == [[1, 1, 3], [3, 5, 5]]).all()
+ assert (a | 1 == bitwise_or(a, 1)).all()
+
def test_comparisons(self):
import operator
from _numpypy import equal, not_equal, less, less_equal, greater, greater_equal
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
@@ -174,6 +174,15 @@
def min(self, v1, v2):
return min(v1, v2)
+ @simple_binary_op
+ def bitwise_and(self, v1, v2):
+ return v1 & v2
+
+ @simple_binary_op
+ def bitwise_or(self, v1, v2):
+ return v1 | v2
+
+
class Bool(BaseType, Primitive):
T = lltype.Bool
BoxType = interp_boxes.W_BoolBox
More information about the pypy-commit
mailing list