This file tries to regroup all notable modifications of the beyond
library.
Each release is linked to a git commit.
- Python 3.11, 3.12 and 3.13 support
- Differentiation between osculating and mean orbit objects
- Eckstein-Hechler analytical propagator
- LVLH local orbital reference frame
- Yamanaka-Ankersen Rendez-vous and Proximity Operations propagator
- MoonEclipse Listener to detect, well..., eclipses of the sun by the moon, as seen from a satellite
- A bunch of tests were created or given more robustness
- Change in propagator subpackage structure, now grouped by categories
- Build process handled by pyproject.toml
- Rotation rate
- Impulsive maneuvers are integrated at their exact date
- Beyond is no longer tested with python 3.6, but should still work
- B-plane computation for planetary capture of flyby
- Generic Lagrange and linear interpolators
- CCSDS : OEM and OMM optional fields are now optionals
- Consistency of API between impulsive and continuous thrusts
- Simplification of frame transition matrices
- Printing a TLE object display its name, if available
- CCSDS : TDM de-duplication of code
- CCSDS : OEM interpolation degree
- Improve error messages
- Altitude of periapsis/apoapsis in Info object
- Python 3.10 support
- Lagrange Points frames
- Propagators can be attached to Body objects in a clean fashion
- Ephem interpolation is made in TAI
- W component of local orbital frames were miscomputed. The effect was very small for circular orbit, hence the difficulty to spot it.
- Setting an attribute of StateVector/Orbit objects is handled more robustly.
- Analytical propagators of the Sun and the Moon are now differentiated to provide velocity
- Osculating keplerian elements in CCSDS OPM can be disabled
- python 3.9 support and tests
- Sphere of Influence propagators (both analytical and numerical) have their own module
StateVector.copy()
now accepts "same" argument, to express two StateVector objects in the same form and frame.- Maneuvers in terms of keplerian elements
beyond.orbits.man.dkep2dv()
function has clearer arguments, is better documented- Better exception messages when failing to parse a TLE
- Clarification of matrix building when handling rotating frames
DateRange
object simplification- f-string everywhere
- LTAN now computed in seconds
- A dangling modulo messed with hyperbolic keplerian representation
- Barycentric frames correctly handled in CCSDS files
- equinoctial, cylindrical and mean circular forms
- OMM in SGP and TLE formats are compatibles
- A lot of small additions to the documentation of existing functions/methods
- Following horizon format changes
- RSW and LVLV are not synonym to QSW any more
- Disable keplerian representation of non inertial CCSDS OPM
- Clohessy-Wiltshire propagator for relative motion
- Listeners are now part of the
beyond.propagators
subpackage - Diminished precision on covariance ccsds output, for increased tests reliability
- Optional dynamic interplanetary frame via the
env.jpl.dynamic_frames
configuration variable - Single function to retrieve local orbital reference frame rotation matrix
- Creation of the
StateVector
class as parent of theOrbit
class. It has the same behavior asOrbit
but can't be extrapolated. - Covariance matrix can now be expressed in a reference frame independent of its orbit.
- The list of
bsp
andtpc
files to read for thebeyond.env.jpl
module to work should be provided to theenv.jpl.files
configuration variable, instead of the previousenv.jpl
. - The
beyond.utils.matrix.expand()
function now takes a single argument. - Refactoring of
beyond.propagator.keplernum
andbeyond.orbits.man
to remove unused method argument - Refactoring of
beyond.frames.frames
to avoid using metaclasses. This has huge code repercussions and affected a large number of files. - The
skip_if_no_mpl
test decorator is replaced bympl
- Wrong assumption on the config dict structure now leads to a
ConfigError
- The BSTAR drag term of the TLE format can be above 1e-1
- OrbitInfo for hyperbolic orbits
- Kepler and J2 analytical propagators
- Beta angle computation
- Constellation and LEO builder
- Local Time at Ascending Node computation module
- Real adaptive step size for KeplerNum propagator
- Runge-Kutta-Fehlberg method for KeplerNum
- Lambert's problem solver
ccsds
now keeps track of "USER_DEFINED" fields
- ZeroDoppler listeners renamed as RadialVelocity
- The Kepler numerical propagator (now renamed as KeplerNum) use Ephem objects for interpolation
- NonePropagator is not used anymore when
orb.propagator = None
and has to be explicitly passed - Hyperbolic orbits are much better now that their computations are simply done right
find_event
usesevents_iterator
, and Listeners are cleaned of residual states before each iterator creationccsds
as a single subpackage and homogeneous internal functions
- NonePropagator for unmoving objects
- Eccentric anomaly form
- AnomalyListener
- find_event function
- Add python 3.8 support
- Add CCSDS XML parsing and dumping
- Raise exception when not enough points to interpolate an ephemeris
- Removed python 3.5 support
- JPL ephemeris : handle unknown objects
- Maneuvers : Continuous maneuver object
- Maneuvers : ImpulsiveMan replace Maneuver object
- Form : Documentation of keplerian circular form now coherent with code
- Measures data, for orbit determination
- Common ParseError class, with specific subclasses
- black
- Config dict is no longer a singleton
- Use of
math
trigonometric functions for IAU1980 and IAU2010 computations, increases speed.
- Kepler propagator in
get_propagator()
scope - Gamma50 frame
- Horizon format ephemeris parser
- TLE and CCSDS formats regrouped under the
beyond.io
subpackage
- SoI : Possibility to force the frame of SoI propagator
- Date are now hashable and directly usable for plotting in matplotlib
- Propagators' iter() method accept Date iterable (allows to iter over variable step-sizes)
- Basic handling of covariance matrices
- Possibility to bypass the warning when creating a frame with a name already taken
- Tests on documentation examples
- Kepler Propagator : Refactoring to allow any kind of numerical propagator
- Tle ndot and ndotdot parsing correction
- Change of default EOP policy to 'pass'. No more warning about missing data
- Tests for maneuver handling in CCSDS OPM
- OrbitInfos class for rapid orbit additional informations (velocity, perapside radius, etc.)
- Maneuvers have a optional 'comment' field, allowing to give more information
- Declare a maneuver as a increment of keplerian elements with DeltaCombined
- SOIPropagator for rapid extrapolation through multiple Sphere of Influence
jpl.get_body()
now returns a Body instance and not an Orbit- Maneuvers now check themselves for application
- The time resolution of a speaker/listener can be modified per class/instances
- 'lambda' and 'λ' are replaced by the argument of latitude u = ω + ν in the Keplerian Circular form
- A big pass over all comments and documentation regarding English
- Better logging integration
- Terminator detection
- QSW aliases
- TLE epoch parsing before 2000
- Apside, Node and light listeners now computing in the propagator reference frame
- Visibility allow passing user listeners and merge them with station listeners
- Better describe when a wrong argument type is provided to
Date
constructor
- Better
Date
subclass handling - When interpolating an
Ephem
object, the research for the good points is faster due to the use of binary search, particularly when dealing with long ephemeris files
- Tle generator error handling
- Maneuvers for the Kepler propagator
- CCSDS handling of maneuvers
- Possibility to have tolerant ephems regarding date inputs
- Entry points for EOP databases registration
- JPL module now callable on bsp files for details on content
- Python 3.7 compatibility and tests
- Library custom errors
- Config set method
- Ephem object deep copy and conversions
- Eop acquisition is done at Date creation, instead of at frame transformation
- get_body only allows one body selection at a time
- Station propagation delay : The method was heavy and not entirely correct, if not totally wrong
- TLE tests and coverages
- Possibility to compute passes with light propagation delay taken into account
- CCSDS OEM handle multiple Ephems
- CCSDS handling of frame central body
- JPL frames bulk creation
- JPL .tpc files handling for frame central body definition
- Date.strftime
- Define a mask for a station
- The CCSDS API now mimicks the json (load, loads, dump, dumps)
- Frames translation now directly with vectors
- Node harmonization, only one implementation used
- Stations handling has a proper module
- MIT license
- Config get() method to implement default behavior in case of missing parameter
- Documentation of orbital forms (cartesian, keplerian, etc.)
- TDB timescale
- Tle now keep any keyword argument passed in a kwargs attribute
- Others listeners can be added to a visibility computation
- Possibility to issue an error, a warning or nothing in case of missing Earth Orientation Parameters
- Possibility to define a custom Earth Orientation Parameters database
- The config variable does not depend on a specific file anymore (previously ConfigParser, then TOML) but is a dictionary
- replacement of incorrect 'pole_motion' functions and variables names for 'earth_orientation'
- Moon analytic position now computed with respect to TDB timescale
- A Listener does not return a string anymore, but an Event object
- Tests are now conducted by tox
- Integration of JPL ephemeris by interfacing Brandon Rhodes' jplephem python library
- First try at RK4 numerical propagator
- Listeners for events computation (AOS, LOS, umbra, etc.)
- CCSDS Orbit Data Message reading and writing
- Multi TLE parser (#18)
- frames now declare a central body, with some characteristics (#20)
- Spherical parameters orders (now r, theta, phi)
- Propagators are now instances instead of classes
solarsystem
module
- Correction of velocity computation when switching from cartesian to spherical
- COSPAR ID parsing in TLE
Change the name of the library to beyond (formerly space-api)
- CIO based frames (#1)
- Ephem object (#3)
- Full SGP4/SDP4 propagator, by interfacing Brandon Rhodes' sgp4 python library (#4)
- Python classifiers for PyPI (#8)
- Lagrange Interpolation in Ephem objects (#15)
- Date inner values in TAI (#13)
- Ordering of Node2 graphs (#2)
Initial release with basic functionalities