@@ -219,7 +219,7 @@ class AsyncArray(Generic[T_ArrayMetadata]):
219219 The metadata of the array.
220220 store_path : StorePath
221221 The path to the Zarr store.
222- config : ArrayConfig , optional
222+ config : ArrayConfigLike , optional
223223 The runtime configuration of the array, by default None.
224224
225225 Attributes
@@ -244,22 +244,22 @@ def __init__(
244244 self : AsyncArray [ArrayV2Metadata ],
245245 metadata : ArrayV2Metadata | ArrayV2MetadataDict ,
246246 store_path : StorePath ,
247- config : ArrayConfig | None = None ,
247+ config : ArrayConfigLike | None = None ,
248248 ) -> None : ...
249249
250250 @overload
251251 def __init__ (
252252 self : AsyncArray [ArrayV3Metadata ],
253253 metadata : ArrayV3Metadata | ArrayV3MetadataDict ,
254254 store_path : StorePath ,
255- config : ArrayConfig | None = None ,
255+ config : ArrayConfigLike | None = None ,
256256 ) -> None : ...
257257
258258 def __init__ (
259259 self ,
260260 metadata : ArrayMetadata | ArrayMetadataDict ,
261261 store_path : StorePath ,
262- config : ArrayConfig | None = None ,
262+ config : ArrayConfigLike | None = None ,
263263 ) -> None :
264264 if isinstance (metadata , dict ):
265265 zarr_format = metadata ["zarr_format" ]
@@ -273,12 +273,11 @@ def __init__(
273273 raise ValueError (f"Invalid zarr_format: { zarr_format } . Expected 2 or 3" )
274274
275275 metadata_parsed = parse_array_metadata (metadata )
276-
277- config = ArrayConfig .from_dict ({}) if config is None else config
276+ config_parsed = parse_array_config (config )
278277
279278 object .__setattr__ (self , "metadata" , metadata_parsed )
280279 object .__setattr__ (self , "store_path" , store_path )
281- object .__setattr__ (self , "_config" , config )
280+ object .__setattr__ (self , "_config" , config_parsed )
282281 object .__setattr__ (self , "codec_pipeline" , create_codec_pipeline (metadata = metadata_parsed ))
283282
284283 # this overload defines the function signature when zarr_format is 2
@@ -302,7 +301,7 @@ async def create(
302301 # runtime
303302 overwrite : bool = False ,
304303 data : npt .ArrayLike | None = None ,
305- config : ArrayConfig | ArrayConfigLike | None = None ,
304+ config : ArrayConfigLike | None = None ,
306305 ) -> AsyncArray [ArrayV2Metadata ]: ...
307306
308307 # this overload defines the function signature when zarr_format is 3
@@ -331,7 +330,7 @@ async def create(
331330 # runtime
332331 overwrite : bool = False ,
333332 data : npt .ArrayLike | None = None ,
334- config : ArrayConfig | ArrayConfigLike | None = None ,
333+ config : ArrayConfigLike | None = None ,
335334 ) -> AsyncArray [ArrayV3Metadata ]: ...
336335
337336 @overload
@@ -359,7 +358,7 @@ async def create(
359358 # runtime
360359 overwrite : bool = False ,
361360 data : npt .ArrayLike | None = None ,
362- config : ArrayConfig | ArrayConfigLike | None = None ,
361+ config : ArrayConfigLike | None = None ,
363362 ) -> AsyncArray [ArrayV3Metadata ]: ...
364363
365364 @overload
@@ -393,7 +392,7 @@ async def create(
393392 # runtime
394393 overwrite : bool = False ,
395394 data : npt .ArrayLike | None = None ,
396- config : ArrayConfig | ArrayConfigLike | None = None ,
395+ config : ArrayConfigLike | None = None ,
397396 ) -> AsyncArray [ArrayV3Metadata ] | AsyncArray [ArrayV2Metadata ]: ...
398397
399398 @classmethod
@@ -428,7 +427,7 @@ async def create(
428427 # runtime
429428 overwrite : bool = False ,
430429 data : npt .ArrayLike | None = None ,
431- config : ArrayConfig | ArrayConfigLike | None = None ,
430+ config : ArrayConfigLike | None = None ,
432431 ) -> AsyncArray [ArrayV2Metadata ] | AsyncArray [ArrayV3Metadata ]:
433432 """Method to create a new asynchronous array instance.
434433
@@ -506,7 +505,7 @@ async def create(
506505 Whether to raise an error if the store already exists (default is False).
507506 data : npt.ArrayLike, optional
508507 The data to be inserted into the array (default is None).
509- config : ArrayConfig or ArrayConfigLike, optional
508+ config : ArrayConfigLike, optional
510509 Runtime configuration for the array.
511510
512511 Returns
@@ -569,7 +568,7 @@ async def _create(
569568 # runtime
570569 overwrite : bool = False ,
571570 data : npt .ArrayLike | None = None ,
572- config : ArrayConfig | ArrayConfigLike | None = None ,
571+ config : ArrayConfigLike | None = None ,
573572 ) -> AsyncArray [ArrayV2Metadata ] | AsyncArray [ArrayV3Metadata ]:
574573 """Method to create a new asynchronous array instance.
575574 See :func:`AsyncArray.create` for more details.
@@ -1741,7 +1740,7 @@ def create(
17411740 compressor : dict [str , JSON ] | None = None ,
17421741 # runtime
17431742 overwrite : bool = False ,
1744- config : ArrayConfig | ArrayConfigLike | None = None ,
1743+ config : ArrayConfigLike | None = None ,
17451744 ) -> Array :
17461745 """Creates a new Array instance from an initialized store.
17471746
@@ -1870,7 +1869,7 @@ def _create(
18701869 compressor : dict [str , JSON ] | None = None ,
18711870 # runtime
18721871 overwrite : bool = False ,
1873- config : ArrayConfig | ArrayConfigLike | None = None ,
1872+ config : ArrayConfigLike | None = None ,
18741873 ) -> Array :
18751874 """Creates a new Array instance from an initialized store.
18761875 See :func:`Array.create` for more details.
@@ -3810,7 +3809,8 @@ async def init_array(
38103809 chunk_key_encoding : ChunkKeyEncodingLike | None = None ,
38113810 dimension_names : Iterable [str ] | None = None ,
38123811 overwrite : bool = False ,
3813- ) -> ArrayV3Metadata | ArrayV2Metadata :
3812+ config : ArrayConfigLike | None ,
3813+ ) -> AsyncArray [ArrayV3Metadata ] | AsyncArray [ArrayV2Metadata ]:
38143814 """Create and persist an array metadata document.
38153815
38163816 Parameters
@@ -3889,11 +3889,13 @@ async def init_array(
38893889 Zarr format 3 only. Zarr format 2 arrays should not use this parameter.
38903890 overwrite : bool, default False
38913891 Whether to overwrite an array with the same name in the store, if one exists.
3892+ config : ArrayConfigLike or None, optional
3893+ Configuration for this array.
38923894
38933895 Returns
38943896 -------
3895- ArrayV3Metadata | ArrayV2Metadata
3896- The array metadata document .
3897+ AsyncArray
3898+ The AsyncArray .
38973899 """
38983900
38993901 if zarr_format is None :
@@ -3993,14 +3995,9 @@ async def init_array(
39933995 attributes = attributes ,
39943996 )
39953997
3996- # save the metadata to disk
3997- # TODO: make this easier -- it should be a simple function call that takes a {key: buffer}
3998- coros = (
3999- (store_path / key ).set (value )
4000- for key , value in meta .to_buffer_dict (default_buffer_prototype ()).items ()
4001- )
4002- await gather (* coros )
4003- return meta
3998+ arr = AsyncArray (metadata = meta , store_path = store_path , config = config )
3999+ await arr ._save_metadata (meta , ensure_parents = True )
4000+ return arr
40044001
40054002
40064003async def create_array (
@@ -4023,7 +4020,7 @@ async def create_array(
40234020 dimension_names : Iterable [str ] | None = None ,
40244021 storage_options : dict [str , Any ] | None = None ,
40254022 overwrite : bool = False ,
4026- config : ArrayConfig | ArrayConfigLike | None = None ,
4023+ config : ArrayConfigLike | None = None ,
40274024 write_data : bool = True ,
40284025) -> AsyncArray [ArrayV2Metadata ] | AsyncArray [ArrayV3Metadata ]:
40294026 """Create an array.
@@ -4113,7 +4110,7 @@ async def create_array(
41134110 Ignored otherwise.
41144111 overwrite : bool, default False
41154112 Whether to overwrite an array with the same name in the store, if one exists.
4116- config : ArrayConfig or ArrayConfigLike, optional
4113+ config : ArrayConfigLike, optional
41174114 Runtime configuration for the array.
41184115 write_data : bool
41194116 If a pre-existing array-like object was provided to this function via the ``data`` parameter
@@ -4139,13 +4136,12 @@ async def create_array(
41394136 <AsyncArray memory://140349042942400 shape=(100, 100) dtype=int32>
41404137 """
41414138 mode : Literal ["a" ] = "a"
4142- config_parsed = parse_array_config (config )
41434139 store_path = await make_store_path (store , path = name , mode = mode , storage_options = storage_options )
41444140
41454141 data_parsed , shape_parsed , dtype_parsed = _parse_data_params (
41464142 data = data , shape = shape , dtype = dtype
41474143 )
4148- meta = await init_array (
4144+ result = await init_array (
41494145 store_path = store_path ,
41504146 shape = shape_parsed ,
41514147 dtype = dtype_parsed ,
@@ -4161,9 +4157,9 @@ async def create_array(
41614157 chunk_key_encoding = chunk_key_encoding ,
41624158 dimension_names = dimension_names ,
41634159 overwrite = overwrite ,
4160+ config = config ,
41644161 )
41654162
4166- result = AsyncArray (metadata = meta , store_path = store_path , config = config_parsed )
41674163 if write_data is True and data_parsed is not None :
41684164 await result ._set_selection (
41694165 BasicIndexer (..., shape = result .shape , chunk_grid = result .metadata .chunk_grid ),
0 commit comments