rustytree-xarray 0.4.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/.github/dependabot.yml +1 -1
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/.github/workflows/ci.yml +3 -3
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/.github/workflows/release.yml +1 -1
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/CHANGELOG.md +63 -1
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/Cargo.lock +165 -209
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/Cargo.toml +3 -3
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/PKG-INFO +2 -2
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/pyproject.toml +5 -5
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/python/rustytree/__init__.py +1 -1
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/python/rustytree/_array.py +14 -5
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/python/rustytree/backend.py +9 -6
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/array.rs +15 -3
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/lib.rs +6 -2
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/node.rs +4 -1
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/py_credentials.rs +1 -1
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/walk.rs +92 -26
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/conftest.py +22 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_backend_entrypoint.py +45 -5
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_eager_fetch.py +4 -15
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_phase1_scaffold.py +1 -1
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_string_arrays.py +165 -6
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/.gitignore +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/LICENSE +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/README.md +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo-banner-dark.png +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo-banner-dark.svg +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo-banner-light.png +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo-banner-light.svg +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo.png +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/docs/architecture.md +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/docs/contributing.md +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/docs/release-process.md +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/docs/usage.md +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/notebooks/klot_demo.ipynb +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/dtype_dispatch.rs +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/error.rs +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/glob.rs +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/icechunk_store.rs +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/runtime.rs +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/store.rs +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/url.rs +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_chunks.py +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_codecs.py +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_icechunk.py +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_lazy.py +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_pickle.py +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_to_rust_source.py +0 -0
- {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_walk.py +0 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#
|
|
6
6
|
# Deliberately NOT managed here (bumped by hand — coordinated, cross-manifest):
|
|
7
7
|
# - icechunk / typetag: FFI lockstep. The Python `icechunk` (pyproject) must
|
|
8
|
-
# share a minor with the Rust `icechunk` (`=2.
|
|
8
|
+
# share a minor with the Rust `icechunk` (`=2.2.2`) and `typetag`
|
|
9
9
|
# (`=0.2.22`) the crate links — the msgpack `Session` bytes format is
|
|
10
10
|
# coupled across the boundary, so a solo bump breaks `Session::from_bytes`
|
|
11
11
|
# (the 2.0.5→2.0.6 skew behind #46). Bump all three together manually.
|
|
@@ -39,7 +39,7 @@ jobs:
|
|
|
39
39
|
- uses: dtolnay/rust-toolchain@stable
|
|
40
40
|
with:
|
|
41
41
|
components: clippy, rustfmt
|
|
42
|
-
- uses: actions/setup-python@
|
|
42
|
+
- uses: actions/setup-python@v7
|
|
43
43
|
with:
|
|
44
44
|
python-version: "3.12"
|
|
45
45
|
- uses: Swatinem/rust-cache@v2
|
|
@@ -73,7 +73,7 @@ jobs:
|
|
|
73
73
|
with:
|
|
74
74
|
# Keyed by Python version so each matrix cell gets its own cache.
|
|
75
75
|
key: py-${{ matrix.python-version }}
|
|
76
|
-
- uses: actions/setup-python@
|
|
76
|
+
- uses: actions/setup-python@v7
|
|
77
77
|
with:
|
|
78
78
|
python-version: ${{ matrix.python-version }}
|
|
79
79
|
- uses: astral-sh/setup-uv@v7
|
|
@@ -87,7 +87,7 @@ jobs:
|
|
|
87
87
|
# below (we'd build the wheel twice — saves ~80s per matrix cell).
|
|
88
88
|
# These are the deps pytest needs; ruff is not among them — linting runs
|
|
89
89
|
# in the dedicated `lint` job above.
|
|
90
|
-
run: uv pip install --python .venv/bin/python pytest pytest-cov 'zarr>=3.0' 'icechunk>=2.
|
|
90
|
+
run: uv pip install --python .venv/bin/python pytest pytest-cov 'zarr>=3.0' 'icechunk>=2.2.0,<2.3' 'dask[distributed]>=2024.1'
|
|
91
91
|
- name: Build extension (maturin develop)
|
|
92
92
|
run: .venv/bin/maturin develop
|
|
93
93
|
- name: pytest
|
|
@@ -11,6 +11,60 @@ release, that section is renamed to `[x.y.z] - YYYY-MM-DD` and a fresh
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [0.5.1] - 2026-09-21
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Bump the pinned `icechunk` from 2.1.0 to 2.2.2 ([#82]). rustytree links the
|
|
19
|
+
`icechunk` Rust crate and round-trips sessions through
|
|
20
|
+
`Session::{as,from}_bytes` using plain (positional, not named-field) msgpack
|
|
21
|
+
encoding, so a struct field added anywhere ahead of the end of the encoded
|
|
22
|
+
type shifts every field after it. Between 2.1.x and 2.2.x, icechunk's
|
|
23
|
+
`RepositoryConfig` gained `max_concurrent_decodes`, inserted before
|
|
24
|
+
`caching` rather than appended — exactly the kind of change that breaks
|
|
25
|
+
cross-version `Session` bytes. The `dev` extra and CI now require
|
|
26
|
+
`icechunk>=2.2.0,<2.3` so the Python and Rust icechunk versions keep
|
|
27
|
+
sharing a minor. `typetag` stays at `=0.2.22` (icechunk 2.2.2 still
|
|
28
|
+
requires it, so the `py_credentials` `inventory` registry keeps matching
|
|
29
|
+
icechunk-python's), and icechunk-python's `PythonCredentialsFetcher` shape
|
|
30
|
+
is unchanged, so no `py_credentials.rs` code change was needed — only its
|
|
31
|
+
version-referencing doc comment. Verified: `cargo test --locked
|
|
32
|
+
--no-default-features` (58/58) and the full `pytest` suite (202 passed, 4
|
|
33
|
+
skipped for tests needing live S3/arraylake access, 1 pre-existing xfail)
|
|
34
|
+
against a `maturin develop` build linked to real icechunk-python 2.2.2,
|
|
35
|
+
covering real `Session` byte round-trips (`test_open_via_session_bytes`,
|
|
36
|
+
the ancestor-merge session tests) and the dask-distributed pickle path
|
|
37
|
+
(`test_distributed_compute_matches_threaded`).
|
|
38
|
+
|
|
39
|
+
## [0.5.0] - 2026-07-26
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
|
|
43
|
+
- Eager-fetch small `object`-dtype (vlen `string`) scalars and self-named
|
|
44
|
+
1-D coords during the walk's Phase C ([#77]). `xr.open_datatree(engine=
|
|
45
|
+
"rustytree")` was paying one serial lazy read per `object`-dtype variable
|
|
46
|
+
at open time — xarray's `_contains_datetime_like_objects` samples every
|
|
47
|
+
such variable to rule out `cftime.datetime`, independent of the existing
|
|
48
|
+
CF-time-like/dim-coord triggers Phase C already covers. Extends the walk's
|
|
49
|
+
parallel pre-fetch to cover this case (bounded by a 4096-element count cap
|
|
50
|
+
and an 8 MiB total-byte-size cap, since per-element size is unbounded for
|
|
51
|
+
strings unlike the existing fixed-width numeric cap), and adds the
|
|
52
|
+
matching `object` → declared-read-dtype cast on the eager path in
|
|
53
|
+
`backend.py` (mirroring the lazy path's existing cast from #71). Scoped to
|
|
54
|
+
scalars and self-named 1-D coords only, so an ordinary small string data
|
|
55
|
+
variable doesn't lose its dask laziness just because it's small. Verified
|
|
56
|
+
on the live `s3://nexrad-arco/KLOT` store: ~48% faster `open_datatree`
|
|
57
|
+
(8.223s → 4.241s mean over 4 trials), 42 serial lazy reads eliminated.
|
|
58
|
+
|
|
59
|
+
### Changed
|
|
60
|
+
|
|
61
|
+
- Routine dependency and CI-action bumps via Dependabot ([#72], [#74],
|
|
62
|
+
[#75], [#76]). Cargo: `quinn-proto` 0.11.14 → 0.11.16 ([#72]); cargo-minor
|
|
63
|
+
group — `tokio` 1.53.0 → 1.53.1, `thiserror` 2.0.18 → 2.0.19, `async-trait`
|
|
64
|
+
0.1.89 → 0.1.91, `serde` 1.0.228 → 1.0.229, `zarrs_storage` 0.4.4 → 0.4.5,
|
|
65
|
+
`serde_json` 1.0.150 → 1.0.151 ([#75]); `zarrs_object_store` 0.6.2 → 0.7.0
|
|
66
|
+
([#76]). CI: `actions/setup-python` 6 → 7 ([#74]).
|
|
67
|
+
|
|
14
68
|
## [0.4.0] - 2026-07-24
|
|
15
69
|
|
|
16
70
|
### Added
|
|
@@ -835,7 +889,9 @@ below.
|
|
|
835
889
|
intentionally not normalized — relative-vs-absolute glob
|
|
836
890
|
semantics differ in `PurePosixPath.match`.
|
|
837
891
|
|
|
838
|
-
[Unreleased]: https://github.com/aladinor/rustytree/compare/v0.
|
|
892
|
+
[Unreleased]: https://github.com/aladinor/rustytree/compare/v0.5.1...HEAD
|
|
893
|
+
[0.5.1]: https://github.com/aladinor/rustytree/compare/v0.5.0...v0.5.1
|
|
894
|
+
[0.5.0]: https://github.com/aladinor/rustytree/compare/v0.4.0...v0.5.0
|
|
839
895
|
[0.4.0]: https://github.com/aladinor/rustytree/compare/v0.3.0...v0.4.0
|
|
840
896
|
[0.3.0]: https://github.com/aladinor/rustytree/compare/v0.2.1...v0.3.0
|
|
841
897
|
[0.2.1]: https://github.com/aladinor/rustytree/compare/v0.2.0...v0.2.1
|
|
@@ -884,3 +940,9 @@ below.
|
|
|
884
940
|
[#64]: https://github.com/aladinor/rustytree/pull/64
|
|
885
941
|
[#68]: https://github.com/aladinor/rustytree/pull/68
|
|
886
942
|
[#71]: https://github.com/aladinor/rustytree/pull/71
|
|
943
|
+
[#72]: https://github.com/aladinor/rustytree/pull/72
|
|
944
|
+
[#74]: https://github.com/aladinor/rustytree/pull/74
|
|
945
|
+
[#75]: https://github.com/aladinor/rustytree/pull/75
|
|
946
|
+
[#76]: https://github.com/aladinor/rustytree/pull/76
|
|
947
|
+
[#77]: https://github.com/aladinor/rustytree/pull/77
|
|
948
|
+
[#82]: https://github.com/aladinor/rustytree/pull/82
|