Skip to content

Commit 2b418c0

Browse files
committed
Add an AnyAsyncArray type
1 parent b571f5d commit 2b418c0

File tree

6 files changed

+80
-127
lines changed

6 files changed

+80
-127
lines changed

src/zarr/api/asynchronous.py

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
GroupMetadata,
3939
create_hierarchy,
4040
)
41-
from zarr.core.metadata import ArrayMetadataDict, ArrayV2Metadata, ArrayV3Metadata
41+
from zarr.core.metadata import ArrayMetadataDict, ArrayV2Metadata
4242
from zarr.errors import (
4343
GroupNotFoundError,
4444
NodeTypeValidationError,
@@ -58,12 +58,10 @@
5858
from zarr.core.buffer import NDArrayLikeOrScalar
5959
from zarr.core.chunk_key_encodings import ChunkKeyEncoding
6060
from zarr.storage import StoreLike
61-
from zarr.types import AnyArray
61+
from zarr.types import AnyArray, AnyAsyncArray
6262

6363
# TODO: this type could use some more thought
64-
ArrayLike: TypeAlias = (
65-
AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata] | AnyArray | npt.NDArray[Any]
66-
)
64+
ArrayLike: TypeAlias = AnyAsyncArray | AnyArray | npt.NDArray[Any]
6765
PathLike = str
6866

