FAILURE MAP
← Case archive

FA-71541 / Seismic magnitude estimation / Open access

Epicentral distance and station selection: tie ordering · case 01

Station lists are alphabetical instead of nearest first.

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

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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