@@ -492,6 +492,8 @@ def write_basic_dask_h5(
492492@_REGISTRY .register_read (ZarrArray , IOSpec ("array" , "0.2.0" ))
493493@_REGISTRY .register_read (ZarrArray , IOSpec ("string-array" , "0.2.0" ))
494494async def read_array (elem : ArrayStorageType , * , _reader : Reader ) -> npt .NDArray :
495+ if not is_zarr_v2 () and isinstance (elem , ZarrArray ):
496+ return await elem ._async_array .getitem (())
495497 return elem [()]
496498
497499
@@ -603,7 +605,10 @@ def _to_hdf5_vlen_strings(value: np.ndarray) -> np.ndarray:
603605async def read_recarray (
604606 d : ArrayStorageType , * , _reader : Reader
605607) -> np .recarray | npt .NDArray :
606- value = d [()]
608+ if not is_zarr_v2 () and isinstance (d , ZarrArray ):
609+ value = await d ._async_array .getitem (())
610+ else :
611+ value = d [()]
607612 dtype = value .dtype
608613 value = _from_fixed_length_strings (value )
609614 if H5PY_V3 :
@@ -1160,6 +1165,8 @@ def _string_array(
11601165async def read_scalar (elem : ArrayStorageType , * , _reader : Reader ) -> np .number :
11611166 # TODO: `item` ensures the return is in fact a scalar (needed after zarr v3 which now returns a 1 elem array)
11621167 # https://github.com/zarr-developers/zarr-python/issues/2713
1168+ if not is_zarr_v2 () and isinstance (elem , ZarrArray ):
1169+ return (await elem ._async_array .getitem (())).item ()
11631170 return elem [()].item ()
11641171
11651172
@@ -1252,6 +1259,8 @@ async def read_hdf5_string(elem: H5Array, *, _reader: Reader) -> str:
12521259
12531260@_REGISTRY .register_read (ZarrArray , IOSpec ("string" , "0.2.0" ))
12541261async def read_zarr_string (elem : ZarrArray , * , _reader : Reader ) -> str :
1262+ if not is_zarr_v2 () and isinstance (elem , ZarrArray ):
1263+ return str (await elem ._async_array .getitem (()))
12551264 return str (elem [()])
12561265
12571266
0 commit comments