[pypy-commit] pypy numpy-refactor: copy paste more ops
fijal
noreply at buildbot.pypy.org
Tue Sep 4 13:03:51 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-refactor
Changeset: r57120:c5fdab36c87d
Date: 2012-09-04 12:58 +0200
http://bitbucket.org/pypy/pypy/changeset/c5fdab36c87d/
Log: copy paste more ops
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
@@ -140,7 +140,25 @@
def descr_get_transpose(self, space):
return W_NDimArray(self.implementation.transpose())
- # --------------------- binary operations ----------------------------
+ # --------------------- operations ----------------------------
+
+ def _unaryop_impl(ufunc_name):
+ def impl(self, space, w_out=None):
+ return getattr(interp_ufuncs.get(space), ufunc_name).call(space,
+ [self, w_out])
+ return func_with_new_name(impl, "unaryop_%s_impl" % ufunc_name)
+
+ descr_pos = _unaryop_impl("positive")
+ descr_neg = _unaryop_impl("negative")
+ descr_abs = _unaryop_impl("absolute")
+ descr_invert = _unaryop_impl("invert")
+
+ def descr_nonzero(self, space):
+ if self.get_size() > 1:
+ raise OperationError(space.w_ValueError, space.wrap(
+ "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"))
+ iter = self.create_iter(self.shape)
+ return space.is_true(iter.getitem())
def _binop_impl(ufunc_name):
def impl(self, space, w_other, w_out=None):
@@ -185,6 +203,23 @@
return func_with_new_name(impl, "binop_right_%s_impl" % ufunc_name)
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_rtruediv = _binop_right_impl("true_divide")
+ descr_rfloordiv = _binop_right_impl("floor_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_rxor = _binop_right_impl("bitwise_xor")
+
+ 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])
# ----------------------- reduce -------------------------------
@@ -244,7 +279,14 @@
__repr__ = interp2app(W_NDimArray.descr_repr),
+ __pos__ = interp2app(W_NDimArray.descr_pos),
+ __neg__ = interp2app(W_NDimArray.descr_neg),
+ __abs__ = interp2app(W_NDimArray.descr_abs),
+ __invert__ = interp2app(W_NDimArray.descr_invert),
+ __nonzero__ = interp2app(W_NDimArray.descr_nonzero),
+
__add__ = interp2app(W_NDimArray.descr_add),
+ __sub__ = interp2app(W_NDimArray.descr_sub),
__mul__ = interp2app(W_NDimArray.descr_mul),
__div__ = interp2app(W_NDimArray.descr_div),
__truediv__ = interp2app(W_NDimArray.descr_truediv),
@@ -259,6 +301,19 @@
__xor__ = interp2app(W_NDimArray.descr_xor),
__radd__ = interp2app(W_NDimArray.descr_radd),
+ __rsub__ = interp2app(W_NDimArray.descr_rsub),
+ __rmul__ = interp2app(W_NDimArray.descr_rmul),
+ __rdiv__ = interp2app(W_NDimArray.descr_rdiv),
+ __rtruediv__ = interp2app(W_NDimArray.descr_rtruediv),
+ __rfloordiv__ = interp2app(W_NDimArray.descr_rfloordiv),
+ __rmod__ = interp2app(W_NDimArray.descr_rmod),
+ __rdivmod__ = interp2app(W_NDimArray.descr_rdivmod),
+ __rpow__ = interp2app(W_NDimArray.descr_rpow),
+ __rlshift__ = interp2app(W_NDimArray.descr_rlshift),
+ __rrshift__ = interp2app(W_NDimArray.descr_rrshift),
+ __rand__ = interp2app(W_NDimArray.descr_rand),
+ __ror__ = interp2app(W_NDimArray.descr_ror),
+ __rxor__ = interp2app(W_NDimArray.descr_rxor),
__eq__ = interp2app(W_NDimArray.descr_eq),
__ne__ = interp2app(W_NDimArray.descr_ne),
More information about the pypy-commit
mailing list