Skip to content

Commit 1865f23

Browse files
committed
[cherry] Making decoding arrays lazy too
1 parent 6a13611 commit 1865f23

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

xarray/coding/strings.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,14 +250,17 @@ def __repr__(self):
250250
return f"{type(self).__name__}({self.array!r})"
251251

252252
def _vindex_get(self, key):
253-
return _numpy_char_to_bytes(self.array.vindex[key])
253+
return type(self)(self.array.vindex[key])
254254

255255
def _oindex_get(self, key):
256-
return _numpy_char_to_bytes(self.array.oindex[key])
256+
return type(self)(self.array.oindex[key])
257257

258258
def __getitem__(self, key):
259259
# require slicing the last dimension completely
260260
key = type(key)(indexing.expanded_indexer(key.tuple, self.array.ndim))
261261
if key.tuple[-1] != slice(None):
262262
raise IndexError("too many indices")
263-
return _numpy_char_to_bytes(self.array[key])
263+
return type(self)(self.array[key])
264+
265+
def get_duck_array(self):
266+
return _numpy_char_to_bytes(self.array.get_duck_array())

xarray/coding/variables.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,16 @@ def dtype(self) -> np.dtype:
5858
return np.dtype(self.array.dtype.kind + str(self.array.dtype.itemsize))
5959

6060
def _oindex_get(self, key):
61-
return np.asarray(self.array.oindex[key], dtype=self.dtype)
61+
return type(self)(self.array.oindex[key])
6262

6363
def _vindex_get(self, key):
64-
return np.asarray(self.array.vindex[key], dtype=self.dtype)
64+
return type(self)(self.array.vindex[key])
6565

6666
def __getitem__(self, key) -> np.ndarray:
67-
return np.asarray(self.array[key], dtype=self.dtype)
67+
return type(self)(self.array[key], dtype=self.dtype)
68+
69+
def get_duck_array(self):
70+
return duck_array_ops.astype(self.array.get_duck_array(), dtype=self.dtype)
6871

6972

7073
class BoolTypeArray(indexing.ExplicitlyIndexedNDArrayMixin):
@@ -96,14 +99,16 @@ def dtype(self) -> np.dtype:
9699
return np.dtype("bool")
97100

98101
def _oindex_get(self, key):
99-
return np.asarray(self.array.oindex[key], dtype=self.dtype)
102+
return type(self)(self.array.oindex[key])
100103

101104
def _vindex_get(self, key):
102-
return np.asarray(self.array.vindex[key], dtype=self.dtype)
105+
return type(self)(self.array.vindex[key])
103106

104107
def __getitem__(self, key) -> np.ndarray:
105-
return np.asarray(self.array[key], dtype=self.dtype)
108+
return type(self)(self.array[key])
106109

110+
def get_duck_array(self):
111+
return duck_array_ops.astype(self.array.get_duck_array(), dtype=self.dtype)
107112

108113

109114
def _apply_mask(

0 commit comments

Comments
 (0)