FAILURE MAP
← Case archive

FA-65226 / Epidemic compartment models / Open access

SIR with Erlang-distributed infectious period: interior stage chain · case 01

The last stage never fills and nobody reaches R through it.

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

ROOT CAUSE

The stage loop stops before the final stage.

VERIFIED REPAIR

Restore the interior stage chain rule: `for j in range(1, k):`.

Unsuccessful approach: Starting at stage 3 skips the second stage.

Case contract

Infectious period split into k sequential stages each left at rate k*gamma; seeds start in stage 1; all stages transmit; Euler with dt=0.1 (10 substeps/day); return [total I at day ends including day 0 rounded 3, R rounded 3], None for k<1.

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, k, pop, i0, days):
    if k < 1:
        return None
    stages = [0.0] * k
    stages[0] = float(i0)
    s = float(pop - i0)
    r = 0.0
    dt = 0.1
    series = [round(sum(stages), 3)]
    for _ in range(days):
        for _ in range(10):
            i = sum(stages)
            inf = beta * s * i / pop * dt
            flows = [k * gamma * x * dt for x in stages]
            s -= inf
            stages[0] += inf - flows[0]
            for j in range(1, k - 1):
                stages[j] += flows[j - 1] - flows[j]
            r += flows[-1]
        series.append(round(sum(stages), 3))
    return [series, round(r, 3)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])]]
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: three stages[[10.0, 14.62, 19.24, 24.537, 30.857, 38.401, 47.273], 0.0][[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]Failed
control: single stage equals SIR[[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032][[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]Passed
regression: many stages[[20.0, 33.968, 48.44, 63.09, 79.007], 0.0][[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]Failed
regression: no transmission[[10.0, 3.487, 1.216, 0.424, 0.148, 0.052], 0.0][[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]Failed
control: invalid kNoneNonePassed
regression: two stages slow[[30.0, 32.971, 36.185, 39.65, 43.373, 47.358, 51.606, 56.112], 0.0][[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]Failed
control: boundary zero days[[5.0], 0.0][[5.0], 0.0]Passed

SHA-256 / 7d95588696505d0f85540f3e11bb850107f8e059d8f273ef64085e383407c976

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, k, pop, i0, days):
    if k < 1:
        return None
    stages = [0.0] * k
    stages[0] = float(i0)
    s = float(pop - i0)
    r = 0.0
    dt = 0.1
    series = [round(sum(stages), 3)]
    for _ in range(days):
        for _ in range(10):
            i = sum(stages)
            inf = beta * s * i / pop * dt
            flows = [k * gamma * x * dt for x in stages]
            s -= inf
            stages[0] += inf - flows[0]
            for j in range(2, k):
                stages[j] += flows[j - 1] - flows[j]
            r += flows[-1]
        series.append(round(sum(stages), 3))
    return [series, round(r, 3)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])]]
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: three stages[[10.0, 8.988, 8.061, 7.214, 6.445, 5.749, 5.12], 0.0][[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]Failed
control: single stage equals SIR[[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032][[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]Passed
regression: many stages[[20.0, 7.635, 2.902, 1.101, 0.418], 0.0][[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]Failed
regression: no transmission[[10.0, 3.487, 1.216, 0.424, 0.148, 0.052], 0.0][[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]Failed
control: invalid kNoneNonePassed
regression: two stages slow[[30.0, 32.971, 36.185, 39.65, 43.373, 47.358, 51.606, 56.112], 0.0][[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]Failed
control: boundary zero days[[5.0], 0.0][[5.0], 0.0]Passed

SHA-256 / 6dc9cb43098c007c61d22bcb61643673dff8f361c4ead0f0f8610bd8c1b529de

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, k, pop, i0, days):
    if k < 1:
        return None
    stages = [0.0] * k
    stages[0] = float(i0)
    s = float(pop - i0)
    r = 0.0
    dt = 0.1
    series = [round(sum(stages), 3)]
    for _ in range(days):
        for _ in range(10):
            i = sum(stages)
            inf = beta * s * i / pop * dt
            flows = [k * gamma * x * dt for x in stages]
            s -= inf
            stages[0] += inf - flows[0]
            for j in range(1, k):
                stages[j] += flows[j - 1] - flows[j]
            r += flows[-1]
        series.append(round(sum(stages), 3))
    return [series, round(r, 3)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('regression: no transmission',
   (0.0, 0.5, 2, 100, 10, 5),
   [[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])],
 [('regression: three stages',
   (0.5, 0.2, 3, 1000, 10, 6),
   [[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]),
  ('control: single stage equals SIR',
   (0.4, 0.25, 1, 500, 5, 5),
   [[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]),
  ('regression: many stages', (0.6, 0.3, 5, 800, 20, 4), [[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]),
  ('control: invalid k', (0.5, 0.2, 0, 100, 5, 3), None),
  ('regression: two stages slow',
   (0.3, 0.1, 2, 2000, 30, 7),
   [[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]),
  ('control: boundary zero days', (0.5, 0.2, 3, 100, 5, 0), [[5.0], 0.0]),
  ('regression: four stages fast recovery',
   (0.9, 0.5, 4, 300, 6, 5),
   [[6.0, 12.89, 21.627, 33.085, 46.281, 57.492], 51.385])]]
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: three stages[[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589][[10.0, 15.964, 24.203, 35.419, 50.774, 71.593, 99.086], 25.589]Passed
control: single stage equals SIR[[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032][[5.0, 5.776, 6.66, 7.664, 8.798, 10.074], 9.032]Passed
regression: many stages[[20.0, 34.937, 55.691, 80.709, 110.985], 33.142][[20.0, 34.937, 55.691, 80.709, 110.985], 33.142]Passed
regression: no transmission[[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662][[10.0, 7.361, 3.917, 1.837, 0.805, 0.338], 9.662]Passed
control: invalid kNoneNonePassed
regression: two stages slow[[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058][[30.0, 39.545, 50.929, 64.696, 81.433, 101.776, 126.384, 155.912], 30.058]Passed
control: boundary zero days[[5.0], 0.0][[5.0], 0.0]Passed

SHA-256 / 147f167b1673c9402d4dd9a045605c63c60b05540ca136797ab231ba52f3d3c5

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

Case digest / d9d7177f1afb848c375b038b8cd6b070d641b3dade03c1e4a9bd0f660f18c0d6