Builder-first astrodynamics propagation core with Orekit-native semantics.
Project description
ASTRODYN-CORE
Builder-first astrodynamics tooling that keeps Orekit APIs first-class while adding typed configuration, state-file workflows, and mission-profile helpers.
Current status (2026-02-24)
Implemented:
- Orekit-native propagation providers:
numerical,keplerian,dsst,tle - GEqOE J2 Taylor-series propagator (Python implementation with numpy engine, Orekit adapter, and provider integration)
- Extensible registry for custom/analytical propagators (any string kind)
- Typed propagation configuration and registry/factory construction flow
- Force model, attitude, and spacecraft declarative assembly
- Unified client APIs:
PropagationClient,StateFileClient,TLEClient,MissionClient,UncertaintyClient,EphemerisClient - App-level facade (
AstrodynClient) composing all domain workflows - State I/O: YAML/JSON/HDF5, compact series format, Orekit object conversion
- OEM/OCM/SP3/CPF ephemeris-based propagation
- Scenario maneuver tooling: timeline events, detector-driven execution, intent maneuvers
- STM-based covariance propagation
- Root API organized into three tiers (facade, models, advanced)
- Import hygiene enforced in tests
- Comprehensive examples: quickstart, scenario/mission workflows, uncertainty, multi-fidelity comparisons, force model sweep, OEM parsing, SMA maintenance analysis
Architecture is frozen and ready for extension with custom propagators.
In progress:
- GEqOE J2 Taylor propagator C++ implementation and staged parity testing
Next:
- CI pipeline
- Unscented Transform covariance propagation
Design principles
- Orekit-native semantics stay visible: providers return real Orekit builders/propagators.
- Builder-first API:
PropagatorSpecdrives provider selection and construction. - Registry-based extensibility: new providers can be plugged in without editing core factory logic.
- Single-repo architecture for now (propagation + state/mission workflows).
API tiers (recommended)
Use one of two API tiers based on your goal:
-
Stable facade tier (recommended for most users)
- Start with
AstrodynClient - Use domain facades via
app.propagation,app.state,app.mission,app.uncertainty,app.tle,app.ephemeris - Preferred for notebooks, scripts, and long-lived user code
- Start with
-
Advanced low-level tier (power users)
- Use
PropagatorFactory,ProviderRegistry,BuildContext, typed specs, and assembly helpers directly - Best when you need fine-grained Orekit-native control
- Use
Compatibility note:
- New features should appear in the façade tier first when practical.
- Low-level APIs remain supported for expert workflows.
Quick start
Environment setup (recommended):
python setup_env.py
conda run -n astrodyn-core-env python -m pip install -e .[dev]
Run code and tests in the project Conda env (astrodyn-core-env):
conda run -n astrodyn-core-env pytest -q
To inspect skipped tests (for example, missing orekit in the wrong interpreter):
conda run -n astrodyn-core-env pytest -q -rs
Environment policy:
- Use
conda run -n astrodyn-core-env ...for Python commands, builds, and tests - Avoid the system Python for this repo unless intentionally debugging env issues
- Orekit-backed tests should also run in the same env
Convenience shortcuts (optional):
make help
make install-dev
make test
make test-transition
from astrodyn_core import (
AstrodynClient,
BuildContext,
IntegratorSpec,
PropagatorKind,
PropagatorSpec,
)
app = AstrodynClient()
spec = PropagatorSpec(
kind=PropagatorKind.NUMERICAL,
mass_kg=1200.0,
integrator=IntegratorSpec(
kind="dormand_prince_853",
min_step=0.001,
max_step=300.0,
position_tolerance=10.0,
),
)
ctx = BuildContext(initial_orbit=initial_orbit, position_tolerance=10.0)
builder = app.propagation.build_builder(spec, ctx)
propagator = builder.buildPropagator(builder.getSelectedNormalizedParameters())
states = app.state
Examples
Run from the project root:
conda run -n astrodyn-core-env python examples/quickstart.py --mode all
conda run -n astrodyn-core-env python examples/scenario_missions.py --mode all
conda run -n astrodyn-core-env python examples/uncertainty.py
conda run -n astrodyn-core-env python examples/geqoe_propagator.py --mode all
Cookbook
Self-contained topical examples in examples/cookbook/:
multi_fidelity_comparison.py— Compare Keplerian, DSST, and numerical propagation fidelityorbit_comparison.py— Cartesian to Keplerian round-trip verificationforce_model_sweep.py— Gravity field degree/order convergence analysisephemeris_from_oem.py— OEM file parse and ephemeris round-tripsma_maintenance_analysis.py— Full SMA maintenance mission workflow (scenario → detector execution → analysis)
Parity/comparison tools:
geqoe_cpp_order1_parity.py— Validate C++ staged GEqOE against Python referencegeqoe_legacy_vs_staged.py— Compare legacy vs optimized GEqOE implementationsmath_cpp_comparison.py— Verify C++ math utils against Python equivalents
State-file examples
examples/state_files/leo_initial_state.yamlexamples/state_files/leo_state_series.yamlexamples/state_files/leo_mission_timeline.yamlexamples/state_files/leo_intent_mission.yamlexamples/state_files/leo_detector_mission.yamlexamples/state_files/leo_sma_maintenance_timeline.yaml
Generated artifacts from examples are written to:
examples/generated/
Planning docs
- Implementation plan and architecture:
docs/implementation-plan.md - API governance and boundary policy:
docs/api-governance.md - Extension guide for custom propagators:
docs/extending-propagators.md - Architecture hardening and finalization roadmap (archived after v1.0 completion):
docs/archive/architecture-hardening-plan.md
Developer command shortcuts (Makefile)
This repository includes a lightweight Makefile for developer task shortcuts
only (tests, examples, install helpers). It does not replace the native build
configuration in CMakeLists.txt.
CMakeLists.txtconfigures native/C++ buildsMakefileprovides ergonomic wrappers likemake testandmake test-transition
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file astrodyn_core-1.0.0.tar.gz.
File metadata
- Download URL: astrodyn_core-1.0.0.tar.gz
- Upload date:
- Size: 2.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5de44497b74cc85971a02d0c3287d6663b65bd34c97818552f530593b410c44
|
|
| MD5 |
f58070be0bd256617af16d1f01581aef
|
|
| BLAKE2b-256 |
c92854173b3ac4dd758e59a379da84c34823c5a806d6aef43c12e4a30804ffe3
|
File details
Details for the file astrodyn_core-1.0.0-cp311-cp311-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: astrodyn_core-1.0.0-cp311-cp311-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.11, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ce0c474f64800af48bb658c1f9640a49e2b99cb4922a83912104758a1f697f9
|
|
| MD5 |
03c32ab4290d449a4b22ead58fdd3c49
|
|
| BLAKE2b-256 |
f2b7837fede21a7f19d80ee980d2dad2fc3b8cf5f0bd61c4dcbc56d80847ac84
|