summaryrefslogtreecommitdiff
path: root/numpy/array_api/_array_object.py
diff options
context:
space:
mode:
authorAaron Meurer <asmeurer@gmail.com>2021-12-06 13:59:08 -0700
committerAaron Meurer <asmeurer@gmail.com>2021-12-06 13:59:08 -0700
commit74a3ee7a8b75bf6dc271c9a1a4b55d2ad9758420 (patch)
tree1b6117982b6255f076d95dac7095e2faaf7f63d9 /numpy/array_api/_array_object.py
parent7ca1d1ad0dc86f0d20414c946eb2b6e8dc19c367 (diff)
downloadnumpy-74a3ee7a8b75bf6dc271c9a1a4b55d2ad9758420.tar.gz
ENH: Add __array__ to the array_api Array object
This is *NOT* part of the array API spec (so it should not be relied on for portable code). However, without this, np.asarray(np.array_api.Array) produces an object array instead of doing the conversion to a NumPy array as expected. This would work once np.asarray() implements dlpack support, but until then, it seems reasonable to make the conversion work. Note that the reverse, calling np.array_api.asarray(np.array), already works because np.array_api.asarray() is just a wrapper for np.asarray().
Diffstat (limited to 'numpy/array_api/_array_object.py')
-rw-r--r--numpy/array_api/_array_object.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/numpy/array_api/_array_object.py b/numpy/array_api/_array_object.py
index ead061882..d322e6ca6 100644
--- a/numpy/array_api/_array_object.py
+++ b/numpy/array_api/_array_object.py
@@ -108,6 +108,17 @@ class Array:
mid = np.array2string(self._array, separator=', ', prefix=prefix, suffix=suffix)
return prefix + mid + suffix
+ # This function is not required by the spec, but we implement it here for
+ # convenience so that np.asarray(np.array_api.Array) will work.
+ def __array__(self, dtype=None):
+ """
+ Warning: this method is NOT part of the array API spec. Implementers
+ of other libraries need not include it, and users should not assume it
+ will be present in other implementations.
+
+ """
+ return np.asarray(self._array, dtype=dtype)
+
# These are various helper functions to make the array behavior match the
# spec in places where it either deviates from or is more strict than
# NumPy behavior