Store that returns a duck array, not convertible to numpy array, on read. Modeled after nVIDIA's kvikio.
| 252 | |
| 253 | |
| 254 | class AccessibleAsDuckArrayDataStore(backends.InMemoryDataStore): |
| 255 | """ |
| 256 | Store that returns a duck array, not convertible to numpy array, |
| 257 | on read. Modeled after nVIDIA's kvikio. |
| 258 | """ |
| 259 | |
| 260 | def __init__(self): |
| 261 | super().__init__() |
| 262 | self._indexvars = set() |
| 263 | |
| 264 | def store(self, variables, *args, **kwargs) -> None: |
| 265 | super().store(variables, *args, **kwargs) |
| 266 | for k, v in variables.items(): |
| 267 | if isinstance(v, IndexVariable): |
| 268 | self._indexvars.add(k) |
| 269 | |
| 270 | def get_variables(self) -> dict[Any, xr.Variable]: |
| 271 | def lazy_accessible(k, v) -> xr.Variable: |
| 272 | if k in self._indexvars: |
| 273 | return v |
| 274 | data = indexing.LazilyIndexedArray(DuckBackendArrayWrapper(v.values)) |
| 275 | return Variable(v.dims, data, v.attrs) |
| 276 | |
| 277 | return {k: lazy_accessible(k, v) for k, v in self._variables.items()} |
| 278 | |
| 279 | |
| 280 | class TestDataset: |
no outgoing calls
searching dependent graphs…