[pypy-commit] pypy jit-singlefloat: hg merge default
arigo
noreply at buildbot.pypy.org
Sat Jul 30 12:27:59 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: jit-singlefloat
Changeset: r46107:ffc16e8f8e6e
Date: 2011-07-30 10:10 +0000
http://bitbucket.org/pypy/pypy/changeset/ffc16e8f8e6e/
Log: hg merge default
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
@@ -31,6 +31,9 @@
'sin': 'interp_ufuncs.sin',
'cos': 'interp_ufuncs.cos',
'tan': 'interp_ufuncs.tan',
+ 'arcsin': 'interp_ufuncs.arcsin',
+ 'arccos': 'interp_ufuncs.arccos',
+ 'arctan': 'interp_ufuncs.arctan',
}
appleveldefs = {
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
@@ -187,17 +187,17 @@
def _getnums(self, comma):
if self.find_size() > 1000:
nums = [
- float2string(self.getitem(index))
+ float2string(self.eval(index))
for index in range(3)
]
nums.append("..." + "," * comma)
nums.extend([
- float2string(self.getitem(index))
+ float2string(self.eval(index))
for index in range(self.find_size() - 3, self.find_size())
])
else:
nums = [
- float2string(self.getitem(index))
+ float2string(self.eval(index))
for index in range(self.find_size())
]
return nums
@@ -229,7 +229,7 @@
start, stop, step, slice_length = space.decode_index4(w_idx, self.find_size())
if step == 0:
# Single index
- return space.wrap(self.get_concrete().getitem(start))
+ return space.wrap(self.get_concrete().eval(start))
else:
# Slice
res = SingleDimSlice(start, stop, step, slice_length, self, self.signature.transition(SingleDimSlice.static_signature))
@@ -416,14 +416,12 @@
# in fact, ViewArray never gets "concrete" as it never stores data.
# This implementation is needed for BaseArray getitem/setitem to work,
# can be refactored.
+ self.parent.get_concrete()
return self
def eval(self, i):
return self.parent.eval(self.calc_index(i))
- def getitem(self, item):
- return self.parent.getitem(self.calc_index(item))
-
@unwrap_spec(item=int, value=float)
def setitem(self, item, value):
return self.parent.setitem(self.calc_index(item), value)
@@ -497,9 +495,6 @@
def descr_len(self, space):
return space.wrap(self.size)
- def getitem(self, item):
- return self.storage[item]
-
def setitem(self, item, value):
self.invalidated()
self.storage[item] = value
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
@@ -120,3 +120,20 @@
@ufunc2
def mod(lvalue, rvalue):
return math.fmod(lvalue, rvalue)
+
+
+ at ufunc
+def arcsin(value):
+ if value < -1.0 or value > 1.0:
+ return rfloat.NAN
+ return math.asin(value)
+
+ at ufunc
+def arccos(value):
+ if value < -1.0 or value > 1.0:
+ return rfloat.NAN
+ return math.acos(value)
+
+ at ufunc
+def arctan(value):
+ return math.atan(value)
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
@@ -70,6 +70,7 @@
from numpy import array, zeros
a = array(range(5))
assert str(a) == "[0.0 1.0 2.0 3.0 4.0]"
+ assert str((2*a)[:]) == "[0.0 2.0 4.0 6.0 8.0]"
a = zeros(1001)
assert str(a) == "[0.0 0.0 0.0 ..., 0.0 0.0 0.0]"
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
@@ -205,3 +205,47 @@
b = tan(a)
for i in range(len(a)):
assert b[i] == math.tan(a[i])
+
+
+ def test_arcsin(self):
+ import math
+ from numpy import array, arcsin
+
+ a = array([-1, -0.5, -0.33, 0, 0.33, 0.5, 1])
+ b = arcsin(a)
+ for i in range(len(a)):
+ assert b[i] == math.asin(a[i])
+
+ a = array([-10, -1.5, -1.01, 1.01, 1.5, 10, float('nan'), float('inf'), float('-inf')])
+ b = arcsin(a)
+ for f in b:
+ assert math.isnan(f)
+
+ def test_arccos(self):
+ import math
+ from numpy import array, arccos
+
+ a = array([-1, -0.5, -0.33, 0, 0.33, 0.5, 1])
+ b = arccos(a)
+ for i in range(len(a)):
+ assert b[i] == math.acos(a[i])
+
+
+ a = array([-10, -1.5, -1.01, 1.01, 1.5, 10, float('nan'), float('inf'), float('-inf')])
+ b = arccos(a)
+ for f in b:
+ assert math.isnan(f)
+
+ def test_arctan(self):
+ import math
+ from numpy import array, arctan
+
+ a = array([-3, -2, -1, 0, 1, 2, 3, float('inf'), float('-inf')])
+ b = arctan(a)
+ for i in range(len(a)):
+ assert b[i] == math.atan(a[i])
+
+ a = array([float('nan')])
+ b = arctan(a)
+ assert math.isnan(b[0])
+
diff --git a/pypy/module/pypyjit/test_pypy_c/test_misc.py b/pypy/module/pypyjit/test_pypy_c/test_misc.py
--- a/pypy/module/pypyjit/test_pypy_c/test_misc.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_misc.py
@@ -63,6 +63,7 @@
i7 = int_gt(i4, 1)
guard_true(i7, descr=...)
p9 = call(ConstClass(fromint), i4, descr=...)
+ guard_no_exception(descr=...)
p11 = call(ConstClass(rbigint.mul), p5, p9, descr=...)
guard_no_exception(descr=...)
i13 = int_sub(i4, 1)
diff --git a/pypy/objspace/std/stringobject.py b/pypy/objspace/std/stringobject.py
--- a/pypy/objspace/std/stringobject.py
+++ b/pypy/objspace/std/stringobject.py
@@ -913,7 +913,7 @@
def repr__String(space, w_str):
s = w_str._value
- buf = StringBuilder(50)
+ buf = StringBuilder(len(s) + 2)
quote = "'"
if quote in s and '"' not in s:
diff --git a/pypy/objspace/std/tupleobject.py b/pypy/objspace/std/tupleobject.py
--- a/pypy/objspace/std/tupleobject.py
+++ b/pypy/objspace/std/tupleobject.py
@@ -154,7 +154,7 @@
x = 0x345678
z = len(wrappeditems)
for w_item in wrappeditems:
- y = space.int_w(space.hash(w_item))
+ y = space.hash_w(w_item)
x = (x ^ y) * mult
z -= 1
mult += 82520 + z + z
diff --git a/pypy/rpython/lltypesystem/rbuilder.py b/pypy/rpython/lltypesystem/rbuilder.py
--- a/pypy/rpython/lltypesystem/rbuilder.py
+++ b/pypy/rpython/lltypesystem/rbuilder.py
@@ -93,23 +93,21 @@
@staticmethod
def ll_append_multiple_char(ll_builder, char, times):
- used = ll_builder.used
- if times + used > ll_builder.allocated:
+ use = ll_builder.used + times
+ if use > ll_builder.allocated:
ll_builder.grow(ll_builder, times)
- for i in range(times):
- ll_builder.buf.chars[used] = char
- used += 1
- ll_builder.used = used
+ for i in range(ll_builder.used, use):
+ ll_builder.buf.chars[i] = char
+ ll_builder.used = use
@staticmethod
def ll_append_charpsize(ll_builder, charp, size):
- used = ll_builder.used
- if used + size > ll_builder.allocated:
+ use = ll_builder.used + size
+ if use > ll_builder.allocated:
ll_builder.grow(ll_builder, size)
- for i in xrange(size):
- ll_builder.buf.chars[used] = charp[i]
- used += 1
- ll_builder.used = used
+ for i in xrange(ll_builder.used, use):
+ ll_builder.buf.chars[i] = charp[i]
+ ll_builder.used = use
@staticmethod
def ll_getlength(ll_builder):
diff --git a/pypy/translator/jvm/src/pypy/PyPy.java b/pypy/translator/jvm/src/pypy/PyPy.java
--- a/pypy/translator/jvm/src/pypy/PyPy.java
+++ b/pypy/translator/jvm/src/pypy/PyPy.java
@@ -1100,9 +1100,9 @@
if (Double.isNaN(x))
return interlink.recordFloatSigned(x, 0);
- // Infinity: Python throws exception
+ // Infinity: Python returns (inf, 0)
if (Double.isInfinite(x))
- interlink.throwOverflowError();
+ return interlink.recordFloatSigned(x, 0);
// Extract the various parts of the format:
final long e=11, f=52; // number of bits in IEEE format
More information about the pypy-commit
mailing list