@@ -310,17 +310,56 @@ def __init__(
310310 self .chunks = chunks
311311
312312 # Handle compressor/codecs based on zarr version
313- self .codecs = codecs
314- self .value_codecs = value_codecs
315- self .count_codecs = count_codecs
316-
317- # For backward compatibility
318- if compressor is not None and codecs is None :
319- self .codecs = compressor if isinstance (compressor , (list , tuple )) else [compressor ]
320- if value_compressor is not None and value_codecs is None :
321- self .value_codecs = value_compressor if isinstance (value_compressor , (list , tuple )) else [value_compressor ]
322- if count_compressor is not None and count_codecs is None :
323- self .count_codecs = count_compressor if isinstance (count_compressor , (list , tuple )) else [count_compressor ]
313+ is_zarr_v3 = version_geq (get_package_version ("zarr" ), "3.0.0" )
314+
315+ if is_zarr_v3 :
316+ # For zarr v3, use codecs or convert compressor to codecs
317+ if codecs is not None :
318+ self .codecs = codecs
319+ elif compressor is not None :
320+ # Convert compressor to codec format
321+ if isinstance (compressor , (list , tuple )):
322+ self .codecs = compressor
323+ else :
324+ self .codecs = None
325+
326+ if value_codecs is not None :
327+ self .value_codecs = value_codecs
328+ elif value_compressor is not None :
329+ if isinstance (value_compressor , (list , tuple )):
330+ self .value_codecs = value_compressor
331+ else :
332+ self .value_codecs = None
333+
334+ if count_codecs is not None :
335+ self .count_codecs = count_codecs
336+ elif count_compressor is not None :
337+ if isinstance (count_compressor , (list , tuple )):
338+ self .count_codecs = count_compressor
339+ else :
340+ self .count_codecs = [
341+ {"name" : "bytes" , "configuration" : {}},
342+ {"name" : count_compressor .lower (), "configuration" : {}},
343+ ]
344+ else :
345+ self .count_codecs = None
346+ else :
347+ # For zarr v2, use compressors
348+ if codecs is not None :
349+ # If codecs are specified in v2, use the first codec as compressor
350+ self .codecs = codecs [0 ] if isinstance (codecs , (list , tuple )) else codecs
351+ else :
352+ self .codecs = compressor
353+
354+ if value_codecs is not None :
355+ self .value_codecs = value_codecs [0 ] if isinstance (value_codecs , (list , tuple )) else value_codecs
356+ else :
357+ self .value_codecs = value_compressor
358+
359+ if count_codecs is not None :
360+ self .count_codecs = count_codecs [0 ] if isinstance (count_codecs , (list , tuple )) else count_codecs
361+ else :
362+ self .count_codecs = count_compressor
324363
325364 # Create zarr arrays with appropriate parameters based on version
326365 if is_zarr_v3 :
0 commit comments