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.
Files changed (48) hide show
  1. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/.github/dependabot.yml +1 -1
  2. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/.github/workflows/ci.yml +3 -3
  3. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/.github/workflows/release.yml +1 -1
  4. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/CHANGELOG.md +63 -1
  5. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/Cargo.lock +165 -209
  6. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/Cargo.toml +3 -3
  7. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/PKG-INFO +2 -2
  8. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/pyproject.toml +5 -5
  9. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/python/rustytree/__init__.py +1 -1
  10. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/python/rustytree/_array.py +14 -5
  11. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/python/rustytree/backend.py +9 -6
  12. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/array.rs +15 -3
  13. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/lib.rs +6 -2
  14. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/node.rs +4 -1
  15. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/py_credentials.rs +1 -1
  16. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/walk.rs +92 -26
  17. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/conftest.py +22 -0
  18. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_backend_entrypoint.py +45 -5
  19. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_eager_fetch.py +4 -15
  20. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_phase1_scaffold.py +1 -1
  21. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_string_arrays.py +165 -6
  22. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/.gitignore +0 -0
  23. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/LICENSE +0 -0
  24. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/README.md +0 -0
  25. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo-banner-dark.png +0 -0
  26. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo-banner-dark.svg +0 -0
  27. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo-banner-light.png +0 -0
  28. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo-banner-light.svg +0 -0
  29. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/assets/logo.png +0 -0
  30. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/docs/architecture.md +0 -0
  31. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/docs/contributing.md +0 -0
  32. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/docs/release-process.md +0 -0
  33. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/docs/usage.md +0 -0
  34. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/notebooks/klot_demo.ipynb +0 -0
  35. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/dtype_dispatch.rs +0 -0
  36. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/error.rs +0 -0
  37. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/glob.rs +0 -0
  38. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/icechunk_store.rs +0 -0
  39. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/runtime.rs +0 -0
  40. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/store.rs +0 -0
  41. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/src/url.rs +0 -0
  42. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_chunks.py +0 -0
  43. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_codecs.py +0 -0
  44. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_icechunk.py +0 -0
  45. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_lazy.py +0 -0
  46. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_pickle.py +0 -0
  47. {rustytree_xarray-0.4.0 → rustytree_xarray-0.5.1}/tests/test_to_rust_source.py +0 -0
  48. {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.1.0`) and `typetag`
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@v6
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@v6
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.1.0,<2.2' 'dask[distributed]>=2024.1'
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
@@ -48,7 +48,7 @@ jobs:
48
48
  runs-on: ${{ matrix.platform.os }}
49
49
  steps:
50
50
  - uses: actions/checkout@v7
51
- - uses: actions/setup-python@v6
51
+ - uses: actions/setup-python@v7
52
52
  with:
53
53
  python-version: ${{ matrix.python-version }}
54
54
  - uses: dtolnay/rust-toolchain@stable
@@ -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.4.0...HEAD
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