@@ -645,6 +645,29 @@ def from_dict(
645645 store_path : StorePath ,
646646 data : dict [str , JSON ],
647647 ) -> AsyncArray [ArrayV3Metadata ] | AsyncArray [ArrayV2Metadata ]:
648+ """
649+ Create a Zarr array from a dictionary, with support for both Zarr v2 and v3 metadata.
650+
651+ Parameters
652+ ----------
653+ store_path : StorePath
654+ The path within the store where the array should be created.
655+
656+ data : dict
657+ A dictionary representing the array data. This dictionary should include necessary metadata
658+ for the array, such as shape, dtype, and other attributes. The format of the metadata
659+ will determine whether a Zarr v2 or v3 array is created.
660+
661+ Returns
662+ -------
663+ AsyncArray[ArrayV3Metadata] or AsyncArray[ArrayV2Metadata]
664+ The created Zarr array, either using v2 or v3 metadata based on the provided data.
665+
666+ Raises
667+ ------
668+ ValueError
669+ If the dictionary data is invalid or incompatible with either Zarr v2 or v3 array creation.
670+ """
648671 metadata = parse_array_metadata (data )
649672 return cls (metadata = metadata , store_path = store_path )
650673
@@ -1040,6 +1063,9 @@ async def getitem(
10401063 return await self ._get_selection (indexer , prototype = prototype )
10411064
10421065 async def _save_metadata (self , metadata : ArrayMetadata , ensure_parents : bool = False ) -> None :
1066+ """
1067+ Asynchronously save the array metadata.
1068+ """
10431069 to_save = metadata .to_buffer_dict (default_buffer_prototype ())
10441070 awaitables = [set_or_delete (self .store_path / key , value ) for key , value in to_save .items ()]
10451071
@@ -1118,6 +1144,39 @@ async def setitem(
11181144 value : npt .ArrayLike ,
11191145 prototype : BufferPrototype | None = None ,
11201146 ) -> None :
1147+ """
1148+ Asynchronously set values in the array using basic indexing.
1149+
1150+ Parameters
1151+ ----------
1152+ selection : BasicSelection
1153+ The selection defining the region of the array to set.
1154+
1155+ value : numpy.typing.ArrayLike
1156+ The values to be written into the selected region of the array.
1157+
1158+ prototype : BufferPrototype or None, optional
1159+ A prototype buffer that defines the structure and properties of the array chunks being modified.
1160+ If None, the default buffer prototype is used. Default is None.
1161+
1162+ Returns
1163+ -------
1164+ None
1165+ This method does not return any value.
1166+
1167+ Raises
1168+ ------
1169+ IndexError
1170+ If the selection is out of bounds for the array.
1171+
1172+ ValueError
1173+ If the values are not compatible with the array's dtype or shape.
1174+
1175+ Notes
1176+ -----
1177+ - This method is asynchronous and should be awaited.
1178+ - Supports basic indexing, where the selection is contiguous and does not involve advanced indexing.
1179+ """
11211180 if prototype is None :
11221181 prototype = default_buffer_prototype ()
11231182 indexer = BasicIndexer (
@@ -1128,6 +1187,32 @@ async def setitem(
11281187 return await self ._set_selection (indexer , value , prototype = prototype )
11291188
11301189 async def resize (self , new_shape : ShapeLike , delete_outside_chunks : bool = True ) -> None :
1190+ """
1191+ Asynchronously resize the array to a new shape.
1192+
1193+ Parameters
1194+ ----------
1195+ new_shape : ChunkCoords
1196+ The desired new shape of the array.
1197+
1198+ delete_outside_chunks : bool, optional
1199+ If True (default), chunks that fall outside the new shape will be deleted. If False,
1200+ the data in those chunks will be preserved.
1201+
1202+ Returns
1203+ -------
1204+ AsyncArray
1205+ The resized array.
1206+
1207+ Raises
1208+ ------
1209+ ValueError
1210+ If the new shape is incompatible with the current array's chunking configuration.
1211+
1212+ Notes
1213+ -----
1214+ - This method is asynchronous and should be awaited.
1215+ """
11311216 new_shape = parse_shapelike (new_shape )
11321217 assert len (new_shape ) == len (self .metadata .shape )
11331218 new_metadata = self .metadata .update_shape (new_shape )
@@ -1210,6 +1295,31 @@ async def append(self, data: npt.ArrayLike, axis: int = 0) -> ChunkCoords:
12101295 return new_shape
12111296
12121297 async def update_attributes (self , new_attributes : dict [str , JSON ]) -> Self :
1298+ """
1299+ Asynchronously update the array's attributes.
1300+
1301+ Parameters
1302+ ----------
1303+ new_attributes : dict of str to JSON
1304+ A dictionary of new attributes to update or add to the array. The keys represent attribute
1305+ names, and the values must be JSON-compatible.
1306+
1307+ Returns
1308+ -------
1309+ AsyncArray
1310+ The array with the updated attributes.
1311+
1312+ Raises
1313+ ------
1314+ ValueError
1315+ If the attributes are invalid or incompatible with the array's metadata.
1316+
1317+ Notes
1318+ -----
1319+ - This method is asynchronous and should be awaited.
1320+ - The updated attributes will be merged with existing attributes, and any conflicts will be
1321+ overwritten by the new values.
1322+ """
12131323 # metadata.attributes is "frozen" so we simply clear and update the dict
12141324 self .metadata .attributes .clear ()
12151325 self .metadata .attributes .update (new_attributes )
@@ -1328,6 +1438,28 @@ def from_dict(
13281438 store_path : StorePath ,
13291439 data : dict [str , JSON ],
13301440 ) -> Array :
1441+ """
1442+ Create a Zarr array from a dictionary.
1443+
1444+ Parameters
1445+ ----------
1446+ store_path : StorePath
1447+ The path within the store where the array should be created.
1448+
1449+ data : dict
1450+ A dictionary representing the array data. This dictionary should include necessary metadata
1451+ for the array, such as shape, dtype, fill value, and attributes.
1452+
1453+ Returns
1454+ -------
1455+ Array
1456+ The created Zarr array.
1457+
1458+ Raises
1459+ ------
1460+ ValueError
1461+ If the dictionary data is invalid or missing required fields for array creation.
1462+ """
13311463 async_array = AsyncArray .from_dict (store_path = store_path , data = data )
13321464 return cls (async_array )
13331465
@@ -2934,6 +3066,30 @@ def append(self, data: npt.ArrayLike, axis: int = 0) -> ChunkCoords:
29343066 return sync (self ._async_array .append (data , axis = axis ))
29353067
29363068 def update_attributes (self , new_attributes : dict [str , JSON ]) -> Array :
3069+ """
3070+ Update the array's attributes.
3071+
3072+ Parameters
3073+ ----------
3074+ new_attributes : dict
3075+ A dictionary of new attributes to update or add to the array. The keys represent attribute
3076+ names, and the values must be JSON-compatible.
3077+
3078+ Returns
3079+ -------
3080+ Array
3081+ The array with the updated attributes.
3082+
3083+ Raises
3084+ ------
3085+ ValueError
3086+ If the attributes are invalid or incompatible with the array's metadata.
3087+
3088+ Notes
3089+ -----
3090+ - The updated attributes will be merged with existing attributes, and any conflicts will be
3091+ overwritten by the new values.
3092+ """
29373093 # TODO: remove this cast when type inference improves
29383094 new_array = sync (self ._async_array .update_attributes (new_attributes ))
29393095 # TODO: remove this cast when type inference improves
0 commit comments