Skip to content

High level computations example not working #73

Open
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions