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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418] | 1271.446 | 1271.911 | Failed |
| elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418] | 1666.219 | 1670.595 | Failed |
| elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418] | 659.299 | 42774.887 | Failed |
| elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418] | 7090.732 | 8874.68 | Failed |
| elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0] | 0.0 | 0.0 | Passed |
| elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0] | 1.083 | 1.172 | Failed |
| elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0] | 3.142 | 3.142 | Passed |
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418] | 1364.83 | 1271.911 | Failed |
| elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418] | 1808.069 | 1670.595 | Failed |
| elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418] | 41389.133 | 42774.887 | Failed |
| elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418] | 5818.589 | 8874.68 | Failed |
| elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0] | 0.0 | 0.0 | Passed |
| elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0] | 1.663 | 1.172 | Failed |
| elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0] | 3.142 | 3.142 | Passed |
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| elliptic time of flight between anomalies [7000.0, 0.1, 0.0, 90.0, 398600.4418] | 1271.911 | 1271.911 | Passed |
| elliptic time of flight between anomalies [7000.0, 0.1, 270.0, 30.0, 398600.4418] | 1670.595 | 1670.595 | Passed |
| elliptic time of flight between anomalies [26560.0, 0.7, 10.0, 350.0, 398600.4418] | 42774.887 | 42774.887 | Passed |
| elliptic time of flight between anomalies [26560.0, 0.7, 180.0, 200.0, 398600.4418] | 8874.68 | 8874.68 | Passed |
| elliptic time of flight between anomalies [1.0, 0.5, 45.0, 45.0, 1.0] | 0.0 | 0.0 | Passed |
| elliptic time of flight between anomalies [1.0, 0.3, 300.0, 60.0, 1.0] | 1.172 | 1.172 | Passed |
| elliptic time of flight between anomalies [1.0, 0.0, 0.0, 180.0, 1.0] | 3.142 | 3.142 | Passed |
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