Releases: nyx-space/anise
0.6.1: Python multithreading, unit vector querying, beta angle
New features
- Introduce Unit Vector functions by @gwbres in #446
- Add beta angle computation by @ChristopherRabotin in #452
- Enable Rust multithreading speeds for Python: search for the
many
keyword in the functions by @ChristopherRabotin in #454
Dependencies
- Update tabled requirement from =0.19 to =0.20 by @dependabot in #448
Full Changelog: 0.6.0...0.6.1
ANISE 0.6.0: Faster Hermite Interpolation (Type 13), Hifitime 4.1.0 & Enhanced Fuzz Testing
Summary
ANISE version 0.6.0 is a minor release primarily focused on dependency management for Rust users. Importantly, this update does not introduce breaking changes to the ANISE binary file format (PCA/EPA). Files generated with version 0.5.4 remain fully compatible with version 0.6.0. Furthermore, any new PCA/EPA files created using ANISE 0.6.0 will retain the 0.4 versioning, consistent with the 0.5.x series.
This release brings several improvements to error handling and parsing robustness, fixes critical bugs related to item parsing and state translation, and introduces a new regression test. Key dependency versions have also been updated.
Detailed Change Log
New Features
- Add AER regression test; freeze Earth high prec BPC used in AER test by @ChristopherRabotin in #438
Improvements
- Update kpl/fk key extraction to return -1 if unwrap fails by @SwitchbackEngineer in #414
- Update kpl/tpc key extraction to return -1 if unwrap fails by @SwitchbackEngineer in #416
- Update error message on malformed dataset + fix tests for PRs from forks by @ChristopherRabotin in #419
- Skip over non-UTF8 lines during kpl parsing by @SwitchbackEngineer in #425
- Error Handling for FK Item Conversion by @SwitchbackEngineer in #427
- Error Handling for TPC Item Conversion by @SwitchbackEngineer in #429
- Cosmetic: Add pair count to validation; update version in anise-fuzz by @ChristopherRabotin in #430
- Use registry for hermite type 13 by @ChristopherRabotin in #439
- Duplicate python sig for newer pyo3 by @ChristopherRabotin in #443
Bug Fixes
- FK Item Parsing Crashes if Body ID is Empty by @SwitchbackEngineer in #412
- Almanac load_from_bytes Fails Fuzz Tests by @SwitchbackEngineer in #418
- Fix bug in
translate_state
for custom input vectors by @ChristopherRabotin in #433
Dependencies
- Update egui_logger requirement from 0.6.3 to 0.7.0 by @dependabot in #422
- Update criterion requirement from 0.5 to 0.6 by @dependabot in #432
- Prepare for hifitime v4.1.0 by @gwbres in #440
New Contributors
- @SwitchbackEngineer made their first contribution in #412
Full Changelog: 0.5.4...0.6.0
0.5.4: Fuzz testing + TPC parsing fix
Announcement: ANISE 0.5.4 Released! 🎉
We're excited to announce the release of ANISE v0.5.4, our modern Rust implementation of NASA's SPICE toolkit with Python bindings!
This release brings significant under-the-hood improvements focused on robustness and reliability. The biggest highlight is the introduction of extensive fuzz testing. We've added dozens of fuzz targets that continuously bombard ANISE's core components – including file parsers (SPK, BPC, text kernels), data structures, and calculations – with random data to shake out bugs and edge cases before they reach you. Huge thank you to @jonathan-g-davis for these tests!
Key changes in v0.5.4 include:
- 🚀 Enhanced Robustness: Comprehensive fuzz testing suite added across the library.
- 🔧 Dependency Refresh: Replaced the
reqwest
HTTP client with the lighter-weightureq
for fetching remote data, potentially improving build times. Updated core dependencies liketabled
,rstest
, and GUI libraries (egui
/eframe
). - 🐛 Bug Fixes: Corrected an issue with Text PCK (TPC) file conversion. Improved KPL parsing to handle SPICE 'D' exponents.
- ⚙️ Build Adjustments: We've temporarily removed the build for Linux
aarch64
Python wheels. We'll re-evaluate adding this back in the future. Other CI processes for artifact handling and testing have been refined. - 🧹 Data Management: Removed large embedded ephemeris files from the repository to reduce bloat, favoring on-demand downloads. Added new example TPC and BSP files.
- ✨ Minor Improvements: Increased capacity for planetary constants, refined interpolation math, and improved error messages.
This release makes ANISE more reliable and maintainable, paving the way for future feature development.
As always, please report any issues you encounter. Thank you for using ANISE!
Detailed Changelog
This release focuses on improving robustness through fuzz testing, updating dependencies, refining build processes, and fixing specific issues.
✨ Features & Enhancements
- Fuzz Testing: Added a comprehensive fuzz testing suite (
anise/fuzz
) targeting various components including file parsing (SPK, BPC, KPL), data structures, almanac operations, and mathematical functions (rotation, interpolation) to significantly improve code robustness and uncover edge cases. - Dependency Update (HTTP Client): Replaced
reqwest
withureq
for HTTP requests inmetaload
andembed_ephem
features.ureq
is a smaller dependency, potentially reducing compile times and binary size. - Improved KPL Parsing: Text Kernel (TPC, FK) parser now handles SPICE-style 'D' floating-point exponents (e.g.,
1.23D+05
) correctly and trims whitespace before parsing floats. - Increased Planetary Data Capacity: Doubled the maximum number of planetary data entries the Almanac can hold (
MAX_PLANETARY_DATA
from 64 to 128). - Code Refinements:
- Used
div_ceil
for potentially more robust integer division in Hermite interpolation and DAF file record calculations. - Refactored KPL parsing and conversion logic into smaller, reusable functions (
parse_bytes
,convert_tpc_items
,convert_fk_items
). - Improved error message clarity for I/O errors.
- Used
🐛 Bug Fixes
- TPC Conversion: Fixed an issue related to converting multiple TPC files, particularly when overwriting the output file. Added
test_convert_tpc
to verify, thanks @translunar for the test case and for your patience!
⚙️ Build & CI
- Removed Linux aarch64 Wheels: Temporarily removed the build target for Linux ARM64 (
aarch64
) wheels due to potential build complexities with theureq
switch -- please open a bug report if this causes an issue for your use cases. - Improved Artifact Handling: Updated PyPI publishing workflow to correctly download and merge all wheel artifacts before uploading.
- Dependency Management: Switched from GitHub
secrets
tovars
for accessing test data paths (e.g.,LAGRANGE_BSP
) in CI, likely reflecting a change in sensitivity or access pattern. This allows external contributions' CI tests to run the Lagrange interpolation tests. - Dependency Updates:
tabled
: 0.17 -> 0.19rstest
: 0.24.0 -> 0.25.0eframe
,egui
,egui_extras
: 0.30 -> 0.31 (GUI)egui_logger
: 0.6.2 -> 0.6.3 (GUI)parquet
,arrow
: 54.0.0 -> 55.0.0 (Dev dependency)- Other minor updates via workspace bump.
🧪 Testing
- New Test: Added
test_convert_tpc
to verify TPC file conversion functionality. - Updated Test: Updated expected values in the
type9_lagrange_query
test after updating the underlying BSP in the test - (See Fuzz Testing above)
📊 Data
- Removed Large BSPs: Removed several large DE ephemeris
.bsp
files (DE421, DE430, DE440, DE440s, DE440 type3) from the repository, likely favoring download-on-demand viametaload
or reducing repository size. - Added Test/Example Data: Included
gm_de440.tpc
andgmat-lagrange.bsp
files in the repository.
📚 Documentation
- GUI Build Instructions: Minor clarification in
anise-gui/README.md
regarding the directory from which to run build commands.
Pull request summary
- Try to release 0.5.3 on pypi by @ChristopherRabotin in #387
- Fuzz Test Anise by @jonathan-g-davis in #400
- Fix build instructions for anise-gui by @translunar in #405
- Update arrow requirement from 54.0.0 to 55.0.0 by @dependabot in #402
- Unit test showing convert_tpc not working with gm_de440.tpc by @ChristopherRabotin in #407
- Switch from reqwest to ureq by @ChristopherRabotin in #409
- Update tabled requirement from =0.17 to =0.18 by @dependabot in #384
New Contributors
- @jonathan-g-davis made their first contribution in #400
- @translunar made their first contribution in #405
Full Changelog: 0.5.3...0.5.4
0.5.3: Fix range-rate calculation
New features
None
Bug fixes
- Fix range-rate calculation in azimuth_elevation_range_sez by @ChristopherRabotin in #382
Dev-dep updates
- Update rstest requirement from 0.23.0 to 0.24.0 by @dependabot in #372
- Update polars requirement from 0.45.1 to 0.46.0 by @dependabot in #375
- Update tauri-winres requirement from 0.1 to 0.2 by @dependabot in #374
- Update tauri-winres requirement from 0.2 to 0.3 by @dependabot in #376
Full Changelog: 0.5.2...0.5.3
0.5.2: Fix verbosity of logs + revamp Spacecraft data
New features and improvements
- The almanac's
rotate
androtate_to
functions now exposed to Python. MOON ME/PA of DE421/DE440 now exposed to Python by @ChristopherRabotin in #371
Bug fixes
- SpacercaftData now copy-friendly (no clone needed), add
0x
in front of CRC32 logs, add units to Keplerian element initializers in Rust (was already done in Python) by @ChristopherRabotin in #368 - Renamed SpacecraftData's mass of "fuel" to "prop" since it represents propellant mass, fix extreme verbosity in querying Almanac, renamed fields of Inertia from axes {1, 2, 3} to {X, Y, Z} to follow the CCSDS conventions by @ChristopherRabotin in #369
P.S.: Sorry for the incredibly poor naming of these pull requests. Also sorry for the breaking changes with only a patch release: I don't think anyone actually uses the SpacecraftData structure: ANISE is also used on Blue Ghost mission 1, launching in two weeks, and it's hard to justify upgrading anything but a patch before launch. I probably should have made two separate releases.
Full Changelog: 0.5.1...0.5.2
0.5.1: Add FK rotations in Almanac (Moon ME/PA) + Expose DCM to Python
New features and improvements
- Expose DCM to Python by @ChristopherRabotin in #359
- GUI and description of EPA files by @ChristopherRabotin in #358
Bug fixes
- Fix Moon ME and Moon PA frames by searching for Euler Parameter datasets in rotations by @ChristopherRabotin in #364
Dependencies
The polars dependency is only a dev-dependency. Tabled is not a dev dependency, but it should be backward compatible. PyO3 is a bigger pain to update but that only affects users who re-export the ANISE Python library via Rust.
- Update tabled requirement from =0.16 to =0.17 by @dependabot in #353
- Update polars requirement from 0.43.1 to 0.45.1 by @dependabot in #355
- Update PyO3 to 0.23 + fix possible bug in building EPA files from FK files by @ChristopherRabotin in #365
Full Changelog: 0.5.0...0.5.1
0.5.0: Dependency updates
Versioning
The minor version bump is solely for dependency management for Rust users. This release does not change the format or versioning of the ANISE binary files used in version 0.4. If you used files for 0.4, these are perfectly compatible with version 0.5.0. If you build new PCA/EPA files with version 0.5 of ANISE, these will be versioned as 0.4.
New features and improvements
- Allow 100 nanosecond leeway in querying DAF files by @ChristopherRabotin in #348
Maintenance
- Update pyo3 requirement from 0.21 to 0.22 by @dependabot in #267
- Update to zerocopy 0.8.0 by @ChristopherRabotin in #343
- Add Python type hints by @ChristopherRabotin in #345
- Allow up to 100 ns of leeway on Hermite and Lagrange querying by @ChristopherRabotin in #347
Full Changelog: 0.4.5...0.5.0
0.4.5: Fix type 3 SPK interpolation + various minor improvements
New features and improvements
- Fix Chebyshev type3 by @ChristopherRabotin in #332
- Move logger to within window by @ChristopherRabotin in #334
- Attempt to fix docsrs build with embed ephem by @ChristopherRabotin in #335
- Add icon to gui by @ChristopherRabotin in #338
- Keplerian initializer now allows larger error in convergence by @ChristopherRabotin in #342
Full Changelog: 0.4.4...0.4.5
0.4.4: Validate penumbra and line-of-sight + SPK Type 3 support + more orbit comparison options (VNC, RCN frames)
New features and improvements
- Add spk_ezr function to Almanac to closesly match SPICE's spkezr function + various minor fixes by @ChristopherRabotin in #313
- Add state differencing functionality + VNC and RCN frames include time derivative of the rotation matrix by @ChristopherRabotin in #316
- Support SPK Type 3 chebyshev position and velocity by @ChristopherRabotin in #321
Bug fixes
- Fixing line of sight computation + SPICE validation of penumbra calculator by @ChristopherRabotin in #326
Maintenance
- Update lexical-core requirement from 0.8.5 to 1.0.1 by @dependabot in #317
- Update polars requirement from 0.42.0 to 0.43.1 by @dependabot in #318
- Update rfd requirement from 0.14.1 to 0.15.0 by @dependabot in #322
- Update rstest requirement from 0.22.0 to 0.23.0 by @dependabot in #328
Full Changelog: 0.4.3...0.4.4
0.4.3: Eclipsing, occultation, fix multi-barycenter transformations; various other improvements and fixes
New features / improvements
- Eclipse, line of sight, and occultation computations by @ChristopherRabotin in #307
- Switch to catppuccin theme + egui 0.28 by @ChristopherRabotin in #293
- Refactor CLI code by @cmleinz in #286
- Introduce docrs by @gwbres in #287
- Introduce has_velocity_dynamics by @gwbres in #299
- Copy frames with a new shape by @gwbres in #298
Bug fixes
- Fix/294 metaload lock by @ChristopherRabotin in #305
- Fix transformation when it involved multi-barycenter hops by @ChristopherRabotin in #306
Maintenance
- Update rstest requirement from 0.21.0 to 0.22.0 by @dependabot in #288
- Update tabled requirement from =0.15 to =0.16 by @dependabot in #290
- Update reqwest requirement from 0.11 to 0.12 by @dependabot in #278
- Update nalgebra by @ChristopherRabotin in #292
- Change serde_dhall to be under the metaload feature by @matte1 in #295
- Build --doc without embed_ephem by @gwbres in #291
- Update polars requirement from 0.41.1 to 0.42.0 by @dependabot in #300
- Prep release 0.4.3 by @ChristopherRabotin in #309
New Contributors
- @cmleinz made their first contribution in #286
- @matte1 made their first contribution in #295
- @gwbres made their first contribution in #291
Full Changelog: 0.4.2...0.4.3