10000 fixes bug in transpose (#1949) · AdamWill/zarr-python@5c4dc23 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5c4dc23

Browse files
authored
fixes bug in transpose (zarr-developers#1949)
1 parent 8599944 commit 5c4dc23

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

src/zarr/codecs/transpose.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from dataclasses import dataclass, replace
55
from typing import TYPE_CHECKING, cast
66

7+
import numpy as np
8+
79
from zarr.abc.codec import ArrayArrayCodec
810
from zarr.buffer import NDBuffer
911
from zarr.codecs.registry import register_codec
@@ -76,9 +78,7 @@ async def _decode_single(
7678
chunk_array: NDBuffer,
7779
chunk_spec: ArraySpec,
7880
) -> NDBuffer:
79-
inverse_order = [0] * chunk_spec.ndim
80-
for x, i in enumerate(self.order):
81-
inverse_order[x] = i
81+
inverse_order = np.argsort(self.order)
8282
chunk_array = chunk_array.transpose(inverse_order)
8383
return chunk_array
8484

tests/v3/test_codecs.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,23 @@ async def test_transpose(
406406
assert await (store / "transpose/0.0").get() == await (store / "transpose_zarr/0.0").get()
407407

408408

409+
@pytest.mark.parametrize("order", [[1, 2, 0], [1, 2, 3, 0], [3, 2, 4, 0, 1]])
410+
def test_transpose_non_self_inverse(store: Store, order):
411+
shape = [i + 3 for i in range(len(order))]
412+
data = np.arange(0, np.prod(shape), dtype="uint16").reshape(shape)
413+
a = Array.create(
414+
store / "transpose_non_self_inverse",
415+
shape=data.shape,
416+
chunk_shape=data.shape,
417+
dtype=data.dtype,
418+
fill_value=0,
419+
codecs=[TransposeCodec(order=order), BytesCodec()],
420+
)
421+
a[:, :] = data
422+
read_data = a[:, :]
423+
assert np.array_equal(data, read_data)
424+
425+
409426
def test_transpose_invalid(
410427
store: Store,
411428
):

0 commit comments

Comments
 (0)
0