id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type
1321228754,I_kwDOAMm_X85OwFnS,6845,Do we need to update AbstractArray for duck arrays?,2448579,open,0,,,6,2022-07-28T16:59:59Z,2022-07-29T17:20:39Z,,MEMBER,,,,"### What happened?
I'm calling `cupy.round` on a DataArray wrapping a cupy array and it raises an error here:
https://github.com/pydata/xarray/blob/3f7cc2da33d81e76afbfb82da57143b624b03a88/xarray/core/common.py#L155-L156
Traceback below:
```
--> 25 a = _core.array(a, copy=False)
26 return a.round(decimals, out=out)
27
cupy/_core/core.pyx in cupy._core.core.array()
cupy/_core/core.pyx in cupy._core.core.array()
cupy/_core/core.pyx in cupy._core.core._array_default()
~/miniconda3/envs/gpu/lib/python3.7/site-packages/xarray/core/common.py in __array__(self, dtype)
146
147 def __array__(self: Any, dtype: DTypeLike = None) -> np.ndarray:
--> 148 return np.asarray(self.values, dtype=dtype)
149
150 def __repr__(self) -> str:
~/miniconda3/envs/gpu/lib/python3.7/site-packages/xarray/core/dataarray.py in values(self)
644 type does not support coercion like this (e.g. cupy).
645 """"""
--> 646 return self.variable.values
647
648 @values.setter
~/miniconda3/envs/gpu/lib/python3.7/site-packages/xarray/core/variable.py in values(self)
517 def values(self):
518 """"""The variable's data as a numpy.ndarray""""""
--> 519 return _as_array_or_item(self._data)
520
521 @values.setter
~/miniconda3/envs/gpu/lib/python3.7/site-packages/xarray/core/variable.py in _as_array_or_item(data)
257 TODO: remove this (replace with np.asarray) once these issues are fixed
258 """"""
--> 259 data = np.asarray(data)
260 if data.ndim == 0:
261 if data.dtype.kind == ""M"":
cupy/_core/core.pyx in cupy._core.core.ndarray.__array__()
TypeError: Implicit conversion to a NumPy array is not allowed. Please use `.get()` to construct a NumPy array explicitly.
```
### What did you expect to happen?
Not an error? I'm not sure what's expected
`np.round(dataarray)` does actually work successfully.
My question is : Do we need to update `AbstractArray.__array__` to return the underlying duck array instead of always a numpy array?
### Minimal Complete Verifiable Example
_No response_
### MVCE confirmation
- [ ] Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray.
- [ ] Complete example — the example is self-contained, including all data and the text of any traceback.
- [ ] Verifiable example — the example copy & pastes into an IPython prompt or [Binder notebook](https://mybinder.org/v2/gh/pydata/xarray/main?urlpath=lab/tree/doc/examples/blank_template.ipynb), returning the result.
- [ ] New issue — a search of GitHub Issues suggests this is not a duplicate.
### Relevant log output
_No response_
### Anything else we need to know?
_No response_
### Environment
xarray v2022.6.0
cupy 10.6.0
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/6845/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,issue