Skip to content

Commit 027c469

Browse files
committed
fix: make vectorized fetching less reliant on matching order
1 parent f36ea93 commit 027c469

1 file changed

Lines changed: 9 additions & 7 deletions

File tree

src/zarr/codecs/sharding.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
BasicIndexer,
4848
ChunkProjection,
4949
SelectorTuple,
50-
_morton_order_keys,
5150
c_order_iter,
5251
get_indexer,
5352
morton_order_iter,
@@ -235,6 +234,7 @@ def create_empty(cls, chunks_per_shard: tuple[int, ...]) -> _ShardIndex:
235234
class _ShardReader(ShardMapping):
236235
buf: Buffer
237236
index: _ShardIndex
237+
order: SubchunkWriteOrder
238238

239239
@classmethod
240240
async def from_bytes(
@@ -291,15 +291,13 @@ def to_dict_vectorized(
291291
dict mapping chunk coordinate tuples to Buffer or None
292292
"""
293293
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)
296294

297295
result: dict[tuple[int, ...], Buffer | None] = {}
298-
for i, coords in enumerate(chunk_coords_keys):
296+
for i, coords in enumerate(chunk_coords_array):
299297
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])]
301299
else:
302-
result[coords] = None
300+
result[tuple(coords.ravel())] = None
303301

304302
return result
305303

@@ -575,7 +573,11 @@ async def _encode_single(
575573
chunk_grid=RegularChunkGrid(chunk_shape=chunk_shape),
576574
)
577575
)
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+
)
579581

580582
await self.codec_pipeline.write(
581583
[

0 commit comments

Comments
 (0)