3333 ZARRAY_JSON ,
3434 ZATTRS_JSON ,
3535 ChunkCoords ,
36+ MemoryOrder ,
3637 ShapeLike ,
3738 ZarrFormat ,
3839 concurrent_map ,
@@ -203,29 +204,29 @@ class AsyncArray(Generic[T_ArrayMetadata]):
203204 metadata : T_ArrayMetadata
204205 store_path : StorePath
205206 codec_pipeline : CodecPipeline = field (init = False )
206- order : Literal [ "C" , "F" ]
207+ order : MemoryOrder
207208
208209 @overload
209210 def __init__ (
210211 self : AsyncArray [ArrayV2Metadata ],
211212 metadata : ArrayV2Metadata | ArrayV2MetadataDict ,
212213 store_path : StorePath ,
213- order : Literal [ "C" , "F" ] | None = None ,
214+ order : MemoryOrder | None = None ,
214215 ) -> None : ...
215216
216217 @overload
217218 def __init__ (
218219 self : AsyncArray [ArrayV3Metadata ],
219220 metadata : ArrayV3Metadata | ArrayV3MetadataDict ,
220221 store_path : StorePath ,
221- order : Literal [ "C" , "F" ] | None = None ,
222+ order : MemoryOrder | None = None ,
222223 ) -> None : ...
223224
224225 def __init__ (
225226 self ,
226227 metadata : ArrayMetadata | ArrayMetadataDict ,
227228 store_path : StorePath ,
228- order : Literal [ "C" , "F" ] | None = None ,
229+ order : MemoryOrder | None = None ,
229230 ) -> None :
230231 if isinstance (metadata , dict ):
231232 zarr_format = metadata ["zarr_format" ]
@@ -261,7 +262,7 @@ async def create(
261262 attributes : dict [str , JSON ] | None = None ,
262263 chunks : ShapeLike | None = None ,
263264 dimension_separator : Literal ["." , "/" ] | None = None ,
264- order : Literal [ "C" , "F" ] | None = None ,
265+ order : MemoryOrder | None = None ,
265266 filters : list [dict [str , JSON ]] | None = None ,
266267 compressor : dict [str , JSON ] | None = None ,
267268 # runtime
@@ -350,7 +351,7 @@ async def create(
350351 # v2 only
351352 chunks : ShapeLike | None = None ,
352353 dimension_separator : Literal ["." , "/" ] | None = None ,
353- order : Literal [ "C" , "F" ] | None = None ,
354+ order : MemoryOrder | None = None ,
354355 filters : list [dict [str , JSON ]] | None = None ,
355356 compressor : dict [str , JSON ] | None = None ,
356357 # runtime
@@ -382,7 +383,7 @@ async def create(
382383 # v2 only
383384 chunks : ShapeLike | None = None ,
384385 dimension_separator : Literal ["." , "/" ] | None = None ,
385- order : Literal [ "C" , "F" ] | None = None ,
386+ order : MemoryOrder | None = None ,
386387 filters : list [dict [str , JSON ]] | None = None ,
387388 compressor : dict [str , JSON ] | None = None ,
388389 # runtime
@@ -422,7 +423,6 @@ async def create(
422423 V2 only. V3 arrays cannot have a dimension separator.
423424 order : Literal["C", "F"], optional
424425 The order of the array (default is None).
425- V2 only. V3 arrays should not have 'order' parameter.
426426 filters : list[dict[str, JSON]], optional
427427 The filters used to compress the data (default is None).
428428 V2 only. V3 arrays should not have 'filters' parameter.
@@ -471,10 +471,6 @@ async def create(
471471 raise ValueError (
472472 "dimension_separator cannot be used for arrays with version 3. Use chunk_key_encoding instead."
473473 )
474- if order is not None :
475- raise ValueError (
476- "order cannot be used for arrays with version 3. Use a transpose codec instead."
477- )
478474 if filters is not None :
479475 raise ValueError (
480476 "filters cannot be used for arrays with version 3. Use array-to-array codecs instead."
@@ -494,6 +490,7 @@ async def create(
494490 dimension_names = dimension_names ,
495491 attributes = attributes ,
496492 exists_ok = exists_ok ,
493+ order = order ,
497494 )
498495 elif zarr_format == 2 :
499496 if dtype is str or dtype == "str" :
@@ -545,6 +542,7 @@ async def _create_v3(
545542 dtype : npt .DTypeLike ,
546543 chunk_shape : ChunkCoords ,
547544 fill_value : Any | None = None ,
545+ order : MemoryOrder | None = None ,
548546 chunk_key_encoding : (
549547 ChunkKeyEncoding
550548 | tuple [Literal ["default" ], Literal ["." , "/" ]]
@@ -588,7 +586,7 @@ async def _create_v3(
588586 attributes = attributes or {},
589587 )
590588
591- array = cls (metadata = metadata , store_path = store_path )
589+ array = cls (metadata = metadata , store_path = store_path , order = order )
592590 await array ._save_metadata (metadata , ensure_parents = True )
593591 return array
594592
@@ -602,16 +600,17 @@ async def _create_v2(
602600 chunks : ChunkCoords ,
603601 dimension_separator : Literal ["." , "/" ] | None = None ,
604602 fill_value : None | float = None ,
605- order : Literal [ "C" , "F" ] | None = None ,
603+ order : MemoryOrder | None = None ,
606604 filters : list [dict [str , JSON ]] | None = None ,
607605 compressor : dict [str , JSON ] | None = None ,
608606 attributes : dict [str , JSON ] | None = None ,
609607 exists_ok : bool = False ,
610608 ) -> AsyncArray [ArrayV2Metadata ]:
611609 if not exists_ok :
612610 await ensure_no_existing_node (store_path , zarr_format = 2 )
611+
613612 if order is None :
614- order = "C"
613+ order = parse_indexing_order ( config . get ( "array.order" ))
615614
616615 if dimension_separator is None :
617616 dimension_separator = "."
@@ -627,7 +626,7 @@ async def _create_v2(
627626 filters = filters ,
628627 attributes = attributes ,
629628 )
630- array = cls (metadata = metadata , store_path = store_path )
629+ array = cls (metadata = metadata , store_path = store_path , order = order )
631630 await array ._save_metadata (metadata , ensure_parents = True )
632631 return array
633632
@@ -1179,7 +1178,7 @@ def create(
11791178 # v2 only
11801179 chunks : ChunkCoords | None = None ,
11811180 dimension_separator : Literal ["." , "/" ] | None = None ,
1182- order : Literal [ "C" , "F" ] | None = None ,
1181+ order : MemoryOrder | None = None ,
11831182 filters : list [dict [str , JSON ]] | None = None ,
11841183 compressor : dict [str , JSON ] | None = None ,
11851184 # runtime
@@ -1370,7 +1369,7 @@ def store_path(self) -> StorePath:
13701369 return self ._async_array .store_path
13711370
13721371 @property
1373- def order (self ) -> Literal [ "C" , "F" ] :
1372+ def order (self ) -> MemoryOrder :
13741373 return self ._async_array .order
13751374
13761375 @property
0 commit comments