@@ -221,7 +221,7 @@ class AsyncArray(Generic[T_ArrayMetadata]):
221
221
The metadata of the array.
222
222
store_path : StorePath
223
223
The path to the Zarr store.
224
- config : ArrayConfig , optional
224
+ config : ArrayConfigLike , optional
225
225
The runtime configuration of the array, by default None.
226
226
227
227
Attributes
@@ -246,22 +246,22 @@ def __init__(
246
246
self : AsyncArray [ArrayV2Metadata ],
247
247
metadata : ArrayV2Metadata | ArrayV2MetadataDict ,
248
248
store_path : StorePath ,
249
- config : ArrayConfig | None = None ,
249
+ config : ArrayConfigLike | None = None ,
250
250
) -> None : ...
251
251
252
252
@overload
253
253
def __init__ (
254
254
self : AsyncArray [ArrayV3Metadata ],
255
255
metadata : ArrayV3Metadata | ArrayV3MetadataDict ,
256
256
store_path : StorePath ,
257
- config : ArrayConfig | None = None ,
257
+ config : ArrayConfigLike | None = None ,
258
258
) -> None : ...
259
259
260
260
def __init__ (
261
261
self ,
262
262
metadata : ArrayMetadata | ArrayMetadataDict ,
263
263
store_path : StorePath ,
264
- config : ArrayConfig | None = None ,
264
+ config : ArrayConfigLike | None = None ,
265
265
) -> None :
266
266
if isinstance (metadata , dict ):
267
267
zarr_format = metadata ["zarr_format" ]
@@ -275,12 +275,11 @@ def __init__(
275
275
raise ValueError (f"Invalid zarr_format: { zarr_format } . Expected 2 or 3" )
276
276
277
277
metadata_parsed = parse_array_metadata (metadata )
278
-
279
- config = ArrayConfig .from_dict ({}) if config is None else config
278
+ config_parsed = parse_array_config (config )
280
279
281
280
object .__setattr__ (self , "metadata" , metadata_parsed )
282
281
object .__setattr__ (self , "store_path" , store_path )
283
- object .__setattr__ (self , "_config" , config )
282
+ object .__setattr__ (self , "_config" , config_parsed )
284
283
object .__setattr__ (self , "codec_pipeline" , create_codec_pipeline (metadata = metadata_parsed ))
285
284
286
285
# this overload defines the function signature when zarr_format is 2
@@ -304,7 +303,7 @@ async def create(
304
303
# runtime
305
304
overwrite : bool = False ,
306
305
data : npt .ArrayLike | None = None ,
307
- config : ArrayConfig | ArrayConfigLike | None = None ,
306
+ config : ArrayConfigLike | None = None ,
308
307
) -> AsyncArray [ArrayV2Metadata ]: ...
309
308
310
309
# this overload defines the function signature when zarr_format is 3
@@ -333,7 +332,7 @@ async def create(
333
332
# runtime
334
333
overwrite : bool = False ,
335
334
data : npt .ArrayLike | None = None ,
336
- config : ArrayConfig | ArrayConfigLike | None = None ,
335
+ config : ArrayConfigLike | None = None ,
337
336
) -> AsyncArray [ArrayV3Metadata ]: ...
338
337
339
338
@overload
@@ -361,7 +360,7 @@ async def create(
361
360
# runtime
362
361
overwrite : bool = False ,
363
362
data : npt .ArrayLike | None = None ,
364
- config : ArrayConfig | ArrayConfigLike | None = None ,
363
+ config : ArrayConfigLike | None = None ,
365
364
) -> AsyncArray [ArrayV3Metadata ]: ...
366
365
367
366
@overload
@@ -395,7 +394,7 @@ async def create(
395
394
# runtime
396
395
overwrite : bool = False ,
397
396
data : npt .ArrayLike | None = None ,
398
- config : ArrayConfig | ArrayConfigLike | None = None ,
397
+ config : ArrayConfigLike | None = None ,
399
398
) -> AsyncArray [ArrayV3Metadata ] | AsyncArray [ArrayV2Metadata ]: ...
400
399
401
400
@classmethod
@@ -430,7 +429,7 @@ async def create(
430
429
# runtime
431
430
overwrite : bool = False ,
432
431
data : npt .ArrayLike | None = None ,
433
- config : ArrayConfig | ArrayConfigLike | None = None ,
432
+ config : ArrayConfigLike | None = None ,
434
433
) -> AsyncArray [ArrayV2Metadata ] | AsyncArray [ArrayV3Metadata ]:
435
434
"""Method to create a new asynchronous array instance.
436
435
@@ -508,7 +507,7 @@ async def create(
508
507
Whether to raise an error if the store already exists (default is False).
509
508
data : npt.ArrayLike, optional
510
509
The data to be inserted into the array (default is None).
511
- config : ArrayConfig or ArrayConfigLike, optional
510
+ config : ArrayConfigLike, optional
512
511
Runtime configuration for the array.
513
512
514
513
Returns
@@ -571,7 +570,7 @@ async def _create(
571
570
# runtime
572
571
overwrite : bool = False ,
573
572
data : npt .ArrayLike | None = None ,
574
- config : ArrayConfig | ArrayConfigLike | None = None ,
573
+ config : ArrayConfigLike | None = None ,
575
574
) -> AsyncArray [ArrayV2Metadata ] | AsyncArray [ArrayV3Metadata ]:
576
575
"""Method to create a new asynchronous array instance.
577
576
See :func:`AsyncArray.create` for more details.
@@ -1745,7 +1744,7 @@ def create(
1745
1744
compressor : dict [str , JSON ] | None = None ,
1746
1745
# runtime
1747
1746
overwrite : bool = False ,
1748
- config : ArrayConfig | ArrayConfigLike | None = None ,
1747
+ config : ArrayConfigLike | None = None ,
1749
1748
) -> Array :
1750
1749
"""Creates a new Array instance from an initialized store.
1751
1750
@@ -1874,7 +1873,7 @@ def _create(
1874
1873
compressor : dict [str , JSON ] | None = None ,
1875
1874
# runtime
1876
1875
overwrite : bool = False ,
1877
- config : ArrayConfig | ArrayConfigLike | None = None ,
1876
+ config : ArrayConfigLike | None = None ,
1878
1877
) -> Array :
1879
1878
"""Creates a new Array instance from an initialized store.
1880
1879
See :func:`Array.create` for more details.
@@ -3814,7 +3813,8 @@ async def init_array(
3814
3813
chunk_key_encoding : ChunkKeyEncodingLike | None = None ,
3815
3814
dimension_names : Iterable [str ] | None = None ,
3816
3815
overwrite : bool = False ,
3817
- ) -> ArrayV3Metadata | ArrayV2Metadata :
3816
+ config : ArrayConfigLike | None ,
3817
+ ) -> AsyncArray [ArrayV3Metadata ] | AsyncArray [ArrayV2Metadata ]:
3818
3818
"""Create and persist an array metadata document.
3819
3819
3820
3820
Parameters
@@ -3893,11 +3893,13 @@ async def init_array(
3893
3893
Zarr format 3 only. Zarr format 2 arrays should not use this parameter.
3894
3894
overwrite : bool, default False
3895
3895
Whether to overwrite an array with the same name in the store, if one exists.
3896
+ config : ArrayConfigLike or None, optional
3897
+ Configuration for this array.
3896
3898
3897
3899
Returns
3898
3900
-------
3899
- ArrayV3Metadata | ArrayV2Metadata
3900
- The array metadata document .
3901
+ AsyncArray
3902
+ The AsyncArray .
3901
3903
"""
3902
3904
3903
3905
if zarr_format is None :
@@ -3997,14 +3999,9 @@ async def init_array(
3997
3999
attributes = attributes ,
3998
4000
)
3999
4001
4000
- # save the metadata to disk
4001
- # TODO: make this easier -- it should be a simple function call that takes a {key: buffer}
4002
- coros = (
4003
- (store_path / key ).set (value )
4004
- for key , value in meta .to_buffer_dict (default_buffer_prototype ()).items ()
4005
- )
4006
- await gather (* coros )
4007
- return meta
4002
+ arr = AsyncArray (metadata = meta , store_path = store_path , config = config )
4003
+ await arr ._save_metadata (meta , ensure_parents = True )
4004
+ return arr
4008
4005
4009
4006
4010
4007
async def create_array (
@@ -4027,7 +4024,7 @@ async def create_array(
4027
4024
dimension_names : Iterable [str ] | None = None ,
4028
4025
storage_options : dict [str , Any ] | None = None ,
4029
4026
overwrite : bool = False ,
4030
- config : ArrayConfig | ArrayConfigLike | None = None ,
4027
+ config : ArrayConfigLike | None = None ,
4031
4028
write_data : bool = True ,
4032
4029
) -> AsyncArray [ArrayV2Metadata ] | AsyncArray [ArrayV3Metadata ]:
4033
4030
"""Create an array.
@@ -4117,7 +4114,7 @@ async def create_array(
4117
4114
Ignored otherwise.
4118
4115
overwrite : bool, default False
4119
4116
Whether to overwrite an array with the same name in the store, if one exists.
4120
- config : ArrayConfig or ArrayConfigLike, optional
4117
+ config : ArrayConfigLike, optional
4121
4118
Runtime configuration for the array.
4122
4119
write_data : bool
4123
4120
If a pre-existing array-like object was provided to this function via the ``data`` parameter
@@ -4143,13 +4140,12 @@ async def create_array(
4143
4140
<AsyncArray memory://140349042942400 shape=(100, 100) dtype=int32>
4144
4141
"""
4145
4142
mode : Literal ["a" ] = "a"
4146
- config_parsed = parse_array_config (config )
4147
4143
store_path = await make_store_path (store , path = name , mode = mode , storage_options = storage_options )
4148
4144
4149
4145
data_parsed , shape_parsed , dtype_parsed = _parse_data_params (
4150
4146
data = data , shape = shape , dtype = dtype
4151
4147
)
4152
- meta = await init_array (
4148
+ result = await init_array (
4153
4149
store_path = store_path ,
4154
4150
shape = shape_parsed ,
4155
4151
dtype = dtype_parsed ,
@@ -4165,9 +4161,9 @@ async def create_array(
4165
4161
chunk_key_encoding = chunk_key_encoding ,
4166
4162
dimension_names = dimension_names ,
4167
4163
overwrite = overwrite ,
4164
+ config = config ,
4168
4165
)
4169
4166
4170
- result = AsyncArray (metadata = meta , store_path = store_path , config = config_parsed )
4171
4167
if write_data is True and data_parsed is not None :
4172
4168
await result ._set_selection (
4173
4169
BasicIndexer (..., shape = result .shape , chunk_grid = result .metadata .chunk_grid ),
0 commit comments