99import  numpy .typing  as  npt 
1010from  typing_extensions  import  deprecated 
1111
12- from  zarr .core .array  import  Array , AsyncArray , get_array_metadata 
13- from  zarr .core .array_spec  import  ArrayConfig , ArrayConfigParams 
12+ from  zarr .core .array  import  Array , AsyncArray , create_array ,  get_array_metadata 
13+ from  zarr .core .array_spec  import  ArrayConfig , ArrayConfigLike 
1414from  zarr .core .buffer  import  NDArrayLike 
1515from  zarr .core .common  import  (
1616    JSON ,
1717    AccessModeLiteral ,
1818    ChunkCoords ,
1919    MemoryOrder ,
2020    ZarrFormat ,
21+     _default_zarr_format ,
2122    _warn_order_kwarg ,
2223    _warn_write_empty_chunks_kwarg ,
2324    parse_dtype ,
2425)
25- from  zarr .core .config  import  config 
2626from  zarr .core .group  import  AsyncGroup , ConsolidatedMetadata , GroupMetadata 
2727from  zarr .core .metadata  import  ArrayMetadataDict , ArrayV2Metadata , ArrayV3Metadata 
28- from  zarr .core .metadata .v2  import  _default_filters_and_compressor 
28+ from  zarr .core .metadata .v2  import  _default_compressor ,  _default_filters 
2929from  zarr .errors  import  NodeTypeValidationError 
3030from  zarr .storage  import  (
3131    StoreLike ,
4949    "copy_all" ,
5050    "copy_store" ,
5151    "create" ,
52+     "create_array" ,
5253    "empty" ,
5354    "empty_like" ,
5455    "full" ,
@@ -150,11 +151,6 @@ def _handle_zarr_version_or_format(
150151    return  zarr_format 
151152
152153
153- def  _default_zarr_version () ->  ZarrFormat :
154-     """Return the default zarr_version""" 
155-     return  cast (ZarrFormat , int (config .get ("default_zarr_version" , 3 )))
156- 
157- 
158154async  def  consolidate_metadata (
159155    store : StoreLike ,
160156    path : str  |  None  =  None ,
@@ -300,8 +296,8 @@ async def open(
300296    path : str or None, optional 
301297        The path within the store to open. 
302298    storage_options : dict 
303-         If using an fsspec URL to create the store, these  will be passed to 
304-         the backend  implementation. Ignored otherwise. 
299+         If the store is backed by an fsspec-based implementation, then this dict  will be passed to 
300+         the Store constructor for that  implementation. Ignored otherwise. 
305301    **kwargs 
306302        Additional parameters are passed through to :func:`zarr.creation.open_array` or 
307303        :func:`zarr.hierarchy.open_group`. 
@@ -417,7 +413,7 @@ async def save_array(
417413    """ 
418414    zarr_format  =  (
419415        _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
420-         or  _default_zarr_version ()
416+         or  _default_zarr_format ()
421417    )
422418    if  not  isinstance (arr , NDArrayLike ):
423419        raise  TypeError ("arr argument must be numpy or other NDArrayLike array" )
@@ -429,7 +425,7 @@ async def save_array(
429425    shape  =  arr .shape 
430426    chunks  =  getattr (arr , "chunks" , None )  # for array-likes with chunks attribute 
431427    overwrite  =  kwargs .pop ("overwrite" , None ) or  _infer_overwrite (mode )
432-     new  =  await  AsyncArray .create (
428+     new  =  await  AsyncArray ._create (
433429        store_path ,
434430        zarr_format = zarr_format ,
435431        shape = shape ,
@@ -477,7 +473,7 @@ async def save_group(
477473            zarr_version = zarr_version ,
478474            zarr_format = zarr_format ,
479475        )
480-         or  _default_zarr_version ()
476+         or  _default_zarr_format ()
481477    )
482478
483479    for  arg  in  args :
@@ -657,7 +653,7 @@ async def group(
657653    try :
658654        return  await  AsyncGroup .open (store = store_path , zarr_format = zarr_format )
659655    except  (KeyError , FileNotFoundError ):
660-         _zarr_format  =  zarr_format  or  _default_zarr_version ()
656+         _zarr_format  =  zarr_format  or  _default_zarr_format ()
661657        return  await  AsyncGroup .from_store (
662658            store = store_path ,
663659            zarr_format = _zarr_format ,
@@ -666,6 +662,56 @@ async def group(
666662        )
667663
668664
665+ async  def  create_group (
666+     * ,
667+     store : StoreLike ,
668+     path : str  |  None  =  None ,
669+     overwrite : bool  =  False ,
670+     zarr_format : ZarrFormat  |  None  =  None ,
671+     attributes : dict [str , Any ] |  None  =  None ,
672+     storage_options : dict [str , Any ] |  None  =  None ,
673+ ) ->  AsyncGroup :
674+     """Create a group. 
675+ 
676+     Parameters 
677+     ---------- 
678+     store : Store or str 
679+         Store or path to directory in file system. 
680+     path : str, optional 
681+         Group path within store. 
682+     overwrite : bool, optional 
683+         If True, pre-existing data at ``path`` will be deleted before 
684+         creating the group. 
685+     zarr_format : {2, 3, None}, optional 
686+         The zarr format to use when saving. 
687+         If no ``zarr_format`` is provided, the default format will be used. 
688+         This default can be changed by modifying the value of ``default_zarr_format`` 
689+         in :mod:`zarr.core.config`. 
690+     storage_options : dict 
691+         If using an fsspec URL to create the store, these will be passed to 
692+         the backend implementation. Ignored otherwise. 
693+ 
694+     Returns 
695+     ------- 
696+     AsyncGroup 
697+         The new group. 
698+     """ 
699+ 
700+     if  zarr_format  is  None :
701+         zarr_format  =  _default_zarr_format ()
702+ 
703+     mode : Literal ["a" ] =  "a" 
704+ 
705+     store_path  =  await  make_store_path (store , path = path , mode = mode , storage_options = storage_options )
706+ 
707+     return  await  AsyncGroup .from_store (
708+         store = store_path ,
709+         zarr_format = zarr_format ,
710+         overwrite = overwrite ,
711+         attributes = attributes ,
712+     )
713+ 
714+ 
669715async  def  open_group (
670716    store : StoreLike  |  None  =  None ,
671717    * ,  # Note: this is a change from v2 
@@ -768,7 +814,7 @@ async def open_group(
768814        pass 
769815    if  mode  in  _CREATE_MODES :
770816        overwrite  =  _infer_overwrite (mode )
771-         _zarr_format  =  zarr_format  or  _default_zarr_version ()
817+         _zarr_format  =  zarr_format  or  _default_zarr_format ()
772818        return  await  AsyncGroup .from_store (
773819            store_path ,
774820            zarr_format = _zarr_format ,
@@ -813,7 +859,7 @@ async def create(
813859    codecs : Iterable [Codec  |  dict [str , JSON ]] |  None  =  None ,
814860    dimension_names : Iterable [str ] |  None  =  None ,
815861    storage_options : dict [str , Any ] |  None  =  None ,
816-     config : ArrayConfig  |  ArrayConfigParams  |  None  =  None ,
862+     config : ArrayConfig  |  ArrayConfigLike  |  None  =  None ,
817863    ** kwargs : Any ,
818864) ->  AsyncArray [ArrayV2Metadata ] |  AsyncArray [ArrayV3Metadata ]:
819865    """Create an array. 
@@ -843,8 +889,8 @@ async def create(
843889        If no codecs are provided, default codecs will be used: 
844890
845891        - For numeric arrays, the default is ``BytesCodec`` and ``ZstdCodec``. 
846-         - For Unicode strings, the default is ``VLenUTF8Codec``. 
847-         - For bytes or objects, the default is ``VLenBytesCodec``. 
892+         - For Unicode strings, the default is ``VLenUTF8Codec`` and ``ZstdCodec`` . 
893+         - For bytes or objects, the default is ``VLenBytesCodec`` and ``ZstdCodec`` . 
848894
849895        These defaults can be changed by modifying the value of ``array.v3_default_codecs`` in :mod:`zarr.core.config`. 
850896    compressor : Codec, optional 
@@ -857,7 +903,8 @@ async def create(
857903        - For Unicode strings, the default is ``VLenUTF8Codec``. 
858904        - For bytes or objects, the default is ``VLenBytesCodec``. 
859905
860-         These defaults can be changed by modifying the value of ``array.v2_default_compressor`` in :mod:`zarr.core.config`.    fill_value : object 
906+         These defaults can be changed by modifying the value of ``array.v2_default_compressor`` in :mod:`zarr.core.config`. 
907+     fill_value : object 
861908        Default value to use for uninitialized portions of the array. 
862909    order : {'C', 'F'}, optional 
863910        Deprecated in favor of the ``config`` keyword argument. 
@@ -878,8 +925,8 @@ async def create(
878925        for storage of both chunks and metadata. 
879926    filters : sequence of Codecs, optional 
880927        Sequence of filters to use to encode chunk data prior to compression. 
881-         V2 only. If neither  ``compressor`` nor `` filters`` are provided, a default 
882-         compressor will  be used. (see ``compressor `` for details) . 
928+         V2 only. If no  ``filters`` are provided, a default set of filters will be used.  
929+         These defaults can  be changed by modifying the value of ``array.v2_default_filters `` in :mod:`zarr.core.config` . 
883930    cache_metadata : bool, optional 
884931        If True, array configuration metadata will be cached for the 
885932        lifetime of the object. If False, array metadata will be reloaded 
@@ -914,7 +961,7 @@ async def create(
914961    storage_options : dict 
915962        If using an fsspec URL to create the store, these will be passed to 
916963        the backend implementation. Ignored otherwise. 
917-     config : ArrayConfig or ArrayConfigParams , optional 
964+     config : ArrayConfig or ArrayConfigLike , optional 
918965        Runtime configuration of the array. If provided, will override the 
919966        default values from `zarr.config.array`. 
920967
@@ -925,15 +972,17 @@ async def create(
925972    """ 
926973    zarr_format  =  (
927974        _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
928-         or  _default_zarr_version ()
975+         or  _default_zarr_format ()
929976    )
930977
931978    if  zarr_format  ==  2 :
932979        if  chunks  is  None :
933980            chunks  =  shape 
934981        dtype  =  parse_dtype (dtype , zarr_format )
935-         if  not  filters  and  not  compressor :
936-             filters , compressor  =  _default_filters_and_compressor (dtype )
982+         if  not  filters :
983+             filters  =  _default_filters (dtype )
984+         if  not  compressor :
985+             compressor  =  _default_compressor (dtype )
937986    elif  zarr_format  ==  3  and  chunk_shape  is  None :  # type: ignore[redundant-expr] 
938987        if  chunks  is  not   None :
939988            chunk_shape  =  chunks 
@@ -971,7 +1020,7 @@ async def create(
9711020        mode  =  "a" 
9721021    store_path  =  await  make_store_path (store , path = path , mode = mode , storage_options = storage_options )
9731022
974-     config_dict : ArrayConfigParams  =  {}
1023+     config_dict : ArrayConfigLike  =  {}
9751024
9761025    if  write_empty_chunks  is  not   None :
9771026        if  config  is  not   None :
@@ -994,7 +1043,7 @@ async def create(
9941043
9951044    config_parsed  =  ArrayConfig .from_dict (config_dict )
9961045
997-     return  await  AsyncArray .create (
1046+     return  await  AsyncArray ._create (
9981047        store_path ,
9991048        shape = shape ,
10001049        chunks = chunks ,
@@ -1173,7 +1222,7 @@ async def open_array(
11731222        If using an fsspec URL to create the store, these will be passed to 
11741223        the backend implementation. Ignored otherwise. 
11751224    **kwargs 
1176-         Any keyword arguments to pass to `` create` `. 
1225+         Any keyword arguments to pass to :func:` create`. 
11771226
11781227    Returns 
11791228    ------- 
@@ -1196,7 +1245,7 @@ async def open_array(
11961245    except  FileNotFoundError :
11971246        if  not  store_path .read_only  and  mode  in  _CREATE_MODES :
11981247            overwrite  =  _infer_overwrite (mode )
1199-             _zarr_format  =  zarr_format  or  _default_zarr_version ()
1248+             _zarr_format  =  zarr_format  or  _default_zarr_format ()
12001249            return  await  create (
12011250                store = store_path ,
12021251                zarr_format = _zarr_format ,
0 commit comments