FA-55491 / Astronomical coordinate conventions / Open access
Planetary body fixed labels: Planetary prime-meridian rotation ignores elapsed interval or direction · case 01
The adapter reports an incorrect future prime meridian while other fields remain valid.
ROOT CAUSE
Planetary prime-meridian rotation ignores elapsed interval or direction. Faulty expression: (d['P']-d['rate']*d['dt'])%360
VERIFIED REPAIR
Preserve the declared model convention at this site: (d['P']+d['rate']*d['dt'])%360
Unsuccessful approach: A partial convention repair still uses (d['P']+d['rate'])%360
Case contract
This explicitly stipulated planetary atlas uses west-positive input longitude W, east-positive prime-meridian angle P, latitude B, and an equatorial mirror flag for a southern view. Body-fixed east longitude is -W; inertial longitude adds P. Supplied sin-latitude ratio g is already calibrated and not recomputed. Output fields are defined by: east_longitude = (-d['W'])%360; inertial_longitude = (d['P']-d['W'])%360; view_latitude = -d['B'] if d['south'] else d['B']; geodetic_tangent = d['g']*d['latratio']; future_prime_meridian = (d['P']+d['rate']*d['dt'])%360; future_body_longitude = (-d['W']-d['rate']*d['dt'])%360
Why this case matters
Catalog, detector, sky-coordinate, and spectroscopy adapters must preserve the association between numeric coordinates and their declared reference conventions.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'east_longitude': (-d['W'])%360, 'inertial_longitude': (d['P']-d['W'])%360, 'view_latitude': -d['B'] if d['south'] else d['B'], 'geodetic_tangent': d['g']*d['latratio'], 'future_prime_meridian': (d['P']-d['rate']*d['dt'])%360, 'future_body_longitude': (-d['W']-d['rate']*d['dt'])%360}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 350, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 10, 'inertial_longitude': 40, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 356}), ({'W': 40, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 320}), ({'W': 40, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 320, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 328})], 2: [({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 351, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 9, 'inertial_longitude': 39, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 355}), ({'W': 41, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 319}), ({'W': 41, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 319, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 327})], 3: [({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 352, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 8, 'inertial_longitude': 38, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 354}), ({'W': 42, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 318}), ({'W': 42, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 318, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 326})], 4: [({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 353, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 7, 'inertial_longitude': 37, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 353}), ({'W': 43, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 317}), ({'W': 43, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 317, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 325})], 5: [({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 354, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 6, 'inertial_longitude': 36, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 352}), ({'W': 44, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 316}), ({'W': 44, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 316, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 324})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), 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 |
|---|---|---|---|
| astronomical fixture 0 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 86, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | Failed |
| astronomical fixture 1 | {'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 16, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20} | {'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 44, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20} | Failed |
| astronomical fixture 2 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 86, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20} | Failed |
| astronomical fixture 3 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 86, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30} | Failed |
| astronomical fixture 4 | {'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | Passed |
| astronomical fixture 5 | {'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 8, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 352, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20} | Failed |
SHA-256 / 9fc974842d47952e8850d699b72ce581f50a9f8a9435f6a611f09d7d4e9d355e
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'east_longitude': (-d['W'])%360, 'inertial_longitude': (d['P']-d['W'])%360, 'view_latitude': -d['B'] if d['south'] else d['B'], 'geodetic_tangent': d['g']*d['latratio'], 'future_prime_meridian': (d['P']+d['rate'])%360, 'future_body_longitude': (-d['W']-d['rate']*d['dt'])%360}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 350, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 10, 'inertial_longitude': 40, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 356}), ({'W': 40, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 320}), ({'W': 40, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 320, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 328})], 2: [({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 351, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 9, 'inertial_longitude': 39, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 355}), ({'W': 41, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 319}), ({'W': 41, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 319, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 327})], 3: [({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 352, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 8, 'inertial_longitude': 38, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 354}), ({'W': 42, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 318}), ({'W': 42, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 318, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 326})], 4: [({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 353, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 7, 'inertial_longitude': 37, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 353}), ({'W': 43, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 317}), ({'W': 43, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 317, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 325})], 5: [({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 354, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 6, 'inertial_longitude': 36, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 352}), ({'W': 44, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 316}), ({'W': 44, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 316, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 324})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), 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 |
|---|---|---|---|
| astronomical fixture 0 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 107, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | Failed |
| astronomical fixture 1 | {'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 37, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20} | {'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 44, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20} | Failed |
| astronomical fixture 2 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 107, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20} | Failed |
| astronomical fixture 3 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 107, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30} | Failed |
| astronomical fixture 4 | {'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 107, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | Failed |
| astronomical fixture 5 | {'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 356, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 352, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20} | Failed |
SHA-256 / 4d91d6ab5ad51aba3d9f1baf2fff874d43e950f81bfd3b8bdc2e7a885ac1b1a2
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'east_longitude': (-d['W'])%360, 'inertial_longitude': (d['P']-d['W'])%360, 'view_latitude': -d['B'] if d['south'] else d['B'], 'geodetic_tangent': d['g']*d['latratio'], 'future_prime_meridian': (d['P']+d['rate']*d['dt'])%360, 'future_body_longitude': (-d['W']-d['rate']*d['dt'])%360}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 350, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 10, 'inertial_longitude': 40, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 356}), ({'W': 40, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 320}), ({'W': 40, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 320, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 328})], 2: [({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 351, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 9, 'inertial_longitude': 39, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 355}), ({'W': 41, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 319}), ({'W': 41, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 319, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 327})], 3: [({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 352, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 8, 'inertial_longitude': 38, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 354}), ({'W': 42, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 318}), ({'W': 42, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 318, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 326})], 4: [({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 353, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 7, 'inertial_longitude': 37, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 353}), ({'W': 43, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 317}), ({'W': 43, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 317, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 325})], 5: [({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 354, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 6, 'inertial_longitude': 36, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 352}), ({'W': 44, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 316}), ({'W': 44, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 316, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 324})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), 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 |
|---|---|---|---|
| astronomical fixture 0 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | Passed |
| astronomical fixture 1 | {'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 44, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20} | {'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 44, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20} | Passed |
| astronomical fixture 2 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20} | Passed |
| astronomical fixture 3 | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30} | {'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30} | Passed |
| astronomical fixture 4 | {'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20} | Passed |
| astronomical fixture 5 | {'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 352, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20} | {'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 352, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20} | Passed |
SHA-256 / dfa1ffaa18b16d3b1f3a0e8bc3b0afe76e376e50160f842f9e3b1d94ab14c359
Verification & scope
Explicitly stipulated finite algebraic adapter; no standards conformance, physical accuracy, or production-library claim. Inputs are the documented finite valid model domain. 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:45:58.397809+00:00.
Case digest / 9b476e0a0d7fe569aacb49ed17e38a030c4cf1f801e238a8cf6f660892526e46