@@ -573,3 +573,37 @@ async def test_use_consolidated_false(
573
573
assert len ([x async for x in good .members ()]) == 2
574
574
assert good .metadata .consolidated_metadata
575
575
assert sorted (good .metadata .consolidated_metadata .metadata ) == ["a" , "b" ]
576
+
577
+
578
+ @pytest .mark .parametrize ("fill_value" , [np .nan , np .inf , - np .inf ])
579
+ async def test_consolidated_metadata_encodes_special_chars (
580
+ memory_store : Store , zarr_format : ZarrFormat , fill_value : float
581
+ ):
582
+ root = await group (store = memory_store , zarr_format = zarr_format )
583
+ _child = await root .create_group ("child" , attributes = {"test" : fill_value })
584
+ _time = await root .create_array ("time" , shape = (12 ,), dtype = np .float64 , fill_value = fill_value )
585
+ await zarr .api .asynchronous .consolidate_metadata (memory_store )
586
+
587
+ root = await group (store = memory_store , zarr_format = zarr_format )
588
+ root_buffer = root .metadata .to_buffer_dict (default_buffer_prototype ())
589
+
590
+ if zarr_format == 2 :
591
+ root_metadata = json .loads (root_buffer [".zmetadata" ].to_bytes ().decode ("utf-8" ))["metadata" ]
592
+ elif zarr_format == 3 :
593
+ root_metadata = json .loads (root_buffer ["zarr.json" ].to_bytes ().decode ("utf-8" ))[
594
+ "consolidated_metadata"
595
+ ]["metadata" ]
596
+
597
+ if np .isnan (fill_value ):
598
+ expected_fill_value = "NaN"
599
+ elif np .isneginf (fill_value ):
600
+ expected_fill_value = "-Infinity"
601
+ elif np .isinf (fill_value ):
602
+ expected_fill_value = "Infinity"
603
+
604
+ if zarr_format == 2 :
605
+ assert root_metadata ["child/.zattrs" ]["test" ] == expected_fill_value
606
+ assert root_metadata ["time/.zarray" ]["fill_value" ] == expected_fill_value
607
+ elif zarr_format == 3 :
608
+ assert root_metadata ["child" ]["attributes" ]["test" ] == expected_fill_value
609
+ assert root_metadata ["time" ]["fill_value" ] == expected_fill_value
0 commit comments