FA-65201 / Epidemic compartment models / Open access
Hospital occupancy from delayed admissions: stay window start · case 01
Each patient occupies a bed one day longer than the length of stay.
ROOT CAUSE
The occupancy window starts los days back instead of los-1.
VERIFIED REPAIR
Restore the stay window start rule: `lo = max(0, t - los + 1)`.
Unsuccessful approach: Flooring at day 1 silently discards day-0 admissions.
Case contract
admissions[t] = hosp_frac*infections[t-delay] (0 before the delay); each admission occupies a bed on days t..t+los-1; return [admissions rounded 4, occupancy rounded 4, earliest peak day].
Why this case matters
Compartmental epidemic calculations drive outbreak forecasts, vaccine targets and hospital planning; a single wrong flow, rate conversion or boundary silently changes every downstream number.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(infections, hosp_frac, delay, los):
n = len(infections)
adm = [hosp_frac * infections[t - delay] if t - delay >= 0 else 0.0 for t in range(n)]
occ = []
for t in range(n):
lo = max(0, t - los)
occ.append(round(sum(adm[lo:t + 1]), 4))
peak = max(range(n), key=lambda t: (occ[t], -t)) if n else None
return [[round(a, 4) for a in adm], occ, peak]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('regression: plateau tie',
([10, 10, 10, 10, 10, 10, 10], 0.05, 1, 3),
[[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('regression: plateau tie',
([10, 10, 10, 10, 10, 10, 10], 0.05, 1, 3),
[[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])]]
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 |
|---|---|---|---|
| regression: wave with 3 day delay | [[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 18.0, 20.0], 8] | [[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8] | Failed |
| regression: no delay one day stay | [[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 3.0, 5.0, 5.0, 3.0], 2] | [[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2] | Failed |
| regression: plateau tie | [[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 2.0, 2.0, 2.0], 4] | [[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3] | Failed |
| control: long stay | [[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7] | [[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7] | Passed |
| control: delay beyond series | [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0] | [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0] | Passed |
| control: empty series | [[], [], None] | [[], [], None] | Passed |
| regression: twin peaks | [[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0], 2] | [[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2] | Failed |
SHA-256 / 4dc63c6b22ceab60d8fd0e3edba636d728886728ae2096c3b324f43e66d99980
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(infections, hosp_frac, delay, los):
n = len(infections)
adm = [hosp_frac * infections[t - delay] if t - delay >= 0 else 0.0 for t in range(n)]
occ = []
for t in range(n):
lo = max(1, t - los + 1)
occ.append(round(sum(adm[lo:t + 1]), 4))
peak = max(range(n), key=lambda t: (occ[t], -t)) if n else None
return [[round(a, 4) for a in adm], occ, peak]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('regression: plateau tie',
([10, 10, 10, 10, 10, 10, 10], 0.05, 1, 3),
[[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('regression: plateau tie',
([10, 10, 10, 10, 10, 10, 10], 0.05, 1, 3),
[[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])]]
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 |
|---|---|---|---|
| regression: wave with 3 day delay | [[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8] | [[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8] | Passed |
| regression: no delay one day stay | [[1.0, 2.0, 3.0, 2.0, 1.0], [0, 2.0, 3.0, 2.0, 1.0], 2] | [[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2] | Failed |
| regression: plateau tie | [[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3] | [[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3] | Passed |
| control: long stay | [[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7] | [[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7] | Passed |
| control: delay beyond series | [[0.0, 0.0, 0.0], [0, 0.0, 0.0], 0] | [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0] | Passed |
| control: empty series | [[], [], None] | [[], [], None] | Passed |
| regression: twin peaks | [[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2] | [[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2] | Passed |
SHA-256 / 17fec468952d5b417e8faf974e262b4723bc6bf569018a5d297089765fe1d4de
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(infections, hosp_frac, delay, los):
n = len(infections)
adm = [hosp_frac * infections[t - delay] if t - delay >= 0 else 0.0 for t in range(n)]
occ = []
for t in range(n):
lo = max(0, t - los + 1)
occ.append(round(sum(adm[lo:t + 1]), 4))
peak = max(range(n), key=lambda t: (occ[t], -t)) if n else None
return [[round(a, 4) for a in adm], occ, peak]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('regression: plateau tie',
([10, 10, 10, 10, 10, 10, 10], 0.05, 1, 3),
[[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('regression: no delay one day stay',
([5, 10, 15, 10, 5], 0.2, 0, 1),
[[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2]),
('regression: plateau tie',
([10, 10, 10, 10, 10, 10, 10], 0.05, 1, 3),
[[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2])],
[('regression: wave with 3 day delay',
([10, 20, 40, 60, 50, 30, 20, 10, 5], 0.1, 3, 4),
[[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8]),
('control: long stay',
([100, 80, 60, 40, 20, 10, 5, 0], 0.03, 2, 6),
[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7]),
('control: delay beyond series', ([1, 2, 3], 0.5, 5, 2), [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0]),
('control: empty series', ([], 0.1, 1, 3), [[], [], None]),
('regression: twin peaks',
([0, 30, 0, 0, 30, 0, 0, 0], 0.1, 1, 2),
[[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2]),
('control: rising',
([1, 3, 7, 12, 20, 33], 0.08, 2, 5),
[[0.0, 0.0, 0.08, 0.24, 0.56, 0.96], [0.0, 0.0, 0.08, 0.32, 0.88, 1.84], 5]),
('regression: near-tie peaks',
([10, 12, 10, 0, 11.8, 12.1, 0, 0], 0.5, 0, 1),
[[5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], [5.0, 6.0, 5.0, 0.0, 5.9, 6.05, 0.0, 0.0], 5])]]
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 |
|---|---|---|---|
| regression: wave with 3 day delay | [[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8] | [[0.0, 0.0, 0.0, 1.0, 2.0, 4.0, 6.0, 5.0, 3.0], [0.0, 0.0, 0.0, 1.0, 3.0, 7.0, 13.0, 17.0, 18.0], 8] | Passed |
| regression: no delay one day stay | [[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2] | [[1.0, 2.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 2.0, 1.0], 2] | Passed |
| regression: plateau tie | [[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3] | [[0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], [0.0, 0.5, 1.0, 1.5, 1.5, 1.5, 1.5], 3] | Passed |
| control: long stay | [[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7] | [[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0, 9.3], 7] | Passed |
| control: delay beyond series | [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0] | [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], 0] | Passed |
| control: empty series | [[], [], None] | [[], [], None] | Passed |
| regression: twin peaks | [[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2] | [[0.0, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 3.0, 3.0, 0.0, 3.0, 3.0, 0.0], 2] | Passed |
SHA-256 / 9172a5dbee393f3ab877ee891741ffad2a284d5c4f49f978ccd9341a342a1608
Verification & scope
Deterministic bounded teaching model with a stipulated contract; not a validated scientific or public-health modelling library. 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:47:31.855939+00:00.
Case digest / 4de9f34722aa0a4b5388ea541a23c732020f94586f797f698ea0ee659ad47b7e