Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions changes/419.feature.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Added `zarr.ArrayIO` and `zarr.AsyncArrayIO`, an explicit-IO layer over Zarr arrays. Constructing one performs no IO against storage: storing metadata (`store_metadata`), storing or reading chunks (`setitem` / `getitem`), and their erasing inverses (`erase_metadata`, `erase_chunk`, `erase_chunks`) are explicit method calls that run in whatever order the caller chooses, so chunks can be written before metadata. `open` auto-detects the Zarr format by default, as `zarrs` does, and `verify` reads the stored metadata and raises, naming each differing field, when it does not match the metadata the instance is bound to.
`Array` and `AsyncArray` are built on this layer: every `AsyncArray` wraps an `AsyncArrayIO` and delegates its metadata and selection IO to it, the wrapped layer is reachable as `Array.io` / `AsyncArray.io`, and `to_array()` returns an array over the same binding.
The binding holds the metadata document as a `zarr-metadata` model β€” `zarr-python` now depends on `zarr-metadata` β€” reachable as `ArrayIO.document`: document operations (`store_metadata`, `erase_metadata`, `erase_chunk`, `erase_chunks`, `verify`) never resolve codec or data type names, so an array whose codecs this environment lacks can still be opened, verified and erased, and names resolve into classes only when chunks are read or written.
2 changes: 2 additions & 0 deletions docs/api/zarr/array.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
::: zarr.Array
::: zarr.AsyncArray
::: zarr.ArrayIO
::: zarr.AsyncArrayIO
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ dependencies = [
'typing_extensions>=4.14',
'donfig>=0.8',
'msgspec>=0.19',
'zarr-metadata>=0.6.0',
]

dynamic = [
Expand Down
4 changes: 3 additions & 1 deletion src/zarr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
zeros,
zeros_like,
)
from zarr.core.array import Array, AsyncArray
from zarr.core.array import Array, ArrayIO, AsyncArray, AsyncArrayIO
from zarr.core.config import config
from zarr.core.group import AsyncGroup, Group

Expand Down Expand Up @@ -147,7 +147,9 @@ def set_format(log_format: str) -> None:

__all__ = [
"Array",
"ArrayIO",
"AsyncArray",
"AsyncArrayIO",
"AsyncGroup",
"Group",
"__version__",
Expand Down
Loading
Loading