Skip to content

Commit de74a78

Browse files
committed
Add an AnyAsyncArray type
1 parent 678ea59 commit de74a78

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
@@ -906,7 +902,7 @@ async def create(
906902
storage_options: dict[str, Any] | None = None,
907903
config: ArrayConfigLike | None = None,
908904
**kwargs: Any,
909-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
905+
) -> AnyAsyncArray:
910906
"""Create an array.
911907
912908
Parameters
@@ -1078,9 +1074,7 @@ async def create(
10781074
)
10791075

10801076

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

11031097

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

11311123

11321124
# TODO: add type annotations for fill_value and kwargs
1133-
async def full(
1134-
shape: tuple[int, ...], fill_value: Any, **kwargs: Any
1135-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1125+
async def full(shape: tuple[int, ...], fill_value: Any, **kwargs: Any) -> AnyAsyncArray:
11361126
"""Create an array, with `fill_value` being used as the default value for
11371127
uninitialized portions of the array.
11381128
@@ -1154,9 +1144,7 @@ async def full(
11541144

11551145

11561146
# TODO: add type annotations for kwargs
1157-
async def full_like(
1158-
a: ArrayLike, **kwargs: Any
1159-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1147+
async def full_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
11601148
"""Create a filled array like `a`.
11611149
11621150
Parameters
@@ -1177,9 +1165,7 @@ async def full_like(
11771165
return await full(**like_kwargs)
11781166

11791167

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

12001186

1201-
async def ones_like(
1202-
a: ArrayLike, **kwargs: Any
1203-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1187+
async def ones_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
12041188
"""Create an array of ones like `a`.
12051189
12061190
Parameters
@@ -1227,7 +1211,7 @@ async def open_array(
12271211
path: PathLike = "",
12281212
storage_options: dict[str, Any] | None = None,
12291213
**kwargs: Any, # TODO: type kwargs as valid args to save
1230-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1214+
) -> AnyAsyncArray:
12311215
"""Open an array using file-mode-like semantics.
12321216
12331217
Parameters
@@ -1276,9 +1260,7 @@ async def open_array(
12761260
raise ArrayNotFoundError(msg) from err
12771261

12781262

1279-
async def open_like(
1280-
a: ArrayLike, path: str, **kwargs: Any
1281-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
1263+
async def open_like(a: ArrayLike, path: str, **kwargs: Any) -> AnyAsyncArray:
12821264
"""Open a persistent array like `a`.
12831265
12841266
Parameters
@@ -1301,9 +1283,7 @@ async def open_like(
13011283
return await open_array(path=path, **like_kwargs)
13021284

13031285

1304-
async def zeros(
1305-
shape: tuple[int, ...], **kwargs: Any
1306-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1286+
async def zeros(shape: tuple[int, ...], **kwargs: Any) -> AnyAsyncArray:
13071287
"""Create an array, with zero being used as the default value for
13081288
uninitialized portions of the array.
13091289
@@ -1322,9 +1302,7 @@ async def zeros(
13221302
return await create(shape=shape, fill_value=0, **kwargs)
13231303

13241304

1325-
async def zeros_like(
1326-
a: ArrayLike, **kwargs: Any
1327-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
1305+
async def zeros_like(a: ArrayLike, **kwargs: Any) -> AnyAsyncArray:
13281306
"""Create an array of zeros like `a`.
13291307
13301308
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
@@ -456,7 +456,7 @@ async def create(
456456
overwrite: bool = False,
457457
data: npt.ArrayLike | None = None,
458458
config: ArrayConfigLike | None = None,
459-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]: ...
459+
) -> AnyAsyncArray: ...
460460

461461
@classmethod
462462
@deprecated("Use zarr.api.asynchronous.create_array instead.", category=ZarrDeprecationWarning)
@@ -490,7 +490,7 @@ async def create(
490490
overwrite: bool = False,
491491
data: npt.ArrayLike | None = None,
492492
config: ArrayConfigLike | None = None,
493-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
493+
) -> AnyAsyncArray:
494494
"""Method to create a new asynchronous array instance.
495495
496496
.. deprecated:: 3.0.0
@@ -631,7 +631,7 @@ async def _create(
631631
overwrite: bool = False,
632632
data: npt.ArrayLike | None = None,
633633
config: ArrayConfigLike | None = None,
634-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
634+
) -> AnyAsyncArray:
635635
"""Method to create a new asynchronous array instance.
636636
See :func:`AsyncArray.create` for more details.
637637
Deprecated in favor of :func:`zarr.api.asynchronous.create_array`.
@@ -653,7 +653,7 @@ async def _create(
653653
_chunks = normalize_chunks(chunk_shape, shape, item_size)
654654
config_parsed = parse_array_config(config)
655655

656-
result: AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]
656+
result: AnyAsyncArray
657657
if zarr_format == 3:
658658
if dimension_separator is not None:
659659
raise ValueError(
@@ -922,7 +922,7 @@ def from_dict(
922922
cls,
923923
store_path: StorePath,
924924
data: dict[str, JSON],
925-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
925+
) -> AnyAsyncArray:
926926
"""
927927
Create a Zarr array from a dictionary, with support for both Zarr format 2 and 3 metadata.
928928
@@ -954,7 +954,7 @@ async def open(
954954
cls,
955955
store: StoreLike,
956956
zarr_format: ZarrFormat | None = 3,
957-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
957+
) -> AnyAsyncArray:
958958
"""
959959
Async method to open an existing Zarr array from a given store.
960960
@@ -4069,7 +4069,7 @@ def info_complete(self) -> Any:
40694069

40704070

40714071
async def _shards_initialized(
4072-
array: AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata],
4072+
array: AnyAsyncArray,
40734073
) -> tuple[str, ...]:
40744074
"""
40754075
Return the keys of the chunks that have been persisted to the storage backend.
@@ -4101,7 +4101,7 @@ async def _shards_initialized(
41014101

41024102

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

@@ -4181,7 +4181,7 @@ async def from_array(
41814181
storage_options: dict[str, Any] | None = None,
41824182
overwrite: bool = False,
41834183
config: ArrayConfig | ArrayConfigLike | None = None,
4184-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
4184+
) -> AnyAsyncArray:
41854185
"""Create an array from an existing array or array-like.
41864186
41874187
Parameters
@@ -4444,7 +4444,7 @@ async def init_array(
44444444
dimension_names: DimensionNames = None,
44454445
overwrite: bool = False,
44464446
config: ArrayConfigLike | None = None,
4447-
) -> AsyncArray[ArrayV3Metadata] | AsyncArray[ArrayV2Metadata]:
4447+
) -> AnyAsyncArray:
44484448
"""Create and persist an array metadata document.
44494449
44504450
Parameters
@@ -4667,7 +4667,7 @@ async def create_array(
46674667
overwrite: bool = False,
46684668
config: ArrayConfigLike | None = None,
46694669
write_data: bool = True,
4670-
) -> AsyncArray[ArrayV2Metadata] | AsyncArray[ArrayV3Metadata]:
4670+
) -> AnyAsyncArray:
46714671
"""Create an array.
46724672
46734673
Parameters
@@ -5232,7 +5232,7 @@ def _parse_data_params(
52325232

52335233

52345234
def _iter_chunk_coords(
5235-
array: AnyArray | AsyncArray[Any],
5235+
array: AnyArray | AnyAsyncArray,
52365236
*,
52375237
origin: Sequence[int] | None = None,
52385238
selection_shape: Sequence[int] | None = None,
@@ -5263,7 +5263,7 @@ def _iter_chunk_coords(
52635263

52645264

52655265
def _iter_shard_coords(
5266-
array: AnyArray | AsyncArray[Any],
5266+
array: AnyArray | AnyAsyncArray,
52675267
*,
52685268
origin: Sequence[int] | None = None,
52695269
selection_shape: Sequence[int] | None = None,
@@ -5294,7 +5294,7 @@ def _iter_shard_coords(
52945294

52955295

52965296
def _iter_shard_keys(
5297-
array: AnyArray | AsyncArray[Any],
5297+
array: AnyArray | AnyAsyncArray,
52985298
*,
52995299
origin: Sequence[int] | None = None,
53005300
selection_shape: Sequence[int] | None = None,
@@ -5323,7 +5323,7 @@ def _iter_shard_keys(
53235323

53245324

53255325
def _iter_shard_regions(
5326-
array: AnyArray | AsyncArray[Any],
5326+
array: AnyArray | AnyAsyncArray,
53275327
*,
53285328
origin: Sequence[int] | None = None,
53295329
selection_shape: Sequence[int] | None = None,
@@ -5358,7 +5358,7 @@ def _iter_shard_regions(
53585358

53595359

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

0 commit comments

Comments
 (0)