Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r52250:b161b2e423b2 Date: 2012-02-08 20:03 +0200 http://bitbucket.org/pypy/pypy/changeset/b161b2e423b2/
Log: merge diff --git a/lib_pypy/numpy.py b/lib_pypy/numpy.py new file mode 100644 --- /dev/null +++ b/lib_pypy/numpy.py @@ -0,0 +1,5 @@ +raise ImportError( + "The 'numpy' module of PyPy is in-development and not complete. " + "To try it out anyway, you can either import from 'numpypy', " + "or just write 'import numpypy' first in your program and then " + "import from 'numpy' as usual.") diff --git a/lib_pypy/numpypy/__init__.py b/lib_pypy/numpypy/__init__.py --- a/lib_pypy/numpypy/__init__.py +++ b/lib_pypy/numpypy/__init__.py @@ -1,2 +1,5 @@ from _numpypy import * from .core import * + +import sys +sys.modules.setdefault('numpy', sys.modules['numpypy']) 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 @@ -81,7 +81,12 @@ descr_mul = _binop_impl("multiply") descr_div = _binop_impl("divide") descr_truediv = _binop_impl("true_divide") + descr_mod = _binop_impl("mod") descr_pow = _binop_impl("power") + descr_and = _binop_impl("bitwise_and") + descr_or = _binop_impl("bitwise_or") + descr_xor = _binop_impl("bitwise_xor") + descr_eq = _binop_impl("equal") descr_ne = _binop_impl("not_equal") descr_lt = _binop_impl("less") @@ -92,9 +97,12 @@ descr_radd = _binop_right_impl("add") descr_rsub = _binop_right_impl("subtract") descr_rmul = _binop_right_impl("multiply") + descr_rpow = _binop_right_impl("power") + descr_pos = _unaryop_impl("positive") descr_neg = _unaryop_impl("negative") descr_abs = _unaryop_impl("absolute") + descr_invert = _unaryop_impl("invert") def item(self, space): return self.get_dtype(space).itemtype.to_builtin_type(space, self) @@ -176,11 +184,16 @@ __mul__ = interp2app(W_GenericBox.descr_mul), __div__ = interp2app(W_GenericBox.descr_div), __truediv__ = interp2app(W_GenericBox.descr_truediv), + __mod__ = interp2app(W_GenericBox.descr_mod), __pow__ = interp2app(W_GenericBox.descr_pow), + __and__ = interp2app(W_GenericBox.descr_and), + __or__ = interp2app(W_GenericBox.descr_or), + __xor__ = interp2app(W_GenericBox.descr_xor), __radd__ = interp2app(W_GenericBox.descr_radd), __rsub__ = interp2app(W_GenericBox.descr_rsub), __rmul__ = interp2app(W_GenericBox.descr_rmul), + __rpow__ = interp2app(W_GenericBox.descr_rpow), __eq__ = interp2app(W_GenericBox.descr_eq), __ne__ = interp2app(W_GenericBox.descr_ne), @@ -189,8 +202,10 @@ __gt__ = interp2app(W_GenericBox.descr_gt), __ge__ = interp2app(W_GenericBox.descr_ge), + __pos__ = interp2app(W_GenericBox.descr_pos), __neg__ = interp2app(W_GenericBox.descr_neg), __abs__ = interp2app(W_GenericBox.descr_abs), + __invert__ = interp2app(W_GenericBox.descr_invert), tolist = interp2app(W_GenericBox.item), ) 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 @@ -383,9 +383,10 @@ ("subtract", "sub", 2), ("multiply", "mul", 2, {"identity": 1}), ("bitwise_and", "bitwise_and", 2, {"identity": 1, - 'int_only': True}), + "int_only": True}), ("bitwise_or", "bitwise_or", 2, {"identity": 0, - 'int_only': True}), + "int_only": True}), + ("bitwise_xor", "bitwise_xor", 2, {"int_only": True}), ("invert", "invert", 1, {"int_only": True}), ("divide", "div", 2, {"promote_bools": True}), ("true_divide", "div", 2, {"promote_to_float": True}), 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 @@ -404,6 +404,17 @@ def test_operators(self): from operator import truediv - from _numpypy import float64, int_ + from _numpypy import float64, int_, True_, False_ assert truediv(int_(3), int_(2)) == float64(1.5) + assert 2 ** int_(3) == int_(8) + assert int_(3) & int_(1) == int_(1) + raises(TypeError, lambda: float64(3) & 1) + assert int_(8) % int_(3) == int_(2) + assert int_(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) + 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 @@ -59,10 +59,6 @@ class BaseType(object): def _unimplemented_ufunc(self, *args): raise NotImplementedError - # add = sub = mul = div = mod = pow = eq = ne = lt = le = gt = ge = max = \ - # min = copysign = pos = neg = abs = sign = reciprocal = fabs = floor = \ - # exp = sin = cos = tan = arcsin = arccos = arctan = arcsinh = \ - # arctanh = _unimplemented_ufunc class Primitive(object): _mixin_ = True @@ -253,6 +249,10 @@ def bitwise_or(self, v1, v2): return v1 | v2 + @simple_binary_op + def bitwise_xor(self, v1, v2): + return v1 ^ v2 + @simple_unary_op def invert(self, v): return ~v @@ -313,6 +313,10 @@ def bitwise_or(self, v1, v2): return v1 | v2 + @simple_binary_op + def bitwise_xor(self, v1, v2): + return v1 ^ v2 + @simple_unary_op def invert(self, v): return ~v diff --git a/pypy/module/test_lib_pypy/numpypy/test_numpy.py b/pypy/module/test_lib_pypy/numpypy/test_numpy.py new file mode 100644 --- /dev/null +++ b/pypy/module/test_lib_pypy/numpypy/test_numpy.py @@ -0,0 +1,13 @@ +from pypy.conftest import gettestobjspace + +class AppTestNumpy: + def setup_class(cls): + cls.space = gettestobjspace(usemodules=['micronumpy']) + + def test_imports(self): + try: + import numpy # fails if 'numpypy' was not imported so far + except ImportError: + pass + import numpypy + import numpy # works after 'numpypy' has been imported _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit