FA-63601 / Actuarial life tables / Open access
Central death rate to mortality rate conversion: A rate of exactly one is rejected · case 01
A group where everyone dies returns an error.
ROOT CAUSE
The unity check is inclusive.
VERIFIED REPAIR
Reject only q>1.
Unsuccessful approach: Testing m instead of q rejects valid high rates between 1 and 2 central.
Case contract
Input deaths, exposure [num, den] central person-years, method udd|cfm|actuarial. m = deaths/exposure. UDD q=m/(1+m/2); constant force q=1-exp(-m); actuarial q=deaths/(exposure+deaths). exposure<=0 or deaths<0 -> 'invalid'; q>1 -> 'rate exceeds unity'; other method -> 'unknown method'. Return [m, q] rounded to 8.
Why this case matters
Life-table arithmetic compounds across ages, so one misplaced index or assumption shifts every downstream value.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(x):
d=x['deaths']; E=Fraction(*x['exposure'])
if E<=0 or d<0: return 'invalid'
m=Fraction(d)/E
if x['method']=='udd':
q=m/(1+m/2)
elif x['method']=='cfm':
q=Fraction(1-math.exp(-float(m)))
elif x['method']=='actuarial':
q=Fraction(d)/(E+d)
else:
return 'unknown method'
if q>=1: return 'rate exceeds unity'
return [round(float(m),8),round(float(q),8)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['udd typical', {'deaths': 34, 'exposure': [3917, 1], 'method': 'udd'}, [0.00868011, 0.0086426]], ['cfm typical', {'deaths': 22, 'exposure': [1748, 1], 'method': 'cfm'}, [0.01258581, 0.01250694]], ['actuarial typical', {'deaths': 54, 'exposure': [3265, 1], 'method': 'actuarial'}, [0.01653905, 0.01626996]], ['udd high rate', {'deaths': 31, 'exposure': [40, 1], 'method': 'udd'}, [0.775, 0.55855856]], ['udd rate exactly one', {'deaths': 2, 'exposure': [1, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 5, 'exposure': [2, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 6, 'exposure': [842, 2], 'method': 'udd'}, [0.01425178, 0.01415094]], ['cfm typical', {'deaths': 59, 'exposure': [2784, 1], 'method': 'cfm'}, [0.02119253, 0.02096955]], ['actuarial typical', {'deaths': 20, 'exposure': [2966, 2], 'method': 'actuarial'}, [0.01348618, 0.01330672]], ['udd high rate', {'deaths': 32, 'exposure': [40, 1], 'method': 'udd'}, [0.8, 0.57142857]], ['udd rate exactly one', {'deaths': 4, 'exposure': [2, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 10, 'exposure': [4, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 24, 'exposure': [4705, 1], 'method': 'udd'}, [0.00510096, 0.00508798]], ['cfm typical', {'deaths': 30, 'exposure': [3205, 4], 'method': 'cfm'}, [0.0374415, 0.03674923]], ['actuarial typical', {'deaths': 31, 'exposure': [2250, 1], 'method': 'actuarial'}, [0.01377778, 0.01359053]], ['udd high rate', {'deaths': 33, 'exposure': [40, 1], 'method': 'udd'}, [0.825, 0.5840708]], ['udd rate exactly one', {'deaths': 6, 'exposure': [3, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 15, 'exposure': [6, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 49, 'exposure': [2311, 4], 'method': 'udd'}, [0.08481177, 0.08136156]], ['cfm typical', {'deaths': 58, 'exposure': [2503, 4], 'method': 'cfm'}, [0.09268877, 0.08852287]], ['actuarial typical', {'deaths': 40, 'exposure': [4345, 1], 'method': 'actuarial'}, [0.00920598, 0.00912201]], ['udd high rate', {'deaths': 34, 'exposure': [40, 1], 'method': 'udd'}, [0.85, 0.59649123]], ['udd rate exactly one', {'deaths': 8, 'exposure': [4, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 20, 'exposure': [8, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 43, 'exposure': [1418, 4], 'method': 'udd'}, [0.1212976, 0.1143617]], ['cfm typical', {'deaths': 51, 'exposure': [2058, 4], 'method': 'cfm'}, [0.09912536, 0.09437083]], ['actuarial typical', {'deaths': 36, 'exposure': [959, 4], 'method': 'actuarial'}, [0.15015641, 0.13055304]], ['udd high rate', {'deaths': 35, 'exposure': [40, 1], 'method': 'udd'}, [0.875, 0.60869565]], ['udd rate exactly one', {'deaths': 10, 'exposure': [5, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 25, 'exposure': [10, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']]]
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 |
|---|---|---|---|
| udd typical | [0.00868011, 0.0086426] | [0.00868011, 0.0086426] | Passed |
| cfm typical | [0.01258581, 0.01250694] | [0.01258581, 0.01250694] | Passed |
| actuarial typical | [0.01653905, 0.01626996] | [0.01653905, 0.01626996] | Passed |
| udd high rate | [0.775, 0.55855856] | [0.775, 0.55855856] | Passed |
| udd rate exactly one | rate exceeds unity | [2.0, 1.0] | Failed |
| udd rate above one | rate exceeds unity | rate exceeds unity | Passed |
| negative deaths rejected | invalid | invalid | Passed |
| negative deaths actuarial | invalid | invalid | Passed |
| zero exposure rejected | invalid | invalid | Passed |
| unknown method | unknown method | unknown method | Passed |
SHA-256 / 47a017e9c5a96c8d101cc6a08dbd5cb464d2a2e6fddb9474d0b8c7349c1c7d20
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(x):
d=x['deaths']; E=Fraction(*x['exposure'])
if E<=0 or d<0: return 'invalid'
m=Fraction(d)/E
if x['method']=='udd':
q=m/(1+m/2)
elif x['method']=='cfm':
q=Fraction(1-math.exp(-float(m)))
elif x['method']=='actuarial':
q=Fraction(d)/(E+d)
else:
return 'unknown method'
if m>1: return 'rate exceeds unity'
return [round(float(m),8),round(float(q),8)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['udd typical', {'deaths': 34, 'exposure': [3917, 1], 'method': 'udd'}, [0.00868011, 0.0086426]], ['cfm typical', {'deaths': 22, 'exposure': [1748, 1], 'method': 'cfm'}, [0.01258581, 0.01250694]], ['actuarial typical', {'deaths': 54, 'exposure': [3265, 1], 'method': 'actuarial'}, [0.01653905, 0.01626996]], ['udd high rate', {'deaths': 31, 'exposure': [40, 1], 'method': 'udd'}, [0.775, 0.55855856]], ['udd rate exactly one', {'deaths': 2, 'exposure': [1, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 5, 'exposure': [2, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 6, 'exposure': [842, 2], 'method': 'udd'}, [0.01425178, 0.01415094]], ['cfm typical', {'deaths': 59, 'exposure': [2784, 1], 'method': 'cfm'}, [0.02119253, 0.02096955]], ['actuarial typical', {'deaths': 20, 'exposure': [2966, 2], 'method': 'actuarial'}, [0.01348618, 0.01330672]], ['udd high rate', {'deaths': 32, 'exposure': [40, 1], 'method': 'udd'}, [0.8, 0.57142857]], ['udd rate exactly one', {'deaths': 4, 'exposure': [2, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 10, 'exposure': [4, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 24, 'exposure': [4705, 1], 'method': 'udd'}, [0.00510096, 0.00508798]], ['cfm typical', {'deaths': 30, 'exposure': [3205, 4], 'method': 'cfm'}, [0.0374415, 0.03674923]], ['actuarial typical', {'deaths': 31, 'exposure': [2250, 1], 'method': 'actuarial'}, [0.01377778, 0.01359053]], ['udd high rate', {'deaths': 33, 'exposure': [40, 1], 'method': 'udd'}, [0.825, 0.5840708]], ['udd rate exactly one', {'deaths': 6, 'exposure': [3, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 15, 'exposure': [6, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 49, 'exposure': [2311, 4], 'method': 'udd'}, [0.08481177, 0.08136156]], ['cfm typical', {'deaths': 58, 'exposure': [2503, 4], 'method': 'cfm'}, [0.09268877, 0.08852287]], ['actuarial typical', {'deaths': 40, 'exposure': [4345, 1], 'method': 'actuarial'}, [0.00920598, 0.00912201]], ['udd high rate', {'deaths': 34, 'exposure': [40, 1], 'method': 'udd'}, [0.85, 0.59649123]], ['udd rate exactly one', {'deaths': 8, 'exposure': [4, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 20, 'exposure': [8, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 43, 'exposure': [1418, 4], 'method': 'udd'}, [0.1212976, 0.1143617]], ['cfm typical', {'deaths': 51, 'exposure': [2058, 4], 'method': 'cfm'}, [0.09912536, 0.09437083]], ['actuarial typical', {'deaths': 36, 'exposure': [959, 4], 'method': 'actuarial'}, [0.15015641, 0.13055304]], ['udd high rate', {'deaths': 35, 'exposure': [40, 1], 'method': 'udd'}, [0.875, 0.60869565]], ['udd rate exactly one', {'deaths': 10, 'exposure': [5, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 25, 'exposure': [10, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']]]
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 |
|---|---|---|---|
| udd typical | [0.00868011, 0.0086426] | [0.00868011, 0.0086426] | Passed |
| cfm typical | [0.01258581, 0.01250694] | [0.01258581, 0.01250694] | Passed |
| actuarial typical | [0.01653905, 0.01626996] | [0.01653905, 0.01626996] | Passed |
| udd high rate | [0.775, 0.55855856] | [0.775, 0.55855856] | Passed |
| udd rate exactly one | rate exceeds unity | [2.0, 1.0] | Failed |
| udd rate above one | rate exceeds unity | rate exceeds unity | Passed |
| negative deaths rejected | invalid | invalid | Passed |
| negative deaths actuarial | invalid | invalid | Passed |
| zero exposure rejected | invalid | invalid | Passed |
| unknown method | unknown method | unknown method | Passed |
SHA-256 / e81395fa7542749bc8220f8634ab74bb8c9a8f7172a383afc16ac9f8792e35bc
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(x):
d=x['deaths']; E=Fraction(*x['exposure'])
if E<=0 or d<0: return 'invalid'
m=Fraction(d)/E
if x['method']=='udd':
q=m/(1+m/2)
elif x['method']=='cfm':
q=Fraction(1-math.exp(-float(m)))
elif x['method']=='actuarial':
q=Fraction(d)/(E+d)
else:
return 'unknown method'
if q>1: return 'rate exceeds unity'
return [round(float(m),8),round(float(q),8)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['udd typical', {'deaths': 34, 'exposure': [3917, 1], 'method': 'udd'}, [0.00868011, 0.0086426]], ['cfm typical', {'deaths': 22, 'exposure': [1748, 1], 'method': 'cfm'}, [0.01258581, 0.01250694]], ['actuarial typical', {'deaths': 54, 'exposure': [3265, 1], 'method': 'actuarial'}, [0.01653905, 0.01626996]], ['udd high rate', {'deaths': 31, 'exposure': [40, 1], 'method': 'udd'}, [0.775, 0.55855856]], ['udd rate exactly one', {'deaths': 2, 'exposure': [1, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 5, 'exposure': [2, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 6, 'exposure': [842, 2], 'method': 'udd'}, [0.01425178, 0.01415094]], ['cfm typical', {'deaths': 59, 'exposure': [2784, 1], 'method': 'cfm'}, [0.02119253, 0.02096955]], ['actuarial typical', {'deaths': 20, 'exposure': [2966, 2], 'method': 'actuarial'}, [0.01348618, 0.01330672]], ['udd high rate', {'deaths': 32, 'exposure': [40, 1], 'method': 'udd'}, [0.8, 0.57142857]], ['udd rate exactly one', {'deaths': 4, 'exposure': [2, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 10, 'exposure': [4, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 24, 'exposure': [4705, 1], 'method': 'udd'}, [0.00510096, 0.00508798]], ['cfm typical', {'deaths': 30, 'exposure': [3205, 4], 'method': 'cfm'}, [0.0374415, 0.03674923]], ['actuarial typical', {'deaths': 31, 'exposure': [2250, 1], 'method': 'actuarial'}, [0.01377778, 0.01359053]], ['udd high rate', {'deaths': 33, 'exposure': [40, 1], 'method': 'udd'}, [0.825, 0.5840708]], ['udd rate exactly one', {'deaths': 6, 'exposure': [3, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 15, 'exposure': [6, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 49, 'exposure': [2311, 4], 'method': 'udd'}, [0.08481177, 0.08136156]], ['cfm typical', {'deaths': 58, 'exposure': [2503, 4], 'method': 'cfm'}, [0.09268877, 0.08852287]], ['actuarial typical', {'deaths': 40, 'exposure': [4345, 1], 'method': 'actuarial'}, [0.00920598, 0.00912201]], ['udd high rate', {'deaths': 34, 'exposure': [40, 1], 'method': 'udd'}, [0.85, 0.59649123]], ['udd rate exactly one', {'deaths': 8, 'exposure': [4, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 20, 'exposure': [8, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']], [['udd typical', {'deaths': 43, 'exposure': [1418, 4], 'method': 'udd'}, [0.1212976, 0.1143617]], ['cfm typical', {'deaths': 51, 'exposure': [2058, 4], 'method': 'cfm'}, [0.09912536, 0.09437083]], ['actuarial typical', {'deaths': 36, 'exposure': [959, 4], 'method': 'actuarial'}, [0.15015641, 0.13055304]], ['udd high rate', {'deaths': 35, 'exposure': [40, 1], 'method': 'udd'}, [0.875, 0.60869565]], ['udd rate exactly one', {'deaths': 10, 'exposure': [5, 1], 'method': 'udd'}, [2.0, 1.0]], ['udd rate above one', {'deaths': 25, 'exposure': [10, 1], 'method': 'udd'}, 'rate exceeds unity'], ['negative deaths rejected', {'deaths': -1, 'exposure': [100, 1], 'method': 'udd'}, 'invalid'], ['negative deaths actuarial', {'deaths': -2, 'exposure': [100, 1], 'method': 'actuarial'}, 'invalid'], ['zero exposure rejected', {'deaths': 1, 'exposure': [0, 1], 'method': 'cfm'}, 'invalid'], ['unknown method', {'deaths': 1, 'exposure': [10, 1], 'method': 'balducci'}, 'unknown method']]]
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 |
|---|---|---|---|
| udd typical | [0.00868011, 0.0086426] | [0.00868011, 0.0086426] | Passed |
| cfm typical | [0.01258581, 0.01250694] | [0.01258581, 0.01250694] | Passed |
| actuarial typical | [0.01653905, 0.01626996] | [0.01653905, 0.01626996] | Passed |
| udd high rate | [0.775, 0.55855856] | [0.775, 0.55855856] | Passed |
| udd rate exactly one | [2.0, 1.0] | [2.0, 1.0] | Passed |
| udd rate above one | rate exceeds unity | rate exceeds unity | Passed |
| negative deaths rejected | invalid | invalid | Passed |
| negative deaths actuarial | invalid | invalid | Passed |
| zero exposure rejected | invalid | invalid | Passed |
| unknown method | unknown method | unknown method | Passed |
SHA-256 / e2163f5bcf8b86268fe265cd55cc3e49cadeb165e2732605d4a2a2b0b2b9f8b5
Verification & scope
A deterministic bounded teaching model of a stipulated toy actuarial contract. Rates are small synthetic tables, exact rationals are used where practical and floats are rounded at the output; it makes no claim of conformance with any published table, standard of practice or regulation. 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:15.949494+00:00.
Case digest / ad92b587cb4a0d09486f7efd8ff3735fb404e488356486e2efa23f850279cdfc