FAILURE MAP
← Case archive

FA-71761 / Seismic magnitude estimation / Open access

Station magnitude correction update: residual outlier bound · case 01

Residuals of exactly one magnitude unit are discarded.

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

ROOT CAUSE

The outlier bound is exclusive.

VERIFIED REPAIR

Keep |r| <= 1.0.

Unsuccessful approach: Testing the signed residual keeps large negative outliers.

Case contract

events are [station, station magnitude, network magnitude]. Residual = station - network; residuals with |r| > 1.0 are discarded (exactly 1.0 kept). A station with at least min_n kept residuals gets correction = -mean(kept) rounded 0.01, otherwise 0.0. Return [[station, correction, kept count]] sorted by station.

Why this case matters

Station corrections remove site amplification bias from future station magnitudes.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events, min_n):
    res = {}
    for st, sm, nm in events:
        r = round(sm - nm, 2)
        res.setdefault(st, [])
        if abs(r) < 1.0:
            res[st].append(r)
    out = []
    for st in sorted(res):
        kept = res[st]
        corr = round(-sum(kept) / len(kept), 2) if len(kept) >= min_n else 0.0
        out.append([st, corr + 0.0, len(kept)])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['update 0', [[['ABC', 4.08, 2.88], ['JKL', 4.17, 4.57], ['GHI', 2.75, 1.55], ['ABC', 1.69, 2.09], ['GHI', 4.14, 4.54], ['DEF', 1.62, 1.42], ['ABC', 4.95, 3.75]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 1', [[['JKL', 3.77, 3.87], ['JKL', 1.13, 1.53], ['GHI', 4.95, 4.95], ['JKL', 2.75, 2.55]], 2], [['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 2', [[['ABC', 4.36, 5.76], ['DEF', 1.34, 1.74]], 2], [['ABC', 0.0, 0], ['DEF', 0.0, 1]]], ['update 3', [[['GHI', 3.9, 4.3], ['ABC', 3.21, 3.61], ['JKL', 3.44, 2.24], ['GHI', 1.49, 0.99], ['ABC', 2.92, 2.92], ['ABC', 1.35, 0.85], ['JKL', 3.83, 3.33], ['JKL', 4.34, 5.74], ['GHI', 2.74, 2.54], ['JKL', 4.01, 3.81]], 2], [['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]], ['update 4', [[['ABC', 4.03, 5.43], ['GHI', 1.35, 1.15]], 2], [['ABC', 0.0, 0], ['GHI', 0.0, 1]]], ['update 5', [[['ABC', 3.0, 2.8], ['DEF', 3.69, 3.79], ['GHI', 2.6, 2.1], ['ABC', 3.35, 2.85], ['GHI', 1.85, 2.25], ['DEF', 3.27, 3.27], ['GHI', 4.54, 4.54], ['GHI', 4.14, 3.64], ['ABC', 2.9, 4.3], ['DEF', 4.18, 4.18], ['ABC', 2.74, 2.84]], 3], [['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]]], ['update 6', [[['JKL', 4.59, 4.09], ['DEF', 4.81, 6.21], ['JKL', 4.33, 4.33], ['DEF', 2.75, 2.85], ['DEF', 3.37, 4.77], ['DEF', 4.94, 5.04], ['ABC', 2.58, 2.38], ['DEF', 4.52, 5.92], ['JKL', 1.3, 1.3]], 2], [['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 7', [[['GHI', 3.12, 4.52], ['DEF', 4.64, 4.64], ['JKL', 3.82, 4.22], ['ABC', 1.25, 1.35], ['ABC', 2.71, 2.51], ['DEF', 3.36, 3.76]], 3], [['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]], ['update 8', [[['DEF', 1.07, -0.13], ['ABC', 1.63, 3.03], ['ABC', 1.47, 1.27]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 0]]], ['update 9', [[['JKL', 2.72, 2.72], ['GHI', 1.89, 1.89], ['GHI', 4.29, 4.29]], 3], [['GHI', 0.0, 2], ['JKL', 0.0, 1]]], ['update 10', [[['GHI', 2.55, 3.95], ['GHI', 4.57, 4.67], ['DEF', 2.95, 4.35]], 2], [['DEF', 0.0, 0], ['GHI', 0.0, 1]]], ['update 11', [[['ABC', 3.64, 2.44], ['DEF', 3.65, 2.45], ['GHI', 2.3, 2.7], ['JKL', 1.52, 1.62], ['JKL', 2.79, 2.59], ['JKL', 3.93, 4.33], ['DEF', 4.75, 4.75], ['ABC', 1.64, 1.14], ['DEF', 4.17, 4.57], ['GHI', 2.86, 1.66]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 2], ['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 12', [[['DEF', 4.64, 4.14], ['ABC', 3.51, 3.91], ['GHI', 2.69, 1.49], ['ABC', 3.3, 3.7], ['DEF', 3.3, 3.3], ['JKL', 3.68, 5.08], ['GHI', 2.34, 2.74], ['ABC', 4.82, 6.22], ['ABC', 4.34, 4.34], ['JKL', 3.8, 2.6]], 3], [['ABC', 0.27, 3], ['DEF', 0.0, 2], ['GHI', 0.0, 1], ['JKL', 0.0, 0]]], ['update 13', [[['JKL', 1.73, 3.13], ['DEF', 4.48, 4.48], ['GHI', 2.01, 0.81], ['ABC', 1.82, 1.62], ['DEF', 1.44, 0.24], ['JKL', 2.06, 2.16]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 14', [[['JKL', 4.27, 4.37], ['DEF', 4.2, 4.2], ['ABC', 3.88, 4.28], ['DEF', 3.23, 3.03], ['ABC', 4.72, 5.12], ['DEF', 2.22, 1.72]], 2], [['ABC', 0.4, 2], ['DEF', -0.23, 3], ['JKL', 0.0, 1]]], ['update 15', [[['DEF', 4.66, 4.46], ['JKL', 1.26, 0.76], ['GHI', 2.61, 3.01], ['GHI', 3.72, 4.12], ['ABC', 1.11, 1.21]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.4, 2], ['JKL', 0.0, 1]]], ['update 16', [[['GHI', 4.77, 4.77], ['DEF', 3.19, 4.59], ['GHI', 2.0, 2.4], ['GHI', 1.56, 1.66], ['JKL', 3.74, 2.54], ['GHI', 3.83, 4.23], ['JKL', 4.29, 3.79], ['JKL', 4.44, 4.54], ['GHI', 3.59, 3.39], ['JKL', 3.34, 4.74], ['GHI', 2.05, 1.85]], 3], [['DEF', 0.0, 0], ['GHI', 0.08, 6], ['JKL', 0.0, 2]]], ['update 17', [[['GHI', 1.47, 1.57], ['ABC', 3.36, 3.16], ['DEF', 4.06, 5.46], ['DEF', 2.41, 2.21]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1]]], ['update 18', [[['GHI', 3.8, 3.6], ['GHI', 4.49, 5.89], ['DEF', 3.04, 1.84]], 2], [['DEF', 0.0, 0], ['GHI', 0.0, 1]]], ['update 19', [[['ABC', 4.48, 4.48], ['ABC', 4.46, 4.46], ['ABC', 2.5, 2.0], ['GHI', 3.14, 2.94], ['GHI', 3.25, 4.65], ['GHI', 4.42, 4.82], ['JKL', 4.58, 5.98], ['ABC', 2.72, 1.52], ['DEF', 4.99, 4.79], ['ABC', 3.34, 3.14], ['ABC', 3.13, 3.53], ['ABC', 2.09, 2.09]], 2], [['ABC', -0.05, 6], ['DEF', 0.0, 1], ['GHI', 0.1, 2], ['JKL', 0.0, 0]]], ['update 20', [[['JKL', 1.82, 0.62], ['GHI', 1.65, 1.45], ['ABC', 4.02, 3.82], ['JKL', 2.38, 2.78], ['JKL', 2.81, 2.81], ['ABC', 1.07, -0.13], ['JKL', 3.47, 3.87], ['GHI', 3.31, 3.11], ['DEF', 1.29, 1.29], ['JKL', 2.27, 3.67], ['ABC', 4.64, 3.44]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', -0.2, 2], ['JKL', 0.27, 3]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 21', [[['JKL', 3.79, 3.59], ['ABC', 2.38, 2.38], ['GHI', 1.36, 2.76], ['JKL', 3.9, 2.7], ['GHI', 4.16, 3.66], ['JKL', 1.89, 0.69], ['GHI', 3.82, 3.82], ['DEF', 1.18, 1.58], ['ABC', 3.3, 3.1], ['ABC', 2.96, 2.96], ['JKL', 3.86, 3.66]], 2], [['ABC', -0.07, 3], ['DEF', 0.0, 1], ['GHI', -0.25, 2], ['JKL', -0.2, 2]]], ['update 22', [[['GHI', 4.5, 4.9], ['GHI', 1.1, 0.9], ['ABC', 2.26, 2.26], ['DEF', 4.3, 4.1], ['ABC', 2.38, 1.88]], 2], [['ABC', -0.25, 2], ['DEF', 0.0, 1], ['GHI', 0.1, 2]]], ['update 23', [[['GHI', 4.6, 4.4], ['DEF', 2.07, 3.47], ['JKL', 4.75, 4.55], ['JKL', 1.31, 2.71], ['ABC', 4.84, 6.24], ['GHI', 1.4, 1.8], ['DEF', 3.5, 3.9], ['DEF', 2.03, 1.53], ['GHI', 3.07, 3.17], ['JKL', 2.49, 1.29], ['GHI', 4.66, 3.46], ['ABC', 1.36, 1.46]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 2], ['GHI', 0.1, 3], ['JKL', 0.0, 1]]], ['update 24', [[['ABC', 3.1, 2.6], ['ABC', 4.76, 4.86], ['ABC', 4.5, 3.3], ['DEF', 4.19, 2.99]], 3], [['ABC', 0.0, 2], ['DEF', 0.0, 0]]], ['update 25', [[['GHI', 1.14, 1.14], ['JKL', 1.52, 2.92], ['JKL', 4.34, 4.74], ['GHI', 4.19, 5.59]], 3], [['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 26', [[['ABC', 2.41, 2.41], ['GHI', 1.97, 3.37], ['DEF', 1.7, 1.8]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 0]]], ['update 27', [[['GHI', 2.42, 2.42], ['DEF', 3.85, 5.25], ['GHI', 1.72, 0.52], ['DEF', 4.97, 5.07], ['DEF', 2.31, 2.11], ['ABC', 1.12, -0.08]], 3], [['ABC', 0.0, 0], ['DEF', 0.0, 2], ['GHI', 0.0, 1]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 0', [[['ABC', 4.08, 2.88], ['JKL', 4.17, 4.57], ['GHI', 2.75, 1.55], ['ABC', 1.69, 2.09], ['GHI', 4.14, 4.54], ['DEF', 1.62, 1.42], ['ABC', 4.95, 3.75]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 1', [[['JKL', 3.77, 3.87], ['JKL', 1.13, 1.53], ['GHI', 4.95, 4.95], ['JKL', 2.75, 2.55]], 2], [['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 2', [[['ABC', 4.36, 5.76], ['DEF', 1.34, 1.74]], 2], [['ABC', 0.0, 0], ['DEF', 0.0, 1]]], ['update 3', [[['GHI', 3.9, 4.3], ['ABC', 3.21, 3.61], ['JKL', 3.44, 2.24], ['GHI', 1.49, 0.99], ['ABC', 2.92, 2.92], ['ABC', 1.35, 0.85], ['JKL', 3.83, 3.33], ['JKL', 4.34, 5.74], ['GHI', 2.74, 2.54], ['JKL', 4.01, 3.81]], 2], [['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]], ['update 28', [[['GHI', 2.19, 1.69], ['GHI', 3.1, 2.9], ['DEF', 1.51, 2.91], ['ABC', 3.68, 3.78], ['DEF', 1.85, 3.25], ['DEF', 4.85, 6.25]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 0], ['GHI', -0.35, 2]]], ['update 29', [[['DEF', 1.13, 2.53], ['DEF', 4.46, 4.46], ['DEF', 1.47, 1.47], ['ABC', 2.52, 3.92], ['ABC', 4.28, 4.08], ['DEF', 2.6, 2.7], ['ABC', 3.62, 3.42], ['GHI', 1.48, 1.48], ['GHI', 2.07, 1.87]], 2], [['ABC', -0.2, 2], ['DEF', 0.03, 3], ['GHI', -0.1, 2]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]], ['minimum count', [[['XYZ', 2.0, 2.3], ['XYZ', 2.2, 2.4], ['QRS', 1.0, 1.5]], 2], [['QRS', 0.0, 1], ['XYZ', 0.25, 2]]]]]
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
update 0[['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]][['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]Passed
update 1[['GHI', 0.0, 1], ['JKL', 0.1, 3]][['GHI', 0.0, 1], ['JKL', 0.1, 3]]Passed
update 2[['ABC', 0.0, 0], ['DEF', 0.0, 1]][['ABC', 0.0, 0], ['DEF', 0.0, 1]]Passed
update 3[['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]][['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]Passed
update 4[['ABC', 0.0, 0], ['GHI', 0.0, 1]][['ABC', 0.0, 0], ['GHI', 0.0, 1]]Passed
update 5[['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]][['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]]Passed
update 6[['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]][['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]]Passed
exactly one-unit residual[['ABC', 0.0, 2]][['ABC', -0.33, 3]]Failed

SHA-256 / c706166bc46d3dabc7ed8ec9dab3d5f3395df4dd471aabf0835d22877140bcf4

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events, min_n):
    res = {}
    for st, sm, nm in events:
        r = round(sm - nm, 2)
        res.setdefault(st, [])
        if r <= 1.0:
            res[st].append(r)
    out = []
    for st in sorted(res):
        kept = res[st]
        corr = round(-sum(kept) / len(kept), 2) if len(kept) >= min_n else 0.0
        out.append([st, corr + 0.0, len(kept)])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['update 0', [[['ABC', 4.08, 2.88], ['JKL', 4.17, 4.57], ['GHI', 2.75, 1.55], ['ABC', 1.69, 2.09], ['GHI', 4.14, 4.54], ['DEF', 1.62, 1.42], ['ABC', 4.95, 3.75]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 1', [[['JKL', 3.77, 3.87], ['JKL', 1.13, 1.53], ['GHI', 4.95, 4.95], ['JKL', 2.75, 2.55]], 2], [['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 2', [[['ABC', 4.36, 5.76], ['DEF', 1.34, 1.74]], 2], [['ABC', 0.0, 0], ['DEF', 0.0, 1]]], ['update 3', [[['GHI', 3.9, 4.3], ['ABC', 3.21, 3.61], ['JKL', 3.44, 2.24], ['GHI', 1.49, 0.99], ['ABC', 2.92, 2.92], ['ABC', 1.35, 0.85], ['JKL', 3.83, 3.33], ['JKL', 4.34, 5.74], ['GHI', 2.74, 2.54], ['JKL', 4.01, 3.81]], 2], [['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]], ['update 4', [[['ABC', 4.03, 5.43], ['GHI', 1.35, 1.15]], 2], [['ABC', 0.0, 0], ['GHI', 0.0, 1]]], ['update 5', [[['ABC', 3.0, 2.8], ['DEF', 3.69, 3.79], ['GHI', 2.6, 2.1], ['ABC', 3.35, 2.85], ['GHI', 1.85, 2.25], ['DEF', 3.27, 3.27], ['GHI', 4.54, 4.54], ['GHI', 4.14, 3.64], ['ABC', 2.9, 4.3], ['DEF', 4.18, 4.18], ['ABC', 2.74, 2.84]], 3], [['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]]], ['update 6', [[['JKL', 4.59, 4.09], ['DEF', 4.81, 6.21], ['JKL', 4.33, 4.33], ['DEF', 2.75, 2.85], ['DEF', 3.37, 4.77], ['DEF', 4.94, 5.04], ['ABC', 2.58, 2.38], ['DEF', 4.52, 5.92], ['JKL', 1.3, 1.3]], 2], [['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 7', [[['GHI', 3.12, 4.52], ['DEF', 4.64, 4.64], ['JKL', 3.82, 4.22], ['ABC', 1.25, 1.35], ['ABC', 2.71, 2.51], ['DEF', 3.36, 3.76]], 3], [['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]], ['update 8', [[['DEF', 1.07, -0.13], ['ABC', 1.63, 3.03], ['ABC', 1.47, 1.27]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 0]]], ['update 9', [[['JKL', 2.72, 2.72], ['GHI', 1.89, 1.89], ['GHI', 4.29, 4.29]], 3], [['GHI', 0.0, 2], ['JKL', 0.0, 1]]], ['update 10', [[['GHI', 2.55, 3.95], ['GHI', 4.57, 4.67], ['DEF', 2.95, 4.35]], 2], [['DEF', 0.0, 0], ['GHI', 0.0, 1]]], ['update 11', [[['ABC', 3.64, 2.44], ['DEF', 3.65, 2.45], ['GHI', 2.3, 2.7], ['JKL', 1.52, 1.62], ['JKL', 2.79, 2.59], ['JKL', 3.93, 4.33], ['DEF', 4.75, 4.75], ['ABC', 1.64, 1.14], ['DEF', 4.17, 4.57], ['GHI', 2.86, 1.66]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 2], ['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 12', [[['DEF', 4.64, 4.14], ['ABC', 3.51, 3.91], ['GHI', 2.69, 1.49], ['ABC', 3.3, 3.7], ['DEF', 3.3, 3.3], ['JKL', 3.68, 5.08], ['GHI', 2.34, 2.74], ['ABC', 4.82, 6.22], ['ABC', 4.34, 4.34], ['JKL', 3.8, 2.6]], 3], [['ABC', 0.27, 3], ['DEF', 0.0, 2], ['GHI', 0.0, 1], ['JKL', 0.0, 0]]], ['update 13', [[['JKL', 1.73, 3.13], ['DEF', 4.48, 4.48], ['GHI', 2.01, 0.81], ['ABC', 1.82, 1.62], ['DEF', 1.44, 0.24], ['JKL', 2.06, 2.16]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 14', [[['JKL', 4.27, 4.37], ['DEF', 4.2, 4.2], ['ABC', 3.88, 4.28], ['DEF', 3.23, 3.03], ['ABC', 4.72, 5.12], ['DEF', 2.22, 1.72]], 2], [['ABC', 0.4, 2], ['DEF', -0.23, 3], ['JKL', 0.0, 1]]], ['update 15', [[['DEF', 4.66, 4.46], ['JKL', 1.26, 0.76], ['GHI', 2.61, 3.01], ['GHI', 3.72, 4.12], ['ABC', 1.11, 1.21]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.4, 2], ['JKL', 0.0, 1]]], ['update 16', [[['GHI', 4.77, 4.77], ['DEF', 3.19, 4.59], ['GHI', 2.0, 2.4], ['GHI', 1.56, 1.66], ['JKL', 3.74, 2.54], ['GHI', 3.83, 4.23], ['JKL', 4.29, 3.79], ['JKL', 4.44, 4.54], ['GHI', 3.59, 3.39], ['JKL', 3.34, 4.74], ['GHI', 2.05, 1.85]], 3], [['DEF', 0.0, 0], ['GHI', 0.08, 6], ['JKL', 0.0, 2]]], ['update 17', [[['GHI', 1.47, 1.57], ['ABC', 3.36, 3.16], ['DEF', 4.06, 5.46], ['DEF', 2.41, 2.21]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1]]], ['update 18', [[['GHI', 3.8, 3.6], ['GHI', 4.49, 5.89], ['DEF', 3.04, 1.84]], 2], [['DEF', 0.0, 0], ['GHI', 0.0, 1]]], ['update 19', [[['ABC', 4.48, 4.48], ['ABC', 4.46, 4.46], ['ABC', 2.5, 2.0], ['GHI', 3.14, 2.94], ['GHI', 3.25, 4.65], ['GHI', 4.42, 4.82], ['JKL', 4.58, 5.98], ['ABC', 2.72, 1.52], ['DEF', 4.99, 4.79], ['ABC', 3.34, 3.14], ['ABC', 3.13, 3.53], ['ABC', 2.09, 2.09]], 2], [['ABC', -0.05, 6], ['DEF', 0.0, 1], ['GHI', 0.1, 2], ['JKL', 0.0, 0]]], ['update 20', [[['JKL', 1.82, 0.62], ['GHI', 1.65, 1.45], ['ABC', 4.02, 3.82], ['JKL', 2.38, 2.78], ['JKL', 2.81, 2.81], ['ABC', 1.07, -0.13], ['JKL', 3.47, 3.87], ['GHI', 3.31, 3.11], ['DEF', 1.29, 1.29], ['JKL', 2.27, 3.67], ['ABC', 4.64, 3.44]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', -0.2, 2], ['JKL', 0.27, 3]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 21', [[['JKL', 3.79, 3.59], ['ABC', 2.38, 2.38], ['GHI', 1.36, 2.76], ['JKL', 3.9, 2.7], ['GHI', 4.16, 3.66], ['JKL', 1.89, 0.69], ['GHI', 3.82, 3.82], ['DEF', 1.18, 1.58], ['ABC', 3.3, 3.1], ['ABC', 2.96, 2.96], ['JKL', 3.86, 3.66]], 2], [['ABC', -0.07, 3], ['DEF', 0.0, 1], ['GHI', -0.25, 2], ['JKL', -0.2, 2]]], ['update 22', [[['GHI', 4.5, 4.9], ['GHI', 1.1, 0.9], ['ABC', 2.26, 2.26], ['DEF', 4.3, 4.1], ['ABC', 2.38, 1.88]], 2], [['ABC', -0.25, 2], ['DEF', 0.0, 1], ['GHI', 0.1, 2]]], ['update 23', [[['GHI', 4.6, 4.4], ['DEF', 2.07, 3.47], ['JKL', 4.75, 4.55], ['JKL', 1.31, 2.71], ['ABC', 4.84, 6.24], ['GHI', 1.4, 1.8], ['DEF', 3.5, 3.9], ['DEF', 2.03, 1.53], ['GHI', 3.07, 3.17], ['JKL', 2.49, 1.29], ['GHI', 4.66, 3.46], ['ABC', 1.36, 1.46]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 2], ['GHI', 0.1, 3], ['JKL', 0.0, 1]]], ['update 24', [[['ABC', 3.1, 2.6], ['ABC', 4.76, 4.86], ['ABC', 4.5, 3.3], ['DEF', 4.19, 2.99]], 3], [['ABC', 0.0, 2], ['DEF', 0.0, 0]]], ['update 25', [[['GHI', 1.14, 1.14], ['JKL', 1.52, 2.92], ['JKL', 4.34, 4.74], ['GHI', 4.19, 5.59]], 3], [['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 26', [[['ABC', 2.41, 2.41], ['GHI', 1.97, 3.37], ['DEF', 1.7, 1.8]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 0]]], ['update 27', [[['GHI', 2.42, 2.42], ['DEF', 3.85, 5.25], ['GHI', 1.72, 0.52], ['DEF', 4.97, 5.07], ['DEF', 2.31, 2.11], ['ABC', 1.12, -0.08]], 3], [['ABC', 0.0, 0], ['DEF', 0.0, 2], ['GHI', 0.0, 1]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 0', [[['ABC', 4.08, 2.88], ['JKL', 4.17, 4.57], ['GHI', 2.75, 1.55], ['ABC', 1.69, 2.09], ['GHI', 4.14, 4.54], ['DEF', 1.62, 1.42], ['ABC', 4.95, 3.75]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 1', [[['JKL', 3.77, 3.87], ['JKL', 1.13, 1.53], ['GHI', 4.95, 4.95], ['JKL', 2.75, 2.55]], 2], [['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 2', [[['ABC', 4.36, 5.76], ['DEF', 1.34, 1.74]], 2], [['ABC', 0.0, 0], ['DEF', 0.0, 1]]], ['update 3', [[['GHI', 3.9, 4.3], ['ABC', 3.21, 3.61], ['JKL', 3.44, 2.24], ['GHI', 1.49, 0.99], ['ABC', 2.92, 2.92], ['ABC', 1.35, 0.85], ['JKL', 3.83, 3.33], ['JKL', 4.34, 5.74], ['GHI', 2.74, 2.54], ['JKL', 4.01, 3.81]], 2], [['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]], ['update 28', [[['GHI', 2.19, 1.69], ['GHI', 3.1, 2.9], ['DEF', 1.51, 2.91], ['ABC', 3.68, 3.78], ['DEF', 1.85, 3.25], ['DEF', 4.85, 6.25]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 0], ['GHI', -0.35, 2]]], ['update 29', [[['DEF', 1.13, 2.53], ['DEF', 4.46, 4.46], ['DEF', 1.47, 1.47], ['ABC', 2.52, 3.92], ['ABC', 4.28, 4.08], ['DEF', 2.6, 2.7], ['ABC', 3.62, 3.42], ['GHI', 1.48, 1.48], ['GHI', 2.07, 1.87]], 2], [['ABC', -0.2, 2], ['DEF', 0.03, 3], ['GHI', -0.1, 2]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]], ['minimum count', [[['XYZ', 2.0, 2.3], ['XYZ', 2.2, 2.4], ['QRS', 1.0, 1.5]], 2], [['QRS', 0.0, 1], ['XYZ', 0.25, 2]]]]]
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
update 0[['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]][['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]Passed
update 1[['GHI', 0.0, 1], ['JKL', 0.1, 3]][['GHI', 0.0, 1], ['JKL', 0.1, 3]]Passed
update 2[['ABC', 0.0, 1], ['DEF', 0.0, 1]][['ABC', 0.0, 0], ['DEF', 0.0, 1]]Failed
update 3[['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', 0.23, 3]][['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]Failed
update 4[['ABC', 0.0, 1], ['GHI', 0.0, 1]][['ABC', 0.0, 0], ['GHI', 0.0, 1]]Failed
update 5[['ABC', 0.2, 4], ['DEF', 0.03, 3], ['GHI', -0.15, 4]][['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]]Failed
update 6[['ABC', 0.0, 1], ['DEF', 0.88, 5], ['JKL', -0.17, 3]][['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]]Failed
exactly one-unit residual[['ABC', -0.33, 3]][['ABC', -0.33, 3]]Passed

SHA-256 / baf1fe0bef6027db1de113f43e2fd1d926c34b01867ca1e342fa07ab63dae7e0

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events, min_n):
    res = {}
    for st, sm, nm in events:
        r = round(sm - nm, 2)
        res.setdefault(st, [])
        if abs(r) <= 1.0:
            res[st].append(r)
    out = []
    for st in sorted(res):
        kept = res[st]
        corr = round(-sum(kept) / len(kept), 2) if len(kept) >= min_n else 0.0
        out.append([st, corr + 0.0, len(kept)])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['update 0', [[['ABC', 4.08, 2.88], ['JKL', 4.17, 4.57], ['GHI', 2.75, 1.55], ['ABC', 1.69, 2.09], ['GHI', 4.14, 4.54], ['DEF', 1.62, 1.42], ['ABC', 4.95, 3.75]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 1', [[['JKL', 3.77, 3.87], ['JKL', 1.13, 1.53], ['GHI', 4.95, 4.95], ['JKL', 2.75, 2.55]], 2], [['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 2', [[['ABC', 4.36, 5.76], ['DEF', 1.34, 1.74]], 2], [['ABC', 0.0, 0], ['DEF', 0.0, 1]]], ['update 3', [[['GHI', 3.9, 4.3], ['ABC', 3.21, 3.61], ['JKL', 3.44, 2.24], ['GHI', 1.49, 0.99], ['ABC', 2.92, 2.92], ['ABC', 1.35, 0.85], ['JKL', 3.83, 3.33], ['JKL', 4.34, 5.74], ['GHI', 2.74, 2.54], ['JKL', 4.01, 3.81]], 2], [['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]], ['update 4', [[['ABC', 4.03, 5.43], ['GHI', 1.35, 1.15]], 2], [['ABC', 0.0, 0], ['GHI', 0.0, 1]]], ['update 5', [[['ABC', 3.0, 2.8], ['DEF', 3.69, 3.79], ['GHI', 2.6, 2.1], ['ABC', 3.35, 2.85], ['GHI', 1.85, 2.25], ['DEF', 3.27, 3.27], ['GHI', 4.54, 4.54], ['GHI', 4.14, 3.64], ['ABC', 2.9, 4.3], ['DEF', 4.18, 4.18], ['ABC', 2.74, 2.84]], 3], [['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]]], ['update 6', [[['JKL', 4.59, 4.09], ['DEF', 4.81, 6.21], ['JKL', 4.33, 4.33], ['DEF', 2.75, 2.85], ['DEF', 3.37, 4.77], ['DEF', 4.94, 5.04], ['ABC', 2.58, 2.38], ['DEF', 4.52, 5.92], ['JKL', 1.3, 1.3]], 2], [['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 7', [[['GHI', 3.12, 4.52], ['DEF', 4.64, 4.64], ['JKL', 3.82, 4.22], ['ABC', 1.25, 1.35], ['ABC', 2.71, 2.51], ['DEF', 3.36, 3.76]], 3], [['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]], ['update 8', [[['DEF', 1.07, -0.13], ['ABC', 1.63, 3.03], ['ABC', 1.47, 1.27]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 0]]], ['update 9', [[['JKL', 2.72, 2.72], ['GHI', 1.89, 1.89], ['GHI', 4.29, 4.29]], 3], [['GHI', 0.0, 2], ['JKL', 0.0, 1]]], ['update 10', [[['GHI', 2.55, 3.95], ['GHI', 4.57, 4.67], ['DEF', 2.95, 4.35]], 2], [['DEF', 0.0, 0], ['GHI', 0.0, 1]]], ['update 11', [[['ABC', 3.64, 2.44], ['DEF', 3.65, 2.45], ['GHI', 2.3, 2.7], ['JKL', 1.52, 1.62], ['JKL', 2.79, 2.59], ['JKL', 3.93, 4.33], ['DEF', 4.75, 4.75], ['ABC', 1.64, 1.14], ['DEF', 4.17, 4.57], ['GHI', 2.86, 1.66]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 2], ['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 12', [[['DEF', 4.64, 4.14], ['ABC', 3.51, 3.91], ['GHI', 2.69, 1.49], ['ABC', 3.3, 3.7], ['DEF', 3.3, 3.3], ['JKL', 3.68, 5.08], ['GHI', 2.34, 2.74], ['ABC', 4.82, 6.22], ['ABC', 4.34, 4.34], ['JKL', 3.8, 2.6]], 3], [['ABC', 0.27, 3], ['DEF', 0.0, 2], ['GHI', 0.0, 1], ['JKL', 0.0, 0]]], ['update 13', [[['JKL', 1.73, 3.13], ['DEF', 4.48, 4.48], ['GHI', 2.01, 0.81], ['ABC', 1.82, 1.62], ['DEF', 1.44, 0.24], ['JKL', 2.06, 2.16]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 14', [[['JKL', 4.27, 4.37], ['DEF', 4.2, 4.2], ['ABC', 3.88, 4.28], ['DEF', 3.23, 3.03], ['ABC', 4.72, 5.12], ['DEF', 2.22, 1.72]], 2], [['ABC', 0.4, 2], ['DEF', -0.23, 3], ['JKL', 0.0, 1]]], ['update 15', [[['DEF', 4.66, 4.46], ['JKL', 1.26, 0.76], ['GHI', 2.61, 3.01], ['GHI', 3.72, 4.12], ['ABC', 1.11, 1.21]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.4, 2], ['JKL', 0.0, 1]]], ['update 16', [[['GHI', 4.77, 4.77], ['DEF', 3.19, 4.59], ['GHI', 2.0, 2.4], ['GHI', 1.56, 1.66], ['JKL', 3.74, 2.54], ['GHI', 3.83, 4.23], ['JKL', 4.29, 3.79], ['JKL', 4.44, 4.54], ['GHI', 3.59, 3.39], ['JKL', 3.34, 4.74], ['GHI', 2.05, 1.85]], 3], [['DEF', 0.0, 0], ['GHI', 0.08, 6], ['JKL', 0.0, 2]]], ['update 17', [[['GHI', 1.47, 1.57], ['ABC', 3.36, 3.16], ['DEF', 4.06, 5.46], ['DEF', 2.41, 2.21]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1]]], ['update 18', [[['GHI', 3.8, 3.6], ['GHI', 4.49, 5.89], ['DEF', 3.04, 1.84]], 2], [['DEF', 0.0, 0], ['GHI', 0.0, 1]]], ['update 19', [[['ABC', 4.48, 4.48], ['ABC', 4.46, 4.46], ['ABC', 2.5, 2.0], ['GHI', 3.14, 2.94], ['GHI', 3.25, 4.65], ['GHI', 4.42, 4.82], ['JKL', 4.58, 5.98], ['ABC', 2.72, 1.52], ['DEF', 4.99, 4.79], ['ABC', 3.34, 3.14], ['ABC', 3.13, 3.53], ['ABC', 2.09, 2.09]], 2], [['ABC', -0.05, 6], ['DEF', 0.0, 1], ['GHI', 0.1, 2], ['JKL', 0.0, 0]]], ['update 20', [[['JKL', 1.82, 0.62], ['GHI', 1.65, 1.45], ['ABC', 4.02, 3.82], ['JKL', 2.38, 2.78], ['JKL', 2.81, 2.81], ['ABC', 1.07, -0.13], ['JKL', 3.47, 3.87], ['GHI', 3.31, 3.11], ['DEF', 1.29, 1.29], ['JKL', 2.27, 3.67], ['ABC', 4.64, 3.44]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', -0.2, 2], ['JKL', 0.27, 3]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 21', [[['JKL', 3.79, 3.59], ['ABC', 2.38, 2.38], ['GHI', 1.36, 2.76], ['JKL', 3.9, 2.7], ['GHI', 4.16, 3.66], ['JKL', 1.89, 0.69], ['GHI', 3.82, 3.82], ['DEF', 1.18, 1.58], ['ABC', 3.3, 3.1], ['ABC', 2.96, 2.96], ['JKL', 3.86, 3.66]], 2], [['ABC', -0.07, 3], ['DEF', 0.0, 1], ['GHI', -0.25, 2], ['JKL', -0.2, 2]]], ['update 22', [[['GHI', 4.5, 4.9], ['GHI', 1.1, 0.9], ['ABC', 2.26, 2.26], ['DEF', 4.3, 4.1], ['ABC', 2.38, 1.88]], 2], [['ABC', -0.25, 2], ['DEF', 0.0, 1], ['GHI', 0.1, 2]]], ['update 23', [[['GHI', 4.6, 4.4], ['DEF', 2.07, 3.47], ['JKL', 4.75, 4.55], ['JKL', 1.31, 2.71], ['ABC', 4.84, 6.24], ['GHI', 1.4, 1.8], ['DEF', 3.5, 3.9], ['DEF', 2.03, 1.53], ['GHI', 3.07, 3.17], ['JKL', 2.49, 1.29], ['GHI', 4.66, 3.46], ['ABC', 1.36, 1.46]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 2], ['GHI', 0.1, 3], ['JKL', 0.0, 1]]], ['update 24', [[['ABC', 3.1, 2.6], ['ABC', 4.76, 4.86], ['ABC', 4.5, 3.3], ['DEF', 4.19, 2.99]], 3], [['ABC', 0.0, 2], ['DEF', 0.0, 0]]], ['update 25', [[['GHI', 1.14, 1.14], ['JKL', 1.52, 2.92], ['JKL', 4.34, 4.74], ['GHI', 4.19, 5.59]], 3], [['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 26', [[['ABC', 2.41, 2.41], ['GHI', 1.97, 3.37], ['DEF', 1.7, 1.8]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 0]]], ['update 27', [[['GHI', 2.42, 2.42], ['DEF', 3.85, 5.25], ['GHI', 1.72, 0.52], ['DEF', 4.97, 5.07], ['DEF', 2.31, 2.11], ['ABC', 1.12, -0.08]], 3], [['ABC', 0.0, 0], ['DEF', 0.0, 2], ['GHI', 0.0, 1]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]]], [['update 0', [[['ABC', 4.08, 2.88], ['JKL', 4.17, 4.57], ['GHI', 2.75, 1.55], ['ABC', 1.69, 2.09], ['GHI', 4.14, 4.54], ['DEF', 1.62, 1.42], ['ABC', 4.95, 3.75]], 3], [['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]], ['update 1', [[['JKL', 3.77, 3.87], ['JKL', 1.13, 1.53], ['GHI', 4.95, 4.95], ['JKL', 2.75, 2.55]], 2], [['GHI', 0.0, 1], ['JKL', 0.1, 3]]], ['update 2', [[['ABC', 4.36, 5.76], ['DEF', 1.34, 1.74]], 2], [['ABC', 0.0, 0], ['DEF', 0.0, 1]]], ['update 3', [[['GHI', 3.9, 4.3], ['ABC', 3.21, 3.61], ['JKL', 3.44, 2.24], ['GHI', 1.49, 0.99], ['ABC', 2.92, 2.92], ['ABC', 1.35, 0.85], ['JKL', 3.83, 3.33], ['JKL', 4.34, 5.74], ['GHI', 2.74, 2.54], ['JKL', 4.01, 3.81]], 2], [['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]], ['update 28', [[['GHI', 2.19, 1.69], ['GHI', 3.1, 2.9], ['DEF', 1.51, 2.91], ['ABC', 3.68, 3.78], ['DEF', 1.85, 3.25], ['DEF', 4.85, 6.25]], 2], [['ABC', 0.0, 1], ['DEF', 0.0, 0], ['GHI', -0.35, 2]]], ['update 29', [[['DEF', 1.13, 2.53], ['DEF', 4.46, 4.46], ['DEF', 1.47, 1.47], ['ABC', 2.52, 3.92], ['ABC', 4.28, 4.08], ['DEF', 2.6, 2.7], ['ABC', 3.62, 3.42], ['GHI', 1.48, 1.48], ['GHI', 2.07, 1.87]], 2], [['ABC', -0.2, 2], ['DEF', 0.03, 3], ['GHI', -0.1, 2]]], ['exactly one-unit residual', [[['ABC', 4.0, 3.0], ['ABC', 3.5, 3.4], ['ABC', 3.0, 3.1]], 2], [['ABC', -0.33, 3]]], ['minimum count', [[['XYZ', 2.0, 2.3], ['XYZ', 2.2, 2.4], ['QRS', 1.0, 1.5]], 2], [['QRS', 0.0, 1], ['XYZ', 0.25, 2]]]]]
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
update 0[['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]][['ABC', 0.0, 1], ['DEF', 0.0, 1], ['GHI', 0.0, 1], ['JKL', 0.0, 1]]Passed
update 1[['GHI', 0.0, 1], ['JKL', 0.1, 3]][['GHI', 0.0, 1], ['JKL', 0.1, 3]]Passed
update 2[['ABC', 0.0, 0], ['DEF', 0.0, 1]][['ABC', 0.0, 0], ['DEF', 0.0, 1]]Passed
update 3[['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]][['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]Passed
update 4[['ABC', 0.0, 0], ['GHI', 0.0, 1]][['ABC', 0.0, 0], ['GHI', 0.0, 1]]Passed
update 5[['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]][['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]]Passed
update 6[['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]][['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]]Passed
exactly one-unit residual[['ABC', -0.33, 3]][['ABC', -0.33, 3]]Passed

SHA-256 / cf2bff543109e20bd0119038d5d2f128c6404b45772414852b6882f44fe78c7e

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

Case digest / c143400e0cbcc4ebde16dc42cf8f19b55111e23fb701a71b29c87463a1a19ef6