Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions virtualizarr/tests/test_writers/test_kerchunk.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,30 +193,36 @@ def test_accessor_to_kerchunk_parquet(self, tmp_path, array_v3_metadata):
}


@pytest.mark.parametrize("endian,expected_dtype_char", [("little", "<"), ("big", ">")])
@pytest.mark.parametrize(
["dtype", "endian", "expected_dtype_char"],
[("i8", "little", "<"), ("i8", "big", ">"), ("i1", None, "|")],
)
def test_convert_v3_to_v2_metadata(
array_v3_metadata, endian: str, expected_dtype_char: str
array_v3_metadata, dtype: str, endian: str | None, expected_dtype_char: str
):
shape = (5, 20)
chunks = (5, 10)

codecs = [
{"name": "bytes", "configuration": {"endian": endian}},
{
"name": "numcodecs.delta",
"configuration": {"dtype": f"{expected_dtype_char}i8"},
"configuration": {"dtype": f"{expected_dtype_char}{dtype}"},
},
{
"name": "numcodecs.blosc",
"configuration": {"cname": "zstd", "clevel": 5, "shuffle": 1},
},
]

v3_metadata = array_v3_metadata(shape=shape, chunks=chunks, codecs=codecs)
v3_metadata = array_v3_metadata(
data_type=np.dtype(dtype), shape=shape, chunks=chunks, codecs=codecs
)
v2_metadata = convert_v3_to_v2_metadata(v3_metadata)

assert isinstance(v2_metadata, ArrayV2Metadata)
assert v2_metadata.shape == shape
expected_dtype = np.dtype(f"{expected_dtype_char}i4") # assuming int32
expected_dtype = np.dtype(f"{expected_dtype_char}{dtype}")
assert v2_metadata.dtype.to_native_dtype() == expected_dtype
assert v2_metadata.chunks == chunks
assert v2_metadata.fill_value == 0
Expand All @@ -232,7 +238,7 @@ def test_convert_v3_to_v2_metadata(

filters_config = filter_codec.get_config()
assert filters_config["id"] == "delta"
expected_delta_dtype = f"{expected_dtype_char}i8"
expected_delta_dtype = f"{expected_dtype_char}{dtype}"
assert filters_config["dtype"] == expected_delta_dtype
assert filters_config["astype"] == expected_delta_dtype
assert v2_metadata.attributes == {}
Expand Down
4 changes: 2 additions & 2 deletions virtualizarr/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,8 @@ def convert_v3_to_v2_metadata(
# but other codec pipelines could store endianness elsewhere.
big_endian = any(
isinstance(codec, ArrayBytesCodec)
and hasattr(codec, "endian")
and codec.endian.value == "big"
and getattr(codec, "endian", None) is not None
and codec.endian.value == "big" # type: ignore[attr-defined]
for codec in v3_metadata.codecs
)
if big_endian:
Expand Down