Author: Ronan Lamy <[email protected]>
Branch: can_cast
Changeset: r76909:6048923edd3e
Date: 2015-04-23 14:37 +0100
http://bitbucket.org/pypy/pypy/changeset/6048923edd3e/

Log:    extract as_dtype() from result_type() so it can be used in
        can_cast() as well

diff --git a/pypy/module/micronumpy/arrayops.py 
b/pypy/module/micronumpy/arrayops.py
--- a/pypy/module/micronumpy/arrayops.py
+++ b/pypy/module/micronumpy/arrayops.py
@@ -296,21 +296,25 @@
         raise oefmt(space.w_ValueError, "at least one array or dtype is 
required")
     result = None
     for w_arg in args_w:
-        if isinstance(w_arg, W_NDimArray):
-            dtype = w_arg.get_dtype()
-        elif isinstance(w_arg, W_GenericBox) or (
-                space.isinstance_w(w_arg, space.w_int) or
-                space.isinstance_w(w_arg, space.w_float) or
-                space.isinstance_w(w_arg, space.w_complex) or
-                space.isinstance_w(w_arg, space.w_long) or
-                space.isinstance_w(w_arg, space.w_bool)):
-            dtype = ufuncs.find_dtype_for_scalar(space, w_arg)
-        else:
-            dtype = space.interp_w(descriptor.W_Dtype,
-                space.call_function(space.gettypefor(descriptor.W_Dtype), 
w_arg))
+        dtype = as_dtype(space, w_arg)
         result = ufuncs.find_binop_result_dtype(space, result, dtype)
     return result
 
 @unwrap_spec(casting=str)
 def can_cast(space, w_from, w_totype, casting='safe'):
     return space.w_True
+
+def as_dtype(space, w_arg):
+    # roughly equivalent to CNumPy's PyArray_DescrConverter2
+    if isinstance(w_arg, W_NDimArray):
+        return w_arg.get_dtype()
+    elif isinstance(w_arg, W_GenericBox) or (
+            space.isinstance_w(w_arg, space.w_int) or
+            space.isinstance_w(w_arg, space.w_float) or
+            space.isinstance_w(w_arg, space.w_complex) or
+            space.isinstance_w(w_arg, space.w_long) or
+            space.isinstance_w(w_arg, space.w_bool)):
+        return ufuncs.find_dtype_for_scalar(space, w_arg)
+    else:
+        return space.interp_w(descriptor.W_Dtype,
+            space.call_function(space.gettypefor(descriptor.W_Dtype), w_arg))
diff --git a/pypy/module/micronumpy/test/test_ndarray.py 
b/pypy/module/micronumpy/test/test_ndarray.py
--- a/pypy/module/micronumpy/test/test_ndarray.py
+++ b/pypy/module/micronumpy/test/test_ndarray.py
@@ -4049,4 +4049,3 @@
 
         raises(TypeError, np.can_cast, 'i4', None)
         raises(TypeError, np.can_cast, None, 'i4')
-
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to