nyx-space / anise

ANISE provides a toolkit and files for Attitude, Navigation, Instrument, Spacecraft, and Ephemeris data. It's a modern replacement of the NAIF SPICE toolkit.
Mozilla Public License 2.0
48 stars 8 forks source link

Trajectory structure and event finding #147

Open ChristopherRabotin opened 6 months ago

ChristopherRabotin commented 6 months ago

High level description

New feature

I've put a substantial amount of work into the Trajectory type in Nyx. Quite frankly, it's extremely useful, and it should be ported to ANISE.

This will include event finding, which is very robust (Brent solver) and one of the main features of the trajectory structure.

To make this generic over an Orbit structure, I export the trait bounds as is recommended by PyO3: https://pyo3.rs/v0.20.0/trait_bounds .

One of the main limitations of using the Trajectory structure in Python in Nyx is that it cannot be pickled. This sounds like it shouldn't be a big deal, but Kedro (among other frameworks) will pickle data between computational steps. As such, I think that pythonize would be useful, where the serialized representation of the structure is used as a proxy. In Nyx, I rely on using the parquet intermediate file, but that isn't convenient.

Once I tackle https://github.com/nyx-space/nyx/issues/86, I'll have a better idea on how to integrate Nyx's Spacecraft object with ANISE's Orbit object. Nyx relies on spacecraft trajectories in several spots (e.g. orbit determination of spacecraft instead of just of their orbits): that feature must remain.

Requirements

Test plans

Grab those from Nyx.

Design

Move the Nyx implementation in full.

ChristopherRabotin commented 2 weeks ago

https://pyo3.rs/v0.21.0/trait-bounds.html - updated documentation