[pypy-commit] pypy default: merge
fijal
noreply at buildbot.pypy.org
Wed Feb 8 19:03:33 CET 2012
Author: Maciej Fijalkowski <fijall at 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
More information about the pypy-commit
mailing list