[pypy-commit] pypy scalar-operations: extract try_array_method() from array()
rlamy
noreply at buildbot.pypy.org
Sat Jun 28 20:30:56 CEST 2014
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: scalar-operations
Changeset: r72270:6fc0175b3286
Date: 2014-06-27 23:14 +0100
http://bitbucket.org/pypy/pypy/changeset/6fc0175b3286/
Log: extract try_array_method() from array()
diff --git a/pypy/module/micronumpy/ctors.py b/pypy/module/micronumpy/ctors.py
--- a/pypy/module/micronumpy/ctors.py
+++ b/pypy/module/micronumpy/ctors.py
@@ -24,6 +24,20 @@
return box
+def try_array_method(space, w_object, w_dtype=None):
+ w___array__ = space.lookup(w_object, "__array__")
+ if w___array__ is None:
+ return None
+ if w_dtype is None:
+ w_dtype = space.w_None
+ w_array = space.get_and_call_function(w___array__, w_object, w_dtype)
+ if isinstance(w_array, W_NDimArray):
+ return w_array
+ else:
+ raise oefmt(space.w_ValueError,
+ "object __array__ method not producing an array")
+
+
@unwrap_spec(ndmin=int, copy=bool, subok=bool)
def array(space, w_object, w_dtype=None, copy=True, w_order=None, subok=False,
ndmin=0):
@@ -31,18 +45,11 @@
# for anything that isn't already an array, try __array__ method first
if not isinstance(w_object, W_NDimArray):
- w___array__ = space.lookup(w_object, "__array__")
- if w___array__ is not None:
- if w_dtype is None:
- w_dtype = space.w_None
- w_array = space.get_and_call_function(w___array__, w_object, w_dtype)
- if isinstance(w_array, W_NDimArray):
- # continue with w_array, but do further operations in place
- w_object = w_array
- copy = False
- else:
- raise oefmt(space.w_ValueError,
- "object __array__ method not producing an array")
+ w_array = try_array_method(space, w_object, w_dtype)
+ if w_array is not None:
+ # continue with w_array, but do further operations in place
+ w_object = w_array
+ copy = False
dtype = descriptor.decode_w_dtype(space, w_dtype)
More information about the pypy-commit
mailing list