[pypy-commit] pypy default: added a ton of operators to numpy boxes
alex_gaynor
noreply at buildbot.pypy.org
Thu Feb 9 15:38:22 CET 2012
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch:
Changeset: r52295:fc7d59dde5f3
Date: 2012-02-09 09:38 -0500
http://bitbucket.org/pypy/pypy/changeset/fc7d59dde5f3/
Log: added a ton of operators to numpy boxes
diff --git a/pypy/module/micronumpy/interp_boxes.py b/pypy/module/micronumpy/interp_boxes.py
--- a/pypy/module/micronumpy/interp_boxes.py
+++ b/pypy/module/micronumpy/interp_boxes.py
@@ -83,6 +83,8 @@
descr_truediv = _binop_impl("true_divide")
descr_mod = _binop_impl("mod")
descr_pow = _binop_impl("power")
+ descr_lshift = _binop_impl("left_shift")
+ descr_rshift = _binop_impl("right_shift")
descr_and = _binop_impl("bitwise_and")
descr_or = _binop_impl("bitwise_or")
descr_xor = _binop_impl("bitwise_xor")
@@ -97,13 +99,29 @@
descr_radd = _binop_right_impl("add")
descr_rsub = _binop_right_impl("subtract")
descr_rmul = _binop_right_impl("multiply")
+ descr_rdiv = _binop_right_impl("divide")
+ descr_rmod = _binop_right_impl("mod")
descr_rpow = _binop_right_impl("power")
+ descr_rlshift = _binop_right_impl("left_shift")
+ descr_rrshift = _binop_right_impl("right_shift")
+ descr_rand = _binop_right_impl("bitwise_and")
+ descr_ror = _binop_right_impl("bitwise_or")
descr_pos = _unaryop_impl("positive")
descr_neg = _unaryop_impl("negative")
descr_abs = _unaryop_impl("absolute")
descr_invert = _unaryop_impl("invert")
+ def descr_divmod(self, space, w_other):
+ w_quotient = self.descr_div(space, w_other)
+ w_remainder = self.descr_mod(space, w_other)
+ return space.newtuple([w_quotient, w_remainder])
+
+ def descr_rdivmod(self, space, w_other):
+ w_quotient = self.descr_rdiv(space, w_other)
+ w_remainder = self.descr_rmod(space, w_other)
+ return space.newtuple([w_quotient, w_remainder])
+
def item(self, space):
return self.get_dtype(space).itemtype.to_builtin_type(space, self)
@@ -185,7 +203,10 @@
__div__ = interp2app(W_GenericBox.descr_div),
__truediv__ = interp2app(W_GenericBox.descr_truediv),
__mod__ = interp2app(W_GenericBox.descr_mod),
+ __divmod__ = interp2app(W_GenericBox.descr_divmod),
__pow__ = interp2app(W_GenericBox.descr_pow),
+ __lshift__ = interp2app(W_GenericBox.descr_lshift),
+ __rshift__ = interp2app(W_GenericBox.descr_rshift),
__and__ = interp2app(W_GenericBox.descr_and),
__or__ = interp2app(W_GenericBox.descr_or),
__xor__ = interp2app(W_GenericBox.descr_xor),
@@ -193,7 +214,14 @@
__radd__ = interp2app(W_GenericBox.descr_radd),
__rsub__ = interp2app(W_GenericBox.descr_rsub),
__rmul__ = interp2app(W_GenericBox.descr_rmul),
+ __rdiv__ = interp2app(W_GenericBox.descr_rdiv),
+ __rmod__ = interp2app(W_GenericBox.descr_rmod),
+ __rdivmod__ = interp2app(W_GenericBox.descr_rdivmod),
__rpow__ = interp2app(W_GenericBox.descr_rpow),
+ __rlshift__ = interp2app(W_GenericBox.descr_rlshift),
+ __rrshift__ = interp2app(W_GenericBox.descr_rrshift),
+ __rand__ = interp2app(W_GenericBox.descr_rand),
+ __ror__ = interp2app(W_GenericBox.descr_ror),
__eq__ = interp2app(W_GenericBox.descr_eq),
__ne__ = interp2app(W_GenericBox.descr_ne),
diff --git a/pypy/module/micronumpy/test/test_dtypes.py b/pypy/module/micronumpy/test/test_dtypes.py
--- a/pypy/module/micronumpy/test/test_dtypes.py
+++ b/pypy/module/micronumpy/test/test_dtypes.py
@@ -406,15 +406,26 @@
from operator import truediv
from _numpypy import float64, int_, True_, False_
+ assert 5 / int_(2) == int_(2)
assert truediv(int_(3), int_(2)) == float64(1.5)
+ assert int_(8) % int_(3) == int_(2)
+ assert 8 % int_(3) == int_(2)
+ assert divmod(int_(8), int_(3)) == (int_(2), int_(2))
+ assert divmod(8, int_(3)) == (int_(2), int_(2))
assert 2 ** int_(3) == int_(8)
+ assert int_(3) << int_(2) == int_(12)
+ assert 3 << int_(2) == int_(12)
+ assert int_(8) >> int_(2) == int_(2)
+ assert 8 >> int_(2) == int_(2)
assert int_(3) & int_(1) == int_(1)
- raises(TypeError, lambda: float64(3) & 1)
- assert int_(8) % int_(3) == int_(2)
+ assert 2 & int_(3) == int_(2)
assert int_(2) | int_(1) == int_(3)
+ assert 2 | int_(1) == int_(3)
assert int_(3) ^ int_(5) == int_(6)
assert True_ ^ False_ is True_
assert +int_(3) == int_(3)
assert ~int_(3) == int_(-4)
+ raises(TypeError, lambda: float64(3) & 1)
+
More information about the pypy-commit
mailing list