Skip to main content

brahe/
lib.rs

1/*!
2# Brahe
3Brahe is a modern satellite dynamics library for research and engineering
4applications. It is designed to be easy-to-learn, high-performance, and quick-to-deploy.
5The north-star of the development is enabling users to solve meaningful problems
6and answer questions quickly, easily, and correctly.
7
8The key features of the library are:
9
10- **Intuitive API**: API designed to be easily composable, making it easy to
11  solve complex problems correctly by building on core functionality.
12- **Easy-to-Learn**: Designed to be easy to use and learn. The objective is
13  to provide clear documentation and visibility into what the software is doing
14  so that users don't need to spend time reverse engineering internal routines
15  and more time solving their own problems.
16- **High-Performance**: Brahe provides a Python 3.6+ wrapper that is
17  auto-generated from a core Rust library. This provides fast core implementation,
18  while allowing users to take advantage of Python's rich scientific ecosystem
19  if they so choose.
20- **Answer Questions Quickly**: Brahe is designed to make it easy to code up
21  solutions to meaningful problems. High-fidelity, high-performance APIs are not
22  the end-objective, but helping users solve their problems.
23
24Brahe gets its name from the combination of Rust and astrodynamics (Rust +
25astrodynamics = Brahe). The library specifically focuses on satellite astrodynamics
26and space mission analysis. While the underlying concepts have been studied and known since
27Kepler wrote down his three laws, there are few modern software
28libraries that make these concepts easily accessible. While extremely well tested,
29other astrodynamics and mission analysis software can have an extremely steep
30learning curve, making it difficult to quickly run simple analysis that is known
31to be correct.
32
33Because of this, students, researchers, and engineers frequently end up
34reimplementing common astrodynamics and mission analysis tools with unfortunately
35frequent regularity. While  reimplementation of common code can be a good learning
36mechanisms, in most cases it is both error-prone and costs time better spent
37on other endeavours. This project seeks to providing an easy-to-use,
38well-tested library, to enable everyone to more easily, and quickly
39perform astrodynamics and space mission analysis without sacrificing performance
40or correctness. The software built in Rust for performance with bindings to
41Python for ease of use.
42
43The implementation approach is opinionated, the objective is to provide an
44easy-to-use and accurate astrodynamics library to enable users to quickly
45and correctly solve most common problem types. it is not practical to try to
46implement _every_ aerodynamics model and function utilized in practice or historically.
47Since Brahe is open source, if a specific function is not present, or a different
48implementation is required, users can modify the code to address their specific
49use case. This means that Brahe, while we want to continue expanding the
50capabilities of the module over time, the immediate goal is to provide a well-tested,
51flexible, composable API to quickly address modern problems in astrodynamics.
52
53One example of this in practice is that the built-in Earth reference frame transformation
54utilizes the IAU 2006/2000A precession-nutation model, CIO-based transformation.
55Even through there are multiple ways to construct this transformation, Brahe
56only implements one. Another example, is that the geodetic and geocentric
57transformations use the latest NIMA technical report definitions for Earth's radius and flatness.
58If a desired model isn't implemented users are free to extend the software to
59address and functionality or modeling gaps that exist to address their specific application.
60
61## Documentation
62
63You can find the package documentation [here](https://duncaneddy.github.io/brahe).
64This documentation is meant to provide a human-friendly walk through of the
65software and package. Brahe is currently in the early stages of development so
66the documentation will likely not be complete. Sections marked **[WIP]**
67will have some software functionality implemented but not be considered
68documented.
69
70The most complete API reference guide will always be the Rust crate API
71reference, found on [crates.io](https://docs.rs/brahe/). This is always up-to-date with the latest release
72since it is autogenerated at build time during the release process.
73
74## Software Usage and License
75
76The Brahe package is licensed and distributed under an [MIT License](https://github.com/duncaneddy/brahe/blob/main/LICENSE) to
77encourage adoption and to make it easy to integrate with other tools.
78
79The only thing asked is that if you do use the package in your work, or
80appreciate the project, either send a message or star the project. Knowing
81that the project is being actively used is a large motivator for continued
82development.
83
84## Support and Acknowledgement
85
86Brahe is currently being developed primarily for my own enjoyment and
87because I find having these tools helpful in professional and hobby work. I plan to
88continue developing it for the time being regardless of greater adoption as time permitting.
89
90That being said, it's incredibly encouraging and useful to know if the
91software is being adopted or found useful in wider practice. If you're
92using Brahe for school, research, or a commercial endeavour, I'd
93love to know about it! Tweet me [@duncaneddy](https://twitter.com/DuncanEddy) or
94email me at duncan.eddy (at) gmail.com.
95 */
96
97// This enables the use of the coverage attribute which turns
98// off erroneous coverage miss reporting in test blocks
99#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
100
101// Re-export commonly used types
102pub use access::*;
103pub use attitude::*;
104pub use constants::*;
105pub use coordinates::*;
106pub use datasets::*;
107pub use earth_models::*;
108pub use eop::*;
109pub use frames::*;
110pub use integrators::*;
111pub use math::*;
112pub use orbit_dynamics::*;
113pub use orbits::*;
114pub use propagators::*;
115pub use relative_motion::*;
116pub use space_weather::*;
117pub use time::conversions::*;
118pub use time::*;
119pub use trajectories::*;
120
121// Module declarations
122pub mod access;
123// Note: celestrak and spacetrack are not glob-re-exported since they use
124// client patterns that should be accessed via brahe::celestrak::* or brahe::spacetrack::*
125pub mod attitude;
126pub mod celestrak;
127pub mod constants;
128pub mod coordinates;
129pub mod datasets;
130pub mod earth_models;
131pub mod eop;
132pub mod events;
133pub mod frames;
134pub mod integrators;
135pub mod math;
136pub mod orbit_dynamics;
137pub mod orbits;
138pub mod propagators;
139pub mod relative_motion;
140pub mod space_weather;
141pub mod spacetrack;
142pub mod time;
143pub mod trajectories;
144pub mod types;
145pub mod utils;
146// Centralized traits module - re-exports all public traits
147pub mod traits;
148
149#[cfg(feature = "python")]
150mod pymodule;