Skip to content

High level computations example not working #73

@maxrjones

Description

@maxrjones

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'

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions