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.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Python interface

ChristopherRabotin opened this issue · comments

High level description

New feature

This will add a Python interface and automatically publish the package to PyPi. Python is the simplest way to reach lots of folks.

Requirements

  • Load files
  • Unload files (might not be trivial from Python!)
  • Query BSP and SPK files
  • Build orbits (needed for nyx-space/nyx#86)
  • Transform newly created states via loaded

Test plans

  • Add python tests that seemingly cover all of the functionality (I'm not sure that coverage analysis can be done since we're crossing the language barrier)

Design

This is the design section. Each subsection has its own subsection in the quality assurance document.

Algorithm demonstration

If this issue requires a change in an algorithm, it should be described here. This algorithm should be described thoroughly enough to be used as documentation. This section may also simply refer to an algorithm in the literature or in another piece of software that has been validated. The quality of that reference will be determined case by case.

API definition

Define how the ANISE APIs will be affect by this: what are new functions available, do any previous function change their definition, why call these functions by that name, etc.

High level architecture

Document, discuss, and optionally upload design diagram into this section.

Detailed design

The detailed design *will be used in the documentation of how ANISE works.

Feel free to fill out additional QA sections here, but these will typically be determined during the development, including the release in which this issue will be tackled.

This should take inspiration from Pydantic and how they implement the Python interface. Polars uses a different method, so I should look into it as well, but I worry it's a fully custom implementation. If so it's a lot of work and a big api difference. Both Nyx and hifitime have the feature flag that works quite well, although a number of features are not available in Python in the case of Nyx.

https://github.com/pydantic/pydantic-core/blob/main/src/lib.rs