FAILURE MAP
← Case archive

FA-71816 / Seismic magnitude estimation / Open access

Radiated energy magnitude: distance units · case 01

Energy is a million times too small.

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

ROOT CAUSE

Distance in km is used in an SI formula.

VERIFIED REPAIR

Convert km to m.

Unsuccessful approach: Scaling by 1e6 treats kilometres as millimetres.

Case contract

Ground velocity samples in m/s, sample interval s, hypocentral distance km. Energy flux integral = sum(v^2)*dt; Es = 4 pi rho beta R^2 * integral * 0.25 (free-surface correction), rho=2700 kg/m3, beta=3500 m/s, R in m. Me = 2/3 log10 Es - 2.9. Return [Es "%.3e", Me rounded 0.01]; None if the trace is empty or all zero.

Why this case matters

Energy magnitude complements Mw for damage potential of high-frequency radiation.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(vel_ms, dt, dist_km):
    if not vel_ms:
        return None
    flux = sum(v * v for v in vel_ms) * dt
    if flux <= 0:
        return None
    r = dist_km
    es = 4 * math.pi * 2700.0 * 3500.0 * r * r * flux * 0.25
    me = 2.0 / 3.0 * math.log10(es) - 2.9
    return ["%.3e" % es, round(me, 2)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['record 0', [[-0.001678, -0.001936, -0.000937], 0.02, 150], ['9.942e+10', 4.43]], ['record 1', [[0.00191, 0.000969, -0.001187], 0.01, 20], ['7.120e+08', 3.0]], ['record 2', [[0.001531, -0.000904, -0.000647, -8.8e-05, -0.000752, 0.00103, -0.000661, 0.001856], 0.01, 20], ['1.080e+09', 3.12]], ['record 3', [[0.000833, -0.001601, 0.000828], 0.01, 20], ['4.682e+08', 2.88]], ['record 4', [[0.000607, -0.001668, 0.001964, 0.000215, 0.000396, -0.001806], 0.01, 20], ['1.244e+09', 3.16]], ['record 5', [[-7.5e-05, -0.000205, -0.001098, 0.000467], 0.02, 800], ['5.591e+11', 4.93]], ['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 7', [[-0.000373, -0.000778, -0.001431, -0.000423, 0.000918, -0.001184], 0.02, 150], ['6.968e+10', 4.33]]], [['record 3', [[0.000833, -0.001601, 0.000828], 0.01, 20], ['4.682e+08', 2.88]], ['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 7', [[-0.000373, -0.000778, -0.001431, -0.000423, 0.000918, -0.001184], 0.02, 150], ['6.968e+10', 4.33]], ['record 8', [[-0.001994, -0.000216, -0.001326, -0.001867, -0.000666, -0.001063], 0.01, 20], ['1.287e+09', 3.17]], ['record 9', [[0.000682, -0.000928, 0.001715, -0.001046, 0.000795, 0.0015], 0.02, 150], ['1.101e+11', 4.46]], ['record 10', [[0.000736, 0.001202, 0.001002], 0.01, 800], ['5.682e+11', 4.94]], ['record 11', [[4.9e-05, 0.000323, 0.001136], 0.02, 150], ['1.867e+10', 3.95]], ['record 12', [[-0.000114, 0.000639, 0.00091, 0.001846, -0.000138], 0.02, 150], ['6.247e+10', 4.3]]], [['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 11', [[4.9e-05, 0.000323, 0.001136], 0.02, 150], ['1.867e+10', 3.95]], ['record 14', [[0.001989, -3.1e-05, -0.000375, -0.000841], 0.01, 20], ['5.706e+08', 2.94]], ['record 15', [[-0.001078, -0.00131, 0.000944, 0.00014, 0.000267, -0.001748, -0.00084], 0.01, 20], ['9.050e+08', 3.07]], ['record 16', [[-0.000734, -0.001153, 0.001877, 0.001214, -0.000141, 0.001853, 0.001949, 0.001741], 0.02, 150], ['2.291e+11', 4.67]], ['record 17', [[-0.001898, 0.00164, -0.001195, 0.001672, 0.001581, 0.000619, 0.000584], 0.02, 800], ['5.221e+12', 5.58]], ['record 18', [[0.000448, 0.001947, -0.000135, 0.001864, -0.000395, 0.001003, -0.001613], 0.01, 20], ['1.336e+09', 3.18]], ['record 19', [[-0.001259, 0.001422, 0.001575], 0.01, 800], ['1.157e+12', 5.14]]], [['record 9', [[0.000682, -0.000928, 0.001715, -0.001046, 0.000795, 0.0015], 0.02, 150], ['1.101e+11', 4.46]], ['record 16', [[-0.000734, -0.001153, 0.001877, 0.001214, -0.000141, 0.001853, 0.001949, 0.001741], 0.02, 150], ['2.291e+11', 4.67]], ['record 21', [[0.001506, -0.001384, 0.001726], 0.01, 20], ['8.506e+08', 3.05]], ['record 22', [[0.000173, -0.000806, 0.001776, -0.000421, 0.000601, 0.000217], 0.01, 20], ['5.248e+08', 2.91]], ['record 23', [[0.001417, 0.001607, 0.000901, 0.00046, -0.001306, 0.000848, -0.000728, 0.001196], 0.02, 150], ['1.336e+11', 4.52]], ['record 24', [[1e-05, -0.000395, -0.00192, -0.001679, -0.001373], 0.02, 800], ['3.248e+12', 5.44]], ['record 25', [[0.001061, -0.001922, 0.000373, -0.000217, -0.000406], 0.02, 150], ['6.908e+10', 4.33]], ['record 26', [[0.001243, 0.001976, -0.001924, 0.001232, 0.000909, -0.001716, 0.001372], 0.01, 800], ['3.101e+12', 5.43]]], [['record 0', [[-0.001678, -0.001936, -0.000937], 0.02, 150], ['9.942e+10', 4.43]], ['record 12', [[-0.000114, 0.000639, 0.00091, 0.001846, -0.000138], 0.02, 150], ['6.247e+10', 4.3]], ['record 21', [[0.001506, -0.001384, 0.001726], 0.01, 20], ['8.506e+08', 3.05]], ['record 28', [[0.001083, 0.001888, 0.000331, -0.001539, -0.001864], 0.01, 20], ['1.269e+09', 3.17]], ['record 29', [[0.001092, 0.001248, -0.000357, -0.001861, -0.001963], 0.01, 800], ['1.937e+12', 5.29]], ['empty', [[], 0.01, 50], None], ['zero trace', [[0.0, 0.0], 0.01, 50], None], ['single pulse', [[0.0, 0.004, 0.0], 0.01, 100], ['4.750e+10', 4.22]]]]
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
record 0['9.942e+04', 0.43]['9.942e+10', 4.43]Failed
record 1['7.120e+02', -1.0]['7.120e+08', 3.0]Failed
record 2['1.080e+03', -0.88]['1.080e+09', 3.12]Failed
record 3['4.682e+02', -1.12]['4.682e+08', 2.88]Failed
record 4['1.244e+03', -0.84]['1.244e+09', 3.16]Failed
record 5['5.591e+05', 0.93]['5.591e+11', 4.93]Failed
record 6['9.041e+05', 1.07]['9.041e+11', 5.07]Failed
record 7['6.968e+04', 0.33]['6.968e+10', 4.33]Failed

