|
47 | 47 | BasicIndexer, |
48 | 48 | ChunkProjection, |
49 | 49 | SelectorTuple, |
50 | | - _morton_order_keys, |
51 | 50 | c_order_iter, |
52 | 51 | get_indexer, |
53 | 52 | morton_order_iter, |
@@ -235,6 +234,7 @@ def create_empty(cls, chunks_per_shard: tuple[int, ...]) -> _ShardIndex: |
235 | 234 | class _ShardReader(ShardMapping): |
236 | 235 | buf: Buffer |
237 | 236 | index: _ShardIndex |
| 237 | + order: SubchunkWriteOrder |
238 | 238 |
|
239 | 239 | @classmethod |
240 | 240 | async def from_bytes( |
@@ -291,15 +291,13 @@ def to_dict_vectorized( |
291 | 291 | dict mapping chunk coordinate tuples to Buffer or None |
292 | 292 | """ |
293 | 293 | starts, ends, valid = self.index.get_chunk_slices_vectorized(chunk_coords_array) |
294 | | - chunks_per_shard = tuple(self.index.offsets_and_lengths.shape[:-1]) |
295 | | - chunk_coords_keys = _morton_order_keys(chunks_per_shard) |
296 | 294 |
|
297 | 295 | result: dict[tuple[int, ...], Buffer | None] = {} |
298 | | - for i, coords in enumerate(chunk_coords_keys): |
| 296 | + for i, coords in enumerate(chunk_coords_array): |
299 | 297 | if valid[i]: |
300 | | - result[coords] = self.buf[int(starts[i]) : int(ends[i])] |
| 298 | + result[tuple(coords.ravel())] = self.buf[int(starts[i]) : int(ends[i])] |
301 | 299 | else: |
302 | | - result[coords] = None |
| 300 | + result[tuple(coords.ravel())] = None |
303 | 301 |
|
304 | 302 | return result |
305 | 303 |
|
@@ -575,7 +573,11 @@ async def _encode_single( |
575 | 573 | chunk_grid=RegularChunkGrid(chunk_shape=chunk_shape), |
576 | 574 | ) |
577 | 575 | ) |
578 | | - shard_builder = dict.fromkeys(self._subchunk_order_iter(chunks_per_shard)) |
| 576 | + shard_builder = dict.fromkeys(np.array(list(np.ndindex(chunks_per_shard)))) |
| 577 | + assert ( |
| 578 | + shard_builder.keys() |
| 579 | + == dict.fromkeys(self._subchunk_order_iter(chunks_per_shard)).keys() |
| 580 | + ) |
579 | 581 |
|
580 | 582 | await self.codec_pipeline.write( |
581 | 583 | [ |
|
0 commit comments