Skip to content

Commit b7d117a

Browse files
committed
init
1 parent d2c7838 commit b7d117a

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

src/zarr/core/array.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from dataclasses import dataclass, field, replace
66
from itertools import starmap
77
from logging import getLogger
8-
from typing import TYPE_CHECKING, Any, Generic, Literal, cast, overload
8+
from typing import TYPE_CHECKING, Any, Generic, Literal, TypedDict, cast, overload
99

1010
import numpy as np
1111
import numpy.typing as npt
@@ -41,7 +41,8 @@
4141
parse_shapelike,
4242
product,
4343
)
44-
from zarr.core.config import config, parse_indexing_order
44+
from zarr.core.config import config as base_config
45+
from zarr.core.config import parse_indexing_order
4546
from zarr.core.indexing import (
4647
BasicIndexer,
4748
BasicSelection,
@@ -96,6 +97,15 @@
9697
logger = getLogger(__name__)
9798

9899

100+
@dataclass(frozen=True, slots=True, kw_only=True)
101+
class ArrayConfig:
102+
write_empty_chunks: bool
103+
104+
105+
class ArrayConfigDict(TypedDict):
106+
write_empty_chunks: bool
107+
108+
99109
def parse_array_metadata(data: Any) -> ArrayMetadata:
100110
if isinstance(data, ArrayMetadata):
101111
return data
@@ -205,13 +215,15 @@ class AsyncArray(Generic[T_ArrayMetadata]):
205215
store_path: StorePath
206216
codec_pipeline: CodecPipeline = field(init=False)
207217
order: MemoryOrder
218+
config: ArrayConfig
208219

209220
@overload
210221
def __init__(
211222
self: AsyncArray[ArrayV2Metadata],
212223
metadata: ArrayV2Metadata | ArrayV2MetadataDict,
213224
store_path: StorePath,
214225
order: MemoryOrder | None = None,
226+
config: ArrayConfig | ArrayConfigDict | None = None,
215227
) -> None: ...
216228

217229
@overload
@@ -220,13 +232,15 @@ def __init__(
220232
metadata: ArrayV3Metadata | ArrayV3MetadataDict,
221233
store_path: StorePath,
222234
order: MemoryOrder | None = None,
235+
config: ArrayConfig | ArrayConfigDict | None = None,
223236
) -> None: ...
224237

225238
def __init__(
226239
self,
227240
metadata: ArrayMetadata | ArrayMetadataDict,
228241
store_path: StorePath,
229242
order: MemoryOrder | None = None,
243+
config: ArrayConfig | ArrayConfigDict | None = None,
230244
) -> None:
231245
if isinstance(metadata, dict):
232246
zarr_format = metadata["zarr_format"]
@@ -240,7 +254,7 @@ def __init__(
240254
raise ValueError(f"Invalid zarr_format: {zarr_format}. Expected 2 or 3")
241255

242256
metadata_parsed = parse_array_metadata(metadata)
243-
order_parsed = parse_indexing_order(order or config.get("array.order"))
257+
order_parsed = parse_indexing_order(order or base_config.get("array.order"))
244258

245259
object.__setattr__(self, "metadata", metadata_parsed)
246260
object.__setattr__(self, "store_path", store_path)
@@ -610,7 +624,7 @@ async def _create_v2(
610624
await ensure_no_existing_node(store_path, zarr_format=2)
611625

612626
if order is None:
613-
order = parse_indexing_order(config.get("array.order"))
627+
order = parse_indexing_order(base_config.get("array.order"))
614628

615629
if dimension_separator is None:
616630
dimension_separator = "."
@@ -1123,7 +1137,7 @@ async def _delete_key(key: str) -> None:
11231137
for chunk_coords in old_chunk_coords.difference(new_chunk_coords)
11241138
],
11251139
_delete_key,
1126-
config.get("async.concurrency"),
1140+
base_config.get("async.concurrency"),
11271141
)
11281142

11291143
# Write new metadata

0 commit comments

Comments
 (0)