Releases: nyx-space/nyx
🚀 2.0.0-rc: SPICE/ANISE as backend for ephemeris and frame rotation + major orbit determination improvements 🚀
Nyx Astrodynamics Toolkit -- 2.0.0-rc: ANISE as a backend
🚀 This is monumental release 🚀
This release represents years of work and innovation. The primary motivation behind ANISE was to provide multi-threaded SPICE support in Nyx, and it has culminated in this significant update. Additionally, this release aligns with the goals set for hifitime version 4.0.0-alpha, which has been in planning for over a year.
I am excited to share this major update with the community and look forward to your feedback and contributions. Thank you for your continued support and interest in the Nyx Astrodynamics Toolkit! Always feel to contact me directly via this form.
New features
- All planetary ephemeris computations, all reference frame rotations, all planetary constants, all fixed planetary rotations (e.g. J2000 to J2000 Ecliptic) now rely entirely on ANISE. ANISE is validated to match NASA/NAIF SPICE to machine precision for all ephemeris computations. ANISE is validated to match SPICE on all rotation computations to less than 1e-8 degree for all planetary centric body fixed rotations. In short, ANISE is a full rewrite of SPICE, and you should use it. This is a essentially a rewrite and therefore is a major breaking change. Cf. Rewrite of Nyx to rely on ANISE for planetary data and frame transformations by @ChristopherRabotin in #305
- Orbit determination results now export 1-sigma uncertainties for most spacecraft state information, including all Keplerian orbital elements. This approach uses hyperdual numbers / automatic differentiation for rotating the covariance into the new state space.
- Examples Added: Nyx now includes examples on how to use the toolkit. These examples were held off until 2.0.0 due to the significant changes expected after integrating ANISE. Check out the examples here -- #328
Removed functionalities
- Orbit Propagation Changes: It is no longer possible to propagate only an orbit; only full spacecraft can be propagated. While support for specific types can still be trivially implemented, none have been added yet. Consequently, orbit determination now only works on the spacecraft type, and estimation of the coefficient of reflectivity and drag will be added for stable 2.0.0.
- Python Interface Temporarily Unavailable: The 2.0.0-rc release is not available in Python. The Python interface will be re-enabled for version 2.0.0.
What's Changed
- Trying to allow re-release manually by @ChristopherRabotin in #255
- Expose SNC configuration to Python by @ChristopherRabotin in #257
- Quickfix/residuals plot by @ChristopherRabotin in #259
- Update shadow-rs requirement from 0.24.0 to 0.25.0 by @dependabot in #262
- Revamp tracking schedule building by @ChristopherRabotin in #261
- Increase tolerance on xhat dev test by @ChristopherRabotin in #265
- Prevent calling every_between out of bounds by @ChristopherRabotin in #266
- Remove duplicate entries in loading trajectories by @ChristopherRabotin in #267
- Update shadow-rs requirement from 0.25.0 to 0.26.0 by @dependabot in #268
- Update polars requirement from 0.35.0 to 0.36.2 by @dependabot in #269
- Export
Strand
and add get_all set_all to TrkConfig by @ChristopherRabotin in #270 - Update parquet requirement from 49.0.0 to 50.0.0 by @dependabot in #271
- Improve error handling with snafu and eliminate panic calls by @ChristopherRabotin in #273
- Lazy evaluation on avail error list by @cmleinz in #274
- Update polars requirement from 0.36.2 to 0.37.0 by @dependabot in #277
- Add gawk dependency for vscode by @ChristopherRabotin in #278
- Update enum-iterator requirement from 1.4.0 to 2.0.0 by @dependabot in #281
- Update polars requirement from 0.37.0 to 0.38.0 by @dependabot in #282
- Update shadow-rs requirement from 0.26.0 to 0.27.0 by @dependabot in #283
- Testing hifitime 4.0.0-dev by @ChristopherRabotin in #294
- Updates to drag units by @jake-asquith-spire in #298
- Update shadow-rs requirement from 0.27.0 to 0.28.0 by @dependabot in #303
- Update polars requirement from 0.39.2 to 0.40.0 by @dependabot in #304
- Update rstest requirement from 0.19.0 to 0.21.0 by @dependabot in #307
- Try to switch to llvm-cov for coverage by @ChristopherRabotin in #314
- Various clean ups by @ChristopherRabotin in #318
- Update shadow-rs requirement from 0.28.0 to 0.29.0 by @dependabot in #321
- Update polars requirement from 0.40.0 to 0.41.2 by @dependabot in #319
- Use released ANISE and Hifitime versions by @ChristopherRabotin in #323
- Cleanup Cargo.toml and project for release by @ChristopherRabotin in #324
New Contributors
- @jake-asquith-spire made their first contribution in #298
Full Changelog: 2.0.0-beta.0...2.0.0-rc
Version 2.0.0-beta.0: Minor Python usability enhancements
Summary
Progress toward 2.0.0, mostly related to the Python interface and speeding up of import/export of CCSDS OEM files, cf. #183 , #189, #206.
What's Changed
- Add maintenance template and update pyo3 to 0.18 by @ChristopherRabotin in #170
- Simplify
between_0_360
&between_pm_x
fromsrc/utils.rs
by @ThibFrgsGmz in #171 - (doc/test) improve
r1/r2/r3
rotation matrix by @ThibFrgsGmz in #176 - (feat) improve
rss_errors()
using a functional programming approach by @ThibFrgsGmz in #177 - (feat) refactor
are_eigenvalues_stable
by @ThibFrgsGmz in #178 - (test) add UT case "diagonal with zero diagonal element" by @ThibFrgsGmz in #172
- Build a docker package for development and using in Python by @ChristopherRabotin in #182
- Improve Vector Operations, Normalization and Capitalization by @ThibFrgsGmz in #180
- Export CCSDS OEM and slight performance improvement on importing them by @ChristopherRabotin in #184
- (feat) breakdown Lambert::stardard() function by @ThibFrgsGmz in #185
- Update arrow requirement from 41.0.0 to 42.0.0 by @dependabot in #187
- (feat) make
tilde_matrix
(skew-symmetric matrix) more idiomatic by @ThibFrgsGmz in #173 - Mean motion based propagation from Python by @ChristopherRabotin in #191
- Fix doc tests by @ChristopherRabotin in #193
- Fix read/write OEM in other frames by @ChristopherRabotin in #194
- Add units to all state parameters by @ChristopherRabotin in #195
- Update arrow requirement from 42.0.0 to 43.0.0 by @dependabot in #196
- Update rstest requirement from 0.17.0 to 0.18.1 by @dependabot in #198
- Prevent parsing of covariance by @ChristopherRabotin in #199
- Update typed-builder requirement from 0.14.0 to 0.15.0 by @dependabot in #200
- Update polars requirement from 0.30.0 to 0.31.1 by @dependabot in #201
- Update parquet requirement from 43.0.0 to 44.0.0 by @dependabot in #203
- Limit usage of std::Instant to non-wasm targets by @TilBlechschmidt in #205
- Export trajectory addition and frame conversion to Python by @ChristopherRabotin in #207
- Update arrow requirement from 44.0.0 to 45.0.0 by @dependabot in #208
- Plot trajectory in ric frame by @ChristopherRabotin in #211
- Update polars requirement from 0.31.1 to 0.32.1 by @dependabot in #213
- Support pickling of a number of important structures to Python by @ChristopherRabotin in #216
- Update rust-embed requirement from 6 to 8 by @dependabot in #217
- Update typed-builder requirement from 0.15.0 to 0.16.0 by @dependabot in #220
- Relax tracking sim from Python by @ChristopherRabotin in #221
- Measure performance with flamegraph by @ChristopherRabotin in #224
- Hotfix: Fix traj retain in ODP by @ChristopherRabotin in #225
- Exposing iteration of OD to Python by @ChristopherRabotin in #226
- Update prost requirement from 0.11 to 0.12 by @dependabot in #228
- Update prost-derive requirement from 0.11 to 0.12 by @dependabot in #227
- Fix potential index error if traj epoch does not align in RIC computation by @ChristopherRabotin in #229
- Deps/update 2023 09 by @ChristopherRabotin in #230
- Update toml requirement from 0.7 to 0.8 by @dependabot in #231
- Update shadow-rs requirement from 0.23.0 to 0.24.0 by @dependabot in #235
- Update polars requirement from 0.32.1 to 0.33.2 by @dependabot in #232
- Update parquet requirement from 46.0.0 to 47.0.0 by @dependabot in #233
- Update rstats requirement from 1.2.50 to 2.0.1 by @dependabot in #236
- Update typed-builder requirement from 0.16.0 to 0.17.0 by @dependabot in #240
- Fix clippy lints by @cmleinz in #246
- Update pyo3-log requirement from 0.8.2 to 0.9.0 by @dependabot in #241
- Update polars requirement from 0.33.2 to 0.34.2 by @dependabot in #245
- Update parquet requirement from 47.0.0 to 48.0.0 by @dependabot in #244
- Update typed-builder requirement from 0.17.0 to 0.18.0 by @dependabot in #242
- Update parquet requirement from 48.0.0 to 49.0.0 by @dependabot in #249
- Update polars requirement from 0.34.2 to 0.35.0 by @dependabot in #251
- Update to hifitime 3.8.5, PyO3 to 0.20 by @ChristopherRabotin in #252
- Update pyo3 requirement from 0.19.0 to 0.20.0 by @dependabot in #238
- Add loads to TrkConfig by @ChristopherRabotin in #253
New Contributors
- @TilBlechschmidt made their first contribution in #205
- @cmleinz made their first contribution in #246
Full Changelog: 2.0.0-alpha.2...2.0.0-beta.0
Version 2.0.0-alpha.2: Fix trajectory loading from Python and OEM with duplicate epochs
What's Changed
- Update Cargo.toml by @baoyachi in #165
- Fix trajectory loading from Python by @ChristopherRabotin in #169
New Contributors
Full Changelog: 2.0.0-alpha.1...2.0.0-alpha.2
Version 2.0.0-alpha.1: Minor Python usability enhancements
What's Changed
- Update shadow-rs requirement from 0.21.0 to 0.22.0 by @dependabot in #157
- Update polars requirement from 0.29.0 to 0.30.0 by @dependabot in #158
- Minor Python enhancements by @ChristopherRabotin in #161
Full Changelog: 2.0.0-alpha...2.0.0-alpha.1
Version 2.0.0-alpha: Python + more realistic OD noise models + OD estimation flexibility + Export to Parquet and CCSDS OEM
Version 2.0.0-alpha
This is a big release!
First, working from @thomasantony 's work, Nyx now has Python bindings. I expect that most users will want to use the Python bindings directly instead of developing in Rust. Even in my limited experience with the Nyx library in Python, it enables for much faster iteration from a mission analysis or orbit determination engineer point of view. The package is available on pypi so you can run pip install nyx_space
. Expect to see some iteration on how this work with version 2.0.0-beta
, most notably for changes to how ephemeris and orientation files are used.
Second, no more CSV exports. Nyx now exports (and imports) everything in Parquet files: this allows for very easy interoperability with dataframes, thereby allowing users to create, modify, or search data using pandas, polars. Note that Nyx leverages the metadata of these parquet files to store additional information (like ground station configuration in the simulation of orbit determination measurements), but writing that is not yet supported in neither pandas or polars (but pyarrow supports it).
Third, the orbit determination code has been heavily refactored. This work enables estimation of different state sizes: this will allow estimating the biases in the transponders, or the coefficient of reflectivity of a vehicle (these functionalities aren't yet implemented, cf. #94 ). It also allows for online measurement rejection: for example, if the residual ratio of a measurement is more than 3-sigmas away from the mean residual, it can be rejected on the fly instead of having to manually remove it from the list of measurements. The refactoring also now includes a first order Gauss Markov process for noise modeling. This is the industry standard: a time correlated noise with a user-provided time constant, and a constant noise floor. That said, if one wants different noises, they can now write them directly in a measurement parquet file in Python, and have Nyx ingest that!
Fourth, the big thing that is lacking in Nyx, and in this release, is documentation. To acknowledge that, there's now a Github issue template to request better documentation. It'll likely only be done in https://github.com/nyx-space/nyx/milestone/7 since version 2.0.0-beta will bring in a number of other breaking changes. Jump into @ThibFrgsGmz 's discussion here as well: #137 . On his recommendation, Nyx will use the Diataxis documentation method.
What's Changed
- Initial Python bindings by @ChristopherRabotin in #114
- Update shadow-rs requirement from 0.20.0 to 0.21.0 by @dependabot in #123
- [WIP] Demo of boolean combination of events and trajectories now in parquet only by @ChristopherRabotin in #126
- (doc) add synthax coloring to codeblocks by @ThibFrgsGmz in #135
- (feat) add f-string formatting by @ThibFrgsGmz in #136
- Significant improvements in noise modeling by @ChristopherRabotin in #129
- Add online measurement rejection by @ChristopherRabotin in #145
- High fidelity noise models for orbit determination by @ChristopherRabotin in #146
- Update pretty_env_logger requirement from 0.4 to 0.5 by @dependabot in #148
- Various usability enhancements for Python user by @ChristopherRabotin in #149
- Export OD results in Parquet by @ChristopherRabotin in #147
- Add support for WASM targets by @thomasantony in #153
- Fix #154 by @ChristopherRabotin in #155
New Contributors
- @ThibFrgsGmz made their first contribution in #135
- @thomasantony made their first contribution in #153
Full Changelog: 1.1.2...2.0.0-alpha
Hotfix release: Update to nalgebra 0.32
What's Changed
- MathSpec link has moved by @larsnaesbye in #80
- Add github workflow with coverage by @ChristopherRabotin in #100
- Update dialoguer requirement from 0.8 to 0.10 by @dependabot in #103
- Update num requirement from 0.3 to 0.4 by @dependabot in #102
- Update prost requirement from 0.7 to 0.11 by @dependabot in #109
- Update toml requirement from 0.5 to 0.7 by @dependabot in #105
- Update prost-derive requirement from 0.7 to 0.11 by @dependabot in #104
- Replace unmaintained actions-rs/cargo actions in CI workflows by @striezel in #117
- Fix some typos by @striezel in #115
- Replace unmaintained actions-rs/toolchain actions in CI workflows by @striezel in #116
- Hotfix for versioning issue by @ChristopherRabotin in #118
New Contributors
- @larsnaesbye made their first contribution in #80
- @dependabot made their first contribution in #103
- @striezel made their first contribution in #117
Full Changelog: 1.0.0...1.1.2