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