FA-69451 / Orbital propagation / Open access
Two-line element set line 1: Negative BSTAR loses its sign · case 01
Negative drag terms become positive.
ROOT CAUSE
The sign of the mantissa is discarded.
VERIFIED REPAIR
Take the sign from the first character.
Unsuccessful approach: Detecting any "-" in the field confuses the exponent sign with the mantissa sign.
Case contract
Input one TLE line-1 string (exactly 69 characters, starting "1", else None). Epoch year from columns 19-20 (57-99 -> 1900s, 00-56 -> 2000s), epoch day 21-32, ndot/2 34-43, BSTAR 54-61 in assumed-decimal exponent form (" 34123-4" = 0.34123e-4, sign first), checksum column 69 (digits plus 1 per "-", mod 10). Return [year, day, ndot2, bstar rounded 14, checksum_ok].
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):
s=x
if len(s)!=69 or s[0]!='1': return None
yy=int(s[18:20]); year=1900+yy if yy>=57 else 2000+yy
day=float(s[20:32]); ndot=float(s[33:43])
f=s[53:61].strip()
sign=1
f=f.lstrip('+-')
mant,ex=f[:-2],f[-2:]
bstar=sign*float('0.'+mant)*10**int(ex)
cs=sum(int(c) if c.isdigit() else (1 if c=='-' else 0) for c in s[:68])%10
return [year,day,ndot,round(bstar,14),cs==int(s[68])]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True])], [('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', None), ('two-line element set line 1 "2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', None), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True])], [('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', None), ('two-line element set line 1 "2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', None), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True])], [('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True])], [('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', 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 |
|---|---|---|---|
| two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927" | [2008, 264.51782528, -2.182e-05, 1.1606e-05, True] | [2008, 264.51782528, -2.182e-05, -1.1606e-05, True] | Failed |
| two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996" | [2026, 1.5, 1.23e-06, 3.4123e-05, True] | [2026, 1.5, 1.23e-06, 3.4123e-05, True] | Passed |
| two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14" | [1957, 100.0, 0.0, 0.0, True] | [1957, 100.0, 0.0, 0.0, True] | Passed |
| two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55" | [2056, 365.99999999, -5e-07, 1.0, True] | [2056, 365.99999999, -5e-07, 1.0, True] | Passed |
| two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176" | [1999, 32.25, 0.00012345, 0.0005, False] | [1999, 32.25, 0.00012345, -0.0005, False] | Failed |
| two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882" | [2000, 12.0, 0.1, 12.345, True] | [2000, 12.0, 0.1, 12.345, True] | Passed |
| two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343" | [2050, 200.125, -1e-08, 9.9999e-10, True] | [2050, 200.125, -1e-08, 9.9999e-10, True] | Passed |
SHA-256 / e5a800e3134bbdcccfe8ebb2e7865d0c37a773d662e492dc20079a5e6873d32f
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
s=x
if len(s)!=69 or s[0]!='1': return None
yy=int(s[18:20]); year=1900+yy if yy>=57 else 2000+yy
day=float(s[20:32]); ndot=float(s[33:43])
f=s[53:61].strip()
sign=-1 if '-' in f else 1
f=f.lstrip('+-')
mant,ex=f[:-2],f[-2:]
bstar=sign*float('0.'+mant)*10**int(ex)
cs=sum(int(c) if c.isdigit() else (1 if c=='-' else 0) for c in s[:68])%10
return [year,day,ndot,round(bstar,14),cs==int(s[68])]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True])], [('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', None), ('two-line element set line 1 "2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', None), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True])], [('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', None), ('two-line element set line 1 "2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', None), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True])], [('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True])], [('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', 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 |
|---|---|---|---|
| two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927" | [2008, 264.51782528, -2.182e-05, -1.1606e-05, True] | [2008, 264.51782528, -2.182e-05, -1.1606e-05, True] | Passed |
| two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996" | [2026, 1.5, 1.23e-06, -3.4123e-05, True] | [2026, 1.5, 1.23e-06, 3.4123e-05, True] | Failed |
| two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14" | [1957, 100.0, 0.0, 0.0, True] | [1957, 100.0, 0.0, 0.0, True] | Passed |
| two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55" | [2056, 365.99999999, -5e-07, 1.0, True] | [2056, 365.99999999, -5e-07, 1.0, True] | Passed |
| two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176" | [1999, 32.25, 0.00012345, -0.0005, False] | [1999, 32.25, 0.00012345, -0.0005, False] | Passed |
| two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882" | [2000, 12.0, 0.1, 12.345, True] | [2000, 12.0, 0.1, 12.345, True] | Passed |
| two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343" | [2050, 200.125, -1e-08, -9.9999e-10, True] | [2050, 200.125, -1e-08, 9.9999e-10, True] | Failed |
SHA-256 / b0a769bf16bbf292403d2e4b8d4696e456484f3a9e52f51aade97e9116bf413a
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
s=x
if len(s)!=69 or s[0]!='1': return None
yy=int(s[18:20]); year=1900+yy if yy>=57 else 2000+yy
day=float(s[20:32]); ndot=float(s[33:43])
f=s[53:61].strip()
sign=-1 if f[0]=='-' else 1
f=f.lstrip('+-')
mant,ex=f[:-2],f[-2:]
bstar=sign*float('0.'+mant)*10**int(ex)
cs=sum(int(c) if c.isdigit() else (1 if c=='-' else 0) for c in s[:68])%10
return [year,day,ndot,round(bstar,14),cs==int(s[68])]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True])], [('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', None), ('two-line element set line 1 "2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', None), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True])], [('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', None), ('two-line element set line 1 "2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '2 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', None), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True])], [('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14"', '1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14', [1957, 100.0, 0.0, 0.0, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True])], [('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927', [2008, 264.51782528, -2.182e-05, -1.1606e-05, True]), ('two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996"', '1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996', [2026, 1.5, 1.23e-06, 3.4123e-05, True]), ('two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55"', '1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55', [2056, 365.99999999, -5e-07, 1.0, True]), ('two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176"', '1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176', [1999, 32.25, 0.00012345, -0.0005, False]), ('two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882"', '1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882', [2000, 12.0, 0.1, 12.345, True]), ('two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343"', '1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343', [2050, 200.125, -1e-08, 9.9999e-10, True]), ('two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292"', '1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 292', 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 |
|---|---|---|---|
| two-line element set line 1 "1 25544U 98067A 08264.51782528 -.00002182 00000-0 -11606-4 0 2927" | [2008, 264.51782528, -2.182e-05, -1.1606e-05, True] | [2008, 264.51782528, -2.182e-05, -1.1606e-05, True] | Passed |
| two-line element set line 1 "1 43013U 17073A 26001.50000000 .00000123 00000-0 34123-4 0 9996" | [2026, 1.5, 1.23e-06, 3.4123e-05, True] | [2026, 1.5, 1.23e-06, 3.4123e-05, True] | Passed |
| two-line element set line 1 "1 11111U 75001A 57100.00000000 .00000000 00000-0 00000+0 0 14" | [1957, 100.0, 0.0, 0.0, True] | [1957, 100.0, 0.0, 0.0, True] | Passed |
| two-line element set line 1 "1 22222U 56001A 56365.99999999 -.00000050 -12345-5 10000+1 0 55" | [2056, 365.99999999, -5e-07, 1.0, True] | [2056, 365.99999999, -5e-07, 1.0, True] | Passed |
| two-line element set line 1 "1 33333U 99025B 99032.25000000 .00012345 00000-0 -50000-3 0 176" | [1999, 32.25, 0.00012345, -0.0005, False] | [1999, 32.25, 0.00012345, -0.0005, False] | Passed |
| two-line element set line 1 "1 44444U 20001C 00012.00000000 .10000000 00000-0 12345+2 0 882" | [2000, 12.0, 0.1, 12.345, True] | [2000, 12.0, 0.1, 12.345, True] | Passed |
| two-line element set line 1 "1 45555U 19050Z 50200.12500000 -.00000001 00000-0 99999-9 0 12343" | [2050, 200.125, -1e-08, 9.9999e-10, True] | [2050, 200.125, -1e-08, 9.9999e-10, True] | Passed |
SHA-256 / a0bcef8ff9ba1d4fafb463585b19b123519ec0b1d7cf1b083e4f77ecf959af59
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.508995+00:00.
Case digest / 97174bca5905dba972853cd946df0872b323fc7df5dcc6a0ae6df94751f3cd26