102102 T_ArrayMetadata ,
103103)
104104from zarr .core .metadata .v2 import (
105+ CompressorLikev2 ,
105106 _default_compressor ,
106107 _default_filters ,
107108 parse_compressor ,
@@ -303,7 +304,7 @@ async def create(
303304 dimension_separator : Literal ["." , "/" ] | None = None ,
304305 order : MemoryOrder | None = None ,
305306 filters : list [dict [str , JSON ]] | None = None ,
306- compressor : dict [ str , JSON ] | None = None ,
307+ compressor : CompressorLikev2 | Literal [ "auto" ] = "auto" ,
307308 # runtime
308309 overwrite : bool = False ,
309310 data : npt .ArrayLike | None = None ,
@@ -394,7 +395,7 @@ async def create(
394395 dimension_separator : Literal ["." , "/" ] | None = None ,
395396 order : MemoryOrder | None = None ,
396397 filters : list [dict [str , JSON ]] | None = None ,
397- compressor : dict [ str , JSON ] | None = None ,
398+ compressor : CompressorLike = "auto" ,
398399 # runtime
399400 overwrite : bool = False ,
400401 data : npt .ArrayLike | None = None ,
@@ -429,7 +430,7 @@ async def create(
429430 dimension_separator : Literal ["." , "/" ] | None = None ,
430431 order : MemoryOrder | None = None ,
431432 filters : list [dict [str , JSON ]] | None = None ,
432- compressor : dict [ str , JSON ] | None = None ,
433+ compressor : CompressorLike = "auto" ,
433434 # runtime
434435 overwrite : bool = False ,
435436 data : npt .ArrayLike | None = None ,
@@ -570,7 +571,7 @@ async def _create(
570571 dimension_separator : Literal ["." , "/" ] | None = None ,
571572 order : MemoryOrder | None = None ,
572573 filters : list [dict [str , JSON ]] | None = None ,
573- compressor : dict [ str , JSON ] | None = None ,
574+ compressor : CompressorLike = "auto" ,
574575 # runtime
575576 overwrite : bool = False ,
576577 data : npt .ArrayLike | None = None ,
@@ -604,7 +605,7 @@ async def _create(
604605 raise ValueError (
605606 "filters cannot be used for arrays with zarr_format 3. Use array-to-array codecs instead."
606607 )
607- if compressor is not None :
608+ if compressor != "auto" :
608609 raise ValueError (
609610 "compressor cannot be used for arrays with zarr_format 3. Use bytes-to-bytes codecs instead."
610611 )
@@ -768,7 +769,7 @@ def _create_metadata_v2(
768769 dimension_separator : Literal ["." , "/" ] | None = None ,
769770 fill_value : float | None = None ,
770771 filters : Iterable [dict [str , JSON ] | numcodecs .abc .Codec ] | None = None ,
771- compressor : dict [ str , JSON ] | numcodecs . abc . Codec | None = None ,
772+ compressor : CompressorLikev2 = None ,
772773 attributes : dict [str , JSON ] | None = None ,
773774 ) -> ArrayV2Metadata :
774775 if dimension_separator is None :
@@ -809,7 +810,7 @@ async def _create_v2(
809810 dimension_separator : Literal ["." , "/" ] | None = None ,
810811 fill_value : float | None = None ,
811812 filters : Iterable [dict [str , JSON ] | numcodecs .abc .Codec ] | None = None ,
812- compressor : dict [ str , JSON ] | numcodecs . abc . Codec | None = None ,
813+ compressor : CompressorLike = "auto" ,
813814 attributes : dict [str , JSON ] | None = None ,
814815 overwrite : bool = False ,
815816 ) -> AsyncArray [ArrayV2Metadata ]:
@@ -821,6 +822,17 @@ async def _create_v2(
821822 else :
822823 await ensure_no_existing_node (store_path , zarr_format = 2 )
823824
825+ compressor_parsed : CompressorLikev2
826+ if compressor == "auto" :
827+ compressor_parsed = _default_compressor (dtype )
828+ elif isinstance (compressor , BytesBytesCodec ):
829+ raise ValueError (
830+ "Cannot use a BytesBytesCodec as a compressor for zarr v2 arrays. "
831+ "Use a numcodecs codec directly instead."
832+ )
833+ else :
834+ compressor_parsed = compressor
835+
824836 metadata = cls ._create_metadata_v2 (
825837 shape = shape ,
826838 dtype = dtype ,
@@ -829,7 +841,7 @@ async def _create_v2(
829841 dimension_separator = dimension_separator ,
830842 fill_value = fill_value ,
831843 filters = filters ,
832- compressor = compressor ,
844+ compressor = compressor_parsed ,
833845 attributes = attributes ,
834846 )
835847
@@ -1751,7 +1763,7 @@ def create(
17511763 dimension_separator : Literal ["." , "/" ] | None = None ,
17521764 order : MemoryOrder | None = None ,
17531765 filters : list [dict [str , JSON ]] | None = None ,
1754- compressor : dict [ str , JSON ] | None = None ,
1766+ compressor : CompressorLike = "auto" ,
17551767 # runtime
17561768 overwrite : bool = False ,
17571769 config : ArrayConfigLike | None = None ,
@@ -1880,7 +1892,7 @@ def _create(
18801892 dimension_separator : Literal ["." , "/" ] | None = None ,
18811893 order : MemoryOrder | None = None ,
18821894 filters : list [dict [str , JSON ]] | None = None ,
1883- compressor : dict [ str , JSON ] | None = None ,
1895+ compressor : CompressorLike = "auto" ,
18841896 # runtime
18851897 overwrite : bool = False ,
18861898 config : ArrayConfigLike | None = None ,
@@ -3792,7 +3804,11 @@ def _get_default_codecs(
37923804 | Literal ["auto" ]
37933805 | None
37943806)
3795- CompressorLike : TypeAlias = dict [str , JSON ] | BytesBytesCodec | numcodecs .abc .Codec | None
3807+ # Union of acceptable types for users to pass in for both v2 and v3 compressors
3808+ CompressorLike : TypeAlias = (
3809+ dict [str , JSON ] | BytesBytesCodec | numcodecs .abc .Codec | Literal ["auto" ] | None
3810+ )
3811+
37963812CompressorsLike : TypeAlias = (
37973813 Iterable [dict [str , JSON ] | BytesBytesCodec | numcodecs .abc .Codec ]
37983814 | dict [str , JSON ]
0 commit comments