FAILURE MAP
← Case archive

FA-71756 / Seismic magnitude estimation / Open access

Station magnitude correction update: correction sign · case 01

Applying the corrections doubles the station bias instead of removing it.

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

ROOT CAUSE

The correction equals the mean residual instead of its negative.

VERIFIED REPAIR

Correction = -mean(residual).

Unsuccessful approach: Adding one to the denominator shrinks every correction.

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]]], ['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 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]]], ['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 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 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]]], ['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 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 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]]], ['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 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]]], ['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 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]]Failed
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]]Failed
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]]Failed
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]]Failed
update 7[['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]][['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]Passed

SHA-256 / 624f5865ece73d6c475ae0339cbc629408e81cf97b6b4b21221f510abcaef3d2

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 abs(r) <= 1.0:
            res[st].append(r)
    out = []
    for st in sorted(res):
        kept = res[st]
        corr = round(-sum(kept) / (len(kept) + 1), 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]]], ['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 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]]], ['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 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 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]]], ['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 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 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]]], ['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 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]]], ['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 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.08, 3]][['GHI', 0.0, 1], ['JKL', 0.1, 3]]Failed
update 2[['ABC', 0.0, 0], ['DEF', 0.0, 1]][['ABC', 0.0, 0], ['DEF', 0.0, 1]]Passed
update 3[['ABC', -0.02, 3], ['GHI', -0.07, 3], ['JKL', -0.23, 2]][['ABC', -0.03, 3], ['GHI', -0.1, 3], ['JKL', -0.35, 2]]Failed
update 4[['ABC', 0.0, 0], ['GHI', 0.0, 1]][['ABC', 0.0, 0], ['GHI', 0.0, 1]]Passed
update 5[['ABC', -0.15, 3], ['DEF', 0.03, 3], ['GHI', -0.12, 4]][['ABC', -0.2, 3], ['DEF', 0.03, 3], ['GHI', -0.15, 4]]Failed
update 6[['ABC', 0.0, 1], ['DEF', 0.07, 2], ['JKL', -0.12, 3]][['ABC', 0.0, 1], ['DEF', 0.1, 2], ['JKL', -0.17, 3]]Failed
update 7[['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]][['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]Passed

SHA-256 / b0c69a5dc2651008148f7f0d614e1e37756088e75c800c9e275622c2aa736175

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]]], ['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 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]]], ['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 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 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]]], ['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 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 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]]], ['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 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]]], ['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 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
update 7[['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]][['ABC', 0.0, 2], ['DEF', 0.0, 2], ['GHI', 0.0, 0], ['JKL', 0.0, 1]]Passed

SHA-256 / 2d42c7211e9102619aa815ece75e30867a4785d9ae39a302f6ceeb16808f75a8

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

Case digest / 4ed72d4591ee7e924ca7fda86179c787d727879d19d0b950aadbb5bf5c1a2b05