Skip to content

Commit f97296b

Browse files
committed
Add an AnyAsyncArray type
1 parent 1999c7a commit f97296b

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,
4446-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
4446+
) -> AnyAsyncArray:
44474447
"""Create and persist an array metadata document.
44484448
44494449
Parameters
@@ -4664,7 +4664,7 @@ async def create_array(
46644664
overwrite: bool = False,
46654665
config: ArrayConfigLike | None = None,
46664666
write_data: bool = True,
4667-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
4667+
) -> AnyAsyncArray:
46684668
"""Create an array.
46694669
46704670
Parameters
@@ -5229,7 +5229,7 @@ def _parse_data_params(
52295229

52305230

52315231
def _iter_chunk_coords(
5232-
array: AnyArray | AsyncArray[Any],
5232+
array: AnyArray | AnyAsyncArray,
52335233
*,
52345234
origin: Sequence[int] | None = None,
52355235
selection_shape: Sequence[int] | None = None,
@@ -5260,7 +5260,7 @@ def _iter_chunk_coords(
52605260

52615261

52625262
def _iter_shard_coords(
5263-
array: AnyArray | AsyncArray[Any],
5263+
array: AnyArray | AnyAsyncArray,
52645264
*,
52655265
origin: Sequence[int] | None = None,
52665266
selection_shape: Sequence[int] | None = None,
@@ -5291,7 +5291,7 @@ def _iter_shard_coords(
52915291

52925292

52935293
def _iter_shard_keys(
5294-
array: AnyArray | AsyncArray[Any],
5294+
array: AnyArray | AnyAsyncArray,
52955295
*,
52965296
origin: Sequence[int] | None = None,
52975297
selection_shape: Sequence[int] | None = None,
@@ -5320,7 +5320,7 @@ def _iter_shard_keys(
53205320

53215321

53225322
def _iter_shard_regions(
5323-
array: AnyArray | AsyncArray[Any],
5323+
array: AnyArray | AnyAsyncArray,
53245324
*,
53255325
origin: Sequence[int] | None = None,
53265326
selection_shape: Sequence[int] | None = None,
@@ -5355,7 +5355,7 @@ def _iter_shard_regions(
53555355

53565356

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

0 commit comments

Comments
 (0)