6967
__all__ = [
@@ -315,7 +313,7 @@ async def open(
315313
path: str | None = None,
316314
storage_options: dict[str, Any] | None = None,
317315
**kwargs: Any, # TODO: type kwargs as valid args to open_array
318-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata] | AsyncGroup:
316+
) -> AnyAsyncArray | AsyncGroup:
319317
"""Convenience function to open a group or array using file-mode-like semantics.
320318
321319
Parameters
@@ -570,9 +568,7 @@ async def tree(grp: AsyncGroup, expand: bool | None = None, level: int | None =
570568
return await grp.tree(expand=expand, level=level)
571569

572570

573-
async def array(
574-
data: npt.ArrayLike | AnyArray, **kwargs: Any
575-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
571+
async def array(data: npt.ArrayLike | AnyArray, **kwargs: Any) -> AnyAsyncArray:
576572
"""Create an array filled with `data`.
577573
578574
Parameters
@@ -904,7 +900,7 @@ async def create(
904900
storage_options: dict[str, Any] | None = None,
905901
config: ArrayConfigLike | None = None,
906902
**kwargs: Any,
907-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
903+
) -> AnyAsyncArray:
908904
"""Create an array.
909905
910906
Parameters
@@ -1076,9 +1072,7 @@ async def create(
10761072
)
10771073

10781074

1079-
async def empty(
1080-
shape: ChunkCoords, **kwargs: Any
1081-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1075+
async def empty(shape: ChunkCoords, **kwargs: Any) -> AnyAsyncArray:
10821076
"""Create an empty array with the specified shape. The contents will be filled with the
10831077
array's fill value or zeros if no fill value is provided.
10841078
@@ -1099,9 +1093,7 @@ async def empty(
10991093
return await create(shape=shape, fill_value=None, **kwargs)
11001094

11011095

1102-
async def empty_like(
1103-
a: ArrayLike, **kwargs: Any
1104-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1096+
async def empty_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
11051097
"""Create an empty array like `a`. The contents will be filled with the
11061098
array's fill value or zeros if no fill value is provided.
11071099
@@ -1128,9 +1120,7 @@ async def empty_like(
11281120

11291121

11301122
# TODO: add type annotations for fill_value and kwargs
1131-
async def full(
1132-
shape: ChunkCoords, fill_value: Any, **kwargs: Any
1133-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1123+
async def full(shape: ChunkCoords, fill_value: Any, **kwargs: Any) -> AnyAsyncArray:
11341124
"""Create an array, with `fill_value` being used as the default value for
11351125
uninitialized portions of the array.
11361126
@@ -1152,9 +1142,7 @@ async def full(
11521142

11531143

11541144
# TODO: add type annotations for kwargs
1155-
async def full_like(
1156-
a: ArrayLike, **kwargs: Any
1157-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1145+
async def full_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
11581146
"""Create a filled array like `a`.
11591147
11601148
Parameters
@@ -1175,9 +1163,7 @@ async def full_like(
11751163
return await full(**like_kwargs)
11761164

11771165

1178-
async def ones(
1179-
shape: ChunkCoords, **kwargs: Any
1180-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1166+
async def ones(shape: ChunkCoords, **kwargs: Any) -> AnyAsyncArray:
11811167
"""Create an array, with one being used as the default value for
11821168
uninitialized portions of the array.
11831169
@@ -1196,9 +1182,7 @@ async def ones(
11961182
return await create(shape=shape, fill_value=1, **kwargs)
11971183

11981184

1199-
async def ones_like(
1200-
a: ArrayLike, **kwargs: Any
1201-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1185+
async def ones_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
12021186
"""Create an array of ones like `a`.
12031187
12041188
Parameters
@@ -1225,7 +1209,7 @@ async def open_array(
12251209
path: PathLike = "",
12261210
storage_options: dict[str, Any] | None = None,
12271211
**kwargs: Any, # TODO: type kwargs as valid args to save
1228-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1212+
) -> AnyAsyncArray:
12291213
"""Open an array using file-mode-like semantics.
12301214
12311215
Parameters
@@ -1273,9 +1257,7 @@ async def open_array(
12731257
raise
12741258

12751259

1276-
async def open_like(
1277-
a: ArrayLike, path: str, **kwargs: Any
1278-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
1260+
async def open_like(a: ArrayLike, path: str, **kwargs: Any) -> AnyAsyncArray:
12791261
"""Open a persistent array like `a`.
12801262
12811263
Parameters
@@ -1298,9 +1280,7 @@ async def open_like(
12981280
return await open_array(path=path, **like_kwargs)
12991281

13001282

1301-
async def zeros(
1302-
shape: ChunkCoords, **kwargs: Any
1303-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1283+
async def zeros(shape: ChunkCoords, **kwargs: Any) -> AnyAsyncArray:
13041284
"""Create an array, with zero being used as the default value for
13051285
uninitialized portions of the array.
13061286
@@ -1319,9 +1299,7 @@ async def zeros(
13191299
return await create(shape=shape, fill_value=0, **kwargs)
13201300

13211301

1322-
async def zeros_like(
1323-
a: ArrayLike, **kwargs: Any
1324-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1302+
async def zeros_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
13251303
"""Create an array of zeros like `a`.
13261304
13271305
Parameters

src/zarr/core/array.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@
140140
from zarr.core.dtype.wrapper import TBaseDType, TBaseScalar
141141
from zarr.core.group import AsyncGroup
142142
from zarr.storage import StoreLike
143-
from zarr.types import AnyArray
143+
from zarr.types import AnyArray, AnyAsyncArray
144144

145145

146146
# Array and AsyncArray are defined in the base ``zarr`` namespace
@@ -439,7 +439,7 @@ async def create(
439439
overwrite: bool = False,
440440
data: npt.ArrayLike | None = None,
441441
config: ArrayConfigLike | None = None,
442-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]: ...
442+
) -> AnyAsyncArray: ...
443443

444444
@classmethod
445445
@deprecated("Use zarr.api.asynchronous.create_array instead.", category=ZarrDeprecationWarning)
@@ -473,7 +473,7 @@ async def create(
473473
overwrite: bool = False,
474474
data: npt.ArrayLike | None = None,
475475
config: ArrayConfigLike | None = None,
476-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
476+
) -> AnyAsyncArray:
477477
"""Method to create a new asynchronous array instance.
478478
479479
.. deprecated:: 3.0.0
@@ -614,7 +614,7 @@ async def _create(
614614
overwrite: bool = False,
615615
data: npt.ArrayLike | None = None,
616616
config: ArrayConfigLike | None = None,
617-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
617+
) -> AnyAsyncArray:
618618
"""Method to create a new asynchronous array instance.
619619
See :func:`AsyncArray.create` for more details.
620620
Deprecated in favor of :func:`zarr.api.asynchronous.create_array`.
@@ -636,7 +636,7 @@ async def _create(
636636
_chunks = normalize_chunks(chunk_shape, shape, item_size)
637637
config_parsed = parse_array_config(config)
638638

639-
result: AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]
639+
result: AnyAsyncArray
640640
if zarr_format == 3:
641641
if dimension_separator is not None:
642642
raise ValueError(
@@ -905,7 +905,7 @@ def from_dict(
905905
cls,
906906
store_path: StorePath,
907907
data: dict[str, JSON],
908-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
908+
) -> AnyAsyncArray:
909909
"""
910910
Create a Zarr array from a dictionary, with support for both Zarr format 2 and 3 metadata.
911911
@@ -937,7 +937,7 @@ async def open(
937937
cls,
938938
store: StoreLike,
939939
zarr_format: ZarrFormat | None = 3,
940-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
940+
) -> AnyAsyncArray:
941941
"""
942942
Async method to open an existing Zarr array from a given store.
943943
@@ -3833,7 +3833,7 @@ def info_complete(self) -> Any:
38333833

38343834

38353835
async def chunks_initialized(
3836-
array: AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata],
3836+
array: AnyAsyncArray,
38373837
) -> tuple[str, ...]:
38383838
"""
38393839
Return the keys of the chunks that have been persisted to the storage backend.
@@ -3865,7 +3865,7 @@ async def chunks_initialized(
38653865

38663866

38673867
def _build_parents(
3868-
node: AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata] | AsyncGroup,
3868+
node: AnyAsyncArray | AsyncGroup,
38693869
) -> list[AsyncGroup]:
38703870
from zarr.core.group import AsyncGroup, GroupMetadata
38713871

@@ -3947,7 +3947,7 @@ async def from_array(
39473947
storage_options: dict[str, Any] | None = None,
39483948
overwrite: bool = False,
39493949
config: ArrayConfig | ArrayConfigLike | None = None,
3950-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
3950+
) -> AnyAsyncArray:
39513951
"""Create an array from an existing array or array-like.
39523952
39533953
Parameters
@@ -4210,7 +4210,7 @@ async def init_array(
42104210
dimension_names: DimensionNames = None,
42114211
overwrite: bool = False,
42124212
config: ArrayConfigLike | None,
4213-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
4213+
) -> AnyAsyncArray:
42144214
"""Create and persist an array metadata document.
42154215
42164216
Parameters
@@ -4431,7 +4431,7 @@ async def create_array(
44314431
overwrite: bool = False,
44324432
config: ArrayConfigLike | None = None,
44334433
write_data: bool = True,
4434-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
4434+
) -> AnyAsyncArray:
44354435
"""Create an array.
44364436
44374437
Parameters

0 commit comments

Comments
 (0)