Author: Maciej Fijalkowski <[email protected]>
Branch:
Changeset: r45345:bff49201da90
Date: 2011-07-04 21:10 +0200
http://bitbucket.org/pypy/pypy/changeset/bff49201da90/
Log: (justinpeel) Micronumpy pow and mod
diff --git a/pypy/module/micronumpy/compile.py
b/pypy/module/micronumpy/compile.py
--- a/pypy/module/micronumpy/compile.py
+++ b/pypy/module/micronumpy/compile.py
@@ -40,6 +40,9 @@
elif b == '/':
right = stack.pop()
stack.append(stack.pop().descr_div(space, right))
+ elif b == '%':
+ right = stack.pop()
+ stack.append(stack.pop().descr_mod(space, right))
else:
print "Unknown opcode: %s" % b
raise BogusBytecode()
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
@@ -5,6 +5,7 @@
from pypy.rlib import jit
from pypy.rpython.lltypesystem import lltype
from pypy.tool.sourcetools import func_with_new_name
+import math
def dummy1(v):
@@ -38,6 +39,10 @@
return v1 * v2
def div(v1, v2):
return v1 / v2
+def pow(v1, v2):
+ return math.pow(v1, v2)
+def mod(v1, v2):
+ return math.fmod(v1, v2)
class BaseArray(Wrappable):
def __init__(self):
@@ -80,6 +85,8 @@
descr_sub = _binop_impl(sub)
descr_mul = _binop_impl(mul)
descr_div = _binop_impl(div)
+ descr_pow = _binop_impl(pow)
+ descr_mod = _binop_impl(mod)
def get_concrete(self):
raise NotImplementedError
@@ -355,6 +362,8 @@
__sub__ = interp2app(BaseArray.descr_sub),
__mul__ = interp2app(BaseArray.descr_mul),
__div__ = interp2app(BaseArray.descr_div),
+ __pow__ = interp2app(BaseArray.descr_pow),
+ __mod__ = interp2app(BaseArray.descr_mod),
mean = interp2app(BaseArray.descr_mean),
)
diff --git a/pypy/module/micronumpy/test/test_numarray.py
b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -154,6 +154,51 @@
for i in range(5):
assert b[i] == i / 5.0
+ def test_pow(self):
+ from numpy import array
+ a = array(range(5))
+ b = a ** a
+ for i in range(5):
+ print b[i], i**i
+ assert b[i] == i**i
+
+ def test_pow_other(self):
+ from numpy import array
+ a = array(range(5))
+ b = array([2, 2, 2, 2, 2])
+ c = a ** b
+ for i in range(5):
+ assert c[i] == i ** 2
+
+ def test_pow_constant(self):
+ from numpy import array
+ a = array(range(5))
+ b = a ** 2
+ for i in range(5):
+ assert b[i] == i ** 2
+
+ def test_mod(self):
+ from numpy import array
+ a = array(range(1,6))
+ b = a % a
+ for i in range(5):
+ assert b[i] == 0
+
+ def test_mod_other(self):
+ from numpy import array
+ a = array(range(5))
+ b = array([2, 2, 2, 2, 2])
+ c = a % b
+ for i in range(5):
+ assert c[i] == i % 2
+
+ def test_mod_constant(self):
+ from numpy import array
+ a = array(range(5))
+ b = a % 2
+ for i in range(5):
+ assert b[i] == i % 2
+
def test_auto_force(self):
from numpy import array
a = array(range(5))
@@ -213,4 +258,4 @@
from numpy import array, mean
a = array(range(5))
assert a.mean() == 2.0
- assert a[:4].mean() == 1.5
\ No newline at end of file
+ assert a[:4].mean() == 1.5
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit