moonbit-orbit

    A MoonBit orbital mechanics and spacecraft mission computation library.

    orbital-mechanics
    aerospace
    mission-analysis
    moonbit
    Download zip
    Author
    Version
    0.1.1
    License
    Apache-2.0
    Last updated
    last month
    Downloads
    14

    #moonbit-orbit

    moonbit-orbit is a reusable MoonBit library for spacecraft mission analysis. It provides deterministic building blocks for orbital mechanics, coordinate conversion, attitude, ground-station geometry, mission planning, telemetry, link budgets, safety screening, and engineering reports.

    The library is intended for early design, education, simulation, and reusable tooling. It is not a flight-dynamics certification system and does not claim a complete SGP4 force model.

    #Core capabilities

    The public API covers two-body propagation, transfers, WGS84 geodesy, ground tracks, Lambert estimates, eclipse geometry, quaternion attitude, mission timelines, delta-v budgets, telemetry validation, observation models, scalar estimation, contact-window scheduling, link budgets, safety screening, numerical methods, statistics, engineering units, state comparison, and deterministic reporting.

    #Quick start

    moon check --deny-warn moon test --deny-warn moon run cmd/main

    #Minimal example

    ///|
    test {
    let leo = circular_orbit(earth_radius_km + 500.0, radians(51.6))
    let summary = summarize_orbit(earth_mu_km3_s2, leo)
    assert_true(summary.period_s > 5600.0 && summary.period_s < 5700.0)

    let transfer = hohmann_transfer(
    earth_mu_km3_s2,
    earth_radius_km + 500.0,
    42164.0,
    )
    assert_true(transfer.delta_v_total_km_s > 3.7)
    }

    #CLI

    moon run cmd/main prints a low-Earth-orbit summary, a Hohmann transfer estimate, a quaternion rotation sample, and deterministic benchmark checksums.

    #Architecture

    • The root package owns the public concrete types and facade APIs.
    • Core physics lives in orbit.mbt, transfer.mbt, dynamics.mbt, and perturbation.mbt.
    • Geometry and frames live in frames.mbt, geodesy.mbt, ground_station.mbt, and analysis.mbt.
    • Mission operations are covered by mission.mbt, planner.mbt, operations.mbt, telemetry.mbt, and safety.mbt.
    • Observations and planning are covered by observation.mbt, estimation.mbt, window_planner.mbt, mission_scenario.mbt, and groundtrack_pipeline.mbt.
    • pkg.generated.mbti is generated by moon info and reviewed as the public API snapshot.

    Generated interface files from moon info are committed so API changes can be reviewed directly.

    #Benchmarks and tests

    Call benchmark_report(iterations) for deterministic workloads. With 256 iterations, the current CLI reports these reproducible checksums:

    kepler-solver: iterations=256,checksum=40.71431462450973 state-conversion: iterations=256,checksum=1783729.8704907342 wgs84-conversion: iterations=256,checksum=1631037.754922193

    The suite covers nominal calculations and boundary cases including zero vectors, invalid brackets, poles, antimeridian paths, degenerate Lambert inputs, empty telemetry, resource limits, eclipse transitions, invalid orbital elements, close approaches, observation quality gates, contact-window selection, trajectory segmentation, and report output. The benchmark checksums are deterministic; wall-clock timings should be collected on the target machine.

    #Accuracy and units

    • Distances are in kilometers; velocities are in kilometers per second.
    • Angles are radians unless a helper explicitly says otherwise.
    • The basic frame model is Earth-centered inertial/ECEF with a spherical approximation where explicitly noted; WGS84 helpers are provided separately.
    • Observation range-rate is the inertial radial projection of the state velocity; it is not a complete station-relative Doppler model.
    • The ephemeris helpers are analytical approximations, and the package does not claim a complete SGP4 force model. Results should be checked against mission-specific references before operational use.

    #CI

    GitHub Actions installs the current MoonBit stable toolchain on Linux, macOS, and Windows and records moon version --all plus moonc -v. It runs formatting, warning-denied checking, tests, native tests, all-target checking, generated-interface verification, CLI smoke tests, and coverage analysis. See QUALITY.md for the same local commands.

    #License

    Apache-2.0.

    AccelerationModel

    pub struct AccelerationModel {
    central_body_mu : Double
    j2_enabled : Bool
    drag_enabled : Bool
    ballistic_coefficient : Double
    atmosphere_scale_height_km : Double
    } derive(Eq,
    Debug
    )

    AccelerationModel::earth

    AccelerationModel::vacuum

    fn AccelerationModel::vacuum(mu : Double) -> AccelerationModel

    AccelerationModel::with_drag

    fn AccelerationModel::with_drag(model : AccelerationModel, coefficient : Double, scale_height_km : Double) -> AccelerationModel

    AttitudeState

    pub struct AttitudeState {
    attitude : Quaternion
    angular_velocity_rad_s : Vec3
    covariance_trace : Double
    } derive(Eq,
    Debug
    )

    AttitudeState::new

    fn AttitudeState::new(attitude : Quaternion, angular_velocity_rad_s : Vec3) -> AttitudeState

    BenchmarkResult

    pub struct BenchmarkResult {
    name : String
    iterations : Int
    checksum : Double
    } derive(Eq,
    Debug
    )

    CatalogEntry

    pub struct CatalogEntry {
    id : String
    name : String
    elements : ClassicalElements
    epoch_day : Double
    active : Bool
    } derive(Eq,
    Debug
    )

    CatalogEntry::new

    fn CatalogEntry::new(id : String, name : String, elements : ClassicalElements, epoch_day : Double, active? : Bool) -> CatalogEntry

    CatalogQuery

    pub struct CatalogQuery {
    minimum_altitude_km : Double
    maximum_altitude_km : Double
    minimum_inclination_rad : Double
    maximum_inclination_rad : Double
    active_only : Bool
    } derive(Eq,
    Debug
    )

    CatalogQuery::any

    CatalogQuery::leo

    ClassicalElements

    pub struct ClassicalElements {
    semi_major_axis_km : Double
    eccentricity : Double
    inclination_rad : Double
    raan_rad : Double
    arg_periapsis_rad : Double
    true_anomaly_rad : Double
    } derive(Eq,
    Debug
    )

    ClassicalElements::new

    fn ClassicalElements::new(semi_major_axis_km : Double, eccentricity : Double, inclination_rad : Double, raan_rad : Double, arg_periapsis_rad : Double, true_anomaly_rad : Double) -> ClassicalElements

    ContactCapacity

    pub struct ContactCapacity {
    duration_s : Double
    rate_kbps : Double
    volume_mb : Double
    margin_db : Double
    } derive(Eq,
    Debug
    )

    ControlCommand

    pub struct ControlCommand {
    axis : Vec3
    angle_rad : Double
    duration_s : Double
    torque_nm : Vec3
    } derive(Eq,
    Debug
    )

    CoverageReport

    pub struct CoverageReport {
    points : Int
    visible_points : Int
    visibility_fraction : Double
    minimum_elevation_rad : Double
    maximum_elevation_rad : Double
    } derive(Eq,
    Debug
    )

    DeltaVBudget

    pub struct DeltaVBudget {
    planned_km_s : Double
    reserve_fraction : Double
    reserve_km_s : Double
    total_km_s : Double
    } derive(Eq,
    Debug
    )

    DesignCandidate

    pub struct DesignCandidate {
    elements : ClassicalElements
    score : Double
    feasible : Bool
    violations : Array[String]
    } derive(Eq,
    Debug
    )

    DesignConstraint

    pub struct DesignConstraint {
    minimum_altitude_km : Double
    maximum_altitude_km : Double
    maximum_eccentricity : Double
    maximum_delta_v_km_s : Double
    minimum_period_s : Double
    maximum_period_s : Double
    } derive(Eq,
    Debug
    )

    DesignConstraint::any

    DesignConstraint::leo

    DynamicsState

    pub struct DynamicsState {
    state : StateVector
    acceleration_km_s2 : Vec3
    elapsed_s : Double
    } derive(Eq,
    Debug
    )

    EclipseKind

    pub enum EclipseKind {
    None
    Penumbra
    Umbra
    } derive(Eq,
    Debug
    )

    EclipseResult

    pub struct EclipseResult {
    kind : EclipseKind
    occultation_fraction : Double
    sun_angle_rad : Double
    earth_angle_rad : Double
    duration_estimate_s : Double
    } derive(Eq,
    Debug
    )

    Epoch

    pub struct Epoch {
    seconds_since_j2000 : Double
    } derive(Eq,
    Debug
    )

    Epoch::add_seconds

    fn Epoch::add_seconds(epoch : Epoch, seconds : Double) -> Epoch

    Epoch::days_since_j2000

    fn Epoch::days_since_j2000(epoch : Epoch) -> Double

    Epoch::duration_to

    fn Epoch::duration_to(a : Epoch, b : Epoch) -> Double

    Epoch::from_days

    fn Epoch::from_days(days_since_j2000 : Double) -> Epoch

    Epoch::from_seconds

    fn Epoch::from_seconds(seconds_since_j2000 : Double) -> Epoch

    Epoch::j2000

    fn Epoch::j2000() -> Epoch

    EstimateStatus

    pub enum EstimateStatus {
    Converged
    InsufficientData
    Singular
    } derive(Eq,
    Debug
    )

    EulerAngles

    pub struct EulerAngles {
    roll_rad : Double
    pitch_rad : Double
    yaw_rad : Double
    } derive(Eq,
    Debug
    )

    Geodetic

    pub struct Geodetic {
    latitude_rad : Double
    longitude_rad : Double
    altitude_km : Double
    } derive(Eq,
    Debug
    )

    Geodetic::new

    fn Geodetic::new(latitude_rad : Double, longitude_rad : Double, altitude_km : Double) -> Geodetic

    GroundStation

    pub struct GroundStation {
    name : String
    location : Geodetic
    min_elevation_rad : Double
    } derive(Eq,
    Debug
    )

    GroundStation::new

    fn GroundStation::new(name : String, latitude_rad : Double, longitude_rad : Double, altitude_km? : Double, min_elevation_rad? : Double) -> GroundStation

    GroundTrackBounds

    pub struct GroundTrackBounds {
    minimum_latitude_rad : Double
    maximum_latitude_rad : Double
    minimum_longitude_rad : Double
    maximum_longitude_rad : Double
    minimum_altitude_km : Double
    maximum_altitude_km : Double
    } derive(Eq,
    Debug
    )

    GroundTrackPoint

    pub struct GroundTrackPoint {
    time_s : Double
    latitude_rad : Double
    longitude_rad : Double
    altitude_km : Double
    } derive(Eq,
    Debug
    )

    GroundTrackSegment

    pub struct GroundTrackSegment {
    points : Array[GroundTrackPoint]
    start_time_s : Double
    end_time_s : Double
    path_length_km : Double
    } derive(Eq,
    Debug
    )

    GroundTrackSummary

    pub struct GroundTrackSummary {
    points : Int
    duration_s : Double
    minimum_altitude_km : Double
    maximum_altitude_km : Double
    mean_altitude_km : Double
    maximum_latitude_rad : Double
    longitude_span_rad : Double
    path_length_km : Double
    gap_count : Int
    } derive(Eq,
    Debug
    )

    HealthFlag

    pub struct HealthFlag {
    name : String
    value : Double
    lower : Double
    upper : Double
    healthy : Bool
    } derive(Eq,
    Debug
    )

    Histogram

    pub struct Histogram {
    edges : Array[Double]
    counts : Array[Int]
    } derive(Eq,
    Debug
    )

    HohmannTransfer

    pub struct HohmannTransfer {
    radius_initial_km : Double
    radius_final_km : Double
    semi_major_axis_km : Double
    delta_v_departure_km_s : Double
    delta_v_arrival_km_s : Double
    delta_v_total_km_s : Double
    time_of_flight_s : Double
    } derive(Eq,
    Debug
    )

    J2Rates

    pub struct J2Rates {
    raan_rate_rad_s : Double
    arg_periapsis_rate_rad_s : Double
    mean_anomaly_rate_rad_s : Double
    } derive(Eq,
    Debug
    )

    LambertSolution

    pub struct LambertSolution {
    departure_velocity_km_s : Vec3
    arrival_velocity_km_s : Vec3
    transfer_angle_rad : Double
    time_of_flight_s : Double
    iterations : Int
    status : SolveStatus
    } derive(Eq,
    Debug
    )

    LaunchWindow

    pub struct LaunchWindow {
    epoch_day : Double
    duration_s : Double
    azimuth_rad : Double
    inclination_error_rad : Double
    feasible : Bool
    } derive(Eq,
    Debug
    )

    LinearRegression

    pub struct LinearRegression {
    slope : Double
    intercept : Double
    r_squared : Double
    } derive(Eq,
    Debug
    )

    LinkBudget

    pub struct LinkBudget {
    frequency_ghz : Double
    distance_km : Double
    tx_power_dbw : Double
    antenna_gain_db : Double
    losses_db : Double
    margin_db : Double
    } derive(Eq,
    Debug
    )

    LocalFrame

    pub struct LocalFrame {
    east : Vec3
    north : Vec3
    up : Vec3
    } derive(Eq,
    Debug
    )

    LookAngle

    pub struct LookAngle {
    azimuth_rad : Double
    elevation_rad : Double
    range_km : Double
    } derive(Eq,
    Debug
    )

    MissionEvent

    pub struct MissionEvent {
    time_s : Double
    kind : MissionEventKind
    label : String
    delta_v_km_s : Double
    duration_s : Double
    } derive(Eq,
    Debug
    )

    MissionEvent::new

    fn MissionEvent::new(time_s : Double, kind : MissionEventKind, label : String, delta_v_km_s? : Double, duration_s? : Double) -> MissionEvent

    MissionEventKind

    pub enum MissionEventKind {
    OrbitInsertion
    Maneuver
    GroundContact
    EclipseEntry
    EclipseExit
    PayloadOperation
    Custom
    } derive(Eq,
    Debug
    )

    MissionPhase

    pub struct MissionPhase {
    name : String
    start_s : Double
    end_s : Double
    delta_v_km_s : Double
    priority : Int
    resource_cost : Double
    } derive(Eq,
    Debug
    )

    MissionPhase::with_priority

    fn MissionPhase::with_priority(phase : MissionPhase, priority : Int) -> MissionPhase

    MissionPhase::with_resource_cost

    fn MissionPhase::with_resource_cost(phase : MissionPhase, resource_cost : Double) -> MissionPhase

    MissionScenario

    pub struct MissionScenario {
    name : String
    phases : Array[MissionPhase]
    reserve_km_s : Double
    } derive(Eq,
    Debug
    )

    MissionScenario::add_phase

    fn MissionScenario::add_phase(scenario : MissionScenario, phase : MissionPhase) -> MissionScenario

    MissionScenario::new

    fn MissionScenario::new(name : String) -> MissionScenario

    MissionScenario::sort_by_start

    fn MissionScenario::sort_by_start(scenario : MissionScenario) -> MissionScenario

    MissionScenario::with_reserve

    fn MissionScenario::with_reserve(scenario : MissionScenario, reserve_km_s : Double) -> MissionScenario

    MissionScore

    pub struct MissionScore {
    safety : Double
    coverage : Double
    cost : Double
    science : Double
    total : Double
    } derive(Eq,
    Debug
    )

    MissionTimeline

    pub struct MissionTimeline {
    events : Array[MissionEvent]
    end_time_s : Double
    } derive(Eq,
    Debug
    )

    MissionTimeline::add

    MissionTimeline::duration

    fn MissionTimeline::duration(timeline : MissionTimeline) -> Double

    MissionTimeline::events_in_range

    fn MissionTimeline::events_in_range(timeline : MissionTimeline, start_s : Double, end_s : Double) -> Array[MissionEvent]

    MissionTimeline::new

    fn MissionTimeline::new(end_time_s? : Double) -> MissionTimeline

    MissionTimeline::sort_by_time

    fn MissionTimeline::sort_by_time(timeline : MissionTimeline) -> MissionTimeline

    MissionTimeline::total_delta_v

    fn MissionTimeline::total_delta_v(timeline : MissionTimeline) -> Double

    MoonPosition

    pub struct MoonPosition {
    position_eci_km : Vec3
    distance_km : Double
    phase_angle_rad : Double
    } derive(Eq,
    Debug
    )

    Observation

    pub struct Observation {
    epoch : Epoch
    station : GroundStation
    kind : ObservationKind
    value : Double
    predicted : Double
    sigma : Double
    quality : ObservationQuality
    } derive(Eq,
    Debug
    )

    Observation::is_valid

    fn Observation::is_valid(observation : Observation) -> Bool

    Observation::new

    fn Observation::new(epoch : Epoch, station : GroundStation, kind : ObservationKind, value : Double, sigma : Double) -> Observation

    Observation::normalized_residual

    fn Observation::normalized_residual(observation : Observation) -> Double

    Observation::residual

    fn Observation::residual(observation : Observation) -> Double

    Observation::weight

    fn Observation::weight(observation : Observation) -> Double

    Observation::with_prediction

    fn Observation::with_prediction(observation : Observation, predicted : Double) -> Observation

    Observation::with_quality

    fn Observation::with_quality(observation : Observation, quality : ObservationQuality) -> Observation

    ObservationBatch

    pub struct ObservationBatch {
    name : String
    observations : Array[Observation]
    } derive(Eq,
    Debug
    )

    ObservationBatch::add

    ObservationBatch::by_kind

    ObservationBatch::invalid_count

    fn ObservationBatch::invalid_count(batch : ObservationBatch) -> Int

    ObservationBatch::new

    fn ObservationBatch::new(name : String) -> ObservationBatch

    ObservationBatch::residual_rms

    fn ObservationBatch::residual_rms(batch : ObservationBatch) -> Double

    ObservationBatch::sort_by_epoch

    fn ObservationBatch::sort_by_epoch(batch : ObservationBatch) -> ObservationBatch

    ObservationBatch::span_s

    fn ObservationBatch::span_s(batch : ObservationBatch) -> Double

    ObservationBatch::valid_count

    fn ObservationBatch::valid_count(batch : ObservationBatch) -> Int

    ObservationBatch::weighted_residual_rms

    fn ObservationBatch::weighted_residual_rms(batch : ObservationBatch) -> Double

    ObservationKind

    pub enum ObservationKind {
    Range
    RangeRate
    Azimuth
    Elevation
    } derive(Eq,
    Debug
    )

    ObservationQuality

    pub enum ObservationQuality {
    Good
    Suspect
    Invalid
    } derive(Eq,
    Debug
    )

    OperationMode

    pub enum OperationMode {
    Nominal
    Safe
    Contingency
    Simulation
    } derive(Eq,
    Debug
    )

    OperationPlan

    pub struct OperationPlan {
    name : String
    steps : Array[OperationStep]
    total_duration_s : Double
    total_resource_cost : Double
    } derive(Eq,
    Debug
    )

    OperationPlan::append

    OperationPlan::complete_step

    fn OperationPlan::complete_step(plan : OperationPlan, index : Int) -> OperationPlan

    OperationPlan::completion_fraction

    fn OperationPlan::completion_fraction(plan : OperationPlan) -> Double

    OperationPlan::is_ready

    fn OperationPlan::is_ready(plan : OperationPlan) -> Bool

    OperationPlan::new

    fn OperationPlan::new(name : String) -> OperationPlan

    OperationPlan::remaining_steps

    fn OperationPlan::remaining_steps(plan : OperationPlan) -> Array[OperationStep]

    OperationPlan::resource_remaining

    fn OperationPlan::resource_remaining(plan : OperationPlan, resource_limit : Double) -> Double

    OperationStep

    pub struct OperationStep {
    index : Int
    name : String
    mode : OperationMode
    duration_s : Double
    resource_cost : Double
    completed : Bool
    } derive(Eq,
    Debug
    )

    OperationStep::new

    fn OperationStep::new(index : Int, name : String, mode : OperationMode, duration_s : Double, resource_cost : Double) -> OperationStep

    OptimizationResult

    pub struct OptimizationResult {
    parameters : Array[Double]
    objective : Double
    iterations : Int
    converged : Bool
    } derive(Eq,
    Debug
    )

    OrbitAnalysis

    pub struct OrbitAnalysis {
    elements : ClassicalElements
    state : StateVector
    altitude_km : Double
    speed_km_s : Double
    radial_speed_km_s : Double
    flight_path_angle_rad : Double
    energy_km2_s2 : Double
    angular_momentum_km2_s : Double
    } derive(Eq,
    Debug
    )

    OrbitReport

    pub struct OrbitReport {
    title : String
    sections : Array[String]
    metrics : Array[(String, Double)]
    } derive(Eq,
    Debug
    )

    OrbitReport::add_metric

    fn OrbitReport::add_metric(report : OrbitReport, name : String, value : Double) -> OrbitReport

    OrbitReport::add_section

    fn OrbitReport::add_section(report : OrbitReport, section : String) -> OrbitReport

    OrbitReport::metric

    fn OrbitReport::metric(report : OrbitReport, name : String) -> Double?

    OrbitReport::new

    fn OrbitReport::new(title : String) -> OrbitReport

    OrbitReport::render

    fn OrbitReport::render(report : OrbitReport) -> String

    OrbitSummary

    pub struct OrbitSummary {
    radius_periapsis_km : Double
    radius_apoapsis_km : Double
    period_s : Double
    mean_motion_rad_s : Double
    specific_energy_km2_s2 : Double
    } derive(Eq,
    Debug
    )

    PassWindow

    pub struct PassWindow {
    rise_time_s : Double
    set_time_s : Double
    max_elevation_rad : Double
    samples : Int
    } derive(Eq,
    Debug
    )

    PerigeeApogee

    pub struct PerigeeApogee {
    perigee_km : Double
    apogee_km : Double
    perigee_altitude_km : Double
    apogee_altitude_km : Double
    } derive(Eq,
    Debug
    )

    PlaneChange

    pub struct PlaneChange {
    speed_km_s : Double
    angle_rad : Double
    delta_v_km_s : Double
    } derive(Eq,
    Debug
    )

    PlannedWindow

    pub struct PlannedWindow {
    window : VisibilityWindow
    score : Double
    data_volume_mb : Double
    selected : Bool
    } derive(Eq,
    Debug
    )

    PointingTarget

    pub struct PointingTarget {
    direction : Vec3
    roll_rad : Double
    tolerance_rad : Double
    } derive(Eq,
    Debug
    )

    Quaternion

    pub struct Quaternion {
    w : Double
    x : Double
    y : Double
    z : Double
    } derive(Eq,
    Debug
    )

    Quaternion::conjugate

    fn Quaternion::conjugate(q : Quaternion) -> Quaternion

    Quaternion::from_axis_angle

    fn Quaternion::from_axis_angle(axis : Vec3, angle_rad : Double) -> Quaternion

    Quaternion::from_euler

    fn Quaternion::from_euler(angles : EulerAngles) -> Quaternion

    Quaternion::identity

    fn Quaternion::identity() -> Quaternion

    Quaternion::multiply

    fn Quaternion::multiply(a : Quaternion, b : Quaternion) -> Quaternion

    Quaternion::new

    fn Quaternion::new(w : Double, x : Double, y : Double, z : Double) -> Quaternion

    Quaternion::norm

    fn Quaternion::norm(q : Quaternion) -> Double

    Quaternion::norm_squared

    fn Quaternion::norm_squared(q : Quaternion) -> Double

    Quaternion::normalized

    fn Quaternion::normalized(q : Quaternion) -> Quaternion

    Quaternion::rotate

    fn Quaternion::rotate(q : Quaternion, v : Vec3) -> Vec3

    Quaternion::to_euler

    fn Quaternion::to_euler(q : Quaternion) -> EulerAngles

    ResidualSummary

    pub struct ResidualSummary {
    count : Int
    mean : Double
    rms : Double
    maximum_abs : Double
    rejected : Int
    } derive(Eq,
    Debug
    )

    ResourceProfile

    pub struct ResourceProfile {
    mass_kg : Double
    propellant_kg : Double
    power_w : Double
    data_rate_kbps : Double
    lifetime_days : Double
    } derive(Eq,
    Debug
    )

    RootResult

    pub struct RootResult {
    value : Double
    residual : Double
    iterations : Int
    status : SolveStatus
    } derive(Eq,
    Debug
    )

    SafetyAssessment

    pub struct SafetyAssessment {
    minimum_distance_km : Double
    relative_speed_km_s : Double
    closing_speed_km_s : Double
    time_to_closest_s : Double
    collision_probability_proxy : Double
    safe : Bool
    } derive(Eq,
    Debug
    )

    SampleStats

    pub struct SampleStats {
    count : Int
    minimum : Double
    maximum : Double
    mean : Double
    variance : Double
    sum : Double
    } derive(Eq,
    Debug
    )

    ScalarEstimate

    pub struct ScalarEstimate {
    value : Double
    variance : Double
    residual_rms : Double
    used : Int
    status : EstimateStatus
    } derive(Eq,
    Debug
    )

    ScenarioSummary

    pub struct ScenarioSummary {
    valid : Bool
    phase_count : Int
    total_duration_s : Double
    total_delta_v_km_s : Double
    total_resource_cost : Double
    overlap_count : Int
    resource_remaining : Double
    } derive(Eq,
    Debug
    )

    Sgp4Status

    pub struct Sgp4Status {
    available : Bool
    note : String
    } derive(Eq,
    Debug
    )

    SolveStatus

    pub enum SolveStatus {
    Converged
    MaxIterations
    InvalidInput
    } derive(Eq,
    Debug
    )

    StateComparison

    pub struct StateComparison {
    count : Int
    position_rms_km : Double
    velocity_rms_km_s : Double
    position_max_km : Double
    velocity_max_km_s : Double
    time_span_s : Double
    } derive(Eq,
    Debug
    )

    StateSample

    pub struct StateSample {
    time_s : Double
    state : StateVector
    } derive(Eq,
    Debug
    )

    StateVector

    pub struct StateVector {
    position_km : Vec3
    velocity_km_s : Vec3
    } derive(Eq,
    Debug
    )

    StateVector::new

    fn StateVector::new(position_km : Vec3, velocity_km_s : Vec3) -> StateVector

    SunPosition

    pub struct SunPosition {
    position_eci_km : Vec3
    distance_au : Double
    right_ascension_rad : Double
    declination_rad : Double
    } derive(Eq,
    Debug
    )

    TelemetryQuality

    pub enum TelemetryQuality {
    Good
    Suspect
    Invalid
    } derive(Eq,
    Debug
    )

    TelemetrySample

    pub struct TelemetrySample {
    time_s : Double
    name : String
    value : Double
    unit : String
    quality : TelemetryQuality
    } derive(Eq,
    Debug
    )

    TelemetrySample::new

    fn TelemetrySample::new(time_s : Double, name : String, value : Double, unit : String) -> TelemetrySample

    TelemetrySample::with_quality

    fn TelemetrySample::with_quality(sample : TelemetrySample, quality : TelemetryQuality) -> TelemetrySample

    TelemetrySummary

    pub struct TelemetrySummary {
    name : String
    count : Int
    valid_count : Int
    minimum : Double
    maximum : Double
    mean : Double
    latest_time_s : Double
    } derive(Eq,
    Debug
    )

    TleParseError

    pub(all) enum TleParseError {
    LineTooShort(String)
    InvalidNumber(String)
    InvalidFormat(String)
    } derive(Eq,
    Debug
    )

    TleRecord

    pub struct TleRecord {
    name : String
    satellite_number : Int
    classification : Char
    epoch_year : Int
    epoch_day : Double
    inclination_rad : Double
    raan_rad : Double
    eccentricity : Double
    arg_periapsis_rad : Double
    mean_anomaly_rad : Double
    mean_motion_rev_day : Double
    revolution_number : Int
    } derive(Eq,
    Debug
    )

    Topocentric

    pub struct Topocentric {
    east_km : Double
    north_km : Double
    up_km : Double
    } derive(Eq,
    Debug
    )

    TrajectoryMetrics

    pub struct TrajectoryMetrics {
    duration_s : Double
    samples : Int
    distance_km : Double
    max_speed_km_s : Double
    min_altitude_km : Double
    max_altitude_km : Double
    } derive(Eq,
    Debug
    )

    TrendEstimate

    pub struct TrendEstimate {
    intercept : Double
    slope_per_s : Double
    variance : Double
    residual_rms : Double
    used : Int
    status : EstimateStatus
    } derive(Eq,
    Debug
    )

    ValidationLevel

    pub enum ValidationLevel {
    Info
    Warning
    Error
    } derive(Eq,
    Debug
    )

    ValidationMessage

    pub struct ValidationMessage {
    level : ValidationLevel
    code : String
    message : String
    } derive(Eq,
    Debug
    )

    ValidationMessage::new

    fn ValidationMessage::new(level : ValidationLevel, code : String, message : String) -> ValidationMessage

    ValidationReport

    pub struct ValidationReport {
    valid : Bool
    messages : Array[ValidationMessage]
    score : Double
    } derive(Eq,
    Debug
    )

    Vec3

    pub struct Vec3 {
    x : Double
    y : Double
    z : Double
    } derive(Eq,
    Debug
    )

    Vec3::add

    fn Vec3::add(a : Vec3, b : Vec3) -> Vec3

    Vec3::angle_between

    fn Vec3::angle_between(a : Vec3, b : Vec3) -> Double

    Vec3::cross

    fn Vec3::cross(a : Vec3, b : Vec3) -> Vec3

    Vec3::distance

    fn Vec3::distance(a : Vec3, b : Vec3) -> Double

    Vec3::dot

    fn Vec3::dot(a : Vec3, b : Vec3) -> Double

    Vec3::lerp

    fn Vec3::lerp(a : Vec3, b : Vec3, t : Double) -> Vec3

    Vec3::new

    fn Vec3::new(x : Double, y : Double, z : Double) -> Vec3

    Vec3::norm

    fn Vec3::norm(v : Vec3) -> Double

    Vec3::norm_squared

    fn Vec3::norm_squared(v : Vec3) -> Double

    Vec3::scale

    fn Vec3::scale(v : Vec3, k : Double) -> Vec3

    Vec3::sub

    fn Vec3::sub(a : Vec3, b : Vec3) -> Vec3

    Vec3::unit

    fn Vec3::unit(v : Vec3) -> Vec3

    Vec3::zero

    fn Vec3::zero() -> Vec3

    VisibilitySample

    pub struct VisibilitySample {
    epoch : Epoch
    look : LookAngle
    visible : Bool
    } derive(Eq,
    Debug
    )

    VisibilityWindow

    pub struct VisibilityWindow {
    start : Epoch
    end : Epoch
    max_elevation_rad : Double
    closest_range_km : Double
    } derive(Eq,
    Debug
    )

    WindowConstraint

    pub struct WindowConstraint {
    minimum_elevation_rad : Double
    maximum_range_km : Double
    minimum_duration_s : Double
    required_score : Double
    } derive(Eq,
    Debug
    )

    WindowConstraint::new

    fn WindowConstraint::new(minimum_elevation_rad : Double, maximum_range_km : Double, minimum_duration_s : Double) -> WindowConstraint

    WindowConstraint::with_score

    fn WindowConstraint::with_score(constraint : WindowConstraint, required_score : Double) -> WindowConstraint

    WindowSchedule

    pub struct WindowSchedule {
    windows : Array[PlannedWindow]
    total_duration_s : Double
    total_volume_mb : Double
    mean_score : Double
    } derive(Eq,
    Debug
    )

    SunEarthDistanceKm

    let SunEarthDistanceKm : Double

    SunRadiusKm

    let SunRadiusKm : Double

    Wgs84A

    let Wgs84A : Double

    Wgs84B

    let Wgs84B : Double

    Wgs84E2

    let Wgs84E2 : Double

    Wgs84F

    let Wgs84F : Double

    acceleration

    fn acceleration(model : AccelerationModel, state : StateVector) -> Vec3

    accumulate_budgets

    fn accumulate_budgets(budgets : Array[DeltaVBudget]) -> DeltaVBudget

    all_mission_event_kinds

    fn all_mission_event_kinds() -> Array[MissionEventKind]

    all_observation_kinds

    fn all_observation_kinds() -> Array[ObservationKind]

    all_operation_modes

    fn all_operation_modes() -> Array[OperationMode]

    all_validation_levels

    fn all_validation_levels() -> Array[ValidationLevel]

    altitude_is_valid

    fn altitude_is_valid(elements : ClassicalElements, minimum_km : Double, maximum_km : Double) -> Bool

    analysis_is_valid

    fn analysis_is_valid(analysis : OrbitAnalysis) -> Bool

    analyze_orbit

    fn analyze_orbit(mu : Double, elements : ClassicalElements) -> OrbitAnalysis

    angular_momentum

    fn angular_momentum(attitude : AttitudeState, inertia_diagonal : Vec3) -> Vec3

    angular_radius

    fn angular_radius(radius_km : Double, distance_km : Double) -> Double

    anomaly_grid

    fn anomaly_grid(elements : ClassicalElements, count : Int) -> Array[ClassicalElements]

    fn antenna_link_margin_db(tx_power_dbw : Double, gains_db : Double, path_loss_db : Double, system_loss_db : Double, required_db : Double) -> Double

    apply_horizon_mask

    fn apply_horizon_mask(look : LookAngle, coefficients : Array[Double]) -> Bool

    approximate_sunrise

    fn approximate_sunrise(site : Geodetic, epoch : Epoch) -> Double

    approximate_sunset

    fn approximate_sunset(site : Geodetic, epoch : Epoch) -> Double

    arcseconds_to_radians

    fn arcseconds_to_radians(value : Double) -> Double

    ascending_node_longitude

    fn ascending_node_longitude(track : Array[GroundTrackPoint]) -> Double

    assess_orbit

    fn assess_orbit(elements : ClassicalElements) -> Array[String]

    atmospheric_reentry_altitude_km

    fn atmospheric_reentry_altitude_km() -> Double

    attitude_error

    fn attitude_error(desired : Quaternion, actual : Quaternion) -> Quaternion

    attitude_health

    fn attitude_health(error_rad : Double, limit_rad : Double) -> HealthFlag

    attitude_propagate

    fn attitude_propagate(state : AttitudeState, delta_t_s : Double) -> AttitudeState

    au_to_kilometers

    fn au_to_kilometers(value : Double) -> Double

    azimuth_rate

    fn azimuth_rate(previous : LookAngle, current : LookAngle, delta_t_s : Double) -> Double

    ballistic_coefficient

    fn ballistic_coefficient(mass_kg : Double, area_m2 : Double, drag_coefficient : Double) -> Double

    bar_to_pascal

    fn bar_to_pascal(value : Double) -> Double

    battery_energy_wh

    fn battery_energy_wh(power_w : Double, eclipse_fraction : Double, orbit_period_s : Double) -> Double

    benchmark_geodesy

    fn benchmark_geodesy(iterations : Int) -> BenchmarkResult

    benchmark_kepler

    fn benchmark_kepler(iterations : Int) -> BenchmarkResult

    benchmark_report

    fn benchmark_report(iterations : Int) -> Array[BenchmarkResult]

    benchmark_report_text

    fn benchmark_report_text(results : Array[BenchmarkResult]) -> String

    benchmark_state_conversion

    fn benchmark_state_conversion(iterations : Int) -> BenchmarkResult

    best_launch_window

    fn best_launch_window(windows : Array[LaunchWindow]) -> LaunchWindow?

    beta_angle

    fn beta_angle(orbit_normal : Vec3, sun_direction : Vec3) -> Double

    bi_elliptic_transfer_delta_v

    fn bi_elliptic_transfer_delta_v(mu : Double, radius_initial_km : Double, radius_final_km : Double, radius_intermediate_km : Double) -> Double

    bisect

    fn bisect(f : (Double) -> Double, lower : Double, upper : Double, tolerance? : Double, max_iterations? : Int) -> RootResult

    blackbody_flux

    fn blackbody_flux(temperature_k : Double) -> Double

    body_rate_limit

    fn body_rate_limit(rate : Vec3, limit_rad_s : Double) -> Vec3

    bounding_box

    fn bounding_box(points : Array[Vec3]) -> (Vec3, Vec3)

    bounding_box_center

    fn bounding_box_center(points : Array[Vec3]) -> Vec3

    bounding_box_diagonal

    fn bounding_box_diagonal(points : Array[Vec3]) -> Double

    budget_is_exceeded

    fn budget_is_exceeded(budget : DeltaVBudget, spent_km_s : Double) -> Bool

    budget_is_valid

    fn budget_is_valid(budget : DeltaVBudget) -> Bool

    budget_remaining

    fn budget_remaining(budget : DeltaVBudget, spent_km_s : Double) -> Double

    cartesian_to_spherical

    fn cartesian_to_spherical(position : Vec3) -> (Double, Double, Double)

    catalog_active_fraction

    fn catalog_active_fraction(entries : Array[CatalogEntry]) -> Double

    catalog_altitude_km

    fn catalog_altitude_km(entry : CatalogEntry) -> Double

    catalog_altitude_stats

    fn catalog_altitude_stats(entries : Array[CatalogEntry]) -> SampleStats

    catalog_density

    fn catalog_density(entries : Array[CatalogEntry], altitude_bin_km : Double) -> Array[Int]

    catalog_matches

    fn catalog_matches(query : CatalogQuery, entry : CatalogEntry) -> Bool

    catalog_merge

    fn catalog_merge(left : Array[CatalogEntry], right : Array[CatalogEntry]) -> Array[CatalogEntry]

    catalog_names

    fn catalog_names(entries : Array[CatalogEntry]) -> Array[String]

    catalog_period_stats

    fn catalog_period_stats(entries : Array[CatalogEntry]) -> SampleStats

    celsius_to_fahrenheit

    fn celsius_to_fahrenheit(value : Double) -> Double

    celsius_to_kelvin

    fn celsius_to_kelvin(value : Double) -> Double

    centimeters_to_meters

    fn centimeters_to_meters(value : Double) -> Double

    central_acceleration

    fn central_acceleration(mu : Double, position : Vec3) -> Vec3

    centroid

    fn centroid(points : Array[Vec3]) -> Vec3

    circular_orbit

    fn circular_orbit(radius_km : Double, inclination_rad : Double) -> ClassicalElements

    circular_speed

    fn circular_speed(mu : Double, radius_km : Double) -> Double

    circularize_cost

    fn circularize_cost(mu : Double, radius_km : Double, eccentricity : Double) -> Double

    clamp

    fn clamp(x : Double, low : Double, high : Double) -> Double

    clamp_unit

    fn clamp_unit(value : Double) -> Double

    closest_approach

    fn closest_approach(a : StateVector, b : StateVector) -> SafetyAssessment

    closest_points_on_lines

    fn closest_points_on_lines(p1 : Vec3, d1 : Vec3, p2 : Vec3, d2 : Vec3) -> (Vec3, Vec3)

    collect_visibility_windows

    fn collect_visibility_windows(samples : ArrayView[VisibilitySample]) -> Array[VisibilityWindow]

    collision_probability_proxy

    fn collision_probability_proxy(distance_km : Double, covariance_radius_km : Double) -> Double

    combined_plane_change

    fn combined_plane_change(speed_before_km_s : Double, speed_after_km_s : Double, angle_rad : Double) -> Double

    combined_plane_change_delta_v

    fn combined_plane_change_delta_v(before_speed : Double, after_speed : Double, angle_rad : Double) -> Double

    command_is_valid

    fn command_is_valid(command : ControlCommand) -> Bool

    command_is_within_tolerance

    fn command_is_within_tolerance(command : ControlCommand, tolerance_rad : Double) -> Bool

    communication_health

    fn communication_health(margin_db : Double, required_db : Double) -> HealthFlag

    compare_state_samples

    fn compare_state_samples(expected : Array[StateSample], actual : Array[StateSample]) -> StateComparison

    conjunction_screen

    fn conjunction_screen(reference : StateVector, objects : Array[StateVector], threshold_km : Double) -> Array[SafetyAssessment]

    contact_capacity

    fn contact_capacity(duration_s : Double, rate_kbps : Double, link : LinkBudget) -> ContactCapacity

    contact_data_volume_mb

    fn contact_data_volume_mb(rate_kbps : Double, duration_s : Double) -> Double

    contact_event

    fn contact_event(time_s : Double, label : String, duration_s : Double) -> MissionEvent

    contingency_step

    fn contingency_step(index : Int, name : String, duration_s : Double, resource_cost : Double) -> OperationStep

    control_command

    fn control_command(attitude : Quaternion, target : PointingTarget, body_axis : Vec3, max_rate_rad_s : Double) -> ControlCommand

    convert_unit

    fn convert_unit(value : Double, from : String, to : String) -> Double

    correlation

    fn correlation(xs : Array[Double], ys : Array[Double]) -> Double

    count_phase_overlaps

    fn count_phase_overlaps(scenario : MissionScenario) -> Int

    covariance

    fn covariance(xs : Array[Double], ys : Array[Double]) -> Double

    covariance_of_observations

    fn covariance_of_observations(first : Array[Observation], second : Array[Observation]) -> Double

    coverage_cells_for_track

    fn coverage_cells_for_track(track : Array[GroundTrackPoint], latitude_step_rad : Double, longitude_step_rad : Double) -> Int

    coverage_grid

    fn coverage_grid(latitude_step_rad : Double, longitude_step_rad : Double) -> Array[Geodetic]

    coverage_report

    fn coverage_report(station : GroundStation, points : Array[GroundTrackPoint], epoch : Epoch, elements : ClassicalElements, min_elevation_rad : Double) -> CoverageReport

    cubic_meters_to_liters

    fn cubic_meters_to_liters(value : Double) -> Double

    cumulative_maximum

    fn cumulative_maximum(values : Array[Double]) -> Array[Double]

    cumulative_sum

    fn cumulative_sum(values : Array[Double]) -> Array[Double]

    cylindrical_eclipse

    fn cylindrical_eclipse(satellite_position : Vec3, sun_direction : Vec3, earth_radius_km : Double) -> EclipseResult

    daylight_fraction

    fn daylight_fraction(result : EclipseResult) -> Double

    days_to_seconds

    fn days_to_seconds(value : Double) -> Double

    db_to_linear

    fn db_to_linear(value : Double) -> Double

    dbw_to_watts

    fn dbw_to_watts(value : Double) -> Double

    decibels_to_ratio

    fn decibels_to_ratio(value : Double) -> Double

    deg_per_second_to_rad_per_second

    fn deg_per_second_to_rad_per_second(value : Double) -> Double

    deg_to_rad

    let deg_to_rad : Double

    degrees

    fn degrees(radians : Double) -> Double

    degrees_to_radians

    fn degrees_to_radians(value : Double) -> Double

    denormalize_parameter

    fn denormalize_parameter(value : Double, lower : Double, upper : Double) -> Double

    desaturation_delta_v

    fn desaturation_delta_v(momentum : Vec3, wheel_inertia : Vec3, thruster_arm_km : Vec3) -> Vec3

    destination_point

    fn destination_point(start : Geodetic, bearing_rad : Double, distance_km : Double) -> Geodetic

    detect_step_changes

    fn detect_step_changes(samples : Array[TelemetrySample], threshold : Double) -> Array[TelemetrySample]

    doppler_corrected_frequency

    fn doppler_corrected_frequency(carrier_hz : Double, radial_speed_km_s : Double) -> Double

    doppler_shift_hz

    fn doppler_shift_hz(carrier_hz : Double, radial_speed_km_s : Double) -> Double

    drag_acceleration

    fn drag_acceleration(model : AccelerationModel, position : Vec3, velocity : Vec3) -> Vec3

    dynamic_pressure

    fn dynamic_pressure(density_kg_m3 : Double, speed_m_s : Double) -> Double

    earth_mu_km3_s2

    let earth_mu_km3_s2 : Double

    earth_radius_km

    let earth_radius_km : Double

    earth_rotation_rad_s

    let earth_rotation_rad_s : Double

    eccentric_anomaly_from_true

    fn eccentric_anomaly_from_true(true_anomaly_rad : Double, eccentricity : Double) -> Double

    eccentricity_is_valid

    fn eccentricity_is_valid(elements : ClassicalElements, maximum : Double) -> Bool

    ecef_distance_km

    fn ecef_distance_km(a : Vec3, b : Vec3) -> Double

    ecef_to_eci

    fn ecef_to_eci(epoch : Epoch, position_ecef_km : Vec3) -> Vec3

    ecef_to_geodetic_spherical

    fn ecef_to_geodetic_spherical(pos : Vec3) -> Geodetic

    ecef_to_geodetic_wgs84

    fn ecef_to_geodetic_wgs84(position : Vec3) -> Geodetic

    eci_to_ecef

    fn eci_to_ecef(epoch : Epoch, position_eci_km : Vec3) -> Vec3

    eclipse_geometry

    fn eclipse_geometry(satellite_to_sun : Vec3, satellite_to_earth : Vec3, earth_radius_km : Double, sun_radius_km : Double) -> EclipseResult

    eclipse_is_partial

    fn eclipse_is_partial(result : EclipseResult) -> Bool

    eclipse_is_total

    fn eclipse_is_total(result : EclipseResult) -> Bool

    eclipse_margin_rad

    fn eclipse_margin_rad(result : EclipseResult) -> Double

    effective_data_rate

    fn effective_data_rate(rate_kbps : Double, packet_error : Double) -> Double

    elements_to_state

    fn elements_to_state(mu : Double, elements : ClassicalElements) -> StateVector

    elevation_rate

    fn elevation_rate(previous : LookAngle, current : LookAngle, delta_t_s : Double) -> Double

    enu_coordinates

    fn enu_coordinates(site : Geodetic, target_ecef : Vec3) -> Vec3

    escape_speed

    fn escape_speed(mu : Double, radius_km : Double) -> Double

    escape_velocity

    fn escape_velocity(mu : Double, radius_km : Double) -> Double

    estimate_eclipse_duration

    fn estimate_eclipse_duration(orbit_radius_km : Double, earth_radius_km : Double, orbital_speed_km_s : Double) -> Double

    estimate_observation_bias

    fn estimate_observation_bias(observations : Array[Observation]) -> ScalarEstimate

    estimate_orbit_pass

    fn estimate_orbit_pass(station : GroundStation, elements : ClassicalElements, start_epoch : Epoch, duration_s : Double, step_s : Double, min_elevation_rad : Double) -> Array[PassWindow]

    euler_to_quaternion

    fn euler_to_quaternion(euler : EulerAngles) -> Quaternion

    evaluate_design

    fn evaluate_design(mu : Double, elements : ClassicalElements, constraint : DesignConstraint) -> DesignCandidate

    evaluate_launch_window

    fn evaluate_launch_window(latitude_rad : Double, target_inclination_rad : Double, epoch_day : Double, duration_s : Double) -> LaunchWindow

    exponential_density_kg_m3

    fn exponential_density_kg_m3(altitude_km : Double, scale_height_km : Double) -> Double

    fahrenheit_to_celsius

    fn fahrenheit_to_celsius(value : Double) -> Double

    feasible_designs

    fn feasible_designs(candidates : Array[DesignCandidate]) -> Array[DesignCandidate]

    filter_catalog

    fn filter_catalog(entries : Array[CatalogEntry], query : CatalogQuery) -> Array[CatalogEntry]

    filter_windows_by_time

    fn filter_windows_by_time(windows : Array[VisibilityWindow], start : Epoch, end : Epoch) -> Array[VisibilityWindow]

    find_bracket

    fn find_bracket(f : (Double) -> Double, start : Double, end : Double, samples? : Int) -> (Double, Double)?

    find_catalog_entry

    fn find_catalog_entry(entries : Array[CatalogEntry], id : String) -> CatalogEntry?

    find_equator_crossings

    fn find_equator_crossings(track : Array[GroundTrackPoint]) -> Array[GroundTrackPoint]

    finite_difference

    fn finite_difference(values : Array[Double], spacing : Double) -> Array[Double]

    finite_difference_gradient

    fn finite_difference_gradient(objective : (Array[Double]) -> Double, parameters : Array[Double], step : Double) -> Array[Double]

    finite_or

    fn finite_or(value : Double, fallback : Double) -> Double

    fit_observation_trend

    fn fit_observation_trend(observations : Array[Observation]) -> TrendEstimate

    flight_path_angle

    fn flight_path_angle(state : StateVector) -> Double

    format_duration_seconds

    fn format_duration_seconds(value : Double) -> String

    fraction_to_percent

    fn fraction_to_percent(value : Double) -> Double

    free_space_path_loss_db

    fn free_space_path_loss_db(distance_km : Double, frequency_ghz : Double) -> Double

    geodesic_surface_distance_km

    fn geodesic_surface_distance_km(a : Geodetic, b : Geodetic) -> Double

    geodetic_height_above_ellipsoid

    fn geodetic_height_above_ellipsoid(site : Geodetic) -> Double

    geodetic_to_ecef

    fn geodetic_to_ecef(site : Geodetic) -> Vec3

    geodetic_to_ecef_wgs84

    fn geodetic_to_ecef_wgs84(site : Geodetic) -> Vec3

    gmst

    fn gmst(epoch : Epoch) -> Double

    gradient_descent

    fn gradient_descent(objective : (Array[Double]) -> Double, initial : Array[Double], learning_rate : Double, iterations : Int) -> OptimizationResult

    great_circle_angle

    fn great_circle_angle(a : Vec3, b : Vec3) -> Double

    great_circle_arc_length

    fn great_circle_arc_length(radius : Double, a : Vec3, b : Vec3) -> Double

    grid_search_1d

    fn grid_search_1d(objective : (Double) -> Double, lower : Double, upper : Double, samples : Int) -> (Double, Double)

    ground_track

    fn ground_track(mu : Double, elements : ClassicalElements, epoch : Epoch, duration_s : Double, step_s : Double) -> Array[GroundTrackPoint]

    ground_track_bounds

    fn ground_track_bounds(track : Array[GroundTrackPoint]) -> GroundTrackBounds

    ground_track_gap_count

    fn ground_track_gap_count(track : Array[GroundTrackPoint], maximum_gap_s : Double) -> Int

    ground_track_path_length

    fn ground_track_path_length(track : Array[GroundTrackPoint]) -> Double

    ground_track_summary

    fn ground_track_summary(track : Array[GroundTrackPoint]) -> GroundTrackSummary

    half_pi

    let half_pi : Double

    health_flag

    fn health_flag(name : String, value : Double, lower : Double, upper : Double) -> HealthFlag

    health_flags

    fn health_flags(values : Array[(String, Double)], lower : Double, upper : Double) -> Array[HealthFlag]

    health_is_nominal

    fn health_is_nominal(flags : Array[HealthFlag]) -> Bool

    health_is_valid

    fn health_is_valid(flag : HealthFlag) -> Bool

    health_margin

    fn health_margin(flag : HealthFlag) -> Double

    health_score

    fn health_score(flags : Array[HealthFlag]) -> Double

    health_summary

    fn health_summary(flags : Array[HealthFlag]) -> String

    health_worst_margin

    fn health_worst_margin(flags : Array[HealthFlag]) -> Double

    healthy_fraction

    fn healthy_fraction(flags : Array[HealthFlag]) -> Double

    hertz_to_period_seconds

    fn hertz_to_period_seconds(value : Double) -> Double

    histogram

    fn histogram(values : Array[Double], lower : Double, upper : Double, bins : Int) -> Histogram

    histogram_is_valid

    fn histogram_is_valid(histogram : Histogram) -> Bool

    hohmann_like_lambert

    fn hohmann_like_lambert(mu : Double, start : Vec3, end : Vec3, time_of_flight_s : Double) -> LambertSolution

    hohmann_transfer

    fn hohmann_transfer(mu : Double, radius_initial_km : Double, radius_final_km : Double) -> HohmannTransfer

    horizon_mask_elevation

    fn horizon_mask_elevation(azimuth_rad : Double, mask_coefficients : Array[Double]) -> Double

    hours_to_seconds

    fn hours_to_seconds(value : Double) -> Double

    impulse_magnitude

    fn impulse_magnitude(delta_v : Vec3) -> Double

    inches_to_meters

    fn inches_to_meters(value : Double) -> Double

    inclination_change_cost

    fn inclination_change_cost(mu : Double, radius_km : Double, from_rad : Double, to_rad : Double) -> Double

    inclination_is_valid

    fn inclination_is_valid(elements : ClassicalElements, minimum_rad : Double, maximum_rad : Double) -> Bool

    inertial_to_perifocal

    fn inertial_to_perifocal(elements : ClassicalElements, vector : Vec3) -> Vec3

    information_variance

    fn information_variance(observations : Array[Observation]) -> Double

    initial_bearing_rad

    fn initial_bearing_rad(a : Geodetic, b : Geodetic) -> Double

    innovation_is_acceptable

    fn innovation_is_acceptable(estimate : ScalarEstimate, limit_sigma : Double) -> Bool

    integrate_dynamics

    fn integrate_dynamics(model : AccelerationModel, initial : StateVector, duration_s : Double, step_s : Double) -> Array[DynamicsState]

    integrate_simpson

    fn integrate_simpson(values : Array[Double], spacing : Double) -> Double

    integrate_trapezoid

    fn integrate_trapezoid(xs : Array[Double], ys : Array[Double]) -> Double

    integrate_uniform

    fn integrate_uniform(values : Array[Double], spacing : Double) -> Double

    interpolate_angle

    fn interpolate_angle(xs : Array[Double], ys : Array[Double], query : Double) -> Double

    interpolate_array

    fn interpolate_array(xs : Array[Double], ys : Array[Double], query : Double) -> Double

    interpolate_direction

    fn interpolate_direction(a : Vec3, b : Vec3, t : Double) -> Vec3

    interpolate_state

    fn interpolate_state(a : StateVector, b : StateVector, t : Double) -> StateVector

    invalid_observation_quality

    fn invalid_observation_quality() -> ObservationQuality

    inverse_lerp

    fn inverse_lerp(a : Double, b : Double, value : Double) -> Double

    is_close

    fn is_close(actual : Double, expected : Double, absolute? : Double, relative? : Double) -> Bool

    is_collision_risk

    fn is_collision_risk(assessment : SafetyAssessment, threshold_km : Double) -> Bool

    is_line_of_sight_clear

    fn is_line_of_sight_clear(site_ecef : Vec3, satellite_ecef : Vec3) -> Bool

    is_reentry_risk

    fn is_reentry_risk(elements : ClassicalElements) -> Bool

    let j2 : Double

    j2_acceleration

    fn j2_acceleration(mu : Double, radius_km : Double, coefficient : Double, position : Vec3) -> Vec3

    j2_secular_rates

    fn j2_secular_rates(mu : Double, radius_body_km : Double, j2_value : Double, elements : ClassicalElements) -> J2Rates

    joules_to_kilowatt_hours

    fn joules_to_kilowatt_hours(value : Double) -> Double

    joules_to_watt_hours

    fn joules_to_watt_hours(value : Double) -> Double

    kelvin_to_celsius

    fn kelvin_to_celsius(value : Double) -> Double

    kilograms_force_to_newtons

    fn kilograms_force_to_newtons(value : Double) -> Double

    kilograms_to_pounds

    fn kilograms_to_pounds(value : Double) -> Double

    kilometers_per_second_to_meters_per_second

    fn kilometers_per_second_to_meters_per_second(value : Double) -> Double

    kilometers_to_au

    fn kilometers_to_au(value : Double) -> Double

    kilometers_to_meters

    fn kilometers_to_meters(value : Double) -> Double

    kilometers_to_miles

    fn kilometers_to_miles(value : Double) -> Double

    kilowatt_hours_to_joules

    fn kilowatt_hours_to_joules(value : Double) -> Double

    kinetic_rotation_energy

    fn kinetic_rotation_energy(attitude : AttitudeState, inertia_diagonal : Vec3) -> Double

    knots_to_meters_per_second

    fn knots_to_meters_per_second(value : Double) -> Double

    lambert_delta_v

    fn lambert_delta_v(solution : LambertSolution, initial_velocity : Vec3, final_velocity : Vec3) -> (Double, Double, Double)

    lambert_universal

    fn lambert_universal(mu : Double, start : Vec3, end : Vec3, time_of_flight_s : Double, prograde? : Bool, max_iterations? : Int) -> LambertSolution

    launch_azimuth

    fn launch_azimuth(latitude_rad : Double, inclination_rad : Double) -> Double

    launch_window_sequence

    fn launch_window_sequence(start_day : Double, count : Int, spacing_s : Double, latitude_rad : Double, inclination_rad : Double) -> Array[LaunchWindow]

    lerp_scalar

    fn lerp_scalar(a : Double, b : Double, t : Double) -> Double

    lifetime_margin_days

    fn lifetime_margin_days(lifetime_days : Double, planned_days : Double) -> Double

    light_time_s

    fn light_time_s(distance_km : Double) -> Double

    line_of_sight

    fn line_of_sight(site_ecef : Vec3, target_ecef : Vec3, body_radius_km : Double) -> Bool

    line_point_distance

    fn line_point_distance(line_point : Vec3, line_direction : Vec3, point : Vec3) -> Double

    linear_regression

    fn linear_regression(xs : Array[Double], ys : Array[Double]) -> LinearRegression

    linear_to_db

    fn linear_to_db(value : Double) -> Double

    fn link_availability(margins : Array[Double], threshold_db : Double) -> Double

    fn link_budget(frequency_ghz : Double, distance_km : Double, tx_power_dbw : Double, antenna_gain_db : Double, losses_db : Double, required_db : Double) -> LinkBudget

    fn link_is_usable(budget : LinkBudget, required_margin_db : Double) -> Bool

    fn link_is_valid(link : LinkBudget) -> Bool

    liters_to_cubic_meters

    fn liters_to_cubic_meters(value : Double) -> Double

    local_frame

    fn local_frame(site : Geodetic) -> LocalFrame

    local_gravity_m_s2

    fn local_gravity_m_s2(latitude_rad : Double, altitude_km : Double) -> Double

    local_ned

    fn local_ned(site : Geodetic, target_ecef : Vec3) -> Vec3

    longitude_difference_rad

    fn longitude_difference_rad(a : Double, b : Double) -> Double

    longitude_span

    fn longitude_span(track : Array[GroundTrackPoint]) -> Double

    look_angle

    fn look_angle(site : Geodetic, satellite_ecef_km : Vec3) -> LookAngle

    look_angle_from_eci

    fn look_angle_from_eci(site : Geodetic, epoch : Epoch, satellite_eci_km : Vec3) -> LookAngle

    mach_number

    fn mach_number(speed_m_s : Double, sound_speed_m_s : Double) -> Double

    make_delta_v_budget

    fn make_delta_v_budget(planned_km_s : Double, reserve_fraction? : Double) -> DeltaVBudget

    make_pointing_target

    fn make_pointing_target(direction : Vec3, roll_rad : Double, tolerance_rad : Double) -> PointingTarget

    make_visibility_window

    fn make_visibility_window(start : Epoch, end : Epoch, max_elevation_rad : Double, closest_range_km : Double) -> VisibilityWindow

    maneuver_event

    fn maneuver_event(time_s : Double, label : String, delta_v_km_s : Double) -> MissionEvent

    mark_observation_outlier

    fn mark_observation_outlier(observation : Observation, limit_sigma : Double) -> Observation

    maximum_latitude

    fn maximum_latitude(track : Array[GroundTrackPoint]) -> Double

    mean

    fn mean(values : Array[Double]) -> Double

    mean_altitude

    fn mean_altitude(track : Array[GroundTrackPoint]) -> Double

    mean_anomaly_from_eccentric

    fn mean_anomaly_from_eccentric(eccentric_anomaly_rad : Double, eccentricity : Double) -> Double

    mean_motion

    fn mean_motion(mu : Double, semi_major_axis_km : Double) -> Double

    mean_motion_rev_day_to_rad_s

    fn mean_motion_rev_day_to_rad_s(mean_motion_rev_day : Double) -> Double

    merge_adjacent_windows

    fn merge_adjacent_windows(windows : Array[VisibilityWindow], maximum_gap_s : Double) -> Array[VisibilityWindow]

    meridian_radius_km

    fn meridian_radius_km(latitude_rad : Double) -> Double

    meters_per_second_to_kilometers_per_second

    fn meters_per_second_to_kilometers_per_second(value : Double) -> Double

    meters_per_second_to_knots

    fn meters_per_second_to_knots(value : Double) -> Double

    meters_to_centimeters

    fn meters_to_centimeters(value : Double) -> Double

    meters_to_inches

    fn meters_to_inches(value : Double) -> Double

    meters_to_kilometers

    fn meters_to_kilometers(value : Double) -> Double

    meters_to_millimeters

    fn meters_to_millimeters(value : Double) -> Double

    metric_is_valid

    fn metric_is_valid(metrics : TrajectoryMetrics) -> Bool

    miles_to_kilometers

    fn miles_to_kilometers(value : Double) -> Double

    millimeters_to_meters

    fn millimeters_to_meters(value : Double) -> Double

    minimize_delta_v

    fn minimize_delta_v(mu : Double, radii : Array[Double]) -> (Double, Double)

    minutes_to_seconds

    fn minutes_to_seconds(value : Double) -> Double

    mission_energy_proxy

    fn mission_energy_proxy(mu : Double, elements : ClassicalElements, mass_kg : Double) -> Double

    mission_event_count

    fn mission_event_count(timeline : MissionTimeline, kind : MissionEventKind) -> Int

    mission_event_kind_name

    fn mission_event_kind_name(kind : MissionEventKind) -> String

    mission_phase

    fn mission_phase(name : String, start_s : Double, end_s : Double, delta_v_km_s : Double) -> MissionPhase

    mission_report

    fn mission_report(timeline : MissionTimeline, budget : DeltaVBudget) -> OrbitReport

    mission_success_probability

    fn mission_success_probability(probabilities : Array[Double]) -> Double

    moon_altitude

    fn moon_altitude(site : Geodetic, epoch : Epoch) -> Double

    moon_position

    fn moon_position(epoch : Epoch) -> MoonPosition

    moving_average

    fn moving_average(values : Array[Double], window : Int) -> Array[Double]

    fn navigation_health(position_error_km : Double, limit_km : Double) -> HealthFlag

    nearest_index

    fn nearest_index(values : Array[Double], query : Double) -> Int

    nearest_value

    fn nearest_value(values : Array[Double], query : Double) -> Double

    nearly_equal

    fn nearly_equal(a : Double, b : Double, eps : Double) -> Bool

    newton

    fn newton(f : (Double) -> Double, derivative : (Double) -> Double, initial : Double, tolerance? : Double, max_iterations? : Int) -> RootResult

    newtons_to_kilograms_force

    fn newtons_to_kilograms_force(value : Double) -> Double

    noise_from_density

    fn noise_from_density(density_w_hz : Double, bandwidth_hz : Double) -> Double

    nominal_step

    fn nominal_step(index : Int, name : String, duration_s : Double, resource_cost : Double) -> OperationStep

    normalize_angle

    fn normalize_angle(theta : Double) -> Double

    normalize_angle_degrees

    fn normalize_angle_degrees(value : Double) -> Double

    normalize_parameter

    fn normalize_parameter(value : Double, lower : Double, upper : Double) -> Double

    normalize_series

    fn normalize_series(values : Array[Double]) -> Array[Double]

    normalize_time_of_day_seconds

    fn normalize_time_of_day_seconds(value : Double) -> Double

    normalize_weights

    fn normalize_weights(weights : Array[Double]) -> Array[Double]

    objective_orbit_altitude

    fn objective_orbit_altitude(mu : Double, elements : ClassicalElements, target_altitude_km : Double) -> Double

    observation_information

    fn observation_information(observations : Array[Observation]) -> Double

    observation_kind_is_angular

    fn observation_kind_is_angular(kind : ObservationKind) -> Bool

    observation_kind_is_dynamic

    fn observation_kind_is_dynamic(kind : ObservationKind) -> Bool

    observation_kind_name

    fn observation_kind_name(kind : ObservationKind) -> String

    observation_prediction

    fn observation_prediction(station : GroundStation, epoch : Epoch, state : StateVector, kind : ObservationKind) -> Double

    observation_quality_score

    fn observation_quality_score(observation : Observation) -> Double

    observation_residual

    fn observation_residual(observation : Observation, state : StateVector) -> Double

    observation_residual_summary

    fn observation_residual_summary(observations : Array[Observation], gate_sigma : Double) -> ResidualSummary

    observe_state

    fn observe_state(station : GroundStation, epoch : Epoch, state : StateVector, kind : ObservationKind, bias? : Double, sigma? : Double) -> Observation

    orbit_eccentricity_limit

    fn orbit_eccentricity_limit(elements : ClassicalElements) -> Double

    orbit_intersects_body

    fn orbit_intersects_body(elements : ClassicalElements, body_radius_km : Double) -> Bool

    orbit_is_valid

    fn orbit_is_valid(elements : ClassicalElements) -> Bool

    orbit_report

    fn orbit_report(mu : Double, elements : ClassicalElements) -> OrbitReport

    orbit_state_angular_momentum

    fn orbit_state_angular_momentum(state : StateVector) -> Double

    orbit_state_energy

    fn orbit_state_energy(mu : Double, state : StateVector) -> Double

    orbital_period

    fn orbital_period(mu : Double, semi_major_axis_km : Double) -> Double

    orthogonal_basis

    fn orthogonal_basis(axis : Vec3) -> (Vec3, Vec3)

    outliers

    fn outliers(values : Array[Double], threshold : Double) -> Array[Double]

    packet_error_rate

    fn packet_error_rate(eb_no_db : Double, coding_gain_db : Double) -> Double

    pareto_front

    fn pareto_front(values : Array[(Double, Double)]) -> Array[(Double, Double)]

    parse_tle

    fn parse_tle(name : String, line1 : String, line2 : String) -> Result[TleRecord, TleParseError]

    pascal_to_bar

    fn pascal_to_bar(value : Double) -> Double

    pascal_to_psi

    fn pascal_to_psi(value : Double) -> Double

    pass_is_valid

    fn pass_is_valid(window : PassWindow) -> Bool

    payload_data_generated

    fn payload_data_generated(profile : ResourceProfile, utilization : Double) -> Double

    percent_to_fraction

    fn percent_to_fraction(value : Double) -> Double

    percentile

    fn percentile(values : Array[Double], fraction : Double) -> Double

    perifocal_to_inertial

    fn perifocal_to_inertial(elements : ClassicalElements, vector : Vec3) -> Vec3

    perigee_apogee

    fn perigee_apogee(elements : ClassicalElements) -> PerigeeApogee

    period_is_valid

    fn period_is_valid(elements : ClassicalElements, minimum_s : Double, maximum_s : Double) -> Bool

    period_seconds_to_hertz

    fn period_seconds_to_hertz(value : Double) -> Double

    phase_contains

    fn phase_contains(phase : MissionPhase, time_s : Double) -> Bool

    phase_duration_s

    fn phase_duration_s(phase : MissionPhase) -> Double

    phase_is_well_formed

    fn phase_is_well_formed(phase : MissionPhase) -> Bool

    phase_utilization

    fn phase_utilization(phase : MissionPhase, resource_limit : Double) -> Double

    phases_at_time

    fn phases_at_time(scenario : MissionScenario, time_s : Double) -> Array[MissionPhase]

    phases_with_priority

    fn phases_with_priority(scenario : MissionScenario, minimum_priority : Int) -> Array[MissionPhase]

    phasing_delta_v

    fn phasing_delta_v(mu : Double, radius_km : Double, phase_angle_rad : Double, cycles : Int) -> Double

    phasing_orbit_axis

    fn phasing_orbit_axis(mu : Double, target_period_s : Double) -> Double

    photon_energy

    fn photon_energy(frequency_hz : Double) -> Double

    let pi : Double

    plan_windows

    fn plan_windows(windows : Array[VisibilityWindow], constraint : WindowConstraint, rate_kbps : Double) -> WindowSchedule

    plane_change

    fn plane_change(speed_km_s : Double, angle_rad : Double) -> PlaneChange

    plane_change_delta_v

    fn plane_change_delta_v(speed_km_s : Double, angle_rad : Double) -> Double

    pointing_error

    fn pointing_error(attitude : Quaternion, target : PointingTarget, body_axis : Vec3) -> Double

    polynomial

    fn polynomial(coefficients : Array[Double], x : Double) -> Double

    polynomial_derivative

    fn polynomial_derivative(coefficients : Array[Double], x : Double) -> Double

    polynomial_fit_linear

    fn polynomial_fit_linear(xs : Array[Double], ys : Array[Double]) -> (Double, Double)

    pounds_to_kilograms

    fn pounds_to_kilograms(value : Double) -> Double

    predict_linear

    fn predict_linear(model : (Double, Double), x : Double) -> Double

    predict_trend

    fn predict_trend(estimate : TrendEstimate, epoch : Epoch) -> Double

    prime_vertical_radius_km

    fn prime_vertical_radius_km(latitude_rad : Double) -> Double

    profile_maximum

    fn profile_maximum(values : Array[Double]) -> Double

    profile_minimum

    fn profile_minimum(values : Array[Double]) -> Double

    profile_range

    fn profile_range(values : Array[Double]) -> Double

    project_onto

    fn project_onto(v : Vec3, axis : Vec3) -> Vec3

    project_to_plane

    fn project_to_plane(v : Vec3, normal : Vec3) -> Vec3

    propagate_catalog

    fn propagate_catalog(entries : Array[CatalogEntry], delta_t_s : Double) -> Array[CatalogEntry]

    propagate_j2_mean_elements

    fn propagate_j2_mean_elements(mu : Double, radius_body_km : Double, j2_value : Double, elements : ClassicalElements, delta_t_s : Double) -> ClassicalElements

    propagate_kepler

    fn propagate_kepler(mu : Double, elements : ClassicalElements, delta_t_s : Double) -> ClassicalElements

    propagate_state_samples

    fn propagate_state_samples(mu : Double, elements : ClassicalElements, times_s : Array[Double]) -> Array[StateSample]

    propellant_mass_from_delta_v

    fn propellant_mass_from_delta_v(initial_mass_kg : Double, delta_v_km_s : Double, exhaust_velocity_km_s : Double) -> Double

    propulsion_health

    fn propulsion_health(remaining_km_s : Double, required_km_s : Double) -> HealthFlag

    psi_to_pascal

    fn psi_to_pascal(value : Double) -> Double

    quantize

    fn quantize(value : Double, step : Double) -> Double

    quaternion_command_error

    fn quaternion_command_error(desired : Quaternion, current : Quaternion) -> Vec3

    quaternion_distance

    fn quaternion_distance(a : Quaternion, b : Quaternion) -> Double

    quaternion_slerp

    fn quaternion_slerp(a : Quaternion, b : Quaternion, t : Double) -> Quaternion

    quaternion_to_euler

    fn quaternion_to_euler(q : Quaternion) -> EulerAngles

    rad_per_second_to_deg_per_second

    fn rad_per_second_to_deg_per_second(value : Double) -> Double

    rad_per_second_to_revolutions_per_day

    fn rad_per_second_to_revolutions_per_day(value : Double) -> Double

    rad_to_deg

    let rad_to_deg : Double

    radial_profile

    fn radial_profile(mu : Double, elements : ClassicalElements, count : Int) -> Array[Double]

    radial_transverse_normal

    fn radial_transverse_normal(position : Vec3, velocity : Vec3) -> (Vec3, Vec3, Vec3)

    radial_velocity

    fn radial_velocity(state : StateVector) -> Double

    radians

    fn radians(degrees : Double) -> Double

    radians_to_arcseconds

    fn radians_to_arcseconds(value : Double) -> Double

    radians_to_degrees

    fn radians_to_degrees(value : Double) -> Double

    range_rate

    fn range_rate(a : StateVector, b : StateVector) -> Double

    rank_designs

    fn rank_designs(candidates : Array[DesignCandidate]) -> Array[DesignCandidate]

    ratio_to_decibels

    fn ratio_to_decibels(value : Double) -> Double

    reaction_wheel_momentum

    fn reaction_wheel_momentum(inertia : Vec3, angular_velocity : Vec3) -> Vec3

    refine_pass_peak

    fn refine_pass_peak(station : GroundStation, elements : ClassicalElements, epoch : Epoch, start_s : Double, end_s : Double, step_s : Double) -> Double

    reflect

    fn reflect(v : Vec3, normal : Vec3) -> Vec3

    regression_is_valid

    fn regression_is_valid(model : LinearRegression) -> Bool

    reject_from

    fn reject_from(v : Vec3, axis : Vec3) -> Vec3

    reject_observation

    fn reject_observation(observation : Observation, gate_sigma : Double) -> Observation

    reject_outliers

    fn reject_outliers(observations : Array[Observation], gate_sigma : Double) -> Array[Observation]

    relative_error

    fn relative_error(actual : Double, expected : Double) -> Double

    relative_motion_distance

    fn relative_motion_distance(a : StateVector, b : StateVector, delta_t_s : Double) -> Double

    relative_state

    fn relative_state(a : StateVector, b : StateVector) -> StateVector

    repeat_ground_track_period

    fn repeat_ground_track_period(mu : Double, semi_major_axis_km : Double, earth_rotation_s : Double, revolutions : Int) -> Double

    report_is_valid

    fn report_is_valid(report : OrbitReport) -> Bool

    resample_ground_track

    fn resample_ground_track(track : Array[GroundTrackPoint], times : Array[Double]) -> Array[GroundTrackPoint]

    resample_linear

    fn resample_linear(samples : Array[TelemetrySample], times : Array[Double]) -> Array[TelemetrySample]

    resample_uniform

    fn resample_uniform(values : Array[Double], start : Double, step : Double, count : Int) -> Array[Double]

    residuals_linear

    fn residuals_linear(model : (Double, Double), xs : Array[Double], ys : Array[Double]) -> Array[Double]

    resource_data_volume_mb

    fn resource_data_volume_mb(profile : ResourceProfile) -> Double

    resource_end_of_life_power

    fn resource_end_of_life_power(profile : ResourceProfile, degradation_fraction : Double) -> Double

    resource_is_valid

    fn resource_is_valid(profile : ResourceProfile) -> Bool

    resource_mass_fraction

    fn resource_mass_fraction(profile : ResourceProfile) -> Double

    resource_profile

    fn resource_profile(mass_kg : Double, dry_mass_fraction : Double, power_w : Double, data_rate_kbps : Double, lifetime_days : Double) -> ResourceProfile

    revolutions_per_day_to_rad_per_second

    fn revolutions_per_day_to_rad_per_second(value : Double) -> Double

    reynolds_number

    fn reynolds_number(density : Double, speed : Double, length : Double, viscosity : Double) -> Double

    risk_weighted_cost

    fn risk_weighted_cost(cost : Double, probability : Double, consequence : Double) -> Double

    rk4_step

    fn rk4_step(model : AccelerationModel, state : StateVector, step_s : Double) -> StateVector

    rocket_delta_v

    fn rocket_delta_v(initial_mass_kg : Double, final_mass_kg : Double, exhaust_velocity_km_s : Double) -> Double

    rotate_about_axis

    fn rotate_about_axis(v : Vec3, axis : Vec3, angle_rad : Double) -> Vec3

    rotate_body_to_inertial

    fn rotate_body_to_inertial(attitude : Quaternion, body : Vec3) -> Vec3

    rotate_inertial_to_body

    fn rotate_inertial_to_body(attitude : Quaternion, inertial : Vec3) -> Vec3

    rotate_x

    fn rotate_x(v : Vec3, angle_rad : Double) -> Vec3

    rotate_xyz

    fn rotate_xyz(v : Vec3, roll_rad : Double, pitch_rad : Double, yaw_rad : Double) -> Vec3

    rotate_y

    fn rotate_y(v : Vec3, angle_rad : Double) -> Vec3

    rotate_z

    fn rotate_z(v : Vec3, angle_rad : Double) -> Vec3

    round_trip_delay_s

    fn round_trip_delay_s(distance_km : Double) -> Double

    safety_margin_km

    fn safety_margin_km(assessment : SafetyAssessment, required_distance_km : Double) -> Double

    sample_kepler_visibility

    fn sample_kepler_visibility(mu : Double, station : GroundStation, start : Epoch, elements : ClassicalElements, step_s : Double, count : Int) -> Array[VisibilitySample]

    sample_visibility

    fn sample_visibility(station : GroundStation, epoch : Epoch, satellite_eci_km : Vec3) -> VisibilitySample

    scenario_append_all

    fn scenario_append_all(scenario : MissionScenario, phases : Array[MissionPhase]) -> MissionScenario

    scenario_delta_v

    fn scenario_delta_v(scenario : MissionScenario) -> Double

    scenario_duration_s

    fn scenario_duration_s(scenario : MissionScenario) -> Double

    scenario_is_empty

    fn scenario_is_empty(scenario : MissionScenario) -> Bool

    scenario_is_well_formed

    fn scenario_is_well_formed(scenario : MissionScenario) -> Bool

    scenario_peak_priority

    fn scenario_peak_priority(scenario : MissionScenario) -> Int

    scenario_phase_names

    fn scenario_phase_names(scenario : MissionScenario) -> Array[String]

    scenario_report

    fn scenario_report(scenario : MissionScenario, resource_limit : Double) -> String

    scenario_resource_cost

    fn scenario_resource_cost(scenario : MissionScenario) -> Double

    scenario_resource_margin

    fn scenario_resource_margin(scenario : MissionScenario, resource_limit : Double) -> Double

    scenario_to_timeline

    fn scenario_to_timeline(scenario : MissionScenario) -> MissionTimeline

    scenario_utilization

    fn scenario_utilization(scenario : MissionScenario, resource_limit : Double) -> Double

    schedule_contains_label

    fn schedule_contains_label(events : Array[MissionEvent], label : String) -> Bool

    schedule_delta_vs

    fn schedule_delta_vs(events : Array[MissionEvent]) -> Array[Double]

    schedule_durations

    fn schedule_durations(events : Array[MissionEvent]) -> Array[Double]

    schedule_efficiency

    fn schedule_efficiency(schedule : WindowSchedule) -> Double

    schedule_filter_kind

    fn schedule_filter_kind(events : Array[MissionEvent], kind : MissionEventKind) -> Array[MissionEvent]

    schedule_finish_time

    fn schedule_finish_time(events : Array[MissionEvent]) -> Double

    schedule_first

    fn schedule_first(events : Array[MissionEvent]) -> MissionEvent?

    schedule_first_window

    fn schedule_first_window(schedule : WindowSchedule) -> PlannedWindow?

    schedule_from_timeline

    fn schedule_from_timeline(timeline : MissionTimeline) -> Array[MissionEvent]

    schedule_gap_seconds

    fn schedule_gap_seconds(schedule : WindowSchedule) -> Double

    schedule_idle_time

    fn schedule_idle_time(events : Array[MissionEvent]) -> Double

    schedule_is_feasible

    fn schedule_is_feasible(schedule : WindowSchedule, minimum_volume_mb : Double) -> Bool

    schedule_labels

    fn schedule_labels(events : Array[MissionEvent]) -> Array[String]

    schedule_last

    fn schedule_last(events : Array[MissionEvent]) -> MissionEvent?

    schedule_last_window

    fn schedule_last_window(schedule : WindowSchedule) -> PlannedWindow?

    schedule_overlap_count

    fn schedule_overlap_count(events : Array[MissionEvent]) -> Int

    schedule_scale

    fn schedule_scale(events : Array[MissionEvent], factor : Double) -> Array[MissionEvent]

    schedule_shift

    fn schedule_shift(events : Array[MissionEvent], delta_s : Double) -> Array[MissionEvent]

    schedule_sort

    fn schedule_sort(events : Array[MissionEvent]) -> Array[MissionEvent]

    schedule_summary

    fn schedule_summary(schedule : WindowSchedule) -> String

    schedule_time_span

    fn schedule_time_span(events : Array[MissionEvent]) -> Double

    schedule_times

    fn schedule_times(events : Array[MissionEvent]) -> Array[Double]

    schedule_to_mission_timeline

    fn schedule_to_mission_timeline(schedule : WindowSchedule, label_prefix : String) -> MissionTimeline

    schedule_to_timeline

    fn schedule_to_timeline(events : Array[MissionEvent]) -> MissionTimeline

    schedule_total_cost

    fn schedule_total_cost(events : Array[MissionEvent]) -> Double

    schedule_total_duration

    fn schedule_total_duration(events : Array[MissionEvent]) -> Double

    schedule_validate

    fn schedule_validate(events : Array[MissionEvent]) -> ValidationReport

    schedule_window

    fn schedule_window(window : VisibilityWindow, constraint : WindowConstraint, rate_kbps : Double) -> PlannedWindow

    schedule_window_count

    fn schedule_window_count(schedule : WindowSchedule) -> Int

    score_is_valid

    fn score_is_valid(score : MissionScore) -> Bool

    score_mission

    fn score_mission(safety : Double, coverage : Double, cost : Double, science : Double, weights : Array[Double]) -> MissionScore

    second_difference

    fn second_difference(values : Array[Double], spacing : Double) -> Array[Double]

    seconds_to_days

    fn seconds_to_days(value : Double) -> Double

    seconds_to_hours

    fn seconds_to_hours(value : Double) -> Double

    seconds_to_minutes

    fn seconds_to_minutes(value : Double) -> Double

    segment_ground_track

    fn segment_ground_track(track : Array[GroundTrackPoint], maximum_gap_s : Double) -> Array[GroundTrackSegment]

    segment_point_distance

    fn segment_point_distance(start : Vec3, end : Vec3, point : Vec3) -> Double

    select_best_candidate

    fn select_best_candidate(candidates : Array[DesignCandidate]) -> DesignCandidate?

    semi_latus_rectum

    fn semi_latus_rectum(elements : ClassicalElements) -> Double

    semi_major_axis_from_mean_motion

    fn semi_major_axis_from_mean_motion(mu : Double, mean_motion_rev_day : Double) -> Double

    sgp4_status

    fn sgp4_status() -> Sgp4Status

    signal_to_noise_db

    fn signal_to_noise_db(signal : Double, noise : Double) -> Double

    signed_angle_about

    fn signed_angle_about(a : Vec3, b : Vec3, axis : Vec3) -> Double

    signed_angle_degrees

    fn signed_angle_degrees(value : Double) -> Double

    simulate_plan

    fn simulate_plan(plan : OperationPlan, available_resource : Double) -> OperationPlan

    site_is_valid

    fn site_is_valid(site : Geodetic) -> Bool

    slew_time

    fn slew_time(angle_rad : Double, max_rate_rad_s : Double, max_accel_rad_s2 : Double) -> Double

    smooth_box

    fn smooth_box(values : Array[Double], radius : Int) -> Array[Double]

    smooth_exponential

    fn smooth_exponential(values : Array[Double], alpha : Double) -> Array[Double]

    smooth_step

    fn smooth_step(edge0 : Double, edge1 : Double, value : Double) -> Double

    solar_array_area_m2

    fn solar_array_area_m2(power_w : Double, efficiency : Double, flux_w_m2 : Double) -> Double

    solar_declination

    fn solar_declination(epoch : Epoch) -> Double

    solar_escape_margin

    fn solar_escape_margin(mu : Double, radius_km : Double, speed_km_s : Double) -> Double

    solar_flux_at_distance

    fn solar_flux_at_distance(distance_au : Double) -> Double

    solar_hour_angle

    fn solar_hour_angle(site : Geodetic, epoch : Epoch) -> Double

    solar_pressure_n_m2

    fn solar_pressure_n_m2(distance_au : Double) -> Double

    solve_kepler

    fn solve_kepler(mean_anomaly_rad : Double, eccentricity : Double, tolerance? : Double, max_iterations? : Int) -> Double

    sort_catalog_by_altitude

    fn sort_catalog_by_altitude(entries : Array[CatalogEntry]) -> Array[CatalogEntry]

    specific_angular_momentum

    fn specific_angular_momentum(state : StateVector) -> Vec3

    specific_orbital_energy

    fn specific_orbital_energy(mu : Double, semi_major_axis_km : Double) -> Double

    speed_profile

    fn speed_profile(mu : Double, elements : ClassicalElements, count : Int) -> Array[Double]

    spherical_to_cartesian

    fn spherical_to_cartesian(radius : Double, latitude_rad : Double, longitude_rad : Double) -> Vec3

    spherical_triangle_excess

    fn spherical_triangle_excess(a : Vec3, b : Vec3, c : Vec3) -> Double

    square_kilometers_to_square_meters

    fn square_kilometers_to_square_meters(value : Double) -> Double

    square_meters_to_square_kilometers

    fn square_meters_to_square_kilometers(value : Double) -> Double

    state_after_impulse

    fn state_after_impulse(state : StateVector, delta_v : Vec3) -> StateVector

    state_comparison_is_valid

    fn state_comparison_is_valid(comparison : StateComparison, position_tolerance_km : Double, velocity_tolerance_km_s : Double) -> Bool

    state_comparison_score

    fn state_comparison_score(comparison : StateComparison) -> Double

    state_is_valid

    fn state_is_valid(state : StateVector) -> Bool

    state_position_error

    fn state_position_error(reference : StateVector, estimate : StateVector) -> Double

    state_relative_error

    fn state_relative_error(reference : StateVector, estimate : StateVector) -> Double

    state_sample_at

    fn state_sample_at(samples : Array[StateSample], time_s : Double) -> StateSample?

    state_samples_to_csv

    fn state_samples_to_csv(samples : Array[StateSample]) -> String

    state_velocity_error

    fn state_velocity_error(reference : StateVector, estimate : StateVector) -> Double

    summarize_orbit

    fn summarize_orbit(mu : Double, elements : ClassicalElements) -> OrbitSummary

    summarize_samples

    fn summarize_samples(values : Array[Double]) -> SampleStats

    summarize_scenario

    fn summarize_scenario(scenario : MissionScenario, resource_limit : Double) -> ScenarioSummary

    summarize_telemetry

    fn summarize_telemetry(name : String, samples : Array[TelemetrySample]) -> TelemetrySummary

    sun_altitude

    fn sun_altitude(site : Geodetic, epoch : Epoch) -> Double

    sun_position

    fn sun_position(epoch : Epoch) -> SunPosition

    sun_synchronous_inclination

    fn sun_synchronous_inclination(mu : Double, radius_body_km : Double, j2_value : Double, semi_major_axis_km : Double, eccentricity : Double, desired_raan_rate_rad_s : Double) -> Double

    sunlight_power_fraction

    fn sunlight_power_fraction(result : EclipseResult, albedo? : Double) -> Double

    telemetry_channel_names

    fn telemetry_channel_names(samples : Array[TelemetrySample]) -> Array[String]

    telemetry_health

    fn telemetry_health(samples : Array[TelemetrySample]) -> Double

    telemetry_is_valid

    fn telemetry_is_valid(sample : TelemetrySample) -> Bool

    telemetry_missing_intervals

    fn telemetry_missing_intervals(samples : Array[TelemetrySample], max_gap_s : Double) -> Int

    telemetry_report

    fn telemetry_report(samples : Array[TelemetrySample], name : String) -> OrbitReport

    telemetry_summary_is_valid

    fn telemetry_summary_is_valid(summary : TelemetrySummary) -> Bool

    tetrahedron_volume

    fn tetrahedron_volume(a : Vec3, b : Vec3, c : Vec3, d : Vec3) -> Double

    thermal_health

    fn thermal_health(power_budget : Double, load : Double) -> HealthFlag

    thermal_noise_power

    fn thermal_noise_power(temperature_k : Double, bandwidth_hz : Double) -> Double

    thermal_power_margin

    fn thermal_power_margin(power_budget_w : Double, power_load_w : Double) -> Double

    timeline_report

    fn timeline_report(timeline : MissionTimeline) -> String

    tle_to_mean_elements

    fn tle_to_mean_elements(mu : Double, tle : TleRecord) -> ClassicalElements

    topocentric

    fn topocentric(site : Geodetic, satellite_ecef_km : Vec3) -> Topocentric

    torque_from_rate_error

    fn torque_from_rate_error(inertia : Vec3, desired : Vec3, actual : Vec3, gain : Double) -> Vec3

    track_altitude_stats

    fn track_altitude_stats(track : Array[GroundTrackPoint]) -> SampleStats

    track_filter_altitude

    fn track_filter_altitude(track : Array[GroundTrackPoint], minimum_km : Double, maximum_km : Double) -> Array[GroundTrackPoint]

    track_filter_time

    fn track_filter_time(track : Array[GroundTrackPoint], start_s : Double, end_s : Double) -> Array[GroundTrackPoint]

    track_is_contiguous

    fn track_is_contiguous(track : Array[GroundTrackPoint], maximum_gap_s : Double) -> Bool

    track_latitude_histogram

    fn track_latitude_histogram(track : Array[GroundTrackPoint], bins : Int) -> Histogram

    track_time_step_stats

    fn track_time_step_stats(track : Array[GroundTrackPoint]) -> SampleStats

    track_to_csv

    fn track_to_csv(track : Array[GroundTrackPoint]) -> String

    trajectory_metrics

    fn trajectory_metrics(states : Array[DynamicsState]) -> TrajectoryMetrics

    transfer_angle

    fn transfer_angle(r1 : Vec3, r2 : Vec3, prograde? : Bool) -> Double

    transfer_is_prograde

    fn transfer_is_prograde(start : Vec3, end : Vec3, reference : Vec3) -> Bool

    transfer_is_valid

    fn transfer_is_valid(solution : LambertSolution) -> Bool

    transfer_plane_normal

    fn transfer_plane_normal(start : Vec3, end : Vec3) -> Vec3

    transfer_time_estimate

    fn transfer_time_estimate(mu : Double, first_radius_km : Double, second_radius_km : Double) -> Double

    transverse_velocity

    fn transverse_velocity(state : StateVector) -> Double

    trend_is_stable

    fn trend_is_stable(estimate : TrendEstimate, maximum_slope_per_s : Double) -> Bool

    triangle_area

    fn triangle_area(a : Vec3, b : Vec3, c : Vec3) -> Double

    true_anomaly_from_eccentric

    fn true_anomaly_from_eccentric(eccentric_anomaly_rad : Double, eccentricity : Double) -> Double

    two_pi

    let two_pi : Double

    validate_elements

    fn validate_elements(elements : ClassicalElements) -> ValidationReport

    validate_range

    fn validate_range(sample : TelemetrySample, lower : Double, upper : Double) -> TelemetrySample

    validate_site

    fn validate_site(site : Geodetic) -> ValidationReport

    validate_state

    fn validate_state(state : StateVector) -> ValidationReport

    validate_telemetry

    fn validate_telemetry(samples : Array[TelemetrySample]) -> ValidationReport

    validate_timeline

    fn validate_timeline(timeline : MissionTimeline) -> ValidationReport

    validation_error_count

    fn validation_error_count(report : ValidationReport) -> Int

    validation_summary

    fn validation_summary(report : ValidationReport) -> String

    validation_warning_count

    fn validation_warning_count(report : ValidationReport) -> Int

    variance

    fn variance(values : Array[Double]) -> Double

    vis_viva_speed

    fn vis_viva_speed(mu : Double, radius_km : Double, semi_major_axis_km : Double) -> Double

    vis_viva_velocity

    fn vis_viva_velocity(mu : Double, radius_km : Double, semi_major_axis_km : Double) -> Double

    watt_hours_to_joules

    fn watt_hours_to_joules(value : Double) -> Double

    watts_to_dbw

    fn watts_to_dbw(value : Double) -> Double

    weighted_objective

    fn weighted_objective(values : Array[Double], weights : Array[Double], target : Double) -> Double

    weighted_residual_estimate

    fn weighted_residual_estimate(observations : Array[Observation]) -> ScalarEstimate

    weighted_scalar_estimate

    fn weighted_scalar_estimate(observations : Array[Observation]) -> ScalarEstimate

    window_data_volume_mb

    fn window_data_volume_mb(window : VisibilityWindow, rate_kbps : Double) -> Double

    window_duration_s

    fn window_duration_s(window : VisibilityWindow) -> Double

    window_is_acceptable

    fn window_is_acceptable(window : VisibilityWindow, constraint : WindowConstraint) -> Bool

    window_midpoint

    fn window_midpoint(window : VisibilityWindow) -> Epoch

    window_quality_score

    fn window_quality_score(window : VisibilityWindow, constraint : WindowConstraint) -> Double

    wrap_positive

    fn wrap_positive(value : Double, period : Double) -> Double

    z_score

    fn z_score(value : Double, values : Array[Double]) -> Double