[pypy-commit] pypy numpy-exp: (michaelh) add min & max ufuncs, together with ufunc2 decorator
fijal
noreply at buildbot.pypy.org
Mon May 16 23:24:30 CEST 2011
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-exp
Changeset: r44221:ee7788d5c792
Date: 2011-05-16 23:33 +0200
http://bitbucket.org/pypy/pypy/changeset/ee7788d5c792/
Log: (michaelh) add min & max ufuncs, together with ufunc2 decorator
diff --git a/pypy/module/micronumpy/__init__.py b/pypy/module/micronumpy/__init__.py
--- a/pypy/module/micronumpy/__init__.py
+++ b/pypy/module/micronumpy/__init__.py
@@ -12,6 +12,8 @@
# ufuncs
'absolute': 'interp_ufuncs.absolute',
'negative': 'interp_ufuncs.negative',
+ 'minimum': 'interp_ufuncs.minimum',
+ 'maximum': 'interp_ufuncs.maximum',
}
appleveldefs = {}
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
@@ -1,5 +1,5 @@
from pypy.interpreter.gateway import unwrap_spec
-from pypy.module.micronumpy.interp_numarray import BaseArray, Call1, Signature
+from pypy.module.micronumpy.interp_numarray import BaseArray, Call1, Call2, Signature
from pypy.tool.sourcetools import func_with_new_name
@@ -12,10 +12,29 @@
return w_res
return func_with_new_name(impl, "%s_dispatcher" % func.__name__)
+def ufunc2(func):
+ signature = Signature()
+ @unwrap_spec(larray=BaseArray, rarray=BaseArray)
+ def impl(space, larray, rarray):
+ new_sig = larray.signature.transition(signature)
+ w_res = Call2(func, larray, rarray, rarray.signature.transition(new_sig))
+ larray.invalidates.append(w_res)
+ rarray.invalidates.append(w_res)
+ return w_res
+ return func_with_new_name(impl, "%s_dispatcher" % func.__name__)
+
@ufunc
def negative(value):
return -value
@ufunc
def absolute(value):
- return abs(value)
\ No newline at end of file
+ return abs(value)
+
+ at ufunc2
+def minimum(lvalue, rvalue):
+ return min(lvalue, rvalue)
+
+ at ufunc2
+def maximum(lvalue, rvalue):
+ return max(lvalue, rvalue)
diff --git a/pypy/module/micronumpy/test/test_ufuncs.py b/pypy/module/micronumpy/test/test_ufuncs.py
--- a/pypy/module/micronumpy/test/test_ufuncs.py
+++ b/pypy/module/micronumpy/test/test_ufuncs.py
@@ -21,4 +21,22 @@
a = array([-5.0, -0.0, 1.0])
b = absolute(a)
for i in range(3):
- assert b[i] == abs(a[i])
\ No newline at end of file
+ assert b[i] == abs(a[i])
+
+ def test_minimum(self):
+ from numpy import array, minimum
+
+ a = array([-5.0, -0.0, 1.0])
+ b = array([ 3.0, -2.0,-3.0])
+ c = minimum(a, b)
+ for i in range(3):
+ assert c[i] == min(a[i], b[i])
+
+ def test_maximum(self):
+ from numpy import array, maximum
+
+ a = array([-5.0, -0.0, 1.0])
+ b = array([ 3.0, -2.0,-3.0])
+ c = maximum(a, b)
+ for i in range(3):
+ assert c[i] == max(a[i], b[i])
More information about the pypy-commit
mailing list