[pypy-commit] pypy object-dtype2: fix translation (for real)

rlamy noreply at buildbot.pypy.org
Fri Apr 17 01:57:24 CEST 2015


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: object-dtype2
Changeset: r76807:711516940e44
Date: 2015-04-17 00:57 +0100
http://bitbucket.org/pypy/pypy/changeset/711516940e44/

Log:	fix translation (for real)

diff --git a/pypy/module/micronumpy/ndarray.py b/pypy/module/micronumpy/ndarray.py
--- a/pypy/module/micronumpy/ndarray.py
+++ b/pypy/module/micronumpy/ndarray.py
@@ -890,10 +890,7 @@
                 "The truth value of an array with more than one element "
                 "is ambiguous. Use a.any() or a.all()"))
         iter, state = self.create_iter()
-        w_val = iter.getitem(state)
-        if self.get_dtype().is_object():
-            w_val = self.get_dtype().itemtype.unbox(w_val)
-        return space.wrap(space.is_true(w_val))
+        return space.wrap(space.is_true(iter.getitem(state)))
 
     def _binop_impl(ufunc_name):
         def impl(self, space, w_other, w_out=None):
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
@@ -1718,6 +1718,10 @@
     def str_format(self, box):
         return self.space.str_w(self.space.repr(self.unbox(box)))
 
+    def runpack_str(self, space, s):
+        raise oefmt(space.w_NotImplementedError,
+                    "fromstring not implemented for object type")
+
     def to_builtin_type(self, space, box):
         assert isinstance(box, self.BoxType)
         return box.w_obj
@@ -1753,14 +1757,14 @@
     @raw_binary_op
     def logical_and(self, v1, v2):
         if self._obool(v1):
-            return v2
-        return v1
+            return self.space.bool_w(v2)
+        return self.space.bool_w(v1)
 
     @raw_binary_op
     def logical_or(self, v1, v2):
         if self._obool(v1):
-            return v1
-        return v2
+            return self.space.bool_w(v1)
+        return self.space.bool_w(v2)
 
     @raw_unary_op
     def logical_not(self, v):
@@ -1818,23 +1822,23 @@
 
     @raw_binary_op
     def le(self, v1, v2):
-        return self.space.le(v1, v2)
+        return self.space.bool_w(self.space.le(v1, v2))
 
     @raw_binary_op
     def ge(self, v1, v2):
-        return self.space.ge(v1, v2)
+        return self.space.bool_w(self.space.ge(v1, v2))
 
     @raw_binary_op
     def lt(self, v1, v2):
-        return self.space.lt(v1, v2)
+        return self.space.bool_w(self.space.lt(v1, v2))
 
     @raw_binary_op
     def gt(self, v1, v2):
-        return self.space.gt(v1, v2)
+        return self.space.bool_w(self.space.gt(v1, v2))
 
     @raw_binary_op
     def ne(self, v1, v2):
-        return self.space.ne(v1, v2)
+        return self.space.bool_w(self.space.ne(v1, v2))
 
 def add_attributeerr_op(cls, op):
     def func(self, *args):
diff --git a/pypy/module/micronumpy/ufuncs.py b/pypy/module/micronumpy/ufuncs.py
--- a/pypy/module/micronumpy/ufuncs.py
+++ b/pypy/module/micronumpy/ufuncs.py
@@ -1128,17 +1128,12 @@
         def impl(res_dtype, value):
             res = get_op(res_dtype)(value)
             if bool_result:
-                if res_dtype.is_object() and isinstance(res, W_Root):
-                    space = res_dtype.itemtype.space
-                    res = space.bool_w(res)
                 return dtype_cache.w_booldtype.box(res)
             return res
     elif nin == 2:
         def impl(res_dtype, lvalue, rvalue):
             res = get_op(res_dtype)(lvalue, rvalue)
             if comparison_func:
-                if res_dtype.is_object():
-                    return res
                 return dtype_cache.w_booldtype.box(res)
             return res
     return func_with_new_name(impl, ufunc_name)


More information about the pypy-commit mailing list