FA-65316 / Epidemic compartment models / Open access
Ross-Macdonald vector-borne R0: biting rate order · case 01
R0 scales linearly rather than quadratically with the biting rate.
ROOT CAUSE
Only one of the two bites in the transmission cycle is counted.
VERIFIED REPAIR
Restore the biting rate order rule: `m * a * a * b`.
Unsuccessful approach: Doubling the biting rate is not squaring it.
Case contract
R0 = m*a^2*b*c*exp(-mu*n)/(r*mu) with biting rate a, transmission probabilities b and c, mosquito density ratio m, human recovery r, mosquito death rate mu and extrinsic incubation n days; return [R0, sqrt(R0) generational value, survival exp(-mu*n)] rounded 6; None if a, r or mu is not positive or m is negative.
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(a, b, c, m, r, mu, n_days):
if min(a, r, mu) <= 0 or m < 0:
return None
survive = math.exp(-mu * n_days)
r0 = m * a * b * c * survive / (r * mu)
return [round(r0, 6), round(math.sqrt(r0), 6), round(survive, 6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])]]
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: malaria-like | [275.909581, 16.610526, 0.367879] | [82.772874, 9.09796, 0.367879] | Failed |
| regression: dengue-like | [7.657858, 2.767283, 0.382893] | [5.3605, 2.315275, 0.382893] | Failed |
| control: no mosquitoes | [0.0, 0.0, 0.367879] | [0.0, 0.0, 0.367879] | Passed |
| control: invalid mu | None | None | Passed |
| regression: zero incubation | [11.25, 3.354102, 1.0] | [5.625, 2.371708, 1.0] | Failed |
| regression: long lived mosquitoes | [658.573963, 25.662696, 0.548812] | [164.643491, 12.831348, 0.548812] | Failed |
| regression: low bite rate | [139.989741, 11.831726, 0.25924] | [13.998974, 3.74152, 0.25924] | Failed |
SHA-256 / 1280f177450ab797e360920b9ac56f4c3ea5834ec8f0caef84f37facdf9689d5
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(a, b, c, m, r, mu, n_days):
if min(a, r, mu) <= 0 or m < 0:
return None
survive = math.exp(-mu * n_days)
r0 = m * (a + a) * b * c * survive / (r * mu)
return [round(r0, 6), round(math.sqrt(r0), 6), round(survive, 6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])]]
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: malaria-like | [551.819162, 23.490831, 0.367879] | [82.772874, 9.09796, 0.367879] | Failed |
| regression: dengue-like | [15.315715, 3.91353, 0.382893] | [5.3605, 2.315275, 0.382893] | Failed |
| control: no mosquitoes | [0.0, 0.0, 0.367879] | [0.0, 0.0, 0.367879] | Passed |
| control: invalid mu | None | None | Passed |
| regression: zero incubation | [22.5, 4.743416, 1.0] | [5.625, 2.371708, 1.0] | Failed |
| regression: long lived mosquitoes | [1317.147927, 36.292533, 0.548812] | [164.643491, 12.831348, 0.548812] | Failed |
| regression: low bite rate | [279.979481, 16.732587, 0.25924] | [13.998974, 3.74152, 0.25924] | Failed |
SHA-256 / 2e5b786e31e389b9793aff1c5763d18db9589077865010b3f351fac8758454be
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(a, b, c, m, r, mu, n_days):
if min(a, r, mu) <= 0 or m < 0:
return None
survive = math.exp(-mu * n_days)
r0 = m * a * a * b * c * survive / (r * mu)
return [round(r0, 6), round(math.sqrt(r0), 6), round(survive, 6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])],
[('regression: malaria-like', (0.3, 0.5, 0.5, 10, 0.01, 0.1, 10), [82.772874, 9.09796, 0.367879]),
('regression: dengue-like', (0.7, 0.4, 0.6, 2, 0.14, 0.12, 8), [5.3605, 2.315275, 0.382893]),
('control: no mosquitoes', (0.3, 0.5, 0.5, 0, 0.01, 0.1, 10), [0.0, 0.0, 0.367879]),
('control: invalid mu', (0.3, 0.5, 0.5, 10, 0.01, 0.0, 10), None),
('regression: zero incubation', (0.5, 0.3, 0.3, 5, 0.1, 0.2, 0), [5.625, 2.371708, 1.0]),
('regression: long lived mosquitoes',
(0.25, 0.6, 0.4, 20, 0.02, 0.05, 12),
[164.643491, 12.831348, 0.548812]),
('regression: low bite rate', (0.1, 0.9, 0.9, 50, 0.05, 0.15, 9), [13.998974, 3.74152, 0.25924])]]
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: malaria-like | [82.772874, 9.09796, 0.367879] | [82.772874, 9.09796, 0.367879] | Passed |
| regression: dengue-like | [5.3605, 2.315275, 0.382893] | [5.3605, 2.315275, 0.382893] | Passed |
| control: no mosquitoes | [0.0, 0.0, 0.367879] | [0.0, 0.0, 0.367879] | Passed |
| control: invalid mu | None | None | Passed |
| regression: zero incubation | [5.625, 2.371708, 1.0] | [5.625, 2.371708, 1.0] | Passed |
| regression: long lived mosquitoes | [164.643491, 12.831348, 0.548812] | [164.643491, 12.831348, 0.548812] | Passed |
| regression: low bite rate | [13.998974, 3.74152, 0.25924] | [13.998974, 3.74152, 0.25924] | Passed |
SHA-256 / 1dad2825de955aa92caaf1b7c5dd2722806f5c1a911e67b01950e377fe3d9a4a
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:32.719887+00:00.
Case digest / 8560374246c1f38a4d95645351b1d7654fdbd2505ba48be38afa6152aaf414fb