FAILURE MAP
← Case archive

FA-69481 / Orbital propagation / Open access

Classical elements from a state vector: Eccentricity vector adds the radial-velocity term · case 01

Eccentricity and perigee direction are wrong away from the apsides.

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

ROOT CAUSE

The (r.v) v term is added instead of subtracted.

VERIFIED REPAIR

Subtract (r.v) v.

Unsuccessful approach: Using the specific energy in place of v^2-mu/r mis-scales the radial term.

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 [[-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 [[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 [[-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 [[-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 [[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 [[-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 [[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]), ('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])]]
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
classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418][7000.7, 0.010043, 28.5, 40.0, 119.8586, 29.8586][7000.7, 0.01, 28.5, 40.0, 60.0, 30.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.176383, 63.4, 200.0, 130.8934, 100.8934][8333.333, 0.2, 63.4, 200.0, 270.0, 120.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.421415, 98.0, 300.0, 231.8818, 296.8818][14285.714, 0.4, 98.0, 300.0, 45.0, 250.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.10401, 51.6, 100.0, 131.2675, 331.2675][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.717233, 63.4, 270.0, 299.7574, 9.7574][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.049424, 120.0, 10.0, 140.2433, 200.2433][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.292416, 30.0, 170.0, 319.7379, 169.7379][10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]Failed

SHA-256 / 66826eba87d8609dd9bf6a93c3eb826d1c1d396f9576218e793587850d770629

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/2-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 [[-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 [[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 [[-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 [[-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 [[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 [[-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 [[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]), ('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])]]
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
classical elements from a state vector [[-3920.2985, 4672.0298, 3311.4335], [-5.8519873, -4.8671157, 0.0180033], 398600.4418][7000.7, 0.495707, 28.5, 40.0, 270.5779, 179.4221][7000.7, 0.01, 28.5, 40.0, 60.0, 30.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.592546, 63.4, 200.0, 226.9961, 163.0039][8333.333, 0.2, 63.4, 200.0, 270.0, 120.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.751065, 98.0, 300.0, 84.9696, 210.0304][14285.714, 0.4, 98.0, 300.0, 45.0, 250.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.460571, 51.6, 100.0, 333.7676, 186.2324][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.20069, 63.4, 270.0, 147.2778, 142.7222][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.523925, 120.0, 10.0, 118.1295, 181.8705][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.651732, 30.0, 170.0, 334.5847, 175.4153][10989.011, 0.3, 30.0, 170.0, 340.0, 170.0]Failed

SHA-256 / b4d94574577c05452c6fd396e612283be929f53e8cdfe88a639a1e4e7b327eb5

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 [[-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 [[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 [[-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 [[-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 [[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 [[-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 [[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]), ('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])]]
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
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 [[-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 [[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 [[-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 / 64a217e07fe2573dcf7182ad8a107d470d129d0509f64a9f0005162a3ca9859b

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.894540+00:00.

Case digest / 0b9b5d59bd82467957b7d23b5d5b82ad6c64b5faf6a8b849484e1fbb3d8e5f8d