{"abstract":"Corrupt negative death counts produce negative rates.","category":"Actuarial life tables","checks":10,"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.","evaluation_group":"w2-actuarial_life_tables-central-rate-conversion","failed_approach":"Validating only the UDD branch leaves the other methods exposed.","family":"w2-actuarial_life_tables-central-rate-conversion-deaths-validation","id":"FA-63606","implementations":{"attempt":{"sha256":"a4521a03d730f72a91c5fda67d38282c18835b077728bb76da6d105fcc822e4e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    d=x['deaths']; E=Fraction(*x['exposure'])\n    if E<=0 or d<0 and x['method']=='udd': return 'invalid'\n    m=Fraction(d)/E\n    if x['method']=='udd':\n        q=m/(1+m/2)\n    elif x['method']=='cfm':\n        q=Fraction(1-math.exp(-float(m)))\n    elif x['method']=='actuarial':\n        q=Fraction(d)/(E+d)\n    else:\n        return 'unknown method'\n    if q>1: return 'rate exceeds unity'\n    return [round(float(m),8),round(float(q),8)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['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']]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"e6af9489931dcc749614edec4a741ea2e394fdfd0824a2b37c72e39804ff8b69","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    d=x['deaths']; E=Fraction(*x['exposure'])\n    if E<=0: return 'invalid'\n    m=Fraction(d)/E\n    if x['method']=='udd':\n        q=m/(1+m/2)\n    elif x['method']=='cfm':\n        q=Fraction(1-math.exp(-float(m)))\n    elif x['method']=='actuarial':\n        q=Fraction(d)/(E+d)\n    else:\n        return 'unknown method'\n    if q>1: return 'rate exceeds unity'\n    return [round(float(m),8),round(float(q),8)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['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']]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"e2163f5bcf8b86268fe265cd55cc3e49cadeb165e2732605d4a2a2b0b2b9f8b5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    d=x['deaths']; E=Fraction(*x['exposure'])\n    if E<=0 or d<0: return 'invalid'\n    m=Fraction(d)/E\n    if x['method']=='udd':\n        q=m/(1+m/2)\n    elif x['method']=='cfm':\n        q=Fraction(1-math.exp(-float(m)))\n    elif x['method']=='actuarial':\n        q=Fraction(d)/(E+d)\n    else:\n        return 'unknown method'\n    if q>1: return 'rate exceeds unity'\n    return [round(float(m),8),round(float(q),8)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['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']]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-actuarial_life_tables-central-rate-conversion-deaths-validation","generated_at":"2026-09-29T14:47:15.956419+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Life-table arithmetic compounds across ages, so one misplaced index or assumption shifts every downstream value.","repair":"Reject negative deaths for every method.","root_cause":"Deaths are not validated.","sha256":"f211275619b1e2048a50d8af7677977881c39000a7b32375e0ad752af0150c9f","title":"Central death rate to mortality rate conversion: Negative deaths are accepted · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.193,"exit_code":1,"observations":[{"actual":[0.00868011,0.0086426],"check":"udd typical","expected":[0.00868011,0.0086426],"passed":true},{"actual":[0.01258581,0.01250694],"check":"cfm typical","expected":[0.01258581,0.01250694],"passed":true},{"actual":[0.01653905,0.01626996],"check":"actuarial typical","expected":[0.01653905,0.01626996],"passed":true},{"actual":[0.775,0.55855856],"check":"udd high rate","expected":[0.775,0.55855856],"passed":true},{"actual":[2.0,1.0],"check":"udd rate exactly one","expected":[2.0,1.0],"passed":true},{"actual":"rate exceeds unity","check":"udd rate above one","expected":"rate exceeds unity","passed":true},{"actual":"invalid","check":"negative deaths rejected","expected":"invalid","passed":true},{"actual":[-0.02,-0.02040816],"check":"negative deaths actuarial","expected":"invalid","passed":false},{"actual":"invalid","check":"zero exposure rejected","expected":"invalid","passed":true},{"actual":"unknown method","check":"unknown method","expected":"unknown method","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"udd typical\", \"actual\": [0.00868011, 0.0086426], \"expected\": [0.00868011, 0.0086426], \"passed\": true}, {\"check\": \"cfm typical\", \"actual\": [0.01258581, 0.01250694], \"expected\": [0.01258581, 0.01250694], \"passed\": true}, {\"check\": \"actuarial typical\", \"actual\": [0.01653905, 0.01626996], \"expected\": [0.01653905, 0.01626996], \"passed\": true}, {\"check\": \"udd high rate\", \"actual\": [0.775, 0.55855856], \"expected\": [0.775, 0.55855856], \"passed\": true}, {\"check\": \"udd rate exactly one\", \"actual\": [2.0, 1.0], \"expected\": [2.0, 1.0], \"passed\": true}, {\"check\": \"udd rate above one\", \"actual\": \"rate exceeds unity\", \"expected\": \"rate exceeds unity\", \"passed\": true}, {\"check\": \"negative deaths rejected\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"negative deaths actuarial\", \"actual\": [-0.02, -0.02040816], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"zero exposure rejected\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"unknown method\", \"actual\": \"unknown method\", \"expected\": \"unknown method\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.603,"exit_code":1,"observations":[{"actual":[0.00868011,0.0086426],"check":"udd typical","expected":[0.00868011,0.0086426],"passed":true},{"actual":[0.01258581,0.01250694],"check":"cfm typical","expected":[0.01258581,0.01250694],"passed":true},{"actual":[0.01653905,0.01626996],"check":"actuarial typical","expected":[0.01653905,0.01626996],"passed":true},{"actual":[0.775,0.55855856],"check":"udd high rate","expected":[0.775,0.55855856],"passed":true},{"actual":[2.0,1.0],"check":"udd rate exactly one","expected":[2.0,1.0],"passed":true},{"actual":"rate exceeds unity","check":"udd rate above one","expected":"rate exceeds unity","passed":true},{"actual":[-0.01,-0.01005025],"check":"negative deaths rejected","expected":"invalid","passed":false},{"actual":[-0.02,-0.02040816],"check":"negative deaths actuarial","expected":"invalid","passed":false},{"actual":"invalid","check":"zero exposure rejected","expected":"invalid","passed":true},{"actual":"unknown method","check":"unknown method","expected":"unknown method","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"udd typical\", \"actual\": [0.00868011, 0.0086426], \"expected\": [0.00868011, 0.0086426], \"passed\": true}, {\"check\": \"cfm typical\", \"actual\": [0.01258581, 0.01250694], \"expected\": [0.01258581, 0.01250694], \"passed\": true}, {\"check\": \"actuarial typical\", \"actual\": [0.01653905, 0.01626996], \"expected\": [0.01653905, 0.01626996], \"passed\": true}, {\"check\": \"udd high rate\", \"actual\": [0.775, 0.55855856], \"expected\": [0.775, 0.55855856], \"passed\": true}, {\"check\": \"udd rate exactly one\", \"actual\": [2.0, 1.0], \"expected\": [2.0, 1.0], \"passed\": true}, {\"check\": \"udd rate above one\", \"actual\": \"rate exceeds unity\", \"expected\": \"rate exceeds unity\", \"passed\": true}, {\"check\": \"negative deaths rejected\", \"actual\": [-0.01, -0.01005025], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"negative deaths actuarial\", \"actual\": [-0.02, -0.02040816], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"zero exposure rejected\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"unknown method\", \"actual\": \"unknown method\", \"expected\": \"unknown method\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.197,"exit_code":0,"observations":[{"actual":[0.00868011,0.0086426],"check":"udd typical","expected":[0.00868011,0.0086426],"passed":true},{"actual":[0.01258581,0.01250694],"check":"cfm typical","expected":[0.01258581,0.01250694],"passed":true},{"actual":[0.01653905,0.01626996],"check":"actuarial typical","expected":[0.01653905,0.01626996],"passed":true},{"actual":[0.775,0.55855856],"check":"udd high rate","expected":[0.775,0.55855856],"passed":true},{"actual":[2.0,1.0],"check":"udd rate exactly one","expected":[2.0,1.0],"passed":true},{"actual":"rate exceeds unity","check":"udd rate above one","expected":"rate exceeds unity","passed":true},{"actual":"invalid","check":"negative deaths rejected","expected":"invalid","passed":true},{"actual":"invalid","check":"negative deaths actuarial","expected":"invalid","passed":true},{"actual":"invalid","check":"zero exposure rejected","expected":"invalid","passed":true},{"actual":"unknown method","check":"unknown method","expected":"unknown method","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"udd typical\", \"actual\": [0.00868011, 0.0086426], \"expected\": [0.00868011, 0.0086426], \"passed\": true}, {\"check\": \"cfm typical\", \"actual\": [0.01258581, 0.01250694], \"expected\": [0.01258581, 0.01250694], \"passed\": true}, {\"check\": \"actuarial typical\", \"actual\": [0.01653905, 0.01626996], \"expected\": [0.01653905, 0.01626996], \"passed\": true}, {\"check\": \"udd high rate\", \"actual\": [0.775, 0.55855856], \"expected\": [0.775, 0.55855856], \"passed\": true}, {\"check\": \"udd rate exactly one\", \"actual\": [2.0, 1.0], \"expected\": [2.0, 1.0], \"passed\": true}, {\"check\": \"udd rate above one\", \"actual\": \"rate exceeds unity\", \"expected\": \"rate exceeds unity\", \"passed\": true}, {\"check\": \"negative deaths rejected\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"negative deaths actuarial\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"zero exposure rejected\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"unknown method\", \"actual\": \"unknown method\", \"expected\": \"unknown method\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}