2
2
3
3
import json
4
4
from dataclasses import dataclass
5
- from typing import TYPE_CHECKING
5
+ from typing import TYPE_CHECKING , Any
6
6
7
7
import numpy as np
8
8
import pytest
18
18
TransposeCodec ,
19
19
)
20
20
from zarr .core .buffer import default_buffer_prototype
21
- from zarr .core .indexing import Selection , morton_order_iter
21
+ from zarr .core .indexing import BasicSelection , morton_order_iter
22
+ from zarr .core .metadata .v3 import ArrayV3Metadata
22
23
from zarr .storage import StorePath
23
24
24
25
if TYPE_CHECKING :
25
26
from zarr .abc .store import Store
26
- from zarr .core .buffer import NDArrayLike
27
- from zarr .core .common import MemoryOrder
27
+ from zarr .core .buffer . core import NDArrayLikeOrScalar
28
+ from zarr .core .common import ChunkCoords , MemoryOrder
28
29
29
30
30
31
@dataclass (frozen = True )
31
32
class _AsyncArrayProxy :
32
- array : AsyncArray
33
+ array : AsyncArray [ Any ]
33
34
34
- def __getitem__ (self , selection : Selection ) -> _AsyncArraySelectionProxy :
35
+ def __getitem__ (self , selection : BasicSelection ) -> _AsyncArraySelectionProxy :
35
36
return _AsyncArraySelectionProxy (self .array , selection )
36
37
37
38
38
39
@dataclass (frozen = True )
39
40
class _AsyncArraySelectionProxy :
40
- array : AsyncArray
41
- selection : Selection
41
+ array : AsyncArray [ Any ]
42
+ selection : BasicSelection
42
43
43
- async def get (self ) -> NDArrayLike :
44
+ async def get (self ) -> NDArrayLikeOrScalar :
44
45
return await self .array .getitem (self .selection )
45
46
46
- async def set (self , value : np .ndarray ) -> None :
47
+ async def set (self , value : np .ndarray [ Any , Any ] ) -> None :
47
48
return await self .array .setitem (self .selection , value )
48
49
49
50
@@ -101,6 +102,7 @@ async def test_order(
101
102
read_data = await _AsyncArrayProxy (a )[:, :].get ()
102
103
assert np .array_equal (data , read_data )
103
104
105
+ assert isinstance (read_data , np .ndarray )
104
106
if runtime_read_order == "F" :
105
107
assert read_data .flags ["F_CONTIGUOUS" ]
106
108
assert not read_data .flags ["C_CONTIGUOUS" ]
@@ -142,6 +144,7 @@ def test_order_implicit(
142
144
read_data = a [:, :]
143
145
assert np .array_equal (data , read_data )
144
146
147
+ assert isinstance (read_data , np .ndarray )
145
148
if runtime_read_order == "F" :
146
149
assert read_data .flags ["F_CONTIGUOUS" ]
147
150
assert not read_data .flags ["C_CONTIGUOUS" ]
@@ -209,7 +212,7 @@ def test_morton() -> None:
209
212
[3 , 2 , 1 , 6 , 4 , 5 , 2 ],
210
213
],
211
214
)
212
- def test_morton2 (shape ) -> None :
215
+ def test_morton2 (shape : ChunkCoords ) -> None :
213
216
order = list (morton_order_iter (shape ))
214
217
for i , x in enumerate (order ):
215
218
assert x not in order [:i ] # no duplicates
@@ -263,7 +266,10 @@ async def test_dimension_names(store: Store) -> None:
263
266
dimension_names = ("x" , "y" ),
264
267
)
265
268
266
- assert (await zarr .api .asynchronous .open_array (store = spath )).metadata .dimension_names == (
269
+ assert isinstance (
270
+ meta := (await zarr .api .asynchronous .open_array (store = spath )).metadata , ArrayV3Metadata
271
+ )
272
+ assert meta .dimension_names == (
267
273
"x" ,
268
274
"y" ,
269
275
)
@@ -277,7 +283,8 @@ async def test_dimension_names(store: Store) -> None:
277
283
fill_value = 0 ,
278
284
)
279
285
280
- assert (await AsyncArray .open (spath2 )).metadata .dimension_names is None
286
+ assert isinstance (meta := (await AsyncArray .open (spath2 )).metadata , ArrayV3Metadata )
287
+ assert meta .dimension_names is None
281
288
zarr_json_buffer = await store .get (f"{ path2 } /zarr.json" , prototype = default_buffer_prototype ())
282
289
assert zarr_json_buffer is not None
283
290
assert "dimension_names" not in json .loads (zarr_json_buffer .to_bytes ())
0 commit comments