FAILURE MAP
← Case archive

FA-69706 / Orbital propagation / Open access

Elliptic time of flight between anomalies: Kepler equation mixes true and eccentric anomaly · case 01

Durations are wrong away from the apsides of eccentric orbits.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The mean anomaly is computed as E - e sin(nu).

VERIFIED REPAIR

Use E - e sin(E).

Unsuccessful approach: Using nu - e sin(E) swaps the mixup to the other term.

Case contract

Input [a, e, nu1, nu2, mu] (degrees). Convert each true anomaly to eccentric anomaly with the half-angle atan2 form and to mean anomaly in [0,2pi); flight always proceeds forward, so dM=(M2-M1) mod 2pi. Return dM/n seconds rounded to 3 with n=sqrt(mu/a^3).

Why this case matters

Orbit determination and mission planning chain many small conversions; one wrong branch or unit silently moves a spacecraft by kilometres.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    a,e,n1,n2,mu=x
    def Ma(nu):
        nu=math.radians(nu)
        E=2*math.atan2(math.sqrt(1-e)*math.sin(nu/2),math.sqrt(1+e)*math.cos(nu/2))
        return (E-e*math.sin(nu))%(2*math.pi)
    n=math.sqrt(mu/a**3)
    dM=(Ma(n2)-Ma(n1))%(2*math.pi)
    return round(dM/n,3)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142)], [('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023)], [('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68)], [('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142)], [('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]1271.4461271.911Failed
elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]1666.2191670.595Failed
elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]659.29942774.887Failed
elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]7090.7328874.68Failed
elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]0.00.0Passed
elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]1.0831.172Failed
elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]3.1423.142Passed

SHA-256 / 4aafd8e4f6787811d8a1596211f79ac573f72716929b7dbfb008a92fb91832ee

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    a,e,n1,n2,mu=x
    def Ma(nu):
        nu=math.radians(nu)
        E=2*math.atan2(math.sqrt(1-e)*math.sin(nu/2),math.sqrt(1+e)*math.cos(nu/2))
        return (nu-e*math.sin(E))%(2*math.pi)
    n=math.sqrt(mu/a**3)
    dM=(Ma(n2)-Ma(n1))%(2*math.pi)
    return round(dM/n,3)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142)], [('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023)], [('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68)], [('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142)], [('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]1364.831271.911Failed
elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]1808.0691670.595Failed
elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]41389.13342774.887Failed
elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]5818.5898874.68Failed
elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]0.00.0Passed
elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]1.6631.172Failed
elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]3.1423.142Passed

SHA-256 / 1becaf4f7b0a561f8dae590f32f938b770c2e1ab6fd3cae5d8dfc6e6969d0292

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    a,e,n1,n2,mu=x
    def Ma(nu):
        nu=math.radians(nu)
        E=2*math.atan2(math.sqrt(1-e)*math.sin(nu/2),math.sqrt(1+e)*math.cos(nu/2))
        return (E-e*math.sin(E))%(2*math.pi)
    n=math.sqrt(mu/a**3)
    dM=(Ma(n2)-Ma(n1))%(2*math.pi)
    return round(dM/n,3)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142)], [('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023)], [('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68)], [('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911), ('elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]', [7000.0, 0.1, 270.0, 30.0, 398600.4418], 1670.595), ('elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]', [26560.0, 0.7, 10.0, 350.0, 398600.4418], 42774.887), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142)], [('elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]', [1.0, 0.3, 300.0, 60.0, 1.0], 1.172), ('elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]', [26560.0, 0.7, 180.0, 200.0, 398600.4418], 8874.68), ('elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]', [1.0, 0.5, 45.0, 45.0, 1.0], 0.0), ('elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]', [1.0, 0.0, 0.0, 180.0, 1.0], 3.142), ('elliptic time of flight between anomalies [2.0, 0.9, 170.0, 190.0, 1.0]', [2.0, 0.9, 170.0, 190.0, 1.0], 7.512), ('elliptic time of flight between anomalies [2.0, 0.9, 350.0, 10.0, 1.0]', [2.0, 0.9, 350.0, 10.0, 1.0], 0.023), ('elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]', [7000.0, 0.1, 0.0, 90.0, 398600.4418], 1271.911)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418]1271.9111271.911Passed
elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418]1670.5951670.595Passed
elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418]42774.88742774.887Passed
elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418]8874.688874.68Passed
elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0]0.00.0Passed
elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0]1.1721.172Passed
elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0]3.1423.142Passed

SHA-256 / 079f4091fd8944bdf456f252d4be59f30134e545aa5d3a0ab8474badf8910b1a

Verification & scope

A deterministic toy two-body model with stipulated constants and conventions; not flight dynamics software or a validated SGP4 implementation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:48:13.862248+00:00.

Case digest / 968a9d3c0c28d6c9f92475698de7e60f82ef436cce97def33e4c41917122746f