FAILURE MAP
← Case archive

FA-65171 / Epidemic compartment models / Open access

SIQR testing and isolation model: isolated infectiousness · case 01

Isolation does not slow transmission.

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

ROOT CAUSE

Isolated people are counted in the force of infection.

VERIFIED REPAIR

Restore the isolated infectiousness rule: `beta * s * i / pop`.

Unsuccessful approach: Halving isolated infectiousness still lets isolated cases transmit.

Case contract

Daily Euler SIQR: infectives recover (gamma*I) or are detected (detect*I), both exits scaled down proportionally if they exceed I; isolated Q do not transmit and are released to R at Q/isolation_days; report daily detections, final Q and final R rounded to 3.

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(beta, gamma, detect, pop, i0, days, isolation_days):
    s, i, q, r = float(pop - i0), float(i0), 0.0, 0.0
    detected = []
    for _ in range(days):
        inf = beta * s * (i + q) / pop
        rec = gamma * i
        iso = detect * i
        if rec + iso > i:
            scale = i / (rec + iso)
            rec *= scale
            iso *= scale
        release = q / isolation_days
        s -= inf
        i += inf - rec - iso
        q += iso - release
        r += rec + release
        detected.append(round(iso, 3))
    return [detected, round(q, 3), round(r, 3)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])]]
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: moderate testing[[1.0, 1.195, 1.474, 1.856, 2.363, 3.022, 3.865, 4.922], 15.772, 43.318][[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]Failed
regression: aggressive testing saturates exits[[9.231, 5.317, 5.384, 6.298, 7.454], 25.139, 47.844][[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]Failed
control: no testing[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826][[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]Passed
regression: short isolation[[4.5, 4.219, 4.579, 5.151, 5.806, 6.497, 7.193], 13.025, 56.54][[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]Failed
control: boundary zero days[[], 0.0, 0.0][[], 0.0, 0.0]Passed
regression: long run[[0.4, 0.479, 0.581, 0.711, 0.875, 1.08, 1.337, 1.657, 2.054, 2.545, 3.147, 3.883], 15.11, 41.141][[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]Failed
regression: exits exactly I[[20.0, 4.8, 3.339, 2.962], 18.945, 43.257][[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]Failed

SHA-256 / 1df89afa2595313a9903f873d01610df71258d434c59ecb7eb78823a210d3a31

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(beta, gamma, detect, pop, i0, days, isolation_days):
    s, i, q, r = float(pop - i0), float(i0), 0.0, 0.0
    detected = []
    for _ in range(days):
        inf = beta * s * (i + 0.5 * q) / pop
        rec = gamma * i
        iso = detect * i
        if rec + iso > i:
            scale = i / (rec + iso)
            rec *= scale
            iso *= scale
        release = q / isolation_days
        s -= inf
        i += inf - rec - iso
        q += iso - release
        r += rec + release
        detected.append(round(iso, 3))
    return [detected, round(q, 3), round(r, 3)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])]]
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: moderate testing[[1.0, 1.195, 1.45, 1.776, 2.186, 2.697, 3.323, 4.081], 13.984, 39.137][[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]Failed
regression: aggressive testing saturates exits[[9.231, 5.317, 4.187, 3.991, 4.097], 18.924, 39.19][[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]Failed
control: no testing[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826][[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]Passed
regression: short isolation[[4.5, 4.219, 4.254, 4.395, 4.561, 4.716, 4.848], 9.363, 48.374][[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]Failed
control: boundary zero days[[], 0.0, 0.0][[], 0.0, 0.0]Passed
regression: long run[[0.4, 0.479, 0.578, 0.699, 0.849, 1.032, 1.256, 1.53, 1.862, 2.264, 2.749, 3.332], 13.589, 37.507][[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]Failed
regression: exits exactly I[[20.0, 4.8, 2.211, 1.623], 16.703, 40.564][[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]Failed

SHA-256 / 132fd5fbb4346ae431b4a6dc259e7487ebb9d100c02f62e87850671b8c5c0e24

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(beta, gamma, detect, pop, i0, days, isolation_days):
    s, i, q, r = float(pop - i0), float(i0), 0.0, 0.0
    detected = []
    for _ in range(days):
        inf = beta * s * i / pop
        rec = gamma * i
        iso = detect * i
        if rec + iso > i:
            scale = i / (rec + iso)
            rec *= scale
            iso *= scale
        release = q / isolation_days
        s -= inf
        i += inf - rec - iso
        q += iso - release
        r += rec + release
        detected.append(round(iso, 3))
    return [detected, round(q, 3), round(r, 3)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('regression: short isolation',
   (0.5, 0.25, 0.3, 600, 15, 7, 2),
   [[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])],
 [('regression: moderate testing',
   (0.5, 0.2, 0.1, 1000, 10, 8, 10),
   [[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]),
  ('regression: aggressive testing saturates exits',
   (0.6, 0.7, 0.6, 500, 20, 5, 7),
   [[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]),
  ('control: no testing', (0.4, 0.2, 0.0, 800, 5, 6, 10), [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]),
  ('control: boundary zero days', (0.5, 0.2, 0.1, 100, 5, 0, 5), [[], 0.0, 0.0]),
  ('regression: long run',
   (0.35, 0.1, 0.05, 2000, 8, 12, 14),
   [[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]),
  ('regression: exits exactly I',
   (0.3, 0.5, 0.5, 200, 40, 4, 5),
   [[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]),
  ('regression: high transmission',
   (1.2, 0.3, 0.2, 400, 4, 6, 10),
   [[0.8, 1.35, 2.26, 3.729, 6.008, 9.305], 20.739, 37.893])]]
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: moderate testing[[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079][[1.0, 1.195, 1.425, 1.695, 2.011, 2.377, 2.798, 3.277], 12.253, 35.079]Passed
regression: aggressive testing saturates exits[[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703][[9.231, 5.317, 2.989, 1.657, 0.912], 12.859, 30.703]Passed
control: no testing[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826][[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 0.0, 9.826]Passed
regression: short isolation[[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676][[4.5, 4.219, 3.929, 3.638, 3.349, 3.067, 2.795], 6.068, 40.676]Passed
control: boundary zero days[[], 0.0, 0.0][[], 0.0, 0.0]Passed
regression: long run[[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018][[0.4, 0.479, 0.574, 0.688, 0.823, 0.985, 1.177, 1.405, 1.675, 1.994, 2.371, 2.813], 12.133, 34.018]Passed
regression: exits exactly I[[20.0, 4.8, 1.083, 0.241], 14.419, 37.828][[20.0, 4.8, 1.083, 0.241], 14.419, 37.828]Passed

SHA-256 / 38ac769a91e9125f11fc7fda8f235fb83fc69ca16d999f4a2cbe7c014d839b90

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

Case digest / aa694a8350ade5ad326c849c7d968632f0b580166a5713fd3a5494cef3eb43da