jorisvandenbossche commented on code in PR #41071:
URL: https://github.com/apache/arrow/pull/41071#discussion_r1565736730
##########
python/pyarrow/array.pxi:
##########
@@ -1516,11 +1516,28 @@ cdef class Array(_PandasConvertible):
def _to_pandas(self, options, types_mapper=None, **kwargs):
return _array_like_to_pandas(self, options, types_mapper=types_mapper)
- def __array__(self, dtype=None):
+ def __array__(self, dtype=None, copy=None):
+ if copy is False:
+ try:
+ values = self.to_numpy(zero_copy_only=True)
+ except ArrowInvalid:
+ raise ValueError(
+ "Unable to avoid a copy while creating a numpy array as
requested.\n"
+ "If using `np.array(obj, copy=False)` replace it with "
+ "`np.asarray(obj)` to allow a copy when needed"
+ )
+ # values is already a numpy array at this point, but calling
np.array(..)
+ # again to handle the `dtype` keyword with a no-copy guarantee
+ return np.array(values, dtype=dtype, copy=False)
+
values = self.to_numpy(zero_copy_only=False)
+ if copy is True and is_primitive(self.type.id) and self.null_count ==
0:
+ # to_numpy did not yet make a copy
Review Comment:
No, boolean is not considered as primitive (although you might expect that).
So a boolean array takes the code path below just returning the numpy `values`
is no dtype was required, so no second copy.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]