FA-69666 / Orbital propagation / Open access
Orbit energy classification: Parabolic tolerance is absolute · case 01
The parabolic band depends on the unit system.
ROOT CAUSE
The test compares |eps| with tol directly instead of tol*mu/r.
VERIFIED REPAIR
Scale the tolerance by mu/r.
Unsuccessful approach: Scaling by the kinetic energy term is not the stipulated normalization.
Case contract
Input [r, v, mu, tol]. eps=v^2/2-mu/r. Parabolic when |eps|<=tol*mu/r, else elliptic (eps<0) or hyperbolic. a=-mu/(2 eps) (None if parabolic), escape speed sqrt(2mu/r), v_inf=sqrt(2 eps) for hyperbolic else None. Return [kind, a rounded 3, vesc rounded 6, vinf rounded 6].
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):
r,v,mu,tol=x
eps=v*v/2-mu/r
if abs(eps)<=tol: kind='parabolic'
elif eps<0: kind='elliptic'
else: kind='hyperbolic'
a=None if kind=='parabolic' else round(-mu/(2*eps),3)
vesc=math.sqrt(2*mu/r)
vinf=round(math.sqrt(2*eps),6) if kind=='hyperbolic' else None
return [kind,a,round(vesc,6),vinf]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566]), ('orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06]', [7000.0, 10.67, 398600.4418, 1e-06], ['elliptic', 10790332.769, 10.671731, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 1.0, 1.0, 0.001]', [1.0, 1.0, 1.0, 0.001], ['elliptic', 1.0, 1.414214, None])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 1.0, 1.0, 0.001]', [1.0, 1.0, 1.0, 0.001], ['elliptic', 1.0, 1.414214, None]), ('orbit energy classification [1.0, 2.0, 1.0, 0.001]', [1.0, 2.0, 1.0, 0.001], ['hyperbolic', -0.5, 1.414214, 1.414214]), ('orbit energy classification [42164.0, 3.07, 398600.4418, 1e-06]', [42164.0, 3.07, 398600.4418, 1e-06], ['elliptic', 42036.503, 4.348235, None]), ('orbit energy classification [6678.0, 11.5, 398600.4418, 1e-06]', [6678.0, 11.5, 398600.4418, 1e-06], ['hyperbolic', -30964.528, 10.925987, 3.58787])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 2.0, 1.0, 0.001]', [1.0, 2.0, 1.0, 0.001], ['hyperbolic', -0.5, 1.414214, 1.414214]), ('orbit energy classification [42164.0, 3.07, 398600.4418, 1e-06]', [42164.0, 3.07, 398600.4418, 1e-06], ['elliptic', 42036.503, 4.348235, None]), ('orbit energy classification [6678.0, 11.5, 398600.4418, 1e-06]', [6678.0, 11.5, 398600.4418, 1e-06], ['hyperbolic', -30964.528, 10.925987, 3.58787]), ('orbit energy classification [2.0, 1.0, 1.0, 0.0001]', [2.0, 1.0, 1.0, 0.0001], ['parabolic', None, 1.0, None]), ('orbit energy classification [100.0, 0.1414, 1.0, 0.001]', [100.0, 0.1414, 1.0, 0.001], ['parabolic', None, 0.141421, None])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [2.0, 1.0, 1.0, 0.0001]', [2.0, 1.0, 1.0, 0.0001], ['parabolic', None, 1.0, None]), ('orbit energy classification [100.0, 0.1414, 1.0, 0.001]', [100.0, 0.1414, 1.0, 0.001], ['parabolic', None, 0.141421, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566]), ('orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06]', [7000.0, 10.67, 398600.4418, 1e-06], ['elliptic', 10790332.769, 10.671731, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None])]]
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 |
|---|---|---|---|
| orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001] | ['elliptic', 43341095.732, 10.671731, None] | ['parabolic', None, 10.671731, None] | Failed |
| orbit energy classification [1.0, 1.05, 1.0, 0.5] | ['parabolic', None, 1.414214, None] | ['parabolic', None, 1.414214, None] | Passed |
| orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06] | ['elliptic', 6915.843, 10.671731, None] | ['elliptic', 6915.843, 10.671731, None] | Passed |
| orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06] | ['hyperbolic', -144726.71, 10.671731, 1.659566] | ['hyperbolic', -144726.71, 10.671731, 1.659566] | Passed |
| orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06] | ['elliptic', 10790332.769, 10.671731, None] | ['elliptic', 10790332.769, 10.671731, None] | Passed |
| orbit energy classification [1.0, 1.4142, 1.0, 0.001] | ['parabolic', None, 1.414214, None] | ['parabolic', None, 1.414214, None] | Passed |
| orbit energy classification [1.0, 1.0, 1.0, 0.001] | ['elliptic', 1.0, 1.414214, None] | ['elliptic', 1.0, 1.414214, None] | Passed |
SHA-256 / 70e7057cafbd6c182b196c3fe26cf348587dd46c79aa5865c3f8140521bc7a0c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
r,v,mu,tol=x
eps=v*v/2-mu/r
if abs(eps)<=tol*v*v/2: kind='parabolic'
elif eps<0: kind='elliptic'
else: kind='hyperbolic'
a=None if kind=='parabolic' else round(-mu/(2*eps),3)
vesc=math.sqrt(2*mu/r)
vinf=round(math.sqrt(2*eps),6) if kind=='hyperbolic' else None
return [kind,a,round(vesc,6),vinf]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566]), ('orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06]', [7000.0, 10.67, 398600.4418, 1e-06], ['elliptic', 10790332.769, 10.671731, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 1.0, 1.0, 0.001]', [1.0, 1.0, 1.0, 0.001], ['elliptic', 1.0, 1.414214, None])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 1.0, 1.0, 0.001]', [1.0, 1.0, 1.0, 0.001], ['elliptic', 1.0, 1.414214, None]), ('orbit energy classification [1.0, 2.0, 1.0, 0.001]', [1.0, 2.0, 1.0, 0.001], ['hyperbolic', -0.5, 1.414214, 1.414214]), ('orbit energy classification [42164.0, 3.07, 398600.4418, 1e-06]', [42164.0, 3.07, 398600.4418, 1e-06], ['elliptic', 42036.503, 4.348235, None]), ('orbit energy classification [6678.0, 11.5, 398600.4418, 1e-06]', [6678.0, 11.5, 398600.4418, 1e-06], ['hyperbolic', -30964.528, 10.925987, 3.58787])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 2.0, 1.0, 0.001]', [1.0, 2.0, 1.0, 0.001], ['hyperbolic', -0.5, 1.414214, 1.414214]), ('orbit energy classification [42164.0, 3.07, 398600.4418, 1e-06]', [42164.0, 3.07, 398600.4418, 1e-06], ['elliptic', 42036.503, 4.348235, None]), ('orbit energy classification [6678.0, 11.5, 398600.4418, 1e-06]', [6678.0, 11.5, 398600.4418, 1e-06], ['hyperbolic', -30964.528, 10.925987, 3.58787]), ('orbit energy classification [2.0, 1.0, 1.0, 0.0001]', [2.0, 1.0, 1.0, 0.0001], ['parabolic', None, 1.0, None]), ('orbit energy classification [100.0, 0.1414, 1.0, 0.001]', [100.0, 0.1414, 1.0, 0.001], ['parabolic', None, 0.141421, None])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [2.0, 1.0, 1.0, 0.0001]', [2.0, 1.0, 1.0, 0.0001], ['parabolic', None, 1.0, None]), ('orbit energy classification [100.0, 0.1414, 1.0, 0.001]', [100.0, 0.1414, 1.0, 0.001], ['parabolic', None, 0.141421, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566]), ('orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06]', [7000.0, 10.67, 398600.4418, 1e-06], ['elliptic', 10790332.769, 10.671731, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None])]]
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 |
|---|---|---|---|
| orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001] | ['parabolic', None, 10.671731, None] | ['parabolic', None, 10.671731, None] | Passed |
| orbit energy classification [1.0, 1.05, 1.0, 0.5] | ['elliptic', 1.114, 1.414214, None] | ['parabolic', None, 1.414214, None] | Failed |
| orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06] | ['elliptic', 6915.843, 10.671731, None] | ['elliptic', 6915.843, 10.671731, None] | Passed |
| orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06] | ['hyperbolic', -144726.71, 10.671731, 1.659566] | ['hyperbolic', -144726.71, 10.671731, 1.659566] | Passed |
| orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06] | ['elliptic', 10790332.769, 10.671731, None] | ['elliptic', 10790332.769, 10.671731, None] | Passed |
| orbit energy classification [1.0, 1.4142, 1.0, 0.001] | ['parabolic', None, 1.414214, None] | ['parabolic', None, 1.414214, None] | Passed |
| orbit energy classification [1.0, 1.0, 1.0, 0.001] | ['elliptic', 1.0, 1.414214, None] | ['elliptic', 1.0, 1.414214, None] | Passed |
SHA-256 / ed50c0bc7351cfacd9046853e3919fef78c166625fd66c0659d9c280e3dbc4f7
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
r,v,mu,tol=x
eps=v*v/2-mu/r
if abs(eps)<=tol*mu/r: kind='parabolic'
elif eps<0: kind='elliptic'
else: kind='hyperbolic'
a=None if kind=='parabolic' else round(-mu/(2*eps),3)
vesc=math.sqrt(2*mu/r)
vinf=round(math.sqrt(2*eps),6) if kind=='hyperbolic' else None
return [kind,a,round(vesc,6),vinf]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566]), ('orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06]', [7000.0, 10.67, 398600.4418, 1e-06], ['elliptic', 10790332.769, 10.671731, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 1.0, 1.0, 0.001]', [1.0, 1.0, 1.0, 0.001], ['elliptic', 1.0, 1.414214, None])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 1.0, 1.0, 0.001]', [1.0, 1.0, 1.0, 0.001], ['elliptic', 1.0, 1.414214, None]), ('orbit energy classification [1.0, 2.0, 1.0, 0.001]', [1.0, 2.0, 1.0, 0.001], ['hyperbolic', -0.5, 1.414214, 1.414214]), ('orbit energy classification [42164.0, 3.07, 398600.4418, 1e-06]', [42164.0, 3.07, 398600.4418, 1e-06], ['elliptic', 42036.503, 4.348235, None]), ('orbit energy classification [6678.0, 11.5, 398600.4418, 1e-06]', [6678.0, 11.5, 398600.4418, 1e-06], ['hyperbolic', -30964.528, 10.925987, 3.58787])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [1.0, 2.0, 1.0, 0.001]', [1.0, 2.0, 1.0, 0.001], ['hyperbolic', -0.5, 1.414214, 1.414214]), ('orbit energy classification [42164.0, 3.07, 398600.4418, 1e-06]', [42164.0, 3.07, 398600.4418, 1e-06], ['elliptic', 42036.503, 4.348235, None]), ('orbit energy classification [6678.0, 11.5, 398600.4418, 1e-06]', [6678.0, 11.5, 398600.4418, 1e-06], ['hyperbolic', -30964.528, 10.925987, 3.58787]), ('orbit energy classification [2.0, 1.0, 1.0, 0.0001]', [2.0, 1.0, 1.0, 0.0001], ['parabolic', None, 1.0, None]), ('orbit energy classification [100.0, 0.1414, 1.0, 0.001]', [100.0, 0.1414, 1.0, 0.001], ['parabolic', None, 0.141421, None])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [2.0, 1.0, 1.0, 0.0001]', [2.0, 1.0, 1.0, 0.0001], ['parabolic', None, 1.0, None]), ('orbit energy classification [100.0, 0.1414, 1.0, 0.001]', [100.0, 0.1414, 1.0, 0.001], ['parabolic', None, 0.141421, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566])], [('orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001]', [7000.0, 10.6713, 398600.4418, 0.0001], ['parabolic', None, 10.671731, None]), ('orbit energy classification [1.0, 1.05, 1.0, 0.5]', [1.0, 1.05, 1.0, 0.5], ['parabolic', None, 1.414214, None]), ('orbit energy classification [2.0, 0.8, 1.0, 0.5]', [2.0, 0.8, 1.0, 0.5], ['parabolic', None, 1.0, None]), ('orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06]', [7000.0, 7.5, 398600.4418, 1e-06], ['elliptic', 6915.843, 10.671731, None]), ('orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06]', [7000.0, 10.8, 398600.4418, 1e-06], ['hyperbolic', -144726.71, 10.671731, 1.659566]), ('orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06]', [7000.0, 10.67, 398600.4418, 1e-06], ['elliptic', 10790332.769, 10.671731, None]), ('orbit energy classification [1.0, 1.4142, 1.0, 0.001]', [1.0, 1.4142, 1.0, 0.001], ['parabolic', None, 1.414214, None])]]
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 |
|---|---|---|---|
| orbit energy classification [7000.0, 10.6713, 398600.4418, 0.0001] | ['parabolic', None, 10.671731, None] | ['parabolic', None, 10.671731, None] | Passed |
| orbit energy classification [1.0, 1.05, 1.0, 0.5] | ['parabolic', None, 1.414214, None] | ['parabolic', None, 1.414214, None] | Passed |
| orbit energy classification [7000.0, 7.5, 398600.4418, 1e-06] | ['elliptic', 6915.843, 10.671731, None] | ['elliptic', 6915.843, 10.671731, None] | Passed |
| orbit energy classification [7000.0, 10.8, 398600.4418, 1e-06] | ['hyperbolic', -144726.71, 10.671731, 1.659566] | ['hyperbolic', -144726.71, 10.671731, 1.659566] | Passed |
| orbit energy classification [7000.0, 10.67, 398600.4418, 1e-06] | ['elliptic', 10790332.769, 10.671731, None] | ['elliptic', 10790332.769, 10.671731, None] | Passed |
| orbit energy classification [1.0, 1.4142, 1.0, 0.001] | ['parabolic', None, 1.414214, None] | ['parabolic', None, 1.414214, None] | Passed |
| orbit energy classification [1.0, 1.0, 1.0, 0.001] | ['elliptic', 1.0, 1.414214, None] | ['elliptic', 1.0, 1.414214, None] | Passed |
SHA-256 / 56904531df98e2234dc736013060c8ab51b2f9958eead4d1db9b4504ee2a272a
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.478036+00:00.
Case digest / 271d8226de64f2219fddaed8f72baec22b2d09a18f35a0f10c1b8f7e2c5b936c