Open
Description
Running https://cupy-xarray.readthedocs.io/latest/examples/04_high-level-api.html with these dependencies produces the following error:
cupy: 13.4.1
INSTALLED VERSIONS
------------------
commit: None
python: 3.12.9 | packaged by conda-forge | (main, Mar 4 2025, 22:48:41) [GCC 13.3.0]
python-bits: 64
OS: Linux
OS-release: 5.10.230-223.885.amzn2.x86_64
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: C.UTF-8
LANG: C.UTF-8
LOCALE: ('C', 'UTF-8')
libhdf5: 1.14.3
libnetcdf: None
xarray: 2025.3.1
pandas: 2.2.3
numpy: 2.1.3
scipy: 1.15.2
netCDF4: None
pydap: None
h5netcdf: None
h5py: 3.13.0
zarr: None
cftime: None
nc_time_axis: None
iris: None
bottleneck: 1.4.2
dask: 2025.3.0
distributed: 2025.3.0
matplotlib: 3.10.1
cartopy: None
seaborn: 0.13.2
numbagg: None
fsspec: 2025.3.2
cupy: 13.4.1
pint: None
sparse: None
flox: None
numpy_groupies: None
setuptools: 75.8.2
pip: 25.0.1
conda: 25.3.1
pytest: None
mypy: None
IPython: 9.0.2
sphinx: None
None
start_time_cp = time.time()
rolling_mean_cp = data_xr_cp.rolling(time=10).mean()
end_time_cp = time.time()
time_cp = end_time_cp - start_time_cp
--------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[14], line 3
1 start_time_cp = time.time()
----> 3 rolling_mean_cp = data_xr_cp.rolling(time=10).mean()
5 end_time_cp = time.time()
6 time_cp = end_time_cp - start_time_cp
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py:182](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py#line=181), in Rolling._reduce_method.<locals>.method(self, keep_attrs, **kwargs)
179 def method(self, keep_attrs=None, **kwargs):
180 keep_attrs = self._get_keep_attrs(keep_attrs)
--> 182 return self._array_reduce(
183 array_agg_func=array_agg_func,
184 bottleneck_move_func=bottleneck_move_func,
185 numbagg_move_func=numbagg_move_func,
186 rolling_agg_func=rolling_agg_func,
187 keep_attrs=keep_attrs,
188 fillna=fillna,
189 sliding_window_view_kwargs=dict(automatic_rechunk=automatic_rechunk),
190 **kwargs,
191 )
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py:758](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py#line=757), in DataArrayRolling._array_reduce(self, array_agg_func, bottleneck_move_func, numbagg_move_func, rolling_agg_func, keep_attrs, fillna, **kwargs)
753 return self._bottleneck_reduce(
754 bottleneck_move_func, keep_attrs=keep_attrs, **kwargs
755 )
757 if rolling_agg_func:
--> 758 return rolling_agg_func(self, keep_attrs=self._get_keep_attrs(keep_attrs))
760 if fillna is not None:
761 if fillna is dtypes.INF:
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py:198](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py#line=197), in Rolling._mean(self, keep_attrs, **kwargs)
197 def _mean(self, keep_attrs, **kwargs):
--> 198 result = self.sum(keep_attrs=False, **kwargs) [/](https://nmfs-openscapes.2i2c.cloud/) duck_array_ops.astype(
199 self.count(keep_attrs=False), dtype=self.obj.dtype, copy=False
200 )
201 if keep_attrs:
202 result.attrs = self.obj.attrs
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py:182](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py#line=181), in Rolling._reduce_method.<locals>.method(self, keep_attrs, **kwargs)
179 def method(self, keep_attrs=None, **kwargs):
180 keep_attrs = self._get_keep_attrs(keep_attrs)
--> 182 return self._array_reduce(
183 array_agg_func=array_agg_func,
184 bottleneck_move_func=bottleneck_move_func,
185 numbagg_move_func=numbagg_move_func,
186 rolling_agg_func=rolling_agg_func,
187 keep_attrs=keep_attrs,
188 fillna=fillna,
189 sliding_window_view_kwargs=dict(automatic_rechunk=automatic_rechunk),
190 **kwargs,
191 )
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py:768](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py#line=767), in DataArrayRolling._array_reduce(self, array_agg_func, bottleneck_move_func, numbagg_move_func, rolling_agg_func, keep_attrs, fillna, **kwargs)
765 kwargs.setdefault("skipna", False)
766 kwargs.setdefault("fillna", fillna)
--> 768 return self.reduce(array_agg_func, keep_attrs=keep_attrs, **kwargs)
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py:563](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/rolling.py#line=562), in DataArrayRolling.reduce(self, func, keep_attrs, sliding_window_view_kwargs, **kwargs)
561 fillna = kwargs.pop("fillna", dtypes.NA)
562 if fillna is not dtypes.NA:
--> 563 obj = self.obj.fillna(fillna)
564 else:
565 obj = self.obj
File [/opt/conda/lib/python3.12/site-packages/xarray/core/dataarray.py:3526](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/core/dataarray.py#line=3525), in DataArray.fillna(self, value)
3522 if utils.is_dict_like(value):
3523 raise TypeError(
3524 "cannot provide fill value as a dictionary with fillna on a DataArray"
3525 )
-> 3526 out = ops.fillna(self, value)
3527 return out
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/ops.py:149](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/ops.py#line=148), in fillna(data, other, join, dataset_join)
125 """Fill missing values in this object with data from the other object.
126 Follows normal broadcasting and alignment rules.
127
(...) 145 - "right": take only variables from the last object
146 """
147 from xarray.computation.apply_ufunc import apply_ufunc
--> 149 return apply_ufunc(
150 duck_array_ops.fillna,
151 data,
152 other,
153 join=join,
154 dask="allowed",
155 dataset_join=dataset_join,
156 dataset_fill_value=np.nan,
157 keep_attrs=True,
158 )
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/apply_ufunc.py:1268](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/apply_ufunc.py#line=1267), in apply_ufunc(func, input_core_dims, output_core_dims, exclude_dims, vectorize, join, dataset_join, dataset_fill_value, keep_attrs, kwargs, dask, output_dtypes, output_sizes, meta, dask_gufunc_kwargs, on_missing_core_dim, *args)
1266 # feed DataArray apply_variable_ufunc through apply_dataarray_vfunc
1267 elif any(isinstance(a, DataArray) for a in args):
-> 1268 return apply_dataarray_vfunc(
1269 variables_vfunc,
1270 *args,
1271 signature=signature,
1272 join=join,
1273 exclude_dims=exclude_dims,
1274 keep_attrs=keep_attrs,
1275 )
1276 # feed Variables directly through apply_variable_ufunc
1277 elif any(isinstance(a, Variable) for a in args):
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/apply_ufunc.py:310](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/apply_ufunc.py#line=309), in apply_dataarray_vfunc(func, signature, join, exclude_dims, keep_attrs, *args)
305 result_coords, result_indexes = build_output_coords_and_indexes(
306 args, signature, exclude_dims, combine_attrs=keep_attrs
307 )
309 data_vars = [getattr(a, "variable", a) for a in args]
--> 310 result_var = func(*data_vars)
312 out: tuple[DataArray, ...] | DataArray
313 if signature.num_outputs > 1:
File [/opt/conda/lib/python3.12/site-packages/xarray/computation/apply_ufunc.py:821](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/computation/apply_ufunc.py#line=820), in apply_variable_ufunc(func, signature, exclude_dims, dask, output_dtypes, vectorize, keep_attrs, dask_gufunc_kwargs, *args)
816 if vectorize:
817 func = _vectorize(
818 func, signature, output_dtypes=output_dtypes, exclude_dims=exclude_dims
819 )
--> 821 result_data = func(*input_data)
823 if signature.num_outputs == 1:
824 result_data = (result_data,)
File [/opt/conda/lib/python3.12/site-packages/xarray/core/duck_array_ops.py:400](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/core/duck_array_ops.py#line=399), in fillna(data, other)
396 def fillna(data, other):
397 # we need to pass data first so pint has a chance of returning the
398 # correct unit
399 # TODO: revert after https://github.com/hgrecco/pint/issues/1019 is fixed
--> 400 return where(notnull(data), data, other)
File /opt/conda/lib/python3.12/site-packages/xarray/core/duck_array_ops.py:385, in where(condition, x, y)
383 condition = asarray(condition, dtype=dtype, xp=xp)
384 else:
--> 385 condition = astype(condition, dtype=dtype, xp=xp)
387 return xp.where(condition, *as_shared_dtype([x, y], xp=xp))
File [/opt/conda/lib/python3.12/site-packages/xarray/core/duck_array_ops.py:238](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/xarray/core/duck_array_ops.py#line=237), in astype(data, dtype, xp, **kwargs)
235 if xp == np:
236 # numpy currently doesn't have a astype:
237 return data.astype(dtype, **kwargs)
--> 238 return xp.astype(data, dtype, **kwargs)
File [/opt/conda/lib/python3.12/site-packages/cupy/__init__.py:1087](https://nmfs-openscapes.2i2c.cloud/opt/conda/lib/python3.12/site-packages/cupy/__init__.py#line=1086), in __getattr__(name)
1084 if name in _deprecated_apis:
1085 return getattr(_numpy, name)
-> 1087 raise AttributeError(f"module 'cupy' has no attribute {name!r}")
AttributeError: module 'cupy' has no attribute 'astype'