SHA-256 / e6abde62f015d68b421eb2aadf62a15362ace93564944b21cda6311c70ac2464

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(vel_ms, dt, dist_km):
    if not vel_ms:
        return None
    flux = sum(v * v for v in vel_ms) * dt
    if flux <= 0:
        return None
    r = dist_km * 1e6
    es = 4 * math.pi * 2700.0 * 3500.0 * r * r * flux * 0.25
    me = 2.0 / 3.0 * math.log10(es) - 2.9
    return ["%.3e" % es, round(me, 2)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['record 0', [[-0.001678, -0.001936, -0.000937], 0.02, 150], ['9.942e+10', 4.43]], ['record 1', [[0.00191, 0.000969, -0.001187], 0.01, 20], ['7.120e+08', 3.0]], ['record 2', [[0.001531, -0.000904, -0.000647, -8.8e-05, -0.000752, 0.00103, -0.000661, 0.001856], 0.01, 20], ['1.080e+09', 3.12]], ['record 3', [[0.000833, -0.001601, 0.000828], 0.01, 20], ['4.682e+08', 2.88]], ['record 4', [[0.000607, -0.001668, 0.001964, 0.000215, 0.000396, -0.001806], 0.01, 20], ['1.244e+09', 3.16]], ['record 5', [[-7.5e-05, -0.000205, -0.001098, 0.000467], 0.02, 800], ['5.591e+11', 4.93]], ['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 7', [[-0.000373, -0.000778, -0.001431, -0.000423, 0.000918, -0.001184], 0.02, 150], ['6.968e+10', 4.33]]], [['record 3', [[0.000833, -0.001601, 0.000828], 0.01, 20], ['4.682e+08', 2.88]], ['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 7', [[-0.000373, -0.000778, -0.001431, -0.000423, 0.000918, -0.001184], 0.02, 150], ['6.968e+10', 4.33]], ['record 8', [[-0.001994, -0.000216, -0.001326, -0.001867, -0.000666, -0.001063], 0.01, 20], ['1.287e+09', 3.17]], ['record 9', [[0.000682, -0.000928, 0.001715, -0.001046, 0.000795, 0.0015], 0.02, 150], ['1.101e+11', 4.46]], ['record 10', [[0.000736, 0.001202, 0.001002], 0.01, 800], ['5.682e+11', 4.94]], ['record 11', [[4.9e-05, 0.000323, 0.001136], 0.02, 150], ['1.867e+10', 3.95]], ['record 12', [[-0.000114, 0.000639, 0.00091, 0.001846, -0.000138], 0.02, 150], ['6.247e+10', 4.3]]], [['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 11', [[4.9e-05, 0.000323, 0.001136], 0.02, 150], ['1.867e+10', 3.95]], ['record 14', [[0.001989, -3.1e-05, -0.000375, -0.000841], 0.01, 20], ['5.706e+08', 2.94]], ['record 15', [[-0.001078, -0.00131, 0.000944, 0.00014, 0.000267, -0.001748, -0.00084], 0.01, 20], ['9.050e+08', 3.07]], ['record 16', [[-0.000734, -0.001153, 0.001877, 0.001214, -0.000141, 0.001853, 0.001949, 0.001741], 0.02, 150], ['2.291e+11', 4.67]], ['record 17', [[-0.001898, 0.00164, -0.001195, 0.001672, 0.001581, 0.000619, 0.000584], 0.02, 800], ['5.221e+12', 5.58]], ['record 18', [[0.000448, 0.001947, -0.000135, 0.001864, -0.000395, 0.001003, -0.001613], 0.01, 20], ['1.336e+09', 3.18]], ['record 19', [[-0.001259, 0.001422, 0.001575], 0.01, 800], ['1.157e+12', 5.14]]], [['record 9', [[0.000682, -0.000928, 0.001715, -0.001046, 0.000795, 0.0015], 0.02, 150], ['1.101e+11', 4.46]], ['record 16', [[-0.000734, -0.001153, 0.001877, 0.001214, -0.000141, 0.001853, 0.001949, 0.001741], 0.02, 150], ['2.291e+11', 4.67]], ['record 21', [[0.001506, -0.001384, 0.001726], 0.01, 20], ['8.506e+08', 3.05]], ['record 22', [[0.000173, -0.000806, 0.001776, -0.000421, 0.000601, 0.000217], 0.01, 20], ['5.248e+08', 2.91]], ['record 23', [[0.001417, 0.001607, 0.000901, 0.00046, -0.001306, 0.000848, -0.000728, 0.001196], 0.02, 150], ['1.336e+11', 4.52]], ['record 24', [[1e-05, -0.000395, -0.00192, -0.001679, -0.001373], 0.02, 800], ['3.248e+12', 5.44]], ['record 25', [[0.001061, -0.001922, 0.000373, -0.000217, -0.000406], 0.02, 150], ['6.908e+10', 4.33]], ['record 26', [[0.001243, 0.001976, -0.001924, 0.001232, 0.000909, -0.001716, 0.001372], 0.01, 800], ['3.101e+12', 5.43]]], [['record 0', [[-0.001678, -0.001936, -0.000937], 0.02, 150], ['9.942e+10', 4.43]], ['record 12', [[-0.000114, 0.000639, 0.00091, 0.001846, -0.000138], 0.02, 150], ['6.247e+10', 4.3]], ['record 21', [[0.001506, -0.001384, 0.001726], 0.01, 20], ['8.506e+08', 3.05]], ['record 28', [[0.001083, 0.001888, 0.000331, -0.001539, -0.001864], 0.01, 20], ['1.269e+09', 3.17]], ['record 29', [[0.001092, 0.001248, -0.000357, -0.001861, -0.001963], 0.01, 800], ['1.937e+12', 5.29]], ['empty', [[], 0.01, 50], None], ['zero trace', [[0.0, 0.0], 0.01, 50], None], ['single pulse', [[0.0, 0.004, 0.0], 0.01, 100], ['4.750e+10', 4.22]]]]
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
record 0['9.942e+16', 8.43]['9.942e+10', 4.43]Failed
record 1['7.120e+14', 7.0]['7.120e+08', 3.0]Failed
record 2['1.080e+15', 7.12]['1.080e+09', 3.12]Failed
record 3['4.682e+14', 6.88]['4.682e+08', 2.88]Failed
record 4['1.244e+15', 7.16]['1.244e+09', 3.16]Failed
record 5['5.591e+17', 8.93]['5.591e+11', 4.93]Failed
record 6['9.041e+17', 9.07]['9.041e+11', 5.07]Failed
record 7['6.968e+16', 8.33]['6.968e+10', 4.33]Failed

SHA-256 / 0995afd652896fe5503760731cc9ab0108d3bce65e22d328f1a0b6808ac507f8

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(vel_ms, dt, dist_km):
    if not vel_ms:
        return None
    flux = sum(v * v for v in vel_ms) * dt
    if flux <= 0:
        return None
    r = dist_km * 1000.0
    es = 4 * math.pi * 2700.0 * 3500.0 * r * r * flux * 0.25
    me = 2.0 / 3.0 * math.log10(es) - 2.9
    return ["%.3e" % es, round(me, 2)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['record 0', [[-0.001678, -0.001936, -0.000937], 0.02, 150], ['9.942e+10', 4.43]], ['record 1', [[0.00191, 0.000969, -0.001187], 0.01, 20], ['7.120e+08', 3.0]], ['record 2', [[0.001531, -0.000904, -0.000647, -8.8e-05, -0.000752, 0.00103, -0.000661, 0.001856], 0.01, 20], ['1.080e+09', 3.12]], ['record 3', [[0.000833, -0.001601, 0.000828], 0.01, 20], ['4.682e+08', 2.88]], ['record 4', [[0.000607, -0.001668, 0.001964, 0.000215, 0.000396, -0.001806], 0.01, 20], ['1.244e+09', 3.16]], ['record 5', [[-7.5e-05, -0.000205, -0.001098, 0.000467], 0.02, 800], ['5.591e+11', 4.93]], ['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 7', [[-0.000373, -0.000778, -0.001431, -0.000423, 0.000918, -0.001184], 0.02, 150], ['6.968e+10', 4.33]]], [['record 3', [[0.000833, -0.001601, 0.000828], 0.01, 20], ['4.682e+08', 2.88]], ['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 7', [[-0.000373, -0.000778, -0.001431, -0.000423, 0.000918, -0.001184], 0.02, 150], ['6.968e+10', 4.33]], ['record 8', [[-0.001994, -0.000216, -0.001326, -0.001867, -0.000666, -0.001063], 0.01, 20], ['1.287e+09', 3.17]], ['record 9', [[0.000682, -0.000928, 0.001715, -0.001046, 0.000795, 0.0015], 0.02, 150], ['1.101e+11', 4.46]], ['record 10', [[0.000736, 0.001202, 0.001002], 0.01, 800], ['5.682e+11', 4.94]], ['record 11', [[4.9e-05, 0.000323, 0.001136], 0.02, 150], ['1.867e+10', 3.95]], ['record 12', [[-0.000114, 0.000639, 0.00091, 0.001846, -0.000138], 0.02, 150], ['6.247e+10', 4.3]]], [['record 6', [[0.000261, 0.001239, 0.00014, 0.000428, -0.001698, -0.000263], 0.01, 800], ['9.041e+11', 5.07]], ['record 11', [[4.9e-05, 0.000323, 0.001136], 0.02, 150], ['1.867e+10', 3.95]], ['record 14', [[0.001989, -3.1e-05, -0.000375, -0.000841], 0.01, 20], ['5.706e+08', 2.94]], ['record 15', [[-0.001078, -0.00131, 0.000944, 0.00014, 0.000267, -0.001748, -0.00084], 0.01, 20], ['9.050e+08', 3.07]], ['record 16', [[-0.000734, -0.001153, 0.001877, 0.001214, -0.000141, 0.001853, 0.001949, 0.001741], 0.02, 150], ['2.291e+11', 4.67]], ['record 17', [[-0.001898, 0.00164, -0.001195, 0.001672, 0.001581, 0.000619, 0.000584], 0.02, 800], ['5.221e+12', 5.58]], ['record 18', [[0.000448, 0.001947, -0.000135, 0.001864, -0.000395, 0.001003, -0.001613], 0.01, 20], ['1.336e+09', 3.18]], ['record 19', [[-0.001259, 0.001422, 0.001575], 0.01, 800], ['1.157e+12', 5.14]]], [['record 9', [[0.000682, -0.000928, 0.001715, -0.001046, 0.000795, 0.0015], 0.02, 150], ['1.101e+11', 4.46]], ['record 16', [[-0.000734, -0.001153, 0.001877, 0.001214, -0.000141, 0.001853, 0.001949, 0.001741], 0.02, 150], ['2.291e+11', 4.67]], ['record 21', [[0.001506, -0.001384, 0.001726], 0.01, 20], ['8.506e+08', 3.05]], ['record 22', [[0.000173, -0.000806, 0.001776, -0.000421, 0.000601, 0.000217], 0.01, 20], ['5.248e+08', 2.91]], ['record 23', [[0.001417, 0.001607, 0.000901, 0.00046, -0.001306, 0.000848, -0.000728, 0.001196], 0.02, 150], ['1.336e+11', 4.52]], ['record 24', [[1e-05, -0.000395, -0.00192, -0.001679, -0.001373], 0.02, 800], ['3.248e+12', 5.44]], ['record 25', [[0.001061, -0.001922, 0.000373, -0.000217, -0.000406], 0.02, 150], ['6.908e+10', 4.33]], ['record 26', [[0.001243, 0.001976, -0.001924, 0.001232, 0.000909, -0.001716, 0.001372], 0.01, 800], ['3.101e+12', 5.43]]], [['record 0', [[-0.001678, -0.001936, -0.000937], 0.02, 150], ['9.942e+10', 4.43]], ['record 12', [[-0.000114, 0.000639, 0.00091, 0.001846, -0.000138], 0.02, 150], ['6.247e+10', 4.3]], ['record 21', [[0.001506, -0.001384, 0.001726], 0.01, 20], ['8.506e+08', 3.05]], ['record 28', [[0.001083, 0.001888, 0.000331, -0.001539, -0.001864], 0.01, 20], ['1.269e+09', 3.17]], ['record 29', [[0.001092, 0.001248, -0.000357, -0.001861, -0.001963], 0.01, 800], ['1.937e+12', 5.29]], ['empty', [[], 0.01, 50], None], ['zero trace', [[0.0, 0.0], 0.01, 50], None], ['single pulse', [[0.0, 0.004, 0.0], 0.01, 100], ['4.750e+10', 4.22]]]]
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
record 0['9.942e+10', 4.43]['9.942e+10', 4.43]Passed
record 1['7.120e+08', 3.0]['7.120e+08', 3.0]Passed
record 2['1.080e+09', 3.12]['1.080e+09', 3.12]Passed
record 3['4.682e+08', 2.88]['4.682e+08', 2.88]Passed
record 4['1.244e+09', 3.16]['1.244e+09', 3.16]Passed
record 5['5.591e+11', 4.93]['5.591e+11', 4.93]Passed
record 6['9.041e+11', 5.07]['9.041e+11', 5.07]Passed
record 7['6.968e+10', 4.33]['6.968e+10', 4.33]Passed

SHA-256 / 183f7b9c07b1a0ab787c20b4f742686b28186a7d2a5a01aafa4023eb75195a43

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

Case digest / 79a98f6fd4fb6fc6a70151070eb9bffaa52841d76327ef289b9e5b0640929d27