FAILURE MAP
← Case archive

FA-65206 / Epidemic compartment models / Open access

Hospital occupancy from delayed admissions: same-day admissions · case 01

Patients admitted today are not counted in today's occupancy.

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

ROOT CAUSE

The window end excludes day t.

VERIFIED REPAIR

Restore the same-day admissions rule: `adm[lo:t + 1]`.

Unsuccessful approach: Shifting the window start instead shortens the stay.

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 + 1)
        occ.append(round(sum(adm[lo:t]), 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]),
  ('regression: 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]),
  ('regression: 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: 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: 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: 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]),
  ('regression: 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]),
  ('regression: 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: 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 fixtureActualExpectedOutcome
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.0, 1.0, 3.0, 7.0, 12.0, 15.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], [0, 0, 0, 0, 0], 0][[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, 0.5, 1.0, 1.0, 1.0, 1.0], 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]Failed
regression: long stay[[0.0, 0.0, 3.0, 2.4, 1.8, 1.2, 0.6, 0.3], [0, 0.0, 0.0, 3.0, 5.4, 7.2, 8.4, 9.0], 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]Failed
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, 0.0, 3.0, 0.0, 0.0, 3.0, 0.0], 3][[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 / c567ed771f376abfd6be49cd9fefb2159bd015fbd157c95fc3b1e14041fe25d8

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(0, t - los + 1)
        occ.append(round(sum(adm[lo + 1: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]),
  ('regression: 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]),
  ('regression: 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: 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: 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: 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]),
  ('regression: 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]),
  ('regression: 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: 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 fixtureActualExpectedOutcome
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, 12.0, 15.0, 14.0], 7][[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], [0, 0, 0, 0, 0], 0][[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.0, 1.0, 1.0, 1.0], 2][[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
regression: 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, 6.3], 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]Failed
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, 0.0, 0.0, 3.0, 0.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]Failed

SHA-256 / db3b98940ae394f0127c5188e1c19a5796b5a65f4378ca5fa875daf619776c74

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]),
  ('regression: 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]),
  ('regression: 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: 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: 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: 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]),
  ('regression: 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]),
  ('regression: 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: 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 fixtureActualExpectedOutcome
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
regression: 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 / 1c5a6ad25baaf0659fc80986846fc25c6eba360288d9fcdccf165402b86b4d76

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

Case digest / 0e97a280337c9b3f5d497f75f48370644ca795d46ed09e952e4dc4798ddf4cd5