FA-69466 / Orbital propagation / Open access
Classical elements from a state vector: RAAN quadrant test has the wrong sign · case 01
Ascending nodes in one half of the sky are mirrored.
ROOT CAUSE
The RAAN is reflected when n_y>0 instead of n_y<0.
VERIFIED REPAIR
Reflect RAAN when the node vector y component is negative.
Unsuccessful approach: Testing the x component of the node vector reflects the wrong quadrants.
Case contract
Input [r, v, mu] (km, km/s) for an inclined, eccentric orbit. Return [a, e, i, raan, argp, nu] with a rounded to 3, e to 6 and angles in degrees rounded to 4, using the node vector n=[-h_y,h_x,0], eccentricity vector ((v^2-mu/r) r - (r.v) v)/mu and quadrant rules raan>180 when n_y<0, argp>180 when e_z<0, nu>180 when r.v<0.
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=x
def dot(a,b): return sum(p*q for p,q in zip(a,b))
def cross(a,b): return [a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]]
def ac(c): return math.acos(max(-1.0,min(1.0,c)))
rn=math.sqrt(dot(r,r)); vn2=dot(v,v)
h=cross(r,v); hn=math.sqrt(dot(h,h))
nv=[-h[1],h[0],0.0]; nn=math.sqrt(dot(nv,nv))
ev=[((vn2-mu/rn)*r[i]-dot(r,v)*v[i])/mu for i in range(3)]
e=math.sqrt(dot(ev,ev))
eps=vn2/2-mu/rn
a=-mu/(2*eps)
inc=ac(h[2]/hn)
raan=ac(nv[0]/nn)
if nv[1]>0: raan=2*math.pi-raan
w=ac(dot(nv,ev)/(nn*e))
if ev[2]<0: w=2*math.pi-w
nu=ac(dot(ev,r)/(e*rn))
if dot(r,v)<0: nu=2*math.pi-nu
d=math.degrees
return [round(a,3),round(e,6),round(d(inc),4),round(d(raan),4),round(d(w),4),round(d(nu),4)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0])], [('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0])], [('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0])], [('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0])], [('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0])]]
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 |
|---|---|---|---|
| classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418] | [7000.7, 0.01, 28.5, 320.0, 60.0, 30.0] | [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0] | Failed |
| classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418] | [14285.714, 0.4, 98.0, 60.0, 45.0, 250.0] | [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0] | Failed |
| classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418] | [8333.333, 0.2, 63.4, 160.0, 270.0, 120.0] | [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0] | Failed |
| classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418] | [9090.909, 0.1, 51.6, 260.0, 190.0, 330.0] | [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0] | Failed |
| classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418] | [50980.389, 0.7, 63.4, 90.0, 280.0, 10.0] | [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0] | Failed |
| classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418] | [7518.797, 0.05, 120.0, 350.0, 100.0, 200.0] | [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0] | Failed |
| classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418] | [10989.011, 0.3, 30.0, 190.0, 340.0, 170.0] | [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0] | Failed |
SHA-256 / 43b0bfecb9a1017c81ad3924b8253a578f4e9cf9ca6f0b3e104f41811e9759ea
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=x
def dot(a,b): return sum(p*q for p,q in zip(a,b))
def cross(a,b): return [a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]]
def ac(c): return math.acos(max(-1.0,min(1.0,c)))
rn=math.sqrt(dot(r,r)); vn2=dot(v,v)
h=cross(r,v); hn=math.sqrt(dot(h,h))
nv=[-h[1],h[0],0.0]; nn=math.sqrt(dot(nv,nv))
ev=[((vn2-mu/rn)*r[i]-dot(r,v)*v[i])/mu for i in range(3)]
e=math.sqrt(dot(ev,ev))
eps=vn2/2-mu/rn
a=-mu/(2*eps)
inc=ac(h[2]/hn)
raan=ac(nv[0]/nn)
if nv[0]<0: raan=2*math.pi-raan
w=ac(dot(nv,ev)/(nn*e))
if ev[2]<0: w=2*math.pi-w
nu=ac(dot(ev,r)/(e*rn))
if dot(r,v)<0: nu=2*math.pi-nu
d=math.degrees
return [round(a,3),round(e,6),round(d(inc),4),round(d(raan),4),round(d(w),4),round(d(nu),4)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0])], [('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0])], [('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0])], [('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0])], [('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0])]]
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 |
|---|---|---|---|
| classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418] | [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0] | [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0] | Passed |
| classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418] | [14285.714, 0.4, 98.0, 60.0, 45.0, 250.0] | [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0] | Failed |
| classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418] | [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0] | [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0] | Passed |
| classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418] | [9090.909, 0.1, 51.6, 260.0, 190.0, 330.0] | [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0] | Failed |
| classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418] | [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0] | [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0] | Passed |
| classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418] | [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0] | [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0] | Passed |
| classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418] | [10989.011, 0.3, 30.0, 190.0, 340.0, 170.0] | [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0] | Failed |
SHA-256 / c7ee4ffeed7b944e301666b85a90da557b130f83f3222a6614c44312ca8b1ad5
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=x
def dot(a,b): return sum(p*q for p,q in zip(a,b))
def cross(a,b): return [a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]]
def ac(c): return math.acos(max(-1.0,min(1.0,c)))
rn=math.sqrt(dot(r,r)); vn2=dot(v,v)
h=cross(r,v); hn=math.sqrt(dot(h,h))
nv=[-h[1],h[0],0.0]; nn=math.sqrt(dot(nv,nv))
ev=[((vn2-mu/rn)*r[i]-dot(r,v)*v[i])/mu for i in range(3)]
e=math.sqrt(dot(ev,ev))
eps=vn2/2-mu/rn
a=-mu/(2*eps)
inc=ac(h[2]/hn)
raan=ac(nv[0]/nn)
if nv[1]<0: raan=2*math.pi-raan
w=ac(dot(nv,ev)/(nn*e))
if ev[2]<0: w=2*math.pi-w
nu=ac(dot(ev,r)/(e*rn))
if dot(r,v)<0: nu=2*math.pi-nu
d=math.degrees
return [round(a,3),round(e,6),round(d(inc),4),round(d(raan),4),round(d(w),4),round(d(nu),4)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0])], [('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0])], [('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0])], [('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418]', [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418], [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0]), ('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0])], [('classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418]', [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418], [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0]), ('classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418]', [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418], [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0]), ('classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418]', [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418], [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0]), ('classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418]', [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418], [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]), ('classical elements from a state vector [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418]', [[-1735.9191, -3185.9581, -6190.1572], [-1.8703175, -6.1223077, 3.8454015], 398600.4418], [7202.881, 0.02, 85.0, 250.0, 20.0, 280.0]), ('classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418]', [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418], [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0]), ('classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418]', [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418], [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0])]]
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 |
|---|---|---|---|
| classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418] | [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0] | [7000.7, 0.01, 28.5, 40.0, 60.0, 30.0] | Passed |
| classical elements from a state vector [[4456.1689, -4211.3181, -12476.7753], [1.3065909, -3.3947954, 4.0262806], 398600.4418] | [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0] | [14285.714, 0.4, 98.0, 300.0, 45.0, 250.0] | Passed |
| classical elements from a state vector [[-6553.1233, -4502.8986, 3974.0188], [2.9260598, -1.8478178, 5.4659665], 398600.4418] | [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0] | [8333.333, 0.2, 63.4, 200.0, 270.0, 120.0] | Passed |
| classical elements from a state vector [[-381.3488, -7970.4999, 2220.0855], [4.6015157, -1.3825381, -5.4145672], 398600.4418] | [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0] | [9090.909, 0.1, 51.6, 100.0, 190.0, 330.0] | Passed |
| classical elements from a state vector [[-6475.5994, -5263.8249, -12931.4731], [0.8127286, -6.3785031, 1.6229816], 398600.4418] | [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0] | [50980.389, 0.7, 63.4, 270.0, 280.0, 10.0] | Passed |
| classical elements from a state vector [[3283.3574, 4039.2189, -5902.3182], [6.1750334, -0.7296993, 3.1019243], 398600.4418] | [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0] | [7518.797, 0.05, 120.0, 10.0, 100.0, 200.0] | Passed |
| classical elements from a state vector [[11037.7999, -8186.9522, 3548.3256], [3.0254103, 2.7095491, -1.8439078], 398600.4418] | [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0] | [10989.011, 0.3, 30.0, 170.0, 340.0, 170.0] | Passed |
SHA-256 / c51eab877f01b0e045624e1e46d18ddab51cf0d7872d84b2ccb033b106d5832d
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:11.687578+00:00.
Case digest / bef462a0b591bf3ee213a94e05deff165c78bb5877c6f5ac3d9a246e9faf00d6