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