|
7 | 7 | import numpy as np |
8 | 8 | import numpy.typing as npt |
9 | 9 |
|
10 | | -from zarr.core.array import Array, AsyncArray |
| 10 | +from zarr.core.array import Array, AsyncArray, get_array_metadata |
11 | 11 | from zarr.core.common import JSON, AccessModeLiteral, ChunkCoords, MemoryOrder, ZarrFormat |
12 | 12 | from zarr.core.config import config |
13 | 13 | from zarr.core.group import AsyncGroup |
|
30 | 30 | PathLike = str |
31 | 31 |
|
32 | 32 | __all__ = [ |
| 33 | + "array", |
33 | 34 | "consolidate_metadata", |
34 | 35 | "copy", |
35 | 36 | "copy_all", |
36 | 37 | "copy_store", |
37 | | - "load", |
38 | | - "open", |
39 | | - "open_consolidated", |
40 | | - "save", |
41 | | - "save_array", |
42 | | - "save_group", |
43 | | - "tree", |
44 | | - "array", |
45 | | - "group", |
46 | | - "open_group", |
47 | 38 | "create", |
48 | 39 | "empty", |
49 | 40 | "empty_like", |
50 | 41 | "full", |
51 | 42 | "full_like", |
| 43 | + "group", |
| 44 | + "load", |
52 | 45 | "ones", |
53 | 46 | "ones_like", |
| 47 | + "open", |
54 | 48 | "open_array", |
| 49 | + "open_consolidated", |
| 50 | + "open_group", |
55 | 51 | "open_like", |
| 52 | + "save", |
| 53 | + "save_array", |
| 54 | + "save_group", |
| 55 | + "tree", |
56 | 56 | "zeros", |
57 | 57 | "zeros_like", |
58 | 58 | ] |
@@ -230,6 +230,18 @@ async def open( |
230 | 230 | if path is not None: |
231 | 231 | store_path = store_path / path |
232 | 232 |
|
| 233 | + if "shape" not in kwargs and mode in {"a", "w", "w-"}: |
| 234 | + try: |
| 235 | + metadata_dict = await get_array_metadata(store_path, zarr_format=zarr_format) |
| 236 | + # for v2, the above would already have raised an exception if not an array |
| 237 | + zarr_format = metadata_dict["zarr_format"] |
| 238 | + is_v3_array = zarr_format == 3 and metadata_dict.get("node_type") == "array" |
| 239 | + if is_v3_array or zarr_format == 2: |
| 240 | + return AsyncArray(store_path=store_path, metadata=metadata_dict) |
| 241 | + except (AssertionError, FileNotFoundError): |
| 242 | + pass |
| 243 | + return await open_group(store=store_path, zarr_format=zarr_format, mode=mode, **kwargs) |
| 244 | + |
233 | 245 | try: |
234 | 246 | return await open_array(store=store_path, zarr_format=zarr_format, mode=mode, **kwargs) |
235 | 247 | except KeyError: |
|
0 commit comments