Giter VIP home page Giter VIP logo

cupy-xarray's Introduction

xarray-contrib

xarray-contrib is a GitHub organization for gathering high-quality open source projects that build on Xarray.

Vision

As more and more projects build on Xarray, we wanted to provide a central place to collect community projects. We hope that including projects under the xarray-contrib organization improves project visibility and increases the likelihood of sustainable open source maintenance and development.

Guidelines

Projects in xarray-contrib should contain sufficient functionality and documentation to be useful and welcoming to new users. They should also follow software development best practices:

  • Open-source license
  • Supports a recent version of Xarray
  • Available on PyPI and/or conda-forge
  • Documentation sufficient for new users to get started, which typically includes:
    • A user guide or tutorial
    • Usage examples
    • API reference
  • Unit tests + continuous integration
  • PEP8 compliant code style

If you have a project that meets these requirements, open a new issue in this repository to discuss transfering it to the xarray-contrib organization.

Disclaimer

This organization is merely a container for projects that use Xarray. Projects included in xarray-contrib organization are not supported by the Xarray Core Developer Team.

cupy-xarray's People

Contributors

aazuspan avatar andersy005 avatar dcherian avatar jacobtomlinson avatar kadykov avatar negin513 avatar pre-commit-ci[bot] avatar quasiben avatar raybellwaves avatar saishashank85 avatar weiji14 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

cupy-xarray's Issues

sum(min_count=1) raises an exception

The first line works, the second raises an exception

import numpy as np
import xarray as xr
import cupy_xarray

xr.DataArray([1, 2, np.nan]).chunk(dim_0=1).as_cupy().sum().compute()
xr.DataArray([1, 2, np.nan]).chunk(dim_0=1).as_cupy().sum(min_count=1).compute()


xarray.DataArray'asarray-75d4a7ce4023e88c4c5563214cb235b4'
array(3.)
Coordinates: (0)
Indexes: (0)
Attributes: (0)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[5], line 6
      3 import cupy_xarray
      5 xr.DataArray([1, 2, np.nan]).chunk(dim_0=1).as_cupy().sum().compute()
----> 6 xr.DataArray([1, 2, np.nan]).chunk(dim_0=1).as_cupy().sum(min_count=1).compute()

File [~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/xarray/core/dataarray.py:1179](http://localhost:8888/lab/tree/icec/seaice/nb/~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/xarray/core/dataarray.py#line=1178), in DataArray.compute(self, **kwargs)
   1154 """Manually trigger loading of this array's data from disk or a
   1155 remote source into memory and return a new array.
   1156 
   (...)
   1176 dask.compute
   1177 """
   1178 new = self.copy(deep=False)
-> 1179 return new.load(**kwargs)

File [~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/xarray/core/dataarray.py:1147](http://localhost:8888/lab/tree/icec/seaice/nb/~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/xarray/core/dataarray.py#line=1146), in DataArray.load(self, **kwargs)
   1127 def load(self, **kwargs) -> Self:
   1128     """Manually trigger loading of this array's data from disk or a
   1129     remote source into memory and return this array.
   1130 
   (...)
   1145     dask.compute
   1146     """
-> 1147     ds = self._to_temp_dataset().load(**kwargs)
   1148     new = self._from_temp_dataset(ds)
   1149     self._variable = new._variable

File [~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/xarray/core/dataset.py:863](http://localhost:8888/lab/tree/icec/seaice/nb/~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/xarray/core/dataset.py#line=862), in Dataset.load(self, **kwargs)
    860 chunkmanager = get_chunked_array_type(*lazy_data.values())
    862 # evaluate all the chunked arrays simultaneously
--> 863 evaluated_data: tuple[np.ndarray[Any, Any], ...] = chunkmanager.compute(
    864     *lazy_data.values(), **kwargs
    865 )
    867 for k, data in zip(lazy_data, evaluated_data):
    868     self.variables[k].data = data

File [~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/xarray/namedarray/daskmanager.py:86](http://localhost:8888/lab/tree/icec/seaice/nb/~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/xarray/namedarray/daskmanager.py#line=85), in DaskManager.compute(self, *data, **kwargs)
     81 def compute(
     82     self, *data: Any, **kwargs: Any
     83 ) -> tuple[np.ndarray[Any, _DType_co], ...]:
     84     from dask.array import compute
---> 86     return compute(*data, **kwargs)

File [~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/dask/base.py:662](http://localhost:8888/lab/tree/icec/seaice/nb/~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/dask/base.py#line=661), in compute(traverse, optimize_graph, scheduler, get, *args, **kwargs)
    659     postcomputes.append(x.__dask_postcompute__())
    661 with shorten_traceback():
--> 662     results = schedule(dsk, keys, **kwargs)
    664 return repack([f(r, *a) for r, (f, a) in zip(results, postcomputes)])

File cupy[/_core/core.pyx:1717](http://localhost:8888/_core/core.pyx#line=1716), in cupy._core.core._ndarray_base.__array_function__()

File [~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/cupy/_sorting/search.py:211](http://localhost:8888/lab/tree/icec/seaice/nb/~/mambaforge/envs/cupy-seaice/lib/python3.12/site-packages/cupy/_sorting/search.py#line=210), in where(condition, x, y)
    209 if fusion._is_fusing():
    210     return fusion._call_ufunc(_where_ufunc, condition, x, y)
--> 211 return _where_ufunc(condition.astype('?'), x, y)

File cupy[/_core/_kernel.pyx:1286](http://localhost:8888/_core/_kernel.pyx#line=1285), in cupy._core._kernel.ufunc.__call__()

File cupy[/_core/_kernel.pyx:159](http://localhost:8888/_core/_kernel.pyx#line=158), in cupy._core._kernel._preprocess_args()

File cupy[/_core/_kernel.pyx:145](http://localhost:8888/_core/_kernel.pyx#line=144), in cupy._core._kernel._preprocess_arg()

TypeError: Unsupported type <class 'numpy.ndarray'>

Versions:

xr.__version__
np.__version__
cupy_xarray.__version__

'2024.6.0'
'1.26.4'
'0.1.3+9.g7fc3df5'

Same thing with numpy 2.0.0

Problem importing DuckArrayModule


ModuleNotFoundError Traceback (most recent call last)
Cell In [13], line 4
2 import pandas as pd
3 import xarray as xr
----> 4 import cupy_xarray
5 xr.set_options(display_expand_data=False)
7 rng = np.random.default_rng(seed=0) # we'll use this later

File /usr/local/lib/python3.9/dist-packages/cupy_xarray/init.py:2
1 from . import _version
----> 2 from .accessors import CupyDataArrayAccessor, CupyDatasetAccessor # noqa
4 version = _version.get_versions()["version"]

File /usr/local/lib/python3.9/dist-packages/cupy_xarray/accessors.py:8
1 import cupy as cp
2 from xarray import (
3 DataArray,
4 Dataset,
5 register_dataarray_accessor,
6 register_dataset_accessor,
7 )
----> 8 from xarray.core.pycompat import DuckArrayModule
10 dsk = DuckArrayModule("dask")
11 dask_array_type = dsk.type

ModuleNotFoundError: No module named 'xarray.core.pycompat'

As i check from the xarray module.
The DuckArrayModule is present in xarray/namedarray/pycompat.py and not in core.

Also im not installing cupy from requirements since i've already installed cupy-cuda11x as per my cuda version.

Map blocks unable to infer datatype of object arrays

I'm trying to convert the following xarray dataset to xarray cupy:

<xarray.Dataset>
Dimensions:        (row: 119, xyz: 3)
Coordinates:
    ROWID          (row) int64 dask.array<chunksize=(119,), meta=np.ndarray>
Dimensions without coordinates: row, xyz
Data variables:
    POSITION       (row, xyz) float64 dask.array<chunksize=(119, 3), meta=np.ndarray>
    TYPE           (row) object dask.array<chunksize=(119,), meta=np.ndarray>
    NAME           (row) object dask.array<chunksize=(119,), meta=np.ndarray>
    MOUNT          (row) object dask.array<chunksize=(119,), meta=np.ndarray>
    OFFSET         (row, xyz) float64 dask.array<chunksize=(119, 3), meta=np.ndarray>
    FLAG_ROW       (row) bool dask.array<chunksize=(119,), meta=np.ndarray>
    DISH_DIAMETER  (row) float64 dask.array<chunksize=(119,), meta=np.ndarray>
    STATION        (row) object dask.array<chunksize=(119,), meta=np.ndarray>
Attributes:
    __daskms_partition_schema__:  ()

However, I'm getting the following error:

"name": "ValueError",
"message": "`dtype` inference failed in `map_blocks`.

Please specify the dtype explicitly using the `dtype` kwarg.

Original error is below:
------------------------
ValueError('Unsupported dtype object')

Traceback:
---------
  File \"/home/miguel/.conda/envs/pyralysis-env/lib/python3.12/site-packages/dask/array/core.py\", line 456, in apply_infer_dtype
    o = func(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^
  File \"/home/miguel/.conda/envs/pyralysis-env/lib/python3.12/site-packages/cupy/_creation/from_data.py\", line 88, in asarray
    return _core.array(a, dtype, False, order, blocking=blocking)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File \"cupy/_core/core.pyx\", line 2383, in cupy._core.core.array
  File \"cupy/_core/core.pyx\", line 2410, in cupy._core.core.array
  File \"cupy/_core/core.pyx\", line 2549, in cupy._core.core._array_default
",
	"stack": "---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[7], line 1
----> 1 dataset = x.read(filter_flag_column=False, calculate_psf=False)

File ~/Documents/pyralysis/src/pyralysis/io/daskms.py:134, in DaskMS.read(self, read_flagged_data, filter_flag_column, calculate_psf, taql_query, chunks)
    132 # Creating antenna object
    133 antennas = xds_from_table(self.ms_name_dask + \"ANTENNA\", taql_where=taql_query_flag_row)[0]
--> 134 antenna_obj = Antenna(dataset=antennas)
    136 if obs_obj.ntelescope > 1:
    137     # if there is more than one telescope in the dataset, allocate space for
    138     # one observation id per antenna
    139     antenna_obs_id = da.zeros_like(antenna_obj.dataset.ROWID, dtype=np.int32)

File <string>:4, in __init__(self, dataset)

File ~/Documents/pyralysis/src/pyralysis/base/antenna.py:36, in Antenna.__post_init__(self)
     33 self.logger.setLevel(logging.INFO)
     35 print(self.dataset)
---> 36 self.dataset = xarray_as_cupy(self.dataset)
     37 if self.dataset is not None:
     38     self.max_diameter = self.dataset.DISH_DIAMETER.data.max() * u.m

File ~/Documents/pyralysis/src/pyralysis/utils/xarray_cupy_transformer.py:16, in xarray_as_cupy(xarray_object)
     11 def xarray_as_cupy(
     12     xarray_object: Union[xarray.DataArray, xarray.Dataset] = None
     13 ) -> Union[xarray.DataArray, xarray.Dataset]:
     15     if cupy_xarray and dask.config.get(\"array.backend\") == \"cupy\" and xarray_object is not None:
---> 16         return xarray_object.as_cupy()
     17     else:
     18         return xarray_object

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/cupy_xarray/accessors.py:162, in _.<locals>.as_cupy(*args, **kwargs)
    161 def as_cupy(*args, **kwargs):
--> 162     return ds.cupy.as_cupy(*args, **kwargs)

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/cupy_xarray/accessors.py:119, in CupyDatasetAccessor.as_cupy(self)
    118 def as_cupy(self):
--> 119     data_vars = {var: da.as_cupy() for var, da in self.ds.data_vars.items()}
    120     return Dataset(data_vars=data_vars, coords=self.ds.coords, attrs=self.ds.attrs)

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/cupy_xarray/accessors.py:148, in _.<locals>.as_cupy(*args, **kwargs)
    147 def as_cupy(*args, **kwargs):
--> 148     return da.cupy.as_cupy(*args, **kwargs)

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/cupy_xarray/accessors.py:56, in CupyDataArrayAccessor.as_cupy(self)
     32 \"\"\"
     33 Converts the DataArray's underlying array type to cupy.
     34 
   (...)
     52 
     53 \"\"\"
     54 if isinstance(self.da.data, dask_array_type):
     55     return DataArray(
---> 56         data=self.da.data.map_blocks(cp.asarray),
     57         coords=self.da.coords,
     58         dims=self.da.dims,
     59         name=self.da.name,
     60         attrs=self.da.attrs,
     61     )
     62 return DataArray(
     63     data=cp.asarray(self.da.data),
     64     coords=self.da.coords,
   (...)
     67     attrs=self.da.attrs,
     68 )

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/dask/array/core.py:2689, in Array.map_blocks(self, func, *args, **kwargs)
   2687 @wraps(map_blocks)
   2688 def map_blocks(self, func, *args, **kwargs):
-> 2689     return map_blocks(func, self, *args, **kwargs)

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/dask/array/core.py:813, in map_blocks(func, name, token, dtype, chunks, drop_axis, new_axis, enforce_ndim, meta, *args, **kwargs)
    810     except Exception:
    811         pass
--> 813     dtype = apply_infer_dtype(func, args, original_kwargs, \"map_blocks\")
    815 if drop_axis:
    816     ndim_out = len(out_ind)

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/dask/array/core.py:481, in apply_infer_dtype(func, args, kwargs, funcname, suggest_dtype, nout)
    479     msg = None
    480 if msg is not None:
--> 481     raise ValueError(msg)
    482 return getattr(o, \"dtype\", type(o)) if nout is None else tuple(e.dtype for e in o)

ValueError: `dtype` inference failed in `map_blocks`.

Please specify the dtype explicitly using the `dtype` kwarg.

Original error is below:
------------------------
ValueError('Unsupported dtype object')

Traceback:
---------
  File \"/home/miguel/.conda/envs/pyralysis-env/lib/python3.12/site-packages/dask/array/core.py\", line 456, in apply_infer_dtype
    o = func(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^
  File \"/home/miguel/.conda/envs/pyralysis-env/lib/python3.12/site-packages/cupy/_creation/from_data.py\", line 88, in asarray
    return _core.array(a, dtype, False, order, blocking=blocking)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File \"cupy/_core/core.pyx\", line 2383, in cupy._core.core.array
  File \"cupy/_core/core.pyx\", line 2410, in cupy._core.core.array
  File \"cupy/_core/core.pyx\", line 2549, in cupy._core.core._array_default
"

It seems map_blocks inference fails for object dtype arrays? Could this dtype be forced by passing a dtype parameter to map_blocks?

is_cupy raises TypeError if dask is not installed

I'm using xarray with cupy, but not using dask, so it is not installed. However, this breaks .cupy.is_cupy.

Code:

#!/usr/bin/env python3

import cupy_xarray
import numpy as np
import xarray as xr

x = xr.DataArray(np.zeros(5), dims=("time",))
print(x.cupy.is_cupy)

Output:

Traceback (most recent call last):
  File "/home/bmerry/work/bugs/cupy-xarray-no-dask/test.py", line 8, in <module>
    print(x.cupy.is_cupy)
          ^^^^^^^^^^^^^^
  File "/home/bmerry/.pyenv/versions/py311/lib/python3.11/site-packages/cupy_xarray/accessors.py", line 37, in is_cupy
    if isinstance(self.da.data, dask_array_type):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union

Versions:

cupy==13.2.0
cupy-xarray==0.1.4
numpy==1.26.4
xarray==2024.7.0

Naive question

Could the new dask backend using cupy implements by itself the cupy-xarray machinery ?

%%time
import dask.array as da
import cupy as cp
import dask
cp.cuda.Device(0).use()
with dask.config.set({"array.backend": "cupy"}):
    x = da.random.normal(10,1, (100_000, 100_000), chunks=(10_000, 2000))
    y = x.mean(axis=0)[::100]
    z = y.compute()
    print(z.shape, type(z))

Or is it too naive and xarray is using numpy directly at many places in the code ?

Gaรซl,

Update Documentations

@dcherian and I brainstormed on the topics that should be included in the docs as following:

  1. Basic Concepts :
  1. Fundamental Xarray + Cupy:
  1. High-level Xarray functions

Make the docs as notebooks.

cupy_xarray import broken

The lib seems unusable currently:

import cupy as cp
import numpy as np
import xarray as xr
import cupy_xarray # Adds .cupy to Xarray objects

..Lib\site-packages\cupy_xarray\accessors.py:8
      [1](file:///.../Lib/site-packages/cupy_xarray/accessors.py:1) import cupy as cp
      [2](file:///.../Lib/site-packages/cupy_xarray/accessors.py:2) from xarray import (
      [3](file:///.../Lib/site-packages/cupy_xarray/accessors.py:3)     DataArray,
      [4](file:///.../Lib/site-packages/cupy_xarray/accessors.py:4)     Dataset,
      [5](file:///.../Lib/site-packages/cupy_xarray/accessors.py:5)     register_dataarray_accessor,
      [6](file:///.../Lib/site-packages/cupy_xarray/accessors.py:6)     register_dataset_accessor,
      [7](file:///.../Lib/site-packages/cupy_xarray/accessors.py:7) )
----> [8](file:///.../Lib/site-packages/cupy_xarray/accessors.py:8) from xarray.core.pycompat import DuckArrayModule
     [10](file:///.../Lib/site-packages/cupy_xarray/accessors.py:10) dsk = DuckArrayModule("dask")
     [11](file:///.../Lib/site-packages/cupy_xarray/accessors.py:11) dask_array_type = dsk.type

ModuleNotFoundError: No module named 'xarray.core.pycompat'

for versions

cuda-version 11.8 h70ddcb2_3 conda-forge
cudatoolkit 11.8.0 h09e9e62_13 conda-forge
cupy 13.2.0 py311h0508009_0 conda-forge
cupy-core 13.2.0 py311ha6d0cfe_0 conda-forge
cupy-xarray 0.1.3 pyhd8ed1ab_0 conda-forge
dask 2024.4.0 pyhd8ed1ab_0 conda-forge
dask-core 2024.4.0 pyhd8ed1ab_0 conda-forge
dask-expr 1.0.9 pyhd8ed1ab_0 conda-forge
xarray 2024.3.0 pyhd8ed1ab_0 conda-forge

ImportError: cannot import name 'dask_array_type' from 'xarray.core.pycompat'

Hi cupy-xarray developers,

Thank you for this great package! I am new to the cupy GPU computing world. On the server, cupy and xarray are working as expected for creating array. However, cupy_xarray cannot be imported. The error message is below

Python 3.9.16 (main, Jan 11 2023, 16:05:54) 
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cupy as cp
>>> cp.array([1,2,3])
array([1, 2, 3])
>>> A = cp.array([1,2,3])
>>> import cupy_xarray
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/6embdqs6/.conda/envs/vint/lib/python3.9/site-packages/cupy_xarray/__init__.py", line 2, in <module>
    from .accessors import CupyDataArrayAccessor, CupyDatasetAccessor  # noqa
  File "/home/6embdqs6/.conda/envs/vint/lib/python3.9/site-packages/cupy_xarray/accessors.py", line 8, in <module>
    from xarray.core.pycompat import dask_array_type
ImportError: cannot import name 'dask_array_type' from 'xarray.core.pycompat' (~/.conda/envs/vint/lib/python3.9/site-packages/xarray/core/pycompat.py)

I went to xarray.core.pycompat on the current main branch of Xarray repo and cannot seem to find dask_array_type. I installed the package through condo-forge channel. My conda env is shown below.

# packages in environment at .conda/envs/vint:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main  
_openmp_mutex             5.1                       1_gnu  
anyio                     3.5.0            py39h06a4308_0  
argon2-cffi               21.3.0             pyhd3eb1b0_0  
argon2-cffi-bindings      21.2.0           py39h7f8727e_0  
asttokens                 2.0.5              pyhd3eb1b0_0  
attrs                     22.1.0           py39h06a4308_0  
babel                     2.11.0           py39h06a4308_0  
backcall                  0.2.0              pyhd3eb1b0_0  
beautifulsoup4            4.11.1           py39h06a4308_0  
blas                      1.0                    openblas  
bleach                    4.1.0              pyhd3eb1b0_0  
bokeh                     2.4.3            py39h06a4308_0  
bottleneck                1.3.5            py39h7deecbd_0  
brotli                    1.0.9                h5eee18b_7  
brotli-bin                1.0.9                h5eee18b_7  
brotlipy                  0.7.0           py39h27cfd23_1003  
bzip2                     1.0.8                h7b6447c_0  
c-ares                    1.18.1               h7f8727e_0  
ca-certificates           2022.12.7            ha878542_0    conda-forge
certifi                   2022.12.7          pyhd8ed1ab_0    conda-forge
cffi                      1.15.1           py39h5eee18b_3  
cftime                    1.5.1.1          py39hce1f21e_0  
charset-normalizer        2.0.4              pyhd3eb1b0_0  
click                     8.0.4            py39h06a4308_0  
cloudpickle               2.0.0              pyhd3eb1b0_0  
comm                      0.1.2            py39h06a4308_0  
contourpy                 1.0.5            py39hdb19cb5_0  
cryptography              38.0.4           py39h9ce1e76_0  
cudatoolkit               10.2.89             h713d32c_10    conda-forge
cupy                      11.5.0           py39h505621e_0    conda-forge
cupy-xarray               0.1.2              pyhd8ed1ab_0    conda-forge
curl                      7.87.0               h5eee18b_0  
cycler                    0.11.0             pyhd3eb1b0_0  
cytoolz                   0.12.0           py39h5eee18b_0  
dask                      2023.1.1           pyhd8ed1ab_0    conda-forge
dask-core                 2023.1.1           pyhd8ed1ab_0    conda-forge
dask-cuda                 23.2.0             pyhd8ed1ab_0    conda-forge
dask-jobqueue             0.8.1              pyhd8ed1ab_0    conda-forge
dbus                      1.13.18              hb2f20db_0  
debugpy                   1.5.1            py39h295c915_0  
decorator                 5.1.1              pyhd3eb1b0_0  
defusedxml                0.7.1              pyhd3eb1b0_0  
distributed               2023.1.1           pyhd8ed1ab_0    conda-forge
entrypoints               0.4              py39h06a4308_0  
executing                 0.8.3              pyhd3eb1b0_0  
expat                     2.4.9                h6a678d5_0  
fastrlock                 0.8              py39h5a03fae_2    conda-forge
fftw                      3.3.9                h27cfd23_1  
flit-core                 3.6.0              pyhd3eb1b0_0  
fontconfig                2.14.1               h52c9d5c_1  
fonttools                 4.25.0             pyhd3eb1b0_0  
freetype                  2.12.1               h4a9f257_0  
fsspec                    2022.11.0        py39h06a4308_0  
giflib                    5.2.1                h5eee18b_1  
glib                      2.69.1               he621ea3_2  
gst-plugins-base          1.14.0               h8213a91_2  
gstreamer                 1.14.0               h28cd5cc_2  
hdf4                      4.2.13               h3ca952b_2  
hdf5                      1.10.6               h3ffc7dd_1  
heapdict                  1.0.1              pyhd3eb1b0_0  
icu                       58.2                 he6710b0_3  
idna                      3.4              py39h06a4308_0  
importlib-metadata        4.11.3           py39h06a4308_0  
ipykernel                 6.19.2           py39hb070fc8_0  
ipython                   8.10.0           py39h06a4308_0  
ipython_genutils          0.2.0              pyhd3eb1b0_1  
jedi                      0.18.1           py39h06a4308_1  
jinja2                    3.1.2            py39h06a4308_0  
jpeg                      9e                   h7f8727e_0  
json5                     0.9.6              pyhd3eb1b0_0  
jsonschema                4.17.3           py39h06a4308_0  
jupyter_client            7.3.4            py39h06a4308_0  
jupyter_core              5.2.0            py39h06a4308_0  
jupyter_server            1.23.4           py39h06a4308_0  
jupyterlab                3.5.3            py39h06a4308_0  
jupyterlab_pygments       0.1.2                      py_0  
jupyterlab_server         2.16.5           py39h06a4308_0  
kiwisolver                1.4.4            py39h6a678d5_0  
krb5                      1.19.4               h568e23c_0  
lcms2                     2.12                 h3be6417_0  
ld_impl_linux-64          2.38                 h1181459_1  
lerc                      3.0                  h295c915_0  
libblas                   3.9.0           15_linux64_openblas    conda-forge
libbrotlicommon           1.0.9                h5eee18b_7  
libbrotlidec              1.0.9                h5eee18b_7  
libbrotlienc              1.0.9                h5eee18b_7  
libcblas                  3.9.0           15_linux64_openblas    conda-forge
libclang                  10.0.1          default_hb85057a_2  
libcurl                   7.87.0               h91b91d3_0  
libdeflate                1.8                  h7f8727e_5  
libedit                   3.1.20221030         h5eee18b_0  
libev                     4.33                 h7f8727e_1  
libevent                  2.1.12               h8f2d780_0  
libffi                    3.4.2                h6a678d5_6  
libgcc-ng                 11.2.0               h1234567_1  
libgfortran-ng            12.2.0              h69a702a_19    conda-forge
libgfortran5              12.2.0              h337968e_19    conda-forge
libgomp                   11.2.0               h1234567_1  
liblapack                 3.9.0           15_linux64_openblas    conda-forge
libllvm10                 10.0.1               hbcb73fb_5  
libllvm11                 11.1.0               h9e868ea_6  
libnetcdf                 4.8.1                h8322cc2_2  
libnghttp2                1.46.0               hce63b2e_0  
libopenblas               0.3.20          pthreads_h78a6416_0    conda-forge
libpng                    1.6.37               hbc83047_0  
libpq                     12.9                 h16c4e8d_3  
libsodium                 1.0.18               h7b6447c_0  
libssh2                   1.10.0               h8f2d780_0  
libstdcxx-ng              11.2.0               h1234567_1  
libtiff                   4.5.0                h6a678d5_1  
libuuid                   1.41.5               h5eee18b_0  
libwebp                   1.2.4                h11a3e52_0  
libwebp-base              1.2.4                h5eee18b_0  
libxcb                    1.15                 h7f8727e_0  
libxkbcommon              1.0.1                hfa300c1_0  
libxml2                   2.9.14               h74e7548_0  
libxslt                   1.1.35               h4e12654_0  
libzip                    1.8.0                h5cef20c_0  
llvmlite                  0.39.1           py39he621ea3_0  
locket                    1.0.0            py39h06a4308_0  
lxml                      4.9.1            py39h1edc446_0  
lz4                       3.1.3            py39h27cfd23_0  
lz4-c                     1.9.4                h6a678d5_0  
markupsafe                2.1.1            py39h7f8727e_0  
matplotlib                3.6.2            py39h06a4308_0  
matplotlib-base           3.6.2            py39h945d387_0  
matplotlib-inline         0.1.6            py39h06a4308_0  
mistune                   0.8.4           py39h27cfd23_1000  
msgpack-python            1.0.3            py39hd09550d_0  
munkres                   1.1.4                      py_0  
nbclassic                 0.4.8            py39h06a4308_0  
nbclient                  0.5.13           py39h06a4308_0  
nbconvert                 6.5.4            py39h06a4308_0  
nbformat                  5.7.0            py39h06a4308_0  
ncurses                   6.4                  h6a678d5_0  
nest-asyncio              1.5.6            py39h06a4308_0  
netcdf4                   1.6.2            py39h89d13dc_0  
notebook                  6.5.2            py39h06a4308_0  
notebook-shim             0.2.2            py39h06a4308_0  
nspr                      4.33                 h295c915_0  
nss                       3.74                 h0370c37_0  
numba                     0.56.4           py39h417a72b_0  
numexpr                   2.8.4            py39hd2a5715_0  
numpy                     1.22.3           py39hc58783e_2    conda-forge
openssl                   1.1.1t               h7f8727e_0  
packaging                 22.0             py39h06a4308_0  
pandas                    1.5.2            py39h417a72b_0  
pandocfilters             1.5.0              pyhd3eb1b0_0  
parso                     0.8.3              pyhd3eb1b0_0  
partd                     1.2.0              pyhd3eb1b0_1  
pcre                      8.45                 h295c915_0  
pexpect                   4.8.0              pyhd3eb1b0_3  
pickleshare               0.7.5           pyhd3eb1b0_1003  
pillow                    9.3.0            py39h6a678d5_2  
pip                       22.3.1           py39h06a4308_0  
platformdirs              2.5.2            py39h06a4308_0  
ply                       3.11             py39h06a4308_0  
prometheus_client         0.14.1           py39h06a4308_0  
prompt-toolkit            3.0.36           py39h06a4308_0  
psutil                    5.9.0            py39h5eee18b_0  
ptyprocess                0.7.0              pyhd3eb1b0_2  
pure_eval                 0.2.2              pyhd3eb1b0_0  
pycparser                 2.21               pyhd3eb1b0_0  
pygments                  2.11.2             pyhd3eb1b0_0  
pynvml                    11.5.0             pyhd8ed1ab_0    conda-forge
pyopenssl                 22.0.0             pyhd3eb1b0_0  
pyparsing                 3.0.9            py39h06a4308_0  
pyqt                      5.15.7           py39h6a678d5_1  
pyqt5-sip                 12.11.0          py39h6a678d5_1  
pyrsistent                0.18.0           py39heee7806_0  
pysocks                   1.7.1            py39h06a4308_0  
python                    3.9.16               h7a1cb2a_0  
python-dateutil           2.8.2              pyhd3eb1b0_0  
python-fastjsonschema     2.16.2           py39h06a4308_0  
python_abi                3.9                      2_cp39    conda-forge
pytz                      2022.7           py39h06a4308_0  
pyyaml                    6.0              py39h5eee18b_1  
pyzmq                     23.2.0           py39h6a678d5_0  
qt-main                   5.15.2               h327a75a_7  
qt-webengine              5.15.9               hd2b0992_4  
qtwebkit                  5.212                h4eab89a_4  
readline                  8.2                  h5eee18b_0  
requests                  2.28.1           py39h06a4308_0  
scipy                     1.7.3            py39hf838250_2  
send2trash                1.8.0              pyhd3eb1b0_1  
setuptools                65.6.3           py39h06a4308_0  
sip                       6.6.2            py39h6a678d5_0  
six                       1.16.0             pyhd3eb1b0_1  
sniffio                   1.2.0            py39h06a4308_1  
sortedcontainers          2.4.0              pyhd3eb1b0_0  
soupsieve                 2.3.2.post1      py39h06a4308_0  
sqlite                    3.40.1               h5082296_0  
stack_data                0.2.0              pyhd3eb1b0_0  
tbb                       2021.6.0             hdb19cb5_1  
tblib                     1.7.0              pyhd3eb1b0_0  
terminado                 0.17.1           py39h06a4308_0  
tinycss2                  1.2.1            py39h06a4308_0  
tk                        8.6.12               h1ccaba5_0  
toml                      0.10.2             pyhd3eb1b0_0  
tomli                     2.0.1            py39h06a4308_0  
toolz                     0.12.0           py39h06a4308_0  
tornado                   6.1              py39h27cfd23_0  
traitlets                 5.7.1            py39h06a4308_0  
typing-extensions         4.4.0            py39h06a4308_0  
typing_extensions         4.4.0            py39h06a4308_0  
tzdata                    2022g                h04d1e81_0  
urllib3                   1.26.14          py39h06a4308_0  
wcwidth                   0.2.5              pyhd3eb1b0_0  
webencodings              0.5.1            py39h06a4308_1  
websocket-client          0.58.0           py39h06a4308_4  
wheel                     0.38.4           py39h06a4308_0  
xarray                    2023.2.0           pyhd8ed1ab_0    conda-forge
xz                        5.2.10               h5eee18b_1  
yaml                      0.2.5                h7b6447c_0  
zeromq                    4.3.4                h2531618_0  
zict                      2.1.0            py39h06a4308_0  
zipp                      3.11.0           py39h06a4308_0  
zlib                      1.2.13               h5eee18b_0  
zstd                      1.5.2                ha4553b6_0 

Is there anything that I missed when installing cupy-xarray which caused this error? Thank you!

BUG: import cupy_xarray does not work with xarray v2022.11+

It seems that xarray commit broke dask_array_type import from xarray.core.pycompat

import cupy as cp
import cupy_xarray  # Adds .cupy to Xarray objects
import numpy as np
import xarray as xr

gives the following error:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
Cell In[1], line 5
      3 import xarray as xr
      4 import numpy as np
----> 5 import cupy_xarray  # Adds .cupy to Xarray objects

File c:\ProgramData\Miniconda3\envs\cupy-xarray-original\lib\site-packages\cupy_xarray\__init__.py:2
      [1](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/__init__.py?line=0) from . import _version
----> [2](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/__init__.py?line=1) from .accessors import CupyDataArrayAccessor, CupyDatasetAccessor  # noqa
      [4](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/__init__.py?line=3) __version__ = _version.get_versions()["version"]

File c:\ProgramData\Miniconda3\envs\cupy-xarray-original\lib\site-packages\cupy_xarray\accessors.py:8
      [1](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=0) import cupy as cp
      [2](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=1) from xarray import (
      [3](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=2)     DataArray,
      [4](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=3)     Dataset,
      [5](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=4)     register_dataarray_accessor,
      [6](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=5)     register_dataset_accessor,
      [7](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=6) )
----> [8](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=7) from xarray.core.pycompat import dask_array_type
     [11](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=10) @register_dataarray_accessor("cupy")
     [12](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=11) class CupyDataArrayAccessor:
     [13](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=12)     """
     [14](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=13)     Access methods for DataArrays using Cupy.
     [15](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=14)     Methods and attributes can be accessed through the `.cupy` attribute.
     [16](file:///c%3A/ProgramData/Miniconda3/envs/cupy-xarray-original/lib/site-packages/cupy_xarray/accessors.py?line=15)     """

ImportError: cannot import name 'dask_array_type' from 'xarray.core.pycompat' (c:\ProgramData\Miniconda3\envs\cupy-xarray-original\lib\site-packages\xarray\core\pycompat.py)

python version: 3.9.15
cupy version: 11.4.0
xarray version: 2202.12.0
dask version: 2022.12.1
cupy-xarray version: 0.1.2

General function to convert from np.array dask dataset to cupy dask dataset

I'm building a module where the user can choose if their arrays run on CPU or GPU using dask. This is done by running dask.config.set({"array.backend": "cupy"}). Additionally, if the backend is set to cupy I want to convert the xarray dataset arrays to cupy as well using cupy_xarray.

In my project the cupy and cupy-xarray packages are optional.

Therefore if cupy and cupy-xarray are not installed and the user sets the backend to numpy the following code will fail.

import cupy_xarray # This will fail if cupy_xarray is not found
import dask
import xarray


def xarray_dataset_as_cupy(dataset: xarray.Dataset = None):
    if dask.config.get("array.backend") == "cupy" and dataset is not None:
        return dataset.as_cupy() # If cupy_xarray is not imported then as_cupy() function will fail
    else:
        return dataset
  • I guess I can use a try except in order to import cupy_xarray. However if I do that the as_cupy() function will fail as well because it will not be registered.

Any ideas on how to solve this?

Add CI workflows

  • Add pre-commit configuration
  • Remove versioneer and use setuptools-scm
  • Add Github workflow for testing infrastructure
  • Rename branch from master -> main

add API to docs build

autodoc/autosummary import the package to automatically add the docstrings.

This means cupy-xarray and cupy are imported. importing cupy fails on RTD saying it can't find libcuda.

It'd be nice to find a workaround.

Worst case, I guess we can run autodoc locally and then push the generated html?

(note that installing cuda brings in cudatoolkit which is a 800MB download; it'd be nice to just not do that)

Flexibility in requirements/dependencies

Currently the cupy-xarray package depends on the last version of cupy. This means that if an user has an older version of cupy, cupy will be installed again (which takes a lot of time). Would if be possible to put some flexibility in the pyproject.toml file and use >= or <= for cupy's versions?

Updating CI badges in the README

I have noticed the links for some the CI badges are not set up correctly in the README which results in a fail status on the build status badge.
The docs badge also not redirecting the correct readthedocs link.

Migrate from setup.py to pyproject.toml?

Trying to do a bit of maintenance on this repo, and I'd like to reduce the number of configuration files in the top level folder if possible, by consolidating setup.py, setup.cfg, requirements.txt, requirements_test.txt -> pyproject.toml.

Notes:

  • Since there was some resistance with switching away from versioneer in #8, we'll also need to upgrade versioneer from 0.23 to 0.29 to support pyproject.toml. Edit: actually no, versioneer=0.23 works.
  • The project currently uses flake8 which (infamously) doesn't support pyproject.toml. Might need to switch to ruff following xarray-contrib/cf-xarray#400, or some alternative linter. Edit: See #49.

If I get some thumbs up ๐Ÿ‘ on this, I'll open a PR to start the migration to pyproject.toml. Or if there are any objections, please raise them below.

Requirements for better Xarray integration

This is a tracking issue for stuff that needs to happen for better Xarray integration. For some background, see here and here

ModuleNotFoundError when importing cupy_xarray

I'm tryinh to import cupy_xarray as showed in the example in the README.md. I have installed cupy_xarray with pip install cupy-xarray. However I get this error when importing the package.

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[10], line 1
----> 1 import cupy_xarray

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/cupy_xarray/__init__.py:2
      1 from . import _version
----> 2 from .accessors import CupyDataArrayAccessor, CupyDatasetAccessor  # noqa
      4 __version__ = _version.get_versions()[\"version\"]

File ~/.conda/envs/pyralysis-env/lib/python3.12/site-packages/cupy_xarray/accessors.py:8
      1 import cupy as cp
      2 from xarray import (
      3     DataArray,
      4     Dataset,
      5     register_dataarray_accessor,
      6     register_dataset_accessor,
      7 )
----> 8 from xarray.core.pycompat import DuckArrayModule
     10 dsk = DuckArrayModule(\"dask\")
     11 dask_array_type = dsk.type

ModuleNotFoundError: No module named 'xarray.core.pycompat'"

Versions:

cupy-xarray==0.1.3
xarray==2024.6.0

NVIDIA DALI pipelines to facilitate direct loading of data into GPU memory.

I have recently learned about NVIDIA DALI (Data Loading Library) that can be used for streaming data directly.

This can be potentially used for data streaming of our files directly to GPUs to avoid any CPU-GPU data transfer latency.

This discussion in Xarray Repository is relevant: pydata/xarray#9249

@weiji14 suggested that this can be integrated as a dedicated BackendEntrypoint as an alternative to the kvikio engine and I like this idea.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.