FA-71541 / Seismic magnitude estimation / Open access
Epicentral distance and station selection: tie ordering · case 01
Station lists are alphabetical instead of nearest first.
ROOT CAUSE
Sorting uses only the station code.
VERIFIED REPAIR
Sort by distance, then code.
Unsuccessful approach: Reversing the order lists the farthest station first.
Case contract
event [lat, lon] and stations [code, lat, lon] in degrees. Haversine distance with R = 6371 km. Keep stations within 600 km inclusive. Return [[code, km rounded 0.1, degrees rounded 0.001]] sorted by distance then code.
Why this case matters
Local magnitude and location use only stations in the calibrated distance range.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(event, stations):
R = 6371.0
out = []
for code, la, lo in stations:
p1 = math.radians(event[0])
p2 = math.radians(la)
dphi = p2 - p1
dl = math.radians(lo - event[1])
a = math.sin(dphi / 2) ** 2 + math.cos(p1) * math.cos(p2) * math.sin(dl / 2) ** 2
d = 2 * R * math.asin(math.sqrt(min(1.0, a)))
if d <= 600:
out.append([code, round(d, 1), round(math.degrees(d / R), 3)])
return sorted(out, key=lambda r: r[0])
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['network 0', [[43.44, -118.77], [['S00', 33.06, -119.2], ['S01', 32.76, -122.81], ['S02', 40.37, -113.11], ['S03', 47.01, -115.45], ['S04', 33.17, -122.81]]], [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]]], ['network 1', [[36.34, -120.83], [['S00', 37.53, -117.85], ['S01', 32.11, -122.6], ['S02', 34.89, -117.33], ['S03', 49.21, -120.87], ['S04', 42.08, -112.12]]], [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]]], ['network 2', [[44.56, -117.35], [['S00', 33.87, -122.39], ['S01', 32.58, -119.0], ['S02', 30.34, -116.47], ['S03', 43.88, -121.21], ['S04', 32.47, -111.54]]], [['S03', 316.7, 2.848]]], ['network 3', [[37.38, -120.81], [['S00', 37.99, -119.17], ['S01', 44.87, -121.53], ['S02', 36.92, -112.06], ['S03', 45.59, -124.41], ['S04', 48.41, -124.22], ['S05', 45.33, -114.43]]], [['S00', 159.5, 1.434]]], ['network 4', [[37.36, -114.17], [['S00', 43.21, -115.97], ['S01', 45.47, -113.6], ['S02', 43.88, -123.02], ['S03', 33.26, -123.35], ['S04', 41.04, -116.35], ['S05', 41.29, -123.64]]], [['S04', 450.2, 4.049]]], ['network 5', [[41.23, -114.32], [['S00', 48.44, -112.36], ['S01', 39.92, -111.66], ['S02', 31.63, -118.69], ['S03', 44.86, -116.63], ['S04', 45.92, -112.0], ['S05', 31.93, -116.6]]], [['S01', 267.7, 2.408], ['S03', 445.1, 4.003], ['S04', 553.9, 4.981]]], ['network 6', [[42.93, -114.98], [['S00', 41.78, -113.99], ['S01', 46.04, -120.17], ['S02', 39.37, -111.82], ['S03', 48.06, -111.76], ['S04', 45.02, -119.59]]], [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]]], ['network 7', [[38.24, -116.31], [['S00', 44.82, -111.25], ['S01', 41.96, -117.22], ['S02', 45.77, -122.79]]], [['S01', 420.8, 3.784]]]], [['network 7', [[38.24, -116.31], [['S00', 44.82, -111.25], ['S01', 41.96, -117.22], ['S02', 45.77, -122.79]]], [['S01', 420.8, 3.784]]], ['network 8', [[37.27, -120.03], [['S00', 32.27, -124.77], ['S01', 36.2, -116.4], ['S02', 46.93, -122.1], ['S03', 48.81, -114.9]]], [['S01', 344.6, 3.099]]], ['network 9', [[39.63, -120.96], [['S00', 47.23, -111.26], ['S01', 41.57, -124.4], ['S02', 43.29, -122.87], ['S03', 45.0, -116.27], ['S04', 49.12, -110.82], ['S05', 33.21, -123.87]]], [['S01', 361.7, 3.253], ['S02', 437.0, 3.93]]], ['network 10', [[40.71, -119.76], [['S00', 42.0, -113.32], ['S01', 47.1, -113.65], ['S02', 40.97, -110.91], ['S03', 38.42, -122.78], ['S04', 40.45, -114.89]]], [['S03', 363.1, 3.265], ['S04', 412.2, 3.707], ['S00', 556.2, 5.002]]], ['network 11', [[39.52, -114.53], [['S00', 35.96, -123.88], ['S01', 41.26, -111.67], ['S02', 46.06, -119.82], ['S03', 38.64, -110.68], ['S04', 43.59, -119.31]]], [['S01', 310.0, 2.788], ['S03', 346.4, 3.115]]], ['network 12', [[39.75, -115.38], [['S00', 39.91, -122.96], ['S01', 40.0, -124.22], ['S02', 45.24, -114.12], ['S03', 36.65, -117.11], ['S04', 39.11, -115.83], ['S05', 48.17, -111.51]]], [['S04', 81.0, 0.728], ['S03', 376.4, 3.385]]], ['network 13', [[37.59, -118.15], [['S00', 47.62, -121.75], ['S01', 38.46, -111.42], ['S02', 35.08, -114.72], ['S03', 35.66, -117.77]]], [['S03', 217.3, 1.954], ['S02', 415.0, 3.732], ['S01', 597.2, 5.371]]], ['network 14', [[36.07, -121.76], [['S00', 47.41, -116.96], ['S01', 36.95, -119.89], ['S02', 31.53, -122.92], ['S03', 32.44, -118.51], ['S04', 35.33, -113.8]]], [['S01', 193.7, 1.742], ['S03', 502.1, 4.515], ['S02', 516.1, 4.641]]]], [['network 14', [[36.07, -121.76], [['S00', 47.41, -116.96], ['S01', 36.95, -119.89], ['S02', 31.53, -122.92], ['S03', 32.44, -118.51], ['S04', 35.33, -113.8]]], [['S01', 193.7, 1.742], ['S03', 502.1, 4.515], ['S02', 516.1, 4.641]]], ['network 15', [[44.65, -120.07], [['S00', 46.05, -112.8], ['S01', 42.47, -123.99], ['S02', 38.63, -115.24], ['S03', 45.86, -118.34], ['S04', 39.78, -111.34], ['S05', 46.45, -117.59]]], [['S03', 190.9, 1.717], ['S05', 278.1, 2.501], ['S01', 398.1, 3.58], ['S00', 588.8, 5.295]]], ['network 16', [[38.62, -114.83], [['S00', 44.48, -122.4], ['S01', 39.21, -110.38]]], [['S01', 390.5, 3.512]]], ['network 17', [[40.22, -115.43], [['S00', 34.58, -110.93], ['S01', 32.33, -116.94], ['S02', 42.07, -117.12]]], [['S02', 249.7, 2.245]]], ['network 18', [[36.81, -120.08], [['S00', 45.93, -122.19], ['S01', 42.64, -115.55], ['S02', 44.75, -122.18], ['S03', 41.26, -115.09], ['S04', 43.24, -121.66]]], []], ['network 19', [[41.77, -116.31], [['S00', 37.95, -124.57], ['S01', 45.84, -119.62], ['S02', 42.56, -111.41], ['S03', 40.32, -110.13], ['S04', 47.42, -111.15], ['S05', 31.98, -115.86]]], [['S02', 413.2, 3.716], ['S01', 524.6, 4.718], ['S03', 542.6, 4.88]]], ['network 20', [[44.06, -114.59], [['S00', 39.32, -110.59], ['S01', 36.71, -114.59], ['S02', 38.77, -120.99], ['S03', 31.6, -120.79]]], []], ['network 21', [[36.65, -117.88], [['S00', 38.12, -115.31], ['S01', 38.66, -112.95], ['S02', 34.34, -114.03]]], [['S00', 279.8, 2.516], ['S02', 432.9, 3.893], ['S01', 488.1, 4.389]]]], [['network 21', [[36.65, -117.88], [['S00', 38.12, -115.31], ['S01', 38.66, -112.95], ['S02', 34.34, -114.03]]], [['S00', 279.8, 2.516], ['S02', 432.9, 3.893], ['S01', 488.1, 4.389]]], ['network 22', [[44.58, -121.3], [['S00', 38.09, -120.43], ['S01', 49.5, -111.91], ['S02', 46.12, -110.34], ['S03', 49.31, -118.62], ['S04', 34.6, -110.46]]], [['S03', 563.8, 5.071]]], ['network 23', [[44.25, -117.92], [['S00', 44.39, -122.69], ['S01', 37.18, -114.68], ['S02', 44.85, -124.42], ['S03', 42.91, -119.64]]], [['S03', 203.5, 1.83], ['S00', 379.7, 3.415], ['S02', 519.2, 4.67]]], ['network 24', [[42.12, -121.58], [['S00', 39.06, -115.35], ['S01', 41.41, -121.4]]], [['S01', 80.3, 0.723]]], ['network 25', [[38.77, -114.31], [['S00', 43.94, -110.09], ['S01', 47.99, -124.55], ['S02', 48.6, -124.13], ['S03', 47.11, -121.53]]], []], ['network 26', [[42.47, -114.8], [['S00', 36.7, -111.1], ['S01', 46.83, -118.43], ['S02', 34.65, -112.02]]], [['S01', 563.3, 5.066]]], ['network 27', [[41.48, -117.42], [['S00', 43.98, -122.75], ['S01', 36.25, -110.05]]], [['S00', 516.4, 4.644]]], ['equal distance tie', [[0.0, 0.0], [['ZZZ', 1.0, 0.0], ['AAA', -1.0, 0.0]]], [['AAA', 111.2, 1.0], ['ZZZ', 111.2, 1.0]]]], [['network 0', [[43.44, -118.77], [['S00', 33.06, -119.2], ['S01', 32.76, -122.81], ['S02', 40.37, -113.11], ['S03', 47.01, -115.45], ['S04', 33.17, -122.81]]], [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]]], ['network 1', [[36.34, -120.83], [['S00', 37.53, -117.85], ['S01', 32.11, -122.6], ['S02', 34.89, -117.33], ['S03', 49.21, -120.87], ['S04', 42.08, -112.12]]], [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]]], ['network 6', [[42.93, -114.98], [['S00', 41.78, -113.99], ['S01', 46.04, -120.17], ['S02', 39.37, -111.82], ['S03', 48.06, -111.76], ['S04', 45.02, -119.59]]], [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]]], ['network 28', [[36.13, -121.64], [['S00', 30.99, -116.87], ['S01', 48.63, -114.1], ['S02', 30.53, -117.85], ['S03', 31.41, -124.62], ['S04', 35.71, -124.61]]], [['S04', 271.5, 2.442], ['S03', 592.6, 5.33]]], ['network 29', [[40.48, -114.48], [['S00', 38.22, -118.13], ['S01', 43.34, -122.26]]], [['S00', 402.0, 3.615]]], ['co-located station', [[40.0, -120.0], [['AAA', 40.0, -120.0], ['BBB', 41.0, -120.0]]], [['AAA', 0.0, 0.0], ['BBB', 111.2, 1.0]]], ['equal distance tie', [[0.0, 0.0], [['ZZZ', 1.0, 0.0], ['AAA', -1.0, 0.0]]], [['AAA', 111.2, 1.0], ['ZZZ', 111.2, 1.0]]], ['east-west line', [[10.0, 20.0], [['E1', 10.0, 23.0], ['W1', 10.0, 17.5]]], [['W1', 273.8, 2.462], ['E1', 328.5, 2.954]]]]]
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 |
|---|---|---|---|
| network 0 | [['S02', 579.4, 5.21], ['S03', 474.4, 4.267]] | [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]] | Failed |
| network 1 | [['S00', 296.1, 2.662], ['S01', 497.7, 4.476], ['S02', 355.1, 3.193]] | [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]] | Failed |
| network 2 | [['S03', 316.7, 2.848]] | [['S03', 316.7, 2.848]] | Passed |
| network 3 | [['S00', 159.5, 1.434]] | [['S00', 159.5, 1.434]] | Passed |
| network 4 | [['S04', 450.2, 4.049]] | [['S04', 450.2, 4.049]] | Passed |
| network 5 | [['S01', 267.7, 2.408], ['S03', 445.1, 4.003], ['S04', 553.9, 4.981]] | [['S01', 267.7, 2.408], ['S03', 445.1, 4.003], ['S04', 553.9, 4.981]] | Passed |
| network 6 | [['S00', 151.6, 1.363], ['S01', 537.5, 4.834], ['S02', 476.0, 4.281], ['S04', 435.9, 3.92]] | [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]] | Failed |
| network 7 | [['S01', 420.8, 3.784]] | [['S01', 420.8, 3.784]] | Passed |
SHA-256 / e60242a7c4c4ad944149fe028882d1995184139f192833ea54a0b5e9ebd35dd6
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(event, stations):
R = 6371.0
out = []
for code, la, lo in stations:
p1 = math.radians(event[0])
p2 = math.radians(la)
dphi = p2 - p1
dl = math.radians(lo - event[1])
a = math.sin(dphi / 2) ** 2 + math.cos(p1) * math.cos(p2) * math.sin(dl / 2) ** 2
d = 2 * R * math.asin(math.sqrt(min(1.0, a)))
if d <= 600:
out.append([code, round(d, 1), round(math.degrees(d / R), 3)])
return sorted(out, key=lambda r: (r[1], r[0]), reverse=True)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['network 0', [[43.44, -118.77], [['S00', 33.06, -119.2], ['S01', 32.76, -122.81], ['S02', 40.37, -113.11], ['S03', 47.01, -115.45], ['S04', 33.17, -122.81]]], [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]]], ['network 1', [[36.34, -120.83], [['S00', 37.53, -117.85], ['S01', 32.11, -122.6], ['S02', 34.89, -117.33], ['S03', 49.21, -120.87], ['S04', 42.08, -112.12]]], [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]]], ['network 2', [[44.56, -117.35], [['S00', 33.87, -122.39], ['S01', 32.58, -119.0], ['S02', 30.34, -116.47], ['S03', 43.88, -121.21], ['S04', 32.47, -111.54]]], [['S03', 316.7, 2.848]]], ['network 3', [[37.38, -120.81], [['S00', 37.99, -119.17], ['S01', 44.87, -121.53], ['S02', 36.92, -112.06], ['S03', 45.59, -124.41], ['S04', 48.41, -124.22], ['S05', 45.33, -114.43]]], [['S00', 159.5, 1.434]]], ['network 4', [[37.36, -114.17], [['S00', 43.21, -115.97], ['S01', 45.47, -113.6], ['S02', 43.88, -123.02], ['S03', 33.26, -123.35], ['S04', 41.04, -116.35], ['S05', 41.29, -123.64]]], [['S04', 450.2, 4.049]]], ['network 5', [[41.23, -114.32], [['S00', 48.44, -112.36], ['S01', 39.92, -111.66], ['S02', 31.63, -118.69], ['S03', 44.86, -116.63], ['S04', 45.92, -112.0], ['S05', 31.93, -116.6]]], [['S01', 267.7, 2.408], ['S03', 445.1, 4.003], ['S04', 553.9, 4.981]]], ['network 6', [[42.93, -114.98], [['S00', 41.78, -113.99], ['S01', 46.04, -120.17], ['S02', 39.37, -111.82], ['S03', 48.06, -111.76], ['S04', 45.02, -119.59]]], [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]]], ['network 7', [[38.24, -116.31], [['S00', 44.82, -111.25], ['S01', 41.96, -117.22], ['S02', 45.77, -122.79]]], [['S01', 420.8, 3.784]]]], [['network 7', [[38.24, -116.31], [['S00', 44.82, -111.25], ['S01', 41.96, -117.22], ['S02', 45.77, -122.79]]], [['S01', 420.8, 3.784]]], ['network 8', [[37.27, -120.03], [['S00', 32.27, -124.77], ['S01', 36.2, -116.4], ['S02', 46.93, -122.1], ['S03', 48.81, -114.9]]], [['S01', 344.6, 3.099]]], ['network 9', [[39.63, -120.96], [['S00', 47.23, -111.26], ['S01', 41.57, -124.4], ['S02', 43.29, -122.87], ['S03', 45.0, -116.27], ['S04', 49.12, -110.82], ['S05', 33.21, -123.87]]], [['S01', 361.7, 3.253], ['S02', 437.0, 3.93]]], ['network 10', [[40.71, -119.76], [['S00', 42.0, -113.32], ['S01', 47.1, -113.65], ['S02', 40.97, -110.91], ['S03', 38.42, -122.78], ['S04', 40.45, -114.89]]], [['S03', 363.1, 3.265], ['S04', 412.2, 3.707], ['S00', 556.2, 5.002]]], ['network 11', [[39.52, -114.53], [['S00', 35.96, -123.88], ['S01', 41.26, -111.67], ['S02', 46.06, -119.82], ['S03', 38.64, -110.68], ['S04', 43.59, -119.31]]], [['S01', 310.0, 2.788], ['S03', 346.4, 3.115]]], ['network 12', [[39.75, -115.38], [['S00', 39.91, -122.96], ['S01', 40.0, -124.22], ['S02', 45.24, -114.12], ['S03', 36.65, -117.11], ['S04', 39.11, -115.83], ['S05', 48.17, -111.51]]], [['S04', 81.0, 0.728], ['S03', 376.4, 3.385]]], ['network 13', [[37.59, -118.15], [['S00', 47.62, -121.75], ['S01', 38.46, -111.42], ['S02', 35.08, -114.72], ['S03', 35.66, -117.77]]], [['S03', 217.3, 1.954], ['S02', 415.0, 3.732], ['S01', 597.2, 5.371]]], ['network 14', [[36.07, -121.76], [['S00', 47.41, -116.96], ['S01', 36.95, -119.89], ['S02', 31.53, -122.92], ['S03', 32.44, -118.51], ['S04', 35.33, -113.8]]], [['S01', 193.7, 1.742], ['S03', 502.1, 4.515], ['S02', 516.1, 4.641]]]], [['network 14', [[36.07, -121.76], [['S00', 47.41, -116.96], ['S01', 36.95, -119.89], ['S02', 31.53, -122.92], ['S03', 32.44, -118.51], ['S04', 35.33, -113.8]]], [['S01', 193.7, 1.742], ['S03', 502.1, 4.515], ['S02', 516.1, 4.641]]], ['network 15', [[44.65, -120.07], [['S00', 46.05, -112.8], ['S01', 42.47, -123.99], ['S02', 38.63, -115.24], ['S03', 45.86, -118.34], ['S04', 39.78, -111.34], ['S05', 46.45, -117.59]]], [['S03', 190.9, 1.717], ['S05', 278.1, 2.501], ['S01', 398.1, 3.58], ['S00', 588.8, 5.295]]], ['network 16', [[38.62, -114.83], [['S00', 44.48, -122.4], ['S01', 39.21, -110.38]]], [['S01', 390.5, 3.512]]], ['network 17', [[40.22, -115.43], [['S00', 34.58, -110.93], ['S01', 32.33, -116.94], ['S02', 42.07, -117.12]]], [['S02', 249.7, 2.245]]], ['network 18', [[36.81, -120.08], [['S00', 45.93, -122.19], ['S01', 42.64, -115.55], ['S02', 44.75, -122.18], ['S03', 41.26, -115.09], ['S04', 43.24, -121.66]]], []], ['network 19', [[41.77, -116.31], [['S00', 37.95, -124.57], ['S01', 45.84, -119.62], ['S02', 42.56, -111.41], ['S03', 40.32, -110.13], ['S04', 47.42, -111.15], ['S05', 31.98, -115.86]]], [['S02', 413.2, 3.716], ['S01', 524.6, 4.718], ['S03', 542.6, 4.88]]], ['network 20', [[44.06, -114.59], [['S00', 39.32, -110.59], ['S01', 36.71, -114.59], ['S02', 38.77, -120.99], ['S03', 31.6, -120.79]]], []], ['network 21', [[36.65, -117.88], [['S00', 38.12, -115.31], ['S01', 38.66, -112.95], ['S02', 34.34, -114.03]]], [['S00', 279.8, 2.516], ['S02', 432.9, 3.893], ['S01', 488.1, 4.389]]]], [['network 21', [[36.65, -117.88], [['S00', 38.12, -115.31], ['S01', 38.66, -112.95], ['S02', 34.34, -114.03]]], [['S00', 279.8, 2.516], ['S02', 432.9, 3.893], ['S01', 488.1, 4.389]]], ['network 22', [[44.58, -121.3], [['S00', 38.09, -120.43], ['S01', 49.5, -111.91], ['S02', 46.12, -110.34], ['S03', 49.31, -118.62], ['S04', 34.6, -110.46]]], [['S03', 563.8, 5.071]]], ['network 23', [[44.25, -117.92], [['S00', 44.39, -122.69], ['S01', 37.18, -114.68], ['S02', 44.85, -124.42], ['S03', 42.91, -119.64]]], [['S03', 203.5, 1.83], ['S00', 379.7, 3.415], ['S02', 519.2, 4.67]]], ['network 24', [[42.12, -121.58], [['S00', 39.06, -115.35], ['S01', 41.41, -121.4]]], [['S01', 80.3, 0.723]]], ['network 25', [[38.77, -114.31], [['S00', 43.94, -110.09], ['S01', 47.99, -124.55], ['S02', 48.6, -124.13], ['S03', 47.11, -121.53]]], []], ['network 26', [[42.47, -114.8], [['S00', 36.7, -111.1], ['S01', 46.83, -118.43], ['S02', 34.65, -112.02]]], [['S01', 563.3, 5.066]]], ['network 27', [[41.48, -117.42], [['S00', 43.98, -122.75], ['S01', 36.25, -110.05]]], [['S00', 516.4, 4.644]]], ['equal distance tie', [[0.0, 0.0], [['ZZZ', 1.0, 0.0], ['AAA', -1.0, 0.0]]], [['AAA', 111.2, 1.0], ['ZZZ', 111.2, 1.0]]]], [['network 0', [[43.44, -118.77], [['S00', 33.06, -119.2], ['S01', 32.76, -122.81], ['S02', 40.37, -113.11], ['S03', 47.01, -115.45], ['S04', 33.17, -122.81]]], [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]]], ['network 1', [[36.34, -120.83], [['S00', 37.53, -117.85], ['S01', 32.11, -122.6], ['S02', 34.89, -117.33], ['S03', 49.21, -120.87], ['S04', 42.08, -112.12]]], [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]]], ['network 6', [[42.93, -114.98], [['S00', 41.78, -113.99], ['S01', 46.04, -120.17], ['S02', 39.37, -111.82], ['S03', 48.06, -111.76], ['S04', 45.02, -119.59]]], [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]]], ['network 28', [[36.13, -121.64], [['S00', 30.99, -116.87], ['S01', 48.63, -114.1], ['S02', 30.53, -117.85], ['S03', 31.41, -124.62], ['S04', 35.71, -124.61]]], [['S04', 271.5, 2.442], ['S03', 592.6, 5.33]]], ['network 29', [[40.48, -114.48], [['S00', 38.22, -118.13], ['S01', 43.34, -122.26]]], [['S00', 402.0, 3.615]]], ['co-located station', [[40.0, -120.0], [['AAA', 40.0, -120.0], ['BBB', 41.0, -120.0]]], [['AAA', 0.0, 0.0], ['BBB', 111.2, 1.0]]], ['equal distance tie', [[0.0, 0.0], [['ZZZ', 1.0, 0.0], ['AAA', -1.0, 0.0]]], [['AAA', 111.2, 1.0], ['ZZZ', 111.2, 1.0]]], ['east-west line', [[10.0, 20.0], [['E1', 10.0, 23.0], ['W1', 10.0, 17.5]]], [['W1', 273.8, 2.462], ['E1', 328.5, 2.954]]]]]
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 |
|---|---|---|---|
| network 0 | [['S02', 579.4, 5.21], ['S03', 474.4, 4.267]] | [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]] | Failed |
| network 1 | [['S01', 497.7, 4.476], ['S02', 355.1, 3.193], ['S00', 296.1, 2.662]] | [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]] | Failed |
| network 2 | [['S03', 316.7, 2.848]] | [['S03', 316.7, 2.848]] | Passed |
| network 3 | [['S00', 159.5, 1.434]] | [['S00', 159.5, 1.434]] | Passed |
| network 4 | [['S04', 450.2, 4.049]] | [['S04', 450.2, 4.049]] | Passed |
| network 5 | [['S04', 553.9, 4.981], ['S03', 445.1, 4.003], ['S01', 267.7, 2.408]] | [['S01', 267.7, 2.408], ['S03', 445.1, 4.003], ['S04', 553.9, 4.981]] | Failed |
| network 6 | [['S01', 537.5, 4.834], ['S02', 476.0, 4.281], ['S04', 435.9, 3.92], ['S00', 151.6, 1.363]] | [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]] | Failed |
| network 7 | [['S01', 420.8, 3.784]] | [['S01', 420.8, 3.784]] | Passed |
SHA-256 / d434f09b9f59262347fb3ec6ab0500dac399cd8f59dd73f360b9dc25dc3aa559
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(event, stations):
R = 6371.0
out = []
for code, la, lo in stations:
p1 = math.radians(event[0])
p2 = math.radians(la)
dphi = p2 - p1
dl = math.radians(lo - event[1])
a = math.sin(dphi / 2) ** 2 + math.cos(p1) * math.cos(p2) * math.sin(dl / 2) ** 2
d = 2 * R * math.asin(math.sqrt(min(1.0, a)))
if d <= 600:
out.append([code, round(d, 1), round(math.degrees(d / R), 3)])
return sorted(out, key=lambda r: (r[1], r[0]))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['network 0', [[43.44, -118.77], [['S00', 33.06, -119.2], ['S01', 32.76, -122.81], ['S02', 40.37, -113.11], ['S03', 47.01, -115.45], ['S04', 33.17, -122.81]]], [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]]], ['network 1', [[36.34, -120.83], [['S00', 37.53, -117.85], ['S01', 32.11, -122.6], ['S02', 34.89, -117.33], ['S03', 49.21, -120.87], ['S04', 42.08, -112.12]]], [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]]], ['network 2', [[44.56, -117.35], [['S00', 33.87, -122.39], ['S01', 32.58, -119.0], ['S02', 30.34, -116.47], ['S03', 43.88, -121.21], ['S04', 32.47, -111.54]]], [['S03', 316.7, 2.848]]], ['network 3', [[37.38, -120.81], [['S00', 37.99, -119.17], ['S01', 44.87, -121.53], ['S02', 36.92, -112.06], ['S03', 45.59, -124.41], ['S04', 48.41, -124.22], ['S05', 45.33, -114.43]]], [['S00', 159.5, 1.434]]], ['network 4', [[37.36, -114.17], [['S00', 43.21, -115.97], ['S01', 45.47, -113.6], ['S02', 43.88, -123.02], ['S03', 33.26, -123.35], ['S04', 41.04, -116.35], ['S05', 41.29, -123.64]]], [['S04', 450.2, 4.049]]], ['network 5', [[41.23, -114.32], [['S00', 48.44, -112.36], ['S01', 39.92, -111.66], ['S02', 31.63, -118.69], ['S03', 44.86, -116.63], ['S04', 45.92, -112.0], ['S05', 31.93, -116.6]]], [['S01', 267.7, 2.408], ['S03', 445.1, 4.003], ['S04', 553.9, 4.981]]], ['network 6', [[42.93, -114.98], [['S00', 41.78, -113.99], ['S01', 46.04, -120.17], ['S02', 39.37, -111.82], ['S03', 48.06, -111.76], ['S04', 45.02, -119.59]]], [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]]], ['network 7', [[38.24, -116.31], [['S00', 44.82, -111.25], ['S01', 41.96, -117.22], ['S02', 45.77, -122.79]]], [['S01', 420.8, 3.784]]]], [['network 7', [[38.24, -116.31], [['S00', 44.82, -111.25], ['S01', 41.96, -117.22], ['S02', 45.77, -122.79]]], [['S01', 420.8, 3.784]]], ['network 8', [[37.27, -120.03], [['S00', 32.27, -124.77], ['S01', 36.2, -116.4], ['S02', 46.93, -122.1], ['S03', 48.81, -114.9]]], [['S01', 344.6, 3.099]]], ['network 9', [[39.63, -120.96], [['S00', 47.23, -111.26], ['S01', 41.57, -124.4], ['S02', 43.29, -122.87], ['S03', 45.0, -116.27], ['S04', 49.12, -110.82], ['S05', 33.21, -123.87]]], [['S01', 361.7, 3.253], ['S02', 437.0, 3.93]]], ['network 10', [[40.71, -119.76], [['S00', 42.0, -113.32], ['S01', 47.1, -113.65], ['S02', 40.97, -110.91], ['S03', 38.42, -122.78], ['S04', 40.45, -114.89]]], [['S03', 363.1, 3.265], ['S04', 412.2, 3.707], ['S00', 556.2, 5.002]]], ['network 11', [[39.52, -114.53], [['S00', 35.96, -123.88], ['S01', 41.26, -111.67], ['S02', 46.06, -119.82], ['S03', 38.64, -110.68], ['S04', 43.59, -119.31]]], [['S01', 310.0, 2.788], ['S03', 346.4, 3.115]]], ['network 12', [[39.75, -115.38], [['S00', 39.91, -122.96], ['S01', 40.0, -124.22], ['S02', 45.24, -114.12], ['S03', 36.65, -117.11], ['S04', 39.11, -115.83], ['S05', 48.17, -111.51]]], [['S04', 81.0, 0.728], ['S03', 376.4, 3.385]]], ['network 13', [[37.59, -118.15], [['S00', 47.62, -121.75], ['S01', 38.46, -111.42], ['S02', 35.08, -114.72], ['S03', 35.66, -117.77]]], [['S03', 217.3, 1.954], ['S02', 415.0, 3.732], ['S01', 597.2, 5.371]]], ['network 14', [[36.07, -121.76], [['S00', 47.41, -116.96], ['S01', 36.95, -119.89], ['S02', 31.53, -122.92], ['S03', 32.44, -118.51], ['S04', 35.33, -113.8]]], [['S01', 193.7, 1.742], ['S03', 502.1, 4.515], ['S02', 516.1, 4.641]]]], [['network 14', [[36.07, -121.76], [['S00', 47.41, -116.96], ['S01', 36.95, -119.89], ['S02', 31.53, -122.92], ['S03', 32.44, -118.51], ['S04', 35.33, -113.8]]], [['S01', 193.7, 1.742], ['S03', 502.1, 4.515], ['S02', 516.1, 4.641]]], ['network 15', [[44.65, -120.07], [['S00', 46.05, -112.8], ['S01', 42.47, -123.99], ['S02', 38.63, -115.24], ['S03', 45.86, -118.34], ['S04', 39.78, -111.34], ['S05', 46.45, -117.59]]], [['S03', 190.9, 1.717], ['S05', 278.1, 2.501], ['S01', 398.1, 3.58], ['S00', 588.8, 5.295]]], ['network 16', [[38.62, -114.83], [['S00', 44.48, -122.4], ['S01', 39.21, -110.38]]], [['S01', 390.5, 3.512]]], ['network 17', [[40.22, -115.43], [['S00', 34.58, -110.93], ['S01', 32.33, -116.94], ['S02', 42.07, -117.12]]], [['S02', 249.7, 2.245]]], ['network 18', [[36.81, -120.08], [['S00', 45.93, -122.19], ['S01', 42.64, -115.55], ['S02', 44.75, -122.18], ['S03', 41.26, -115.09], ['S04', 43.24, -121.66]]], []], ['network 19', [[41.77, -116.31], [['S00', 37.95, -124.57], ['S01', 45.84, -119.62], ['S02', 42.56, -111.41], ['S03', 40.32, -110.13], ['S04', 47.42, -111.15], ['S05', 31.98, -115.86]]], [['S02', 413.2, 3.716], ['S01', 524.6, 4.718], ['S03', 542.6, 4.88]]], ['network 20', [[44.06, -114.59], [['S00', 39.32, -110.59], ['S01', 36.71, -114.59], ['S02', 38.77, -120.99], ['S03', 31.6, -120.79]]], []], ['network 21', [[36.65, -117.88], [['S00', 38.12, -115.31], ['S01', 38.66, -112.95], ['S02', 34.34, -114.03]]], [['S00', 279.8, 2.516], ['S02', 432.9, 3.893], ['S01', 488.1, 4.389]]]], [['network 21', [[36.65, -117.88], [['S00', 38.12, -115.31], ['S01', 38.66, -112.95], ['S02', 34.34, -114.03]]], [['S00', 279.8, 2.516], ['S02', 432.9, 3.893], ['S01', 488.1, 4.389]]], ['network 22', [[44.58, -121.3], [['S00', 38.09, -120.43], ['S01', 49.5, -111.91], ['S02', 46.12, -110.34], ['S03', 49.31, -118.62], ['S04', 34.6, -110.46]]], [['S03', 563.8, 5.071]]], ['network 23', [[44.25, -117.92], [['S00', 44.39, -122.69], ['S01', 37.18, -114.68], ['S02', 44.85, -124.42], ['S03', 42.91, -119.64]]], [['S03', 203.5, 1.83], ['S00', 379.7, 3.415], ['S02', 519.2, 4.67]]], ['network 24', [[42.12, -121.58], [['S00', 39.06, -115.35], ['S01', 41.41, -121.4]]], [['S01', 80.3, 0.723]]], ['network 25', [[38.77, -114.31], [['S00', 43.94, -110.09], ['S01', 47.99, -124.55], ['S02', 48.6, -124.13], ['S03', 47.11, -121.53]]], []], ['network 26', [[42.47, -114.8], [['S00', 36.7, -111.1], ['S01', 46.83, -118.43], ['S02', 34.65, -112.02]]], [['S01', 563.3, 5.066]]], ['network 27', [[41.48, -117.42], [['S00', 43.98, -122.75], ['S01', 36.25, -110.05]]], [['S00', 516.4, 4.644]]], ['equal distance tie', [[0.0, 0.0], [['ZZZ', 1.0, 0.0], ['AAA', -1.0, 0.0]]], [['AAA', 111.2, 1.0], ['ZZZ', 111.2, 1.0]]]], [['network 0', [[43.44, -118.77], [['S00', 33.06, -119.2], ['S01', 32.76, -122.81], ['S02', 40.37, -113.11], ['S03', 47.01, -115.45], ['S04', 33.17, -122.81]]], [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]]], ['network 1', [[36.34, -120.83], [['S00', 37.53, -117.85], ['S01', 32.11, -122.6], ['S02', 34.89, -117.33], ['S03', 49.21, -120.87], ['S04', 42.08, -112.12]]], [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]]], ['network 6', [[42.93, -114.98], [['S00', 41.78, -113.99], ['S01', 46.04, -120.17], ['S02', 39.37, -111.82], ['S03', 48.06, -111.76], ['S04', 45.02, -119.59]]], [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]]], ['network 28', [[36.13, -121.64], [['S00', 30.99, -116.87], ['S01', 48.63, -114.1], ['S02', 30.53, -117.85], ['S03', 31.41, -124.62], ['S04', 35.71, -124.61]]], [['S04', 271.5, 2.442], ['S03', 592.6, 5.33]]], ['network 29', [[40.48, -114.48], [['S00', 38.22, -118.13], ['S01', 43.34, -122.26]]], [['S00', 402.0, 3.615]]], ['co-located station', [[40.0, -120.0], [['AAA', 40.0, -120.0], ['BBB', 41.0, -120.0]]], [['AAA', 0.0, 0.0], ['BBB', 111.2, 1.0]]], ['equal distance tie', [[0.0, 0.0], [['ZZZ', 1.0, 0.0], ['AAA', -1.0, 0.0]]], [['AAA', 111.2, 1.0], ['ZZZ', 111.2, 1.0]]], ['east-west line', [[10.0, 20.0], [['E1', 10.0, 23.0], ['W1', 10.0, 17.5]]], [['W1', 273.8, 2.462], ['E1', 328.5, 2.954]]]]]
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 |
|---|---|---|---|
| network 0 | [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]] | [['S03', 474.4, 4.267], ['S02', 579.4, 5.21]] | Passed |
| network 1 | [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]] | [['S00', 296.1, 2.662], ['S02', 355.1, 3.193], ['S01', 497.7, 4.476]] | Passed |
| network 2 | [['S03', 316.7, 2.848]] | [['S03', 316.7, 2.848]] | Passed |
| network 3 | [['S00', 159.5, 1.434]] | [['S00', 159.5, 1.434]] | Passed |
| network 4 | [['S04', 450.2, 4.049]] | [['S04', 450.2, 4.049]] | Passed |
| network 5 | [['S01', 267.7, 2.408], ['S03', 445.1, 4.003], ['S04', 553.9, 4.981]] | [['S01', 267.7, 2.408], ['S03', 445.1, 4.003], ['S04', 553.9, 4.981]] | Passed |
| network 6 | [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]] | [['S00', 151.6, 1.363], ['S04', 435.9, 3.92], ['S02', 476.0, 4.281], ['S01', 537.5, 4.834]] | Passed |
| network 7 | [['S01', 420.8, 3.784]] | [['S01', 420.8, 3.784]] | Passed |
SHA-256 / 147d2b092e1e9fed3004745ae9396b4c59cb5ed72828e9a8040b42c3be489195
Verification & scope
Stipulated deterministic teaching model of a seismological magnitude procedure; constants and tables are fixed by the contract and no claim of agency or standards conformance is made. 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:30.497299+00:00.
Case digest / 486062dd889d4c20f0dc5ee7923cdb30b276618258b7ffa4774a238ad5fad9f7