Author: Hakan Ardo <[email protected]>
Branch: jit-optimizeopt-cleanups
Changeset: r47787:0c0391d46337
Date: 2011-10-03 08:36 +0200
http://bitbucket.org/pypy/pypy/changeset/0c0391d46337/
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
@@ -23,6 +23,7 @@
("arccos", "arccos"),
("arcsin", "arcsin"),
("arctan", "arctan"),
+ ("arcsinh", "arcsinh"),
("copysign", "copysign"),
("cos", "cos"),
("divide", "divide"),
@@ -50,4 +51,5 @@
appleveldefs = {
'average': 'app_numpy.average',
'mean': 'app_numpy.mean',
+ 'inf': 'app_numpy.inf',
}
diff --git a/pypy/module/micronumpy/app_numpy.py
b/pypy/module/micronumpy/app_numpy.py
--- a/pypy/module/micronumpy/app_numpy.py
+++ b/pypy/module/micronumpy/app_numpy.py
@@ -1,5 +1,8 @@
import numpy
+
+inf = float("inf")
+
def average(a):
# This implements a weighted average, for now we don't implement the
# weighting, just the average part!
@@ -8,4 +11,4 @@
def mean(a):
if not hasattr(a, "mean"):
a = numpy.array(a)
- return a.mean()
\ No newline at end of file
+ return a.mean()
diff --git a/pypy/module/micronumpy/interp_dtype.py
b/pypy/module/micronumpy/interp_dtype.py
--- a/pypy/module/micronumpy/interp_dtype.py
+++ b/pypy/module/micronumpy/interp_dtype.py
@@ -261,6 +261,9 @@
@unaryop
def arctan(self, v):
return math.atan(v)
+ @unaryop
+ def arcsinh(self, v):
+ return math.asinh(v)
class IntegerArithmeticDtype(ArithmaticTypeMixin):
_mixin_ = True
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
@@ -268,6 +268,7 @@
("arcsin", "arcsin", 1, {"promote_to_float": True}),
("arccos", "arccos", 1, {"promote_to_float": True}),
("arctan", "arctan", 1, {"promote_to_float": True}),
+ ("arcsinh", "arcsinh", 1, {"promote_to_float": True}),
]:
self.add_ufunc(space, *ufunc_def)
diff --git a/pypy/module/micronumpy/test/test_module.py
b/pypy/module/micronumpy/test/test_module.py
--- a/pypy/module/micronumpy/test/test_module.py
+++ b/pypy/module/micronumpy/test/test_module.py
@@ -10,4 +10,9 @@
def test_average(self):
from numpy import array, average
assert average(range(10)) == 4.5
- assert average(array(range(10))) == 4.5
\ No newline at end of file
+ assert average(array(range(10))) == 4.5
+
+ def test_inf(self):
+ from numpy import inf
+ assert type(inf) is float
+ assert inf == float("inf")
\ No newline at end of file
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
@@ -298,6 +298,14 @@
b = arctan(a)
assert math.isnan(b[0])
+ def test_arcsinh(self):
+ import math
+ from numpy import arcsinh, inf
+
+ for v in [inf, -inf, 1.0, math.e]:
+ assert math.asinh(v) == arcsinh(v)
+ assert math.isnan(arcsinh(float("nan")))
+
def test_reduce_errors(self):
from numpy import sin, add
diff --git a/pypy/objspace/descroperation.py b/pypy/objspace/descroperation.py
--- a/pypy/objspace/descroperation.py
+++ b/pypy/objspace/descroperation.py
@@ -258,15 +258,15 @@
msg = "'%s' has no length" % (name,)
raise OperationError(space.w_TypeError, space.wrap(msg))
w_res = space.get_and_call_function(w_descr, w_obj)
- space._check_len_result(w_res)
- return w_res
+ return space.wrap(space._check_len_result(w_res))
def _check_len_result(space, w_obj):
# Will complain if result is too big.
- result = space.int_w(w_obj)
+ result = space.int_w(space.int(w_obj))
if result < 0:
raise OperationError(space.w_ValueError,
space.wrap("__len__() should return >= 0"))
+ return result
def iter(space, w_obj):
w_descr = space.lookup(w_obj, '__iter__')
diff --git a/pypy/objspace/std/rangeobject.py b/pypy/objspace/std/rangeobject.py
--- a/pypy/objspace/std/rangeobject.py
+++ b/pypy/objspace/std/rangeobject.py
@@ -23,7 +23,7 @@
class W_RangeListObject(W_Object):
typedef = listtype.list_typedef
-
+
def __init__(w_self, start, step, length):
assert step != 0
w_self.start = start
@@ -40,7 +40,7 @@
if not length:
w_self.w_list = space.newlist([])
return w_self.w_list
-
+
arr = [None] * length # this is to avoid using append.
i = start
@@ -146,7 +146,11 @@
if length == 0:
raise OperationError(space.w_IndexError,
space.wrap("pop from empty list"))
- idx = space.int_w(w_idx)
+ if space.isinstance_w(w_idx, space.w_float):
+ raise OperationError(space.w_TypeError,
+ space.wrap("integer argument expected, got float")
+ )
+ idx = space.int_w(space.int(w_idx))
if idx == 0:
result = w_rangelist.start
w_rangelist.start += w_rangelist.step
diff --git a/pypy/objspace/std/test/test_typeobject.py
b/pypy/objspace/std/test/test_typeobject.py
--- a/pypy/objspace/std/test/test_typeobject.py
+++ b/pypy/objspace/std/test/test_typeobject.py
@@ -132,6 +132,19 @@
assert A("hello") is str
+ # Make sure type(x) doesn't call x.__class__.__init__
+ class T(type):
+ counter = 0
+ def __init__(self, *args):
+ T.counter += 1
+ class C:
+ __metaclass__ = T
+ assert T.counter == 1
+ a = C()
+ assert T.counter == 1
+ assert type(a) is C
+ assert T.counter == 1
+
def test_bases(self):
assert int.__bases__ == (object,)
class X:
diff --git a/pypy/objspace/std/typeobject.py b/pypy/objspace/std/typeobject.py
--- a/pypy/objspace/std/typeobject.py
+++ b/pypy/objspace/std/typeobject.py
@@ -77,7 +77,7 @@
for i in range(len(self.lookup_where)):
self.lookup_where[i] = None_None
-# possible values of compares_by_identity_status
+# possible values of compares_by_identity_status
UNKNOWN = 0
COMPARES_BY_IDENTITY = 1
OVERRIDES_EQ_CMP_OR_HASH = 2
@@ -358,7 +358,7 @@
if w_value is not None:
return w_value
return None
-
+
@unroll_safe
def _lookup(w_self, key):
space = w_self.space
@@ -848,7 +848,8 @@
call_init = space.isinstance_w(w_newobject, w_type)
# maybe invoke the __init__ of the type
- if call_init:
+ if (call_init and not (space.is_w(w_type, space.w_type) and
+ not __args__.keywords and len(__args__.arguments_w) == 1)):
w_descr = space.lookup(w_newobject, '__init__')
w_result = space.get_and_call_args(w_descr, w_newobject, __args__)
if not space.is_w(w_result, space.w_None):
diff --git a/pypy/objspace/test/test_descroperation.py
b/pypy/objspace/test/test_descroperation.py
--- a/pypy/objspace/test/test_descroperation.py
+++ b/pypy/objspace/test/test_descroperation.py
@@ -667,5 +667,19 @@
return -1L
raises(ValueError, len, Y())
+ def test_len_custom__int__(self):
+ class X(object):
+ def __init__(self, x):
+ self.x = x
+ def __len__(self):
+ return self.x
+ def __int__(self):
+ return self.x
+
+ l = len(X(3.0))
+ assert l == 3 and type(l) is int
+ l = len(X(X(2)))
+ assert l == 2 and type(l) is int
+
class AppTestWithBuiltinShortcut(AppTest_Descroperation):
OPTIONS = {'objspace.std.builtinshortcut': True}
diff --git a/pypy/rpython/lltypesystem/rlist.py
b/pypy/rpython/lltypesystem/rlist.py
--- a/pypy/rpython/lltypesystem/rlist.py
+++ b/pypy/rpython/lltypesystem/rlist.py
@@ -1,15 +1,15 @@
+from pypy.rlib import rgc, jit
+from pypy.rlib.debug import ll_assert
+from pypy.rlib.objectmodel import enforceargs
+from pypy.rpython.lltypesystem import rstr
+from pypy.rpython.lltypesystem.lltype import (GcForwardReference, Ptr, GcArray,
+ GcStruct, Void, Signed, malloc, typeOf, nullptr, typeMethod)
+from pypy.rpython.rlist import (AbstractBaseListRepr, AbstractListRepr,
+ AbstractFixedSizeListRepr, AbstractListIteratorRepr, ll_setitem_nonneg,
+ ADTIList, ADTIFixedList, dum_nocheck)
+from pypy.rpython.rmodel import Repr, inputconst, externalvsinternal
from pypy.tool.pairtype import pairtype, pair
-from pypy.rpython.rmodel import Repr, inputconst
-from pypy.rpython.rmodel import externalvsinternal
-from pypy.rpython.rlist import AbstractBaseListRepr, AbstractListRepr, \
- AbstractFixedSizeListRepr, AbstractListIteratorRepr, \
- ll_setitem_nonneg, ADTIList, ADTIFixedList
-from pypy.rpython.rlist import dum_nocheck
-from pypy.rpython.lltypesystem.lltype import GcForwardReference, Ptr, GcArray,\
- GcStruct, Void, Signed, malloc, typeOf, nullptr, typeMethod
-from pypy.rpython.lltypesystem import rstr
-from pypy.rlib.debug import ll_assert
-from pypy.rlib import rgc, jit
+
# ____________________________________________________________
#
@@ -171,6 +171,7 @@
# adapted C code
+@enforceargs(None, int)
def _ll_list_resize_really(l, newsize):
"""
Ensure l.items has room for at least newsize elements, and set
@@ -210,7 +211,6 @@
rgc.ll_arraycopy(items, newitems, 0, 0, p)
l.length = newsize
l.items = newitems
-_ll_list_resize_really._annenforceargs_ = (None, int)
# this common case was factored out of _ll_list_resize
# to see if inlining it gives some speed-up.
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit