@@ -35,41 +35,19 @@ def chunks(self, data: "CubedArray") -> T_Chunks:
35
35
return data .chunks
36
36
37
37
def from_array (self , data : np .ndarray , chunks , ** kwargs ) -> "CubedArray" :
38
- from cubed import Array , from_array
38
+ from cubed import from_array
39
39
40
- from xarray .core import indexing
41
-
42
- # cubed-specific kwargs
40
+ # Extract cubed-specific kwargs.
41
+ # Also ignores dask-specific kwargs that are passed in.
42
+ # The passing of dask-specific kwargs to cubed should be eventually removed by deprecating them
43
+ # as explicit arguments to xarray methods
43
44
spec = kwargs .pop ("spec" , None )
44
45
45
- if isinstance (data , Array ):
46
- data = data .rechunk (chunks )
47
- elif is_duck_dask_array (data ):
48
- raise TypeError ("Trying to rechunk a dask array using cubed" )
49
- else :
50
- if isinstance (data , indexing .ExplicitlyIndexed ):
51
- # Unambiguously handle array storage backends (like NetCDF4 and h5py)
52
- # that can't handle general array indexing. For example, in netCDF4 you
53
- # can do "outer" indexing along two dimensions independent, which works
54
- # differently from how NumPy handles it.
55
- # da.from_array works by using lazy indexing with a tuple of slices.
56
- # Using OuterIndexer is a pragmatic choice: dask does not yet handle
57
- # different indexing types in an explicit way:
58
- # https://github.com/dask/dask/issues/2883
59
- data = indexing .ImplicitToExplicitIndexingAdapter (
60
- data , indexing .OuterIndexer
61
- )
62
-
63
- if utils .is_dict_like (chunks ):
64
- chunks = tuple (chunks .get (n , s ) for n , s in enumerate (data .shape ))
65
-
66
- data = from_array (
67
- data ,
68
- chunks ,
69
- spec = spec ,
70
- )
71
-
72
- return data
46
+ return from_array (
47
+ data ,
48
+ chunks ,
49
+ spec = spec ,
50
+ )
73
51
74
52
def rechunk (self , data : "CubedArray" , chunks , ** kwargs ) -> "CubedArray" :
75
53
return data .rechunk (chunks , ** kwargs )
0 commit comments