[pypy-commit] pypy numpy-dtype-alt: failing test for dtypes with signatures.

alex_gaynor noreply at buildbot.pypy.org
Sat Aug 20 06:44:10 CEST 2011


Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: numpy-dtype-alt
Changeset: r46652:28e12f4ad635
Date: 2011-08-19 23:48 -0500
http://bitbucket.org/pypy/pypy/changeset/28e12f4ad635/

Log:	failing test for dtypes with signatures.

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
@@ -11,38 +11,39 @@
         return lambda func: ufunc(func, promote_to_float)
     signature = Signature()
     def impl(space, w_obj):
-        from pypy.module.micronumpy.interp_numarray import Call1, convert_to_array, scalar
-        if space.issequence_w(w_obj):
-            w_obj_arr = convert_to_array(space, w_obj)
-            w_res = Call1(func, w_obj_arr, w_obj_arr.signature.transition(signature))
-            w_obj_arr.invalidates.append(w_res)
-            return w_res
-        else:
+        from pypy.module.micronumpy.interp_numarray import (Call1,
+            convert_to_array, Scalar)
+
+        w_obj = convert_to_array(space, w_obj)
+        if isinstance(w_obj, Scalar):
             res_dtype = space.fromcache(interp_dtype.W_Float64Dtype)
-            return func(res_dtype, scalar(space, interp_dtype.W_Float64Dtype, w_obj)).wrap(space)
+            return func(res_dtype, w_obj).wrap(space)
+
+        w_res = Call1(func, w_obj, w_obj.signature.transition(signature))
+        w_obj.invalidates.append(w_res)
+        return w_res
     return func_with_new_name(impl, "%s_dispatcher" % func.__name__)
 
 def ufunc2(func=None, promote_to_float=False):
     if func is None:
         return lambda func: ufunc2(func)
+
     signature = Signature()
     def impl(space, w_lhs, w_rhs):
-        from pypy.module.micronumpy.interp_numarray import Call2, convert_to_array, scalar
-        if space.issequence_w(w_lhs) or space.issequence_w(w_rhs):
-            w_lhs_arr = convert_to_array(space, w_lhs)
-            w_rhs_arr = convert_to_array(space, w_rhs)
-            new_sig = w_lhs_arr.signature.transition(signature).transition(w_rhs_arr.signature)
-            w_res = Call2(space, func, w_lhs_arr, w_rhs_arr, new_sig)
-            w_lhs_arr.invalidates.append(w_res)
-            w_rhs_arr.invalidates.append(w_res)
-            return w_res
-        else:
+        from pypy.module.micronumpy.interp_numarray import (Call2,
+            convert_to_array, Scalar)
+
+        w_lhs = convert_to_array(space, w_lhs)
+        w_rhs = convert_to_array(space, w_rhs)
+        if isinstance(w_lhs, Scalar) and isinstance(w_rhs, Scalar):
             res_dtype = space.fromcache(interp_dtype.W_Float64Dtype)
-            return func(
-                res_dtype,
-                scalar(space, interp_dtype.W_Float64Dtype, w_lhs),
-                scalar(space, interp_dtype.W_Float64Dtype, w_rhs),
-            ).wrap(space)
+            return func(res_dtype, w_lhs, w_rhs).wrap(space)
+
+        new_sig = w_lhs.signature.transition(signature).transition(w_rhs.signature)
+        w_res = Call2(space, func, w_lhs, w_rhs, new_sig)
+        w_lhs.invalidates.append(w_res)
+        w_rhs.invalidates.append(w_res)
+        return w_res
     return func_with_new_name(impl, "%s_dispatcher" % func.__name__)
 
 def find_binop_result_dtype(space, dt1, dt2, promote_bools=False, promote_to_float=False):
diff --git a/pypy/module/micronumpy/test/test_base.py b/pypy/module/micronumpy/test/test_base.py
--- a/pypy/module/micronumpy/test/test_base.py
+++ b/pypy/module/micronumpy/test/test_base.py
@@ -20,6 +20,13 @@
         v4 = ar.descr_add(space, ar)
         assert v1.signature is v4.signature
 
+        bool_ar = SingleDimArray(10, dtype=space.fromcache(interp_dtype.W_BoolDtype))
+        v5 = ar.descr_add(space, bool_ar)
+        assert v5.signature is not v1.signature
+        assert v5.signature is not v2.signature
+        v6 = ar.descr_add(space, bool_ar)
+        assert v5.signature is v6.signature
+
     def test_slice_signature(self, space):
         ar = SingleDimArray(10, dtype=space.fromcache(interp_dtype.W_Float64Dtype))
         v1 = ar.descr_getitem(space, space.wrap(slice(1, 5, 1)))


More information about the pypy-commit mailing list