FA-71761 / Seismic magnitude estimation / Open access
Station magnitude correction update: residual outlier bound · case 01
Residuals of exactly one magnitude unit are discarded.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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