101
101
T_ArrayMetadata ,
102
102
)
103
103
from zarr .core .metadata .v2 import (
104
+ CompressorLikev2 ,
104
105
_default_compressor ,
105
106
_default_filters ,
106
107
parse_compressor ,
@@ -301,7 +302,7 @@ async def create(
301
302
dimension_separator : Literal ["." , "/" ] | None = None ,
302
303
order : MemoryOrder | None = None ,
303
304
filters : list [dict [str , JSON ]] | None = None ,
304
- compressor : dict [ str , JSON ] | Literal ["default " ] | None = "default " ,
305
+ compressor : CompressorLikev2 | Literal ["auto " ] = "auto " ,
305
306
# runtime
306
307
overwrite : bool = False ,
307
308
data : npt .ArrayLike | None = None ,
@@ -392,7 +393,7 @@ async def create(
392
393
dimension_separator : Literal ["." , "/" ] | None = None ,
393
394
order : MemoryOrder | None = None ,
394
395
filters : list [dict [str , JSON ]] | None = None ,
395
- compressor : dict [ str , JSON ] | Literal [ "default" ] | None = "default " ,
396
+ compressor : CompressorLike = "auto " ,
396
397
# runtime
397
398
overwrite : bool = False ,
398
399
data : npt .ArrayLike | None = None ,
@@ -427,7 +428,7 @@ async def create(
427
428
dimension_separator : Literal ["." , "/" ] | None = None ,
428
429
order : MemoryOrder | None = None ,
429
430
filters : list [dict [str , JSON ]] | None = None ,
430
- compressor : dict [ str , JSON ] | Literal [ "default" ] | None = "default " ,
431
+ compressor : CompressorLike = "auto " ,
431
432
# runtime
432
433
overwrite : bool = False ,
433
434
data : npt .ArrayLike | None = None ,
@@ -568,7 +569,7 @@ async def _create(
568
569
dimension_separator : Literal ["." , "/" ] | None = None ,
569
570
order : MemoryOrder | None = None ,
570
571
filters : list [dict [str , JSON ]] | None = None ,
571
- compressor : dict [ str , JSON ] | Literal [ "default" ] | None = "default " ,
572
+ compressor : CompressorLike = "auto " ,
572
573
# runtime
573
574
overwrite : bool = False ,
574
575
data : npt .ArrayLike | None = None ,
@@ -602,7 +603,7 @@ async def _create(
602
603
raise ValueError (
603
604
"filters cannot be used for arrays with zarr_format 3. Use array-to-array codecs instead."
604
605
)
605
- if compressor != "default " :
606
+ if compressor != "auto " :
606
607
raise ValueError (
607
608
"compressor cannot be used for arrays with zarr_format 3. Use bytes-to-bytes codecs instead."
608
609
)
@@ -766,7 +767,7 @@ def _create_metadata_v2(
766
767
dimension_separator : Literal ["." , "/" ] | None = None ,
767
768
fill_value : float | None = None ,
768
769
filters : Iterable [dict [str , JSON ] | numcodecs .abc .Codec ] | None = None ,
769
- compressor : dict [ str , JSON ] | numcodecs . abc . Codec | None = None ,
770
+ compressor : CompressorLikev2 = None ,
770
771
attributes : dict [str , JSON ] | None = None ,
771
772
) -> ArrayV2Metadata :
772
773
if dimension_separator is None :
@@ -807,7 +808,7 @@ async def _create_v2(
807
808
dimension_separator : Literal ["." , "/" ] | None = None ,
808
809
fill_value : float | None = None ,
809
810
filters : Iterable [dict [str , JSON ] | numcodecs .abc .Codec ] | None = None ,
810
- compressor : dict [ str , JSON ] | numcodecs . abc . Codec | Literal [ "default" ] | None = None ,
811
+ compressor : CompressorLike = "auto" ,
811
812
attributes : dict [str , JSON ] | None = None ,
812
813
overwrite : bool = False ,
813
814
) -> AsyncArray [ArrayV2Metadata ]:
@@ -819,8 +820,16 @@ async def _create_v2(
819
820
else :
820
821
await ensure_no_existing_node (store_path , zarr_format = 2 )
821
822
822
- if compressor == "default" :
823
- compressor = _default_compressor (dtype )
823
+ compressor_parsed : CompressorLikev2
824
+ if compressor == "auto" :
825
+ compressor_parsed = _default_compressor (dtype )
826
+ elif isinstance (compressor , BytesBytesCodec ):
827
+ raise ValueError (
828
+ "Cannot use a BytesBytesCodec as a compressor for zarr v2 arrays. "
829
+ "Use a numcodecs codec directly instead."
830
+ )
831
+ else :
832
+ compressor_parsed = compressor
824
833
825
834
metadata = cls ._create_metadata_v2 (
826
835
shape = shape ,
@@ -830,7 +839,7 @@ async def _create_v2(
830
839
dimension_separator = dimension_separator ,
831
840
fill_value = fill_value ,
832
841
filters = filters ,
833
- compressor = compressor ,
842
+ compressor = compressor_parsed ,
834
843
attributes = attributes ,
835
844
)
836
845
@@ -1752,7 +1761,7 @@ def create(
1752
1761
dimension_separator : Literal ["." , "/" ] | None = None ,
1753
1762
order : MemoryOrder | None = None ,
1754
1763
filters : list [dict [str , JSON ]] | None = None ,
1755
- compressor : dict [ str , JSON ] | Literal [ "default" ] | None = "default " ,
1764
+ compressor : CompressorLike = "auto " ,
1756
1765
# runtime
1757
1766
overwrite : bool = False ,
1758
1767
config : ArrayConfigLike | None = None ,
@@ -1881,7 +1890,7 @@ def _create(
1881
1890
dimension_separator : Literal ["." , "/" ] | None = None ,
1882
1891
order : MemoryOrder | None = None ,
1883
1892
filters : list [dict [str , JSON ]] | None = None ,
1884
- compressor : dict [ str , JSON ] | Literal [ "default" ] | None = "default " ,
1893
+ compressor : CompressorLike = "auto " ,
1885
1894
# runtime
1886
1895
overwrite : bool = False ,
1887
1896
config : ArrayConfigLike | None = None ,
@@ -3788,7 +3797,11 @@ def _get_default_codecs(
3788
3797
| Literal ["auto" ]
3789
3798
| None
3790
3799
)
3791
- CompressorLike : TypeAlias = dict [str , JSON ] | BytesBytesCodec | numcodecs .abc .Codec | None
3800
+ # Union of acceptable types for v2 and v3 compressors
3801
+ CompressorLike : TypeAlias = (
3802
+ dict [str , JSON ] | BytesBytesCodec | numcodecs .abc .Codec | Literal ["auto" ] | None
3803
+ )
3804
+
3792
3805
CompressorsLike : TypeAlias = (
3793
3806
Iterable [dict [str , JSON ] | BytesBytesCodec | numcodecs .abc .Codec ]
3794
3807
| dict [str , JSON ]
0 commit comments