2424from zarr .core .common import compress_rle , expand_rle
2525from zarr .core .metadata .v3 import (
2626 RectilinearChunkGridMetadata ,
27+ RectilinearChunkGridMetadataJSON ,
2728 RegularChunkGridMetadata ,
2829 parse_chunk_grid ,
2930)
@@ -546,13 +547,13 @@ def test_rle_expand_rejects_invalid(rle_input: list[Any], match: str) -> None:
546547
547548def test_expand_rle_bare_integer_floats_accepted () -> None :
548549 """JSON parsers may emit 10.0 for the integer 10; expand_rle should handle it."""
549- result = expand_rle ([10.0 , 20.0 ])
550+ result = expand_rle ([10.0 , 20.0 ]) # type: ignore[list-item]
550551 assert result == [10 , 20 ]
551552
552553
553554def test_expand_rle_pair_with_float_count () -> None :
554555 """expand_rle accepts float repeat counts that are integer-valued"""
555- result = expand_rle ([[10 , 3.0 ]])
556+ result = expand_rle ([[10 , 3.0 ]]) # type: ignore[list-item]
556557 assert result == [10 , 10 , 10 ]
557558
558559
@@ -679,6 +680,7 @@ def test_spec_integer_shorthand_per_dimension() -> None:
679680 "configuration" : {"kind" : "inline" , "chunk_shapes" : [4 , [1 , 2 , 3 ]]},
680681 }
681682 meta = parse_chunk_grid (data )
683+ assert isinstance (meta , RectilinearChunkGridMetadata )
682684 g = ChunkGrid .from_sizes ((6 , 6 ), meta .chunk_shapes )
683685 assert _edges (g , 0 ) == (4 , 4 )
684686 assert _edges (g , 1 ) == (1 , 2 , 3 )
@@ -691,6 +693,7 @@ def test_spec_mixed_rle_and_bare_integers() -> None:
691693 "configuration" : {"kind" : "inline" , "chunk_shapes" : [[[1 , 3 ], 3 ]]},
692694 }
693695 meta = parse_chunk_grid (data )
696+ assert isinstance (meta , RectilinearChunkGridMetadata )
694697 g = ChunkGrid .from_sizes ((6 ,), meta .chunk_shapes )
695698 assert _edges (g , 0 ) == (1 , 1 , 1 , 3 )
696699
@@ -702,6 +705,7 @@ def test_spec_overflow_chunks_allowed() -> None:
702705 "configuration" : {"kind" : "inline" , "chunk_shapes" : [[4 , 4 , 4 ]]},
703706 }
704707 meta = parse_chunk_grid (data )
708+ assert isinstance (meta , RectilinearChunkGridMetadata )
705709 g = ChunkGrid .from_sizes ((6 ,), meta .chunk_shapes )
706710 assert _edges (g , 0 ) == (4 , 4 , 4 )
707711
@@ -722,6 +726,7 @@ def test_spec_example() -> None:
722726 },
723727 }
724728 meta = parse_chunk_grid (data )
729+ assert isinstance (meta , RectilinearChunkGridMetadata )
725730 g = ChunkGrid .from_sizes ((6 , 6 , 6 , 6 , 6 ), meta .chunk_shapes )
726731 assert _edges (g , 0 ) == (4 , 4 )
727732 assert _edges (g , 1 ) == (1 , 2 , 3 )
@@ -774,6 +779,7 @@ def test_parse_chunk_grid_rectilinear_extent_mismatch_raises(
774779 "configuration" : {"kind" : "inline" , "chunk_shapes" : chunk_shapes },
775780 }
776781 meta = parse_chunk_grid (data )
782+ assert isinstance (meta , RectilinearChunkGridMetadata )
777783 with pytest .raises (ValueError , match = match ):
778784 ChunkGrid .from_sizes (array_shape , meta .chunk_shapes )
779785
@@ -785,6 +791,7 @@ def test_parse_chunk_grid_rectilinear_extent_match_passes() -> None:
785791 "configuration" : {"kind" : "inline" , "chunk_shapes" : [[10 , 20 , 30 ], [25 , 25 ]]},
786792 }
787793 meta = parse_chunk_grid (data )
794+ assert isinstance (meta , RectilinearChunkGridMetadata )
788795 g = ChunkGrid .from_sizes ((60 , 50 ), meta .chunk_shapes )
789796 assert g .grid_shape == (3 , 2 )
790797
@@ -796,6 +803,7 @@ def test_parse_chunk_grid_rectilinear_ndim_mismatch_raises() -> None:
796803 "configuration" : {"kind" : "inline" , "chunk_shapes" : [[10 , 20 ], [25 , 25 ]]},
797804 }
798805 meta = parse_chunk_grid (data )
806+ assert isinstance (meta , RectilinearChunkGridMetadata )
799807 with pytest .raises (ValueError , match = "3 dimensions but chunk_sizes has 2" ):
800808 ChunkGrid .from_sizes ((30 , 50 , 100 ), meta .chunk_shapes )
801809
@@ -807,6 +815,7 @@ def test_parse_chunk_grid_rectilinear_rle_extent_validated() -> None:
807815 "configuration" : {"kind" : "inline" , "chunk_shapes" : [[[10 , 5 ]], [[25 , 2 ]]]},
808816 }
809817 meta = parse_chunk_grid (data )
818+ assert isinstance (meta , RectilinearChunkGridMetadata )
810819 g = ChunkGrid .from_sizes ((50 , 50 ), meta .chunk_shapes )
811820 assert g .grid_shape == (5 , 2 )
812821 with pytest .raises (ValueError , match = "extent 100 exceeds sum of edges 50" ):
@@ -2717,7 +2726,8 @@ def test_iter_chunk_regions_rectilinear() -> None:
27172726 ],
27182727)
27192728def test_rectilinear_from_dict (
2720- json_input : dict [str , Any ], expected_chunk_shapes : tuple [int | tuple [int , ...], ...]
2729+ json_input : RectilinearChunkGridMetadataJSON ,
2730+ expected_chunk_shapes : tuple [int | tuple [int , ...], ...],
27212731) -> None :
27222732 """RectilinearChunkGridMetadata.from_dict correctly parses all spec forms."""
27232733 grid = RectilinearChunkGridMetadata .from_dict (json_input )
@@ -2760,7 +2770,7 @@ def test_rectilinear_to_dict(
27602770 },
27612771 ],
27622772)
2763- def test_rectilinear_roundtrip (json_input : dict [ str , Any ] ) -> None :
2773+ def test_rectilinear_roundtrip (json_input : RectilinearChunkGridMetadataJSON ) -> None :
27642774 """from_dict -> to_dict -> from_dict produces the same grid."""
27652775 grid1 = RectilinearChunkGridMetadata .from_dict (json_input )
27662776 grid2 = RectilinearChunkGridMetadata .from_dict (grid1 .to_dict ())
0 commit comments