Skip to content

Commit 61740d5

Browse files
committed
Add an AnyAsyncArray type
1 parent 83d13b1 commit 61740d5

File tree

6 files changed

+84
-128
lines changed

6 files changed

+84
-128
lines changed

src/zarr/api/asynchronous.py

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
GroupMetadata,
3838
create_hierarchy,
3939
)
40-
from zarr.core.metadata import ArrayMetadataDict, ArrayV2Metadata, ArrayV3Metadata
40+
from zarr.core.metadata import ArrayMetadataDict, ArrayV2Metadata
4141
from zarr.errors import (
4242
ArrayNotFoundError,
4343
GroupNotFoundError,
@@ -57,12 +57,10 @@
5757
from zarr.core.buffer import NDArrayLikeOrScalar
5858
from zarr.core.chunk_key_encodings import ChunkKeyEncoding
5959
from zarr.storage import StoreLike
60-
from zarr.types import AnyArray
60+
from zarr.types import AnyArray, AnyAsyncArray
6161

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

6866
__all__ = [
@@ -314,7 +312,7 @@ async def open(
314312
path: str | None = None,
315313
storage_options: dict[str, Any] | None = None,
316314
**kwargs: Any, # TODO: type kwargs as valid args to open_array
317-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata] | AsyncGroup:
315+
) -> AnyAsyncArray | AsyncGroup:
318316
"""Convenience function to open a group or array using file-mode-like semantics.
319317
320318
Parameters
@@ -571,9 +569,7 @@ async def tree(grp: AsyncGroup, expand: bool | None = None, level: int | None =
571569
return await grp.tree(expand=expand, level=level)
572570

573571

574-
async def array(
575-
data: npt.ArrayLike | AnyArray, **kwargs: Any
576-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
572+
async def array(data: npt.ArrayLike | AnyArray, **kwargs: Any) -> AnyAsyncArray:
577573
"""Create an array filled with `data`.
578574
579575
Parameters
@@ -905,7 +901,7 @@ async def create(
905901
storage_options: dict[str, Any] | None = None,
906902
config: ArrayConfigLike | None = None,
907903
**kwargs: Any,
908-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
904+
) -> AnyAsyncArray:
909905
"""Create an array.
910906
911907
Parameters
@@ -1077,9 +1073,7 @@ async def create(
10771073
)
10781074

10791075

1080-
async def empty(
1081-
shape: tuple[int, ...], **kwargs: Any
1082-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1076+
async def empty(shape: tuple[int, ...], **kwargs: Any) -> AnyAsyncArray:
10831077
"""Create an empty array with the specified shape. The contents will be filled with the
10841078
array's fill value or zeros if no fill value is provided.
10851079
@@ -1100,9 +1094,7 @@ async def empty(
11001094
return await create(shape=shape, fill_value=None, **kwargs)
11011095

11021096

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

11301122

11311123
# TODO: add type annotations for fill_value and kwargs
1132-
async def full(
1133-
shape: tuple[int, ...], fill_value: Any, **kwargs: Any
1134-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1124+
async def full(shape: tuple[int, ...], fill_value: Any, **kwargs: Any) -> AnyAsyncArray:
11351125
"""Create an array, with `fill_value` being used as the default value for
11361126
uninitialized portions of the array.
11371127
@@ -1153,9 +1143,7 @@ async def full(
11531143

11541144

11551145
# TODO: add type annotations for kwargs
1156-
async def full_like(
1157-
a: ArrayLike, **kwargs: Any
1158-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1146+
async def full_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
11591147
"""Create a filled array like `a`.
11601148
11611149
Parameters
@@ -1176,9 +1164,7 @@ async def full_like(
11761164
return await full(**like_kwargs)
11771165

11781166

1179-
async def ones(
1180-
shape: tuple[int, ...], **kwargs: Any
1181-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1167+
async def ones(shape: tuple[int, ...], **kwargs: Any) -> AnyAsyncArray:
11821168
"""Create an array, with one being used as the default value for
11831169
uninitialized portions of the array.
11841170
@@ -1197,9 +1183,7 @@ async def ones(
11971183
return await create(shape=shape, fill_value=1, **kwargs)
11981184

11991185

1200-
async def ones_like(
1201-
a: ArrayLike, **kwargs: Any
1202-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1186+
async def ones_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
12031187
"""Create an array of ones like `a`.
12041188
12051189
Parameters
@@ -1226,7 +1210,7 @@ async def open_array(
12261210
path: PathLike = "",
12271211
storage_options: dict[str, Any] | None = None,
12281212
**kwargs: Any, # TODO: type kwargs as valid args to save
1229-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1213+
) -> AnyAsyncArray:
12301214
"""Open an array using file-mode-like semantics.
12311215
12321216
Parameters
@@ -1274,9 +1258,7 @@ async def open_array(
12741258
raise ArrayNotFoundError(store_path.store, store_path.path) from err
12751259

12761260

1277-
async def open_like(
1278-
a: ArrayLike, path: str, **kwargs: Any
1279-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
1261+
async def open_like(a: ArrayLike, path: str, **kwargs: Any) -> AnyAsyncArray:
12801262
"""Open a persistent array like `a`.
12811263
12821264
Parameters
@@ -1299,9 +1281,7 @@ async def open_like(
12991281
return await open_array(path=path, **like_kwargs)
13001282

13011283

1302-
async def zeros(
1303-
shape: tuple[int, ...], **kwargs: Any
1304-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1284+
async def zeros(shape: tuple[int, ...], **kwargs: Any) -> AnyAsyncArray:
13051285
"""Create an array, with zero being used as the default value for
13061286
uninitialized portions of the array.
13071287
@@ -1320,9 +1300,7 @@ async def zeros(
13201300
return await create(shape=shape, fill_value=0, **kwargs)
13211301

13221302

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

src/zarr/core/array.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@
144144
from zarr.core.dtype.wrapper import TBaseDType, TBaseScalar
145145
from zarr.core.group import AsyncGroup
146146
from zarr.storage import StoreLike
147-
from zarr.types import AnyArray
147+
from zarr.types import AnyArray, AnyAsyncArray
148148

149149

150150
# Array and AsyncArray are defined in the base ``zarr`` namespace
@@ -455,7 +455,7 @@ async def create(
455455
overwrite: bool = False,
456456
data: npt.ArrayLike | None = None,
457457
config: ArrayConfigLike | None = None,
458-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]: ...
458+
) -> AnyAsyncArray: ...
459459

460460
@classmethod
461461
@deprecated("Use zarr.api.asynchronous.create_array instead.", category=ZarrDeprecationWarning)
@@ -489,7 +489,7 @@ async def create(
489489
overwrite: bool = False,
490490
data: npt.ArrayLike | None = None,
491491
config: ArrayConfigLike | None = None,
492-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
492+
) -> AnyAsyncArray:
493493
"""Method to create a new asynchronous array instance.
494494
495495
.. deprecated:: 3.0.0
@@ -630,7 +630,7 @@ async def _create(
630630
overwrite: bool = False,
631631
data: npt.ArrayLike | None = None,
632632
config: ArrayConfigLike | None = None,
633-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
633+
) -> AnyAsyncArray:
634634
"""Method to create a new asynchronous array instance.
635635
See :func:`AsyncArray.create` for more details.
636636
Deprecated in favor of :func:`zarr.api.asynchronous.create_array`.
@@ -652,7 +652,7 @@ async def _create(
652652
_chunks = normalize_chunks(chunk_shape, shape, item_size)
653653
config_parsed = parse_array_config(config)
654654

655-
result: AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]
655+
result: AnyAsyncArray
656656
if zarr_format == 3:
657657
if dimension_separator is not None:
658658
raise ValueError(
@@ -921,7 +921,7 @@ def from_dict(
921921
cls,
922922
store_path: StorePath,
923923
data: dict[str, JSON],
924-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
924+
) -> AnyAsyncArray:
925925
"""
926926
Create a Zarr array from a dictionary, with support for both Zarr format 2 and 3 metadata.
927927
@@ -953,7 +953,7 @@ async def open(
953953
cls,
954954
store: StoreLike,
955955
zarr_format: ZarrFormat | None = 3,
956-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
956+
) -> AnyAsyncArray:
957957
"""
958958
Async method to open an existing Zarr array from a given store.
959959
@@ -4068,7 +4068,7 @@ def info_complete(self) -> Any:
40684068

40694069

40704070
async def _shards_initialized(
4071-
array: AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata],
4071+
array: AnyAsyncArray,
40724072
) -> tuple[str, ...]:
40734073
"""
40744074
Return the keys of the chunks that have been persisted to the storage backend.
@@ -4100,7 +4100,7 @@ async def _shards_initialized(
41004100

41014101

41024102
def _build_parents(
4103-
node: AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata] | AsyncGroup,
4103+
node: AnyAsyncArray | AsyncGroup,
41044104
) -> list[AsyncGroup]:
41054105
from zarr.core.group import AsyncGroup, GroupMetadata
41064106

@@ -4180,7 +4180,7 @@ async def from_array(
41804180
storage_options: dict[str, Any] | None = None,
41814181
overwrite: bool = False,
41824182
config: ArrayConfig | ArrayConfigLike | None = None,
4183-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
4183+
) -> AnyAsyncArray:
41844184
"""Create an array from an existing array or array-like.
41854185
41864186
Parameters
@@ -4443,7 +4443,7 @@ async def init_array(
44434443
dimension_names: DimensionNames = None,
44444444
overwrite: bool = False,
44454445
config: ArrayConfigLike | None = None,
4446-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
4446+
) -> AnyAsyncArray:
44474447
"""Create and persist an array metadata document.
44484448
44494449
Parameters
@@ -4666,7 +4666,7 @@ async def create_array(
46664666
overwrite: bool = False,
46674667
config: ArrayConfigLike | None = None,
46684668
write_data: bool = True,
4669-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
4669+
) -> AnyAsyncArray:
46704670
"""Create an array.
46714671
46724672
Parameters
@@ -5231,7 +5231,7 @@ def _parse_data_params(
52315231

52325232

52335233
def _iter_chunk_coords(
5234-
array: AnyArray | AsyncArray[Any],
5234+
array: AnyArray | AnyAsyncArray,
52355235
*,
52365236
origin: Sequence[int] | None = None,
52375237
selection_shape: Sequence[int] | None = None,
@@ -5262,7 +5262,7 @@ def _iter_chunk_coords(
52625262

52635263

52645264
def _iter_shard_coords(
5265-
array: AnyArray | AsyncArray[Any],
5265+
array: AnyArray | AnyAsyncArray,
52665266
*,
52675267
origin: Sequence[int] | None = None,
52685268
selection_shape: Sequence[int] | None = None,
@@ -5293,7 +5293,7 @@ def _iter_shard_coords(
52935293

52945294

52955295
def _iter_shard_keys(
5296-
array: AnyArray | AsyncArray[Any],
5296+
array: AnyArray | AnyAsyncArray,
52975297
*,
52985298
origin: Sequence[int] | None = None,
52995299
selection_shape: Sequence[int] | None = None,
@@ -5322,7 +5322,7 @@ def _iter_shard_keys(
53225322

53235323

53245324
def _iter_shard_regions(
5325-
array: AnyArray | AsyncArray[Any],
5325+
array: AnyArray | AnyAsyncArray,
53265326
*,
53275327
origin: Sequence[int] | None = None,
53285328
selection_shape: Sequence[int] | None = None,
@@ -5357,7 +5357,7 @@ def _iter_shard_regions(
53575357

53585358

53595359
def _iter_chunk_regions(
5360-
array: AnyArray | AsyncArray[Any],
5360+
array: AnyArray | AnyAsyncArray,
53615361
*,
53625362
origin: Sequence[int] | None = None,
53635363
selection_shape: Sequence[int] | None = None,

0 commit comments

Comments
 (0)