Author: Justin Peel <[email protected]>
Branch:
Changeset: r45834:136146a41b4a
Date: 2011-07-21 11:18 -0600
http://bitbucket.org/pypy/pypy/changeset/136146a41b4a/
Log: numpy: changed numarray unary functions to use ufuncs
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
@@ -28,12 +28,6 @@
slice_driver1 = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step',
'stop', 'storage', 'arr'])
slice_driver2 = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step',
'stop', 'storage', 'arr'])
-def pos(v):
- return v
-def neg(v):
- return -v
-def absolute(v):
- return abs(v)
def add(v1, v2):
return v1 + v2
def mul(v1, v2):
@@ -59,21 +53,14 @@
arr.force_if_needed()
del self.invalidates[:]
- def _unop_impl(function):
- signature = Signature()
+ def _unaryop_impl(w_ufunc):
def impl(self, space):
- new_sig = self.signature.transition(signature)
- res = Call1(
- function,
- self,
- new_sig)
- self.invalidates.append(res)
- return space.wrap(res)
- return func_with_new_name(impl, "uniop_%s_impl" % function.__name__)
+ return w_ufunc(space, self)
+ return func_with_new_name(impl, "unaryop_%s_impl" % w_ufunc.__name__)
- descr_pos = _unop_impl(pos)
- descr_neg = _unop_impl(neg)
- descr_abs = _unop_impl(absolute)
+ descr_pos = _unaryop_impl(interp_ufuncs.positive)
+ descr_neg = _unaryop_impl(interp_ufuncs.negative)
+ descr_abs = _unaryop_impl(interp_ufuncs.absolute)
def _binop_impl(w_ufunc):
def impl(self, space, w_other):
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
@@ -72,6 +72,11 @@
def multiply(lvalue, rvalue):
return lvalue * rvalue
+# Used by numarray for __pos__. Not visible from numpy application space.
+@ufunc
+def positive(value):
+ return value
+
@ufunc
def negative(value):
return -value
@@ -114,4 +119,4 @@
@ufunc2
def mod(lvalue, rvalue):
- return math.fmod(lvalue, rvalue)
\ No newline at end of file
+ return math.fmod(lvalue, rvalue)
diff --git a/pypy/module/micronumpy/test/test_zjit.py
b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -1,7 +1,7 @@
from pypy.jit.metainterp.test.support import LLJitMixin
from pypy.rpython.test.test_llinterp import interpret
from pypy.module.micronumpy.interp_numarray import (SingleDimArray, Signature,
- FloatWrapper, Call2, SingleDimSlice, add, mul, neg, Call1)
+ FloatWrapper, Call2, SingleDimSlice, add, mul, Call1)
from pypy.module.micronumpy.interp_ufuncs import negative
from pypy.module.micronumpy.compile import numpy_compile
from pypy.rlib.objectmodel import specialize
@@ -48,19 +48,6 @@
"int_lt": 1, "guard_true": 1, "jump": 1})
assert result == f(5)
- def test_neg(self):
- def f(i):
- ar = SingleDimArray(i)
- v = Call1(neg, ar, Signature())
- return v.get_concrete().storage[3]
-
- result = self.meta_interp(f, [5], listops=True, backendopt=True)
- self.check_loops({"getarrayitem_raw": 1, "float_neg": 1,
- "setarrayitem_raw": 1, "int_add": 1,
- "int_lt": 1, "guard_true": 1, "jump": 1})
-
- assert result == f(5)
-
def test_sum(self):
space = self.space
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit