Skip to content

Commit 3b4ddaa

Browse files
committed
test and fix transpose codec for non self inverse orders
1 parent 7de598f commit 3b4ddaa

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

tests/test_v3.py

+18
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,24 @@ async def test_transpose(
456456
)
457457

458458

459+
def test_transpose_non_self_inverse(
460+
store: Store
461+
):
462+
data = np.arange(0, 6 * 7 * 8, dtype="uint16").reshape((6, 7, 8))
463+
order = [1, 2, 0]
464+
a = Array.create(
465+
store / "transpose_non_self_inverse",
466+
shape=data.shape,
467+
chunk_shape=(6, 7, 8),
468+
dtype=data.dtype,
469+
fill_value=0,
470+
codecs=[codecs.transpose_codec(order), codecs.bytes_codec()],
471+
)
472+
a[:, :] = data
473+
read_data = a[:, :]
474+
assert np.array_equal(data, read_data)
475+
476+
459477
def test_transpose_invalid(
460478
store: Store,
461479
):

zarrita/codecs.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -426,9 +426,7 @@ async def decode(
426426
self,
427427
chunk_array: np.ndarray,
428428
) -> np.ndarray:
429-
inverse_order = [0 for _ in range(self.array_metadata.ndim)]
430-
for x, i in enumerate(self.order):
431-
inverse_order[x] = i
429+
inverse_order = np.argsort(self.order)
432430
chunk_array = chunk_array.transpose(inverse_order)
433431
return chunk_array
434432

0 commit comments

Comments
 (0)