Skip to content

fix: align lunar frames with siderust 0.18 and prepare v0.9.0 - #21

Merged
VPRamon merged 2 commits into
mainfrom
fix/distinguish-lunar-frame-identities
Oct 31, 2026
Merged

VPRamon merged 2 commits into
mainfrom
fix/distinguish-lunar-frame-identities

Conversation

@VPRamon

@VPRamon VPRamon commented Oct 31, 2026 •

Copy link
Copy Markdown
Member

Summary

Adopt published Rust Siderust 0.18.0 and prepare siderust-py / Python siderust 0.9.0. Fix the analytical lunar frame alias without changing the cross-extension bridge protocol or duplicating time types.

Synchronization and implementation

  • Rebase fix/distinguish-lunar-frame-identities onto origin/main (67ca3ae), preserving the canonical siderust.time facade, automatic tempoch>=0.2.1,<0.6 installation, tests, examples and isolated distribution checks. Combine both changelog changes; push the rebase with an explicit force-with-lease.
  • Both the binding and independent interop consumer use crates.io siderust = "0.18.0"; registry resolution/checksum verified, no local core patches or Git dependencies. Root lockfile changes only the core and binding versions/checksum; the ignored standalone consumer lockfile is regenerated under existing repository policy.
  • Reject MoonPrincipalAxes through coordinate constructors, frame/combined transforms, dictionary loading and pickle reconstruction. Analytical IAU_MOON inputs use MoonIauMeanEarth; actual principal-axes observations retain explicit SPICE MOON_PA / MOON_ME kernel semantics.
  • Use the core's fallible center shift and runtime state queries so unavailable states/coverage return actionable Python ValueError, without panic or analytical fallback.
  • Preserve PyO3 0.30.1, bridge protocol 2, canonical tempoch object identities, and the interop consumer's own 0.1.0 version.

Compatibility and scientific validation

Breaking: migrate legacy MoonPrincipalAxes dictionaries/pickles only when the original data meant analytical IAU_MOON. Genuine principal-axes coordinates must retain their realization and matching binary PCK/FK kernels; never migrate by relabeling axes.

The released core supplies VSOP87/ELP canonical IAU 2006 J2000 normalization and the lunar TDB argument. No Python-side normalization is added. Numerical outputs change; frame consistency is not an intrinsic model-accuracy claim.

Independent regression cases retain the published core's externally rotated IMCCE Earth A/E check vectors and all five ELP Table H vectors, unchanged. Explicit TDB→TT conversion uses canonical tempoch; tolerances remain 1e-10 AU and 1e-4 km. These check matching physical targets/centers. Existing CSPICE DE440 kernel excerpts/reference CSVs and their strict tolerances are unchanged; MOON_ME / MOON_PA observation tests pass. No existing numerical expectations or tolerances required replacement.

Additional tests cover spherical dictionary rejection, legacy pickle rejection under every supported protocol, valid analytical coordinate round trips, combined transform validation and Python exceptions for all five runtime query methods outside coverage.

Tests and CI

  • Rust formatting, strict all-target/all-feature locked Clippy, independent consumer Clippy: passed.
  • cargo test --all-targets --all-features --locked: 12 passed; cargo test --doc --locked: passed (no Rust doctests).
  • Installed Maturin wheel and independent consumer on CPython 3.14: 461 pytest cases passed, 1 optional full-kernel test skipped. Python facade branch/line coverage 100%; compiled Rust is not measured by this Python coverage figure.
  • Ruff formatting/lint and release-policy/citation/changelog guards: passed.
  • cargo package --locked and guarded publication dry-run: passed without upload, including a consumer rebuilt from the packaged crate.
  • Isolated PEP 517 source-distribution rebuild with fresh Cargo home and clean venvs: 288 passed; installed version, dependency metadata and canonical tempoch identity checks passed.
  • CI on f2c9e4b: all 15 checks passed, including Python 3.9–3.14, bridge contracts on Linux/macOS/Windows, package/wheel/sdist validation and coverage.
  • Frame, center, time-period and analytical lunar-surface examples execute successfully against the installed wheel.

The optional full-kernel test requires SIDERUST_LUNAR_KERNEL_DIR with the original NAIF kernel set; normal CSPICE reference/excerpt tests run offline and passed.

Release preparation

Cargo/Python manifests, citation, lockfile, README, interop/lunar documentation and an undated dedicated [0.9.0] changelog are consistent. [Unreleased] remains available without duplicate entries. The PyPI name remains siderust; the Rust crate remains siderust-py. Installed __version__ is 0.9.0, and siderust.time exports the exact tempoch objects.

No core repository changes, new PR, merge, tag, publication or GitHub Release. Maintainer retains merge/release control.

@VPRamon
VPRamon force-pushed the fix/distinguish-lunar-frame-identities branch from 8d99d6c to f2c9e4b Compare October 31, 2026 21:58
@VPRamon VPRamon changed the title fix: distinguish analytical lunar frames from principal axes fix: align lunar frames with siderust 0.18 and prepare v0.9.0 Oct 31, 2026
@VPRamon
VPRamon merged commit 8499a82 into main Oct 31, 2026
15 checks passed
@VPRamon
VPRamon deleted the fix/distinguish-lunar-frame-identities branch October 31, 2026 22:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant