Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
68f6a82
docs: design spec for zarrs-backed low-level functional API
d-v-b Jun 11, 2026
79c0bce
docs: implementation plan for zarrs functional API phase 1
d-v-b Jun 12, 2026
2eb3b6f
feat: scaffold zarrs-bindings PyO3 crate
d-v-b Jun 12, 2026
bfc0b64
fix: single-source zarrs-bindings version from Cargo.toml
d-v-b Jun 12, 2026
5982c04
feat: add zarr.zarrs package skeleton and test scaffolding
d-v-b Jun 12, 2026
e821d70
fix: pass exc_type to importorskip in zarrs conftest
d-v-b Jun 12, 2026
88c0c4d
feat: sync store bridge for zarrs bindings
d-v-b Jun 12, 2026
737e82e
refactor: review polish for zarrs store bridge
d-v-b Jun 12, 2026
6b8f603
feat: zarrs store bridge and group creation
d-v-b Jun 12, 2026
32573fd
docs: document phase-1 error fidelity and creation race; cargo fmt
d-v-b Jun 12, 2026
f6a95e4
feat: zarrs-backed array creation and metadata reads
d-v-b Jun 12, 2026
59fd58d
test: v2 array creation via zarrs; review polish
d-v-b Jun 12, 2026
2faace5
feat: zarrs-backed node deletion and child listing
d-v-b Jun 12, 2026
dcaf5ef
feat: zarrs-backed whole-chunk decode/encode/raw-read/erase
d-v-b Jun 12, 2026
63429b5
fix: coerce chunk dtype to native byte order for zarrs I/O
d-v-b Jun 12, 2026
e5dc482
chore: lint fixes and changelog for zarr.zarrs
d-v-b Jun 12, 2026
9dd5abd
ci: test job for zarrs bindings
d-v-b Jun 12, 2026
7226b8d
fix: keep zarr.zarrs out of doctest collection; pin Rust toolchain in CI
d-v-b Jun 12, 2026
2b2a6b5
fix: make zarrs test skip xdist-compatible
d-v-b Jun 12, 2026
100a7cb
feat: decode_region with numpy-style basic indexing
d-v-b Jun 12, 2026
ccbf962
fix: keep empty-selection decode_region result read-only
d-v-b Jun 13, 2026
8895224
docs: note decode_region overread; tidy selection normalizer
d-v-b Jun 15, 2026
5faf198
perf: cache constructed Arrays for native filesystem stores
d-v-b Jun 15, 2026
983afbb
fix: recover from poisoned Array-cache mutex instead of wedging
d-v-b Jun 15, 2026
0087a7e
docs: record Array construction cache in design spec
d-v-b Jun 15, 2026
cb87cae
docs: design spec for backend-agnostic CRUD layer
d-v-b Jun 15, 2026
5ae3bb2
docs: consistent CRUD verb set (create/read/write/delete/list)
d-v-b Jun 15, 2026
c7af305
docs: simplify CRUD reads to two non-overlapping addressing axes
d-v-b Jun 15, 2026
3740888
docs: make read_encoded_chunk a facade store.get helper, not a backen…
d-v-b Jun 15, 2026
a9cdae6
docs: implementation plan for backend-agnostic CRUD layer
d-v-b Jun 15, 2026
c2e11e1
feat: zarr.crud skeleton — CrudBackend protocol, registry, config
d-v-b Jun 15, 2026
29d1262
fix: friendly error for missing zarrs backend; document protocol limits
d-v-b Jun 15, 2026
3d3784d
feat: pure-Python ReferenceBackend for zarr.crud
d-v-b Jun 15, 2026
9197a02
fix: honor v2 memory order in ReferenceBackend chunk codec spec
d-v-b Jun 15, 2026
cc7fa45
feat: zarr.crud shared facade + differential suite (reference backend)
d-v-b Jun 15, 2026
9dd680a
refactor: share parse_array_metadata; document bytes contract; OOB test
d-v-b Jun 15, 2026
26af3e4
feat: ZarrsBackend conforms to CrudBackend; zarr.zarrs is now a backend
d-v-b Jun 15, 2026
03c80d7
docs/ci: zarr.crud changelog and CI coverage
d-v-b Jun 15, 2026
c8ce00e
fix: reference backend matches zarrs on v2 groups and all-fill chunk …
d-v-b Jun 15, 2026
75d44ae
test: track zarrs v2-group attribute divergence as strict xfail; docu…
d-v-b Jun 15, 2026
0094048
refactor: move zarrs-bindings crate under packages/ (repo convention)
d-v-b Jun 16, 2026
220c5c7
docs: name changelog fragment with PR number (#4064) for the changelo…
d-v-b Jun 16, 2026
5ba9663
docs: design spec for the array engine protocol (zarrista-backed)
d-v-b Jul 22, 2026
2b88696
docs: integrate zarrista-developer review feedback into engine spec
d-v-b Jul 22, 2026
efb3eb2
docs: engine interchange is a contiguous Region box, not Indexer
d-v-b Jul 22, 2026
e7d3947
docs: implementation plan for the array engine protocol
d-v-b Jul 22, 2026
623c779
feat: Region interchange and array/hierarchy engine protocols
d-v-b Jul 22, 2026
5aeb800
feat: normalize selection kinds to Region + post-index
d-v-b Jul 22, 2026
5c7147a
fix: handle list of booleans in normalize_orthogonal
d-v-b Jul 22, 2026
aeb562e
feat: default array engines over the codec pipeline
d-v-b Jul 22, 2026
8f3d62c
fix(engine): capture codec_pipeline results and raise on missing chunks
d-v-b Jul 22, 2026
b74b0c5
feat: engine-spec resolution with per-store hierarchy cache
d-v-b Jul 22, 2026
5867e3b
feat(engine): thread array config through resolution; add squeeze_axes
d-v-b Jul 22, 2026
474fee0
feat: AsyncArray routes selection I/O through its engine
d-v-b Jul 22, 2026
f5c90df
fix(engine): preserve memory order on strided/fancy reads
d-v-b Jul 22, 2026
6e8c68d
feat: Array sync data path calls its engine without the event loop
d-v-b Jul 22, 2026
304bcbe
feat(engine): engine= parameter on array creation/open APIs
d-v-b Jul 22, 2026
7601695
feat: zarrista-backed array engines with store translation
d-v-b Jul 22, 2026
8249ab0
refactor!: remove zarr.crud, zarr.zarrs, and the zarrs-bindings crate
d-v-b Jul 22, 2026
753d2dd
fix(engine): correct basic-set widening and empty block-slice box
d-v-b Jul 22, 2026
671af2d
test/ci: engine differential suite and zarrista CI job
d-v-b Jul 22, 2026
48b1926
fix(engine): keep device buffers in their own array namespace
d-v-b Jul 22, 2026
dde203c
fix(engine): preserve the engine spec across with_config/update_attri…
d-v-b Jul 22, 2026
b301151
fix(engine): validate out= against the coordinate selection shape
d-v-b Jul 22, 2026
92f82e3
refactor(engine): drop the unused normalize_block helper
d-v-b Jul 22, 2026
be7fd09
docs(engine): API reference pages, changelog, and spec cleanups
d-v-b Jul 22, 2026
1a30404
fix(engine): keep device buffers in-namespace on scalar reads and squ…
d-v-b Jul 22, 2026
2bde8f6
fix(engine): route numpy scalar results through the host scalar-extra…
d-v-b Jul 23, 2026
66b2492
fix(engine): return writable arrays from identity engine reads
d-v-b Jul 23, 2026
fdb4e5e
feat(engine): reject read_missing_chunks=False for the zarrista engine
d-v-b Jul 23, 2026
a0c211f
feat(engine): add zarr.list_engines() discoverability API
d-v-b Jul 23, 2026
8686b3f
docs(engine): add open_with_engine runnable example
d-v-b Jul 23, 2026
a0907f6
docs: post-mortem of zarr-python blockers for smooth engine integration
d-v-b Jul 23, 2026
b5f9cd6
docs: report on zarrista changes needed for a fluent binding layer
d-v-b Jul 23, 2026
3ff999d
docs: ground the writable-buffer ask in DLPack semantics, not a new p…
d-v-b Jul 23, 2026
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
49 changes: 49 additions & 0 deletions .github/workflows/engine.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Array engine

on:
push:
branches: [ main ]
paths:
- 'src/zarr/**'
- 'tests/engine/**'
- 'tests/zarrista/**'
- 'pyproject.toml'
- '.github/workflows/engine.yml'
pull_request:
branches: [ main ]
paths:
- 'src/zarr/**'
- 'tests/engine/**'
- 'tests/zarrista/**'
- 'pyproject.toml'
- '.github/workflows/engine.yml'
workflow_dispatch:

permissions: {}

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0 # hatch-vcs needs tags to compute zarr's version
persist-credentials: false
- name: Install Rust
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
- name: Install uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
python-version: '3.12'
- name: Sync zarrista group
run: uv sync --group zarrista
- name: Run engine tests
# the ubuntu runner image ships a Rust toolchain; the maturin build
# backend for zarrista is fetched by uv on demand
run: uv run --group zarrista pytest tests/engine tests/zarrista -v
22 changes: 22 additions & 0 deletions changes/4181.feature.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
`Array` and `AsyncArray` now route data I/O through pluggable *array engines*
(`zarr.abc.engine.ArrayEngine` / `AsyncArrayEngine`). The default engine
preserves existing behavior on every store and format. Pass
`engine="zarrista"` (requires the `zarrista` package) to serve Zarr v3 arrays
on local-filesystem, obstore, or icechunk storage through the Rust `zarrs`
implementation. Call `zarr.list_engines()` to discover the available engine
names.

As part of this rewiring, writing a single field of a structured dtype (e.g.
`z["x"] = ...`) now preserves the values of the array's other fields; it
previously clobbered them.

Behavior note: strided and fancy (orthogonal/coordinate) selections are now
served internally via the contiguous bounding box that covers the selected
indices, with the requested elements picked out of that box afterwards. For
sparse selections this can transfer more data from storage than before, and
with the `array.read_missing_chunks` config set to `False`, a missing chunk
that lies within the bounding box will raise even if no selected element
falls inside that chunk. Relatedly, a partial (non-full-box) write now performs
an internal read of the bounding box before writing it back, so with
`array.read_missing_chunks` set to `False` such a write raises
`ChunkNotFoundError` when it covers an uninitialized chunk.
5 changes: 5 additions & 0 deletions docs/api/zarr/abc/engine.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
title: engine
---

::: zarr.abc.engine
5 changes: 5 additions & 0 deletions docs/api/zarr/zarrista.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
title: zarrista
---

::: zarr.zarrista
Loading