[pypy-commit] pypy object-dtype2: revert part of f8e674fa7afc, explicitly create comp ufuncs
mattip
noreply at buildbot.pypy.org
Sun Apr 12 23:10:12 CEST 2015
Author: mattip <matti.picus at gmail.com>
Branch: object-dtype2
Changeset: r76783:c6d28d3e2f8a
Date: 2015-04-13 00:11 +0300
http://bitbucket.org/pypy/pypy/changeset/c6d28d3e2f8a/
Log: revert part of f8e674fa7afc, explicitly create comp ufuncs
diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py
--- a/pypy/module/micronumpy/types.py
+++ b/pypy/module/micronumpy/types.py
@@ -428,25 +428,29 @@
def default_fromstring(self, space):
return self.box(0)
- @simple_binary_op
- def div(self, v1, v2):
+ @specialize.argtype(1, 2)
+ def div(self, b1, b2):
+ v1 = self.for_computation(self.unbox(b1))
+ v2 = self.for_computation(self.unbox(b2))
if v2 == 0:
- return 0
+ return self.box(0)
if (self.T is rffi.SIGNEDCHAR or self.T is rffi.SHORT or self.T is rffi.INT or
self.T is rffi.LONG or self.T is rffi.LONGLONG):
if v2 == -1 and v1 == self.for_computation(most_neg_value_of(self.T)):
- return 0
- return v1 / v2
+ return self.box(0)
+ return self.box(v1 / v2)
- @simple_binary_op
- def floordiv(self, v1, v2):
+ @specialize.argtype(1, 2)
+ def floordiv(self, b1, b2):
+ v1 = self.for_computation(self.unbox(b1))
+ v2 = self.for_computation(self.unbox(b2))
if v2 == 0:
- return 0
+ return self.box(0)
if (self.T is rffi.SIGNEDCHAR or self.T is rffi.SHORT or self.T is rffi.INT or
self.T is rffi.LONG or self.T is rffi.LONGLONG):
if v2 == -1 and v1 == self.for_computation(most_neg_value_of(self.T)):
- return 0
- return v1 // v2
+ return self.box(0)
+ return self.box(v1 / v2)
@simple_binary_op
def mod(self, v1, v2):
@@ -482,7 +486,7 @@
elif v < 0:
return -1
else:
- #assert v == 0
+ assert v == 0
return 0
@raw_unary_op
@@ -1633,7 +1637,7 @@
_all_objs_for_tests = [] # for tests
-class ObjectType(BaseType):
+class ObjectType(Primitive, BaseType):
T = lltype.Signed
BoxType = boxes.W_ObjectBox
@@ -1687,6 +1691,8 @@
def box(self, w_obj):
if isinstance(w_obj, W_Root):
pass
+ elif isinstance(w_obj, bool):
+ w_obj = self.space.newbool(w_obj)
elif isinstance(w_obj, int):
w_obj = self.space.newint(w_obj)
elif isinstance(w_obj, lltype.Number):
@@ -1809,6 +1815,26 @@
def square(self, v):
return self.space.mul(v, v)
+ @simple_binary_op
+ def le(self, v1, v2):
+ return self.space.le(v1, v2)
+
+ @simple_binary_op
+ def ge(self, v1, v2):
+ return self.space.ge(v1, v2)
+
+ @simple_binary_op
+ def lt(self, v1, v2):
+ return self.space.lt(v1, v2)
+
+ @simple_binary_op
+ def gt(self, v1, v2):
+ return self.space.gt(v1, v2)
+
+ @simple_binary_op
+ def ne(self, v1, v2):
+ return self.space.ne(v1, v2)
+
def add_attributeerr_op(cls, op):
def func(self, *args):
raise oefmt(self.space.w_AttributeError,
@@ -1847,13 +1873,6 @@
func.__name__ = 'object_' + op
setattr(cls, op, func)
-def add_space_comp_op(cls, op):
- @raw_binary_op
- def func(self, v1, v2):
- return self.space.is_true(getattr(self.space, op)(v1, v2))
- func.__name__ = 'object_' + op
- setattr(cls, op, func)
-
for op in ('copysign', 'isfinite', 'isinf', 'isnan', 'logaddexp', 'logaddexp2',
'signbit'):
add_unsupported_op(ObjectType, op)
@@ -1868,8 +1887,6 @@
add_space_unary_op(ObjectType, op)
for op in ('add', 'floordiv', 'div', 'mod', 'mul', 'sub', 'lshift', 'rshift'):
add_space_binary_op(ObjectType, op)
-for op in ('lt', 'gt', 'le', 'ge', 'ne'):
- add_space_comp_op(ObjectType, op)
ObjectType.fmax = ObjectType.max
ObjectType.fmin = ObjectType.min
More information about the pypy-commit
mailing list