102
102
T_ArrayMetadata ,
103
103
)
104
104
from zarr .core .metadata .v2 import (
105
+ CompressorLikev2 ,
105
106
_default_compressor ,
106
107
_default_filters ,
107
108
parse_compressor ,
@@ -303,7 +304,7 @@ async def create(
303
304
dimension_separator : Literal ["." , "/" ] | None = None ,
304
305
order : MemoryOrder | None = None ,
305
306
filters : list [dict [str , JSON ]] | None = None ,
306
- compressor : dict [ str , JSON ] | None = None ,
307
+ compressor : CompressorLikev2 | Literal [ "auto" ] = "auto" ,
307
308
# runtime
308
309
overwrite : bool = False ,
309
310
data : npt .ArrayLike | None = None ,
@@ -394,7 +395,7 @@ async def create(
394
395
dimension_separator : Literal ["." , "/" ] | None = None ,
395
396
order : MemoryOrder | None = None ,
396
397
filters : list [dict [str , JSON ]] | None = None ,
397
- compressor : dict [ str , JSON ] | None = None ,
398
+ compressor : CompressorLike = "auto" ,
398
399
# runtime
399
400
overwrite : bool = False ,
400
401
data : npt .ArrayLike | None = None ,
@@ -429,7 +430,7 @@ async def create(
429
430
dimension_separator : Literal ["." , "/" ] | None = None ,
430
431
order : MemoryOrder | None = None ,
431
432
filters : list [dict [str , JSON ]] | None = None ,
432
- compressor : dict [ str , JSON ] | None = None ,
433
+ compressor : CompressorLike = "auto" ,
433
434
# runtime
434
435
overwrite : bool = False ,
435
436
data : npt .ArrayLike | None = None ,
@@ -570,7 +571,7 @@ async def _create(
570
571
dimension_separator : Literal ["." , "/" ] | None = None ,
571
572
order : MemoryOrder | None = None ,
572
573
filters : list [dict [str , JSON ]] | None = None ,
573
- compressor : dict [ str , JSON ] | None = None ,
574
+ compressor : CompressorLike = "auto" ,
574
575
# runtime
575
576
overwrite : bool = False ,
576
577
data : npt .ArrayLike | None = None ,
@@ -604,7 +605,7 @@ async def _create(
604
605
raise ValueError (
605
606
"filters cannot be used for arrays with zarr_format 3. Use array-to-array codecs instead."
606
607
)
607
- if compressor is not None :
608
+ if compressor != "auto" :
608
609
raise ValueError (
609
610
"compressor cannot be used for arrays with zarr_format 3. Use bytes-to-bytes codecs instead."
610
611
)
@@ -768,7 +769,7 @@ def _create_metadata_v2(
768
769
dimension_separator : Literal ["." , "/" ] | None = None ,
769
770
fill_value : float | None = None ,
770
771
filters : Iterable [dict [str , JSON ] | numcodecs .abc .Codec ] | None = None ,
771
- compressor : dict [ str , JSON ] | numcodecs . abc . Codec | None = None ,
772
+ compressor : CompressorLikev2 = None ,
772
773
attributes : dict [str , JSON ] | None = None ,
773
774
) -> ArrayV2Metadata :
774
775
if dimension_separator is None :
@@ -809,7 +810,7 @@ async def _create_v2(
809
810
dimension_separator : Literal ["." , "/" ] | None = None ,
810
811
fill_value : float | None = None ,
811
812
filters : Iterable [dict [str , JSON ] | numcodecs .abc .Codec ] | None = None ,
812
- compressor : dict [ str , JSON ] | numcodecs . abc . Codec | None = None ,
813
+ compressor : CompressorLike = "auto" ,
813
814
attributes : dict [str , JSON ] | None = None ,
814
815
overwrite : bool = False ,
815
816
) -> AsyncArray [ArrayV2Metadata ]:
@@ -821,6 +822,17 @@ async def _create_v2(
821
822
else :
822
823
await ensure_no_existing_node (store_path , zarr_format = 2 )
823
824
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
+
824
836
metadata = cls ._create_metadata_v2 (
825
837
shape = shape ,
826
838
dtype = dtype ,
@@ -829,7 +841,7 @@ async def _create_v2(
829
841
dimension_separator = dimension_separator ,
830
842
fill_value = fill_value ,
831
843
filters = filters ,
832
- compressor = compressor ,
844
+ compressor = compressor_parsed ,
833
845
attributes = attributes ,
834
846
)
835
847
@@ -1751,7 +1763,7 @@ def create(
1751
1763
dimension_separator : Literal ["." , "/" ] | None = None ,
1752
1764
order : MemoryOrder | None = None ,
1753
1765
filters : list [dict [str , JSON ]] | None = None ,
1754
- compressor : dict [ str , JSON ] | None = None ,
1766
+ compressor : CompressorLike = "auto" ,
1755
1767
# runtime
1756
1768
overwrite : bool = False ,
1757
1769
config : ArrayConfigLike | None = None ,
@@ -1880,7 +1892,7 @@ def _create(
1880
1892
dimension_separator : Literal ["." , "/" ] | None = None ,
1881
1893
order : MemoryOrder | None = None ,
1882
1894
filters : list [dict [str , JSON ]] | None = None ,
1883
- compressor : dict [ str , JSON ] | None = None ,
1895
+ compressor : CompressorLike = "auto" ,
1884
1896
# runtime
1885
1897
overwrite : bool = False ,
1886
1898
config : ArrayConfigLike | None = None ,
@@ -3792,7 +3804,11 @@ def _get_default_codecs(
3792
3804
| Literal ["auto" ]
3793
3805
| None
3794
3806
)
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
+
3796
3812
CompressorsLike : TypeAlias = (
3797
3813
Iterable [dict [str , JSON ] | BytesBytesCodec | numcodecs .abc .Codec ]
3798
3814
| dict [str , JSON ]
0 commit comments