{"abstract":"The in-force count only declines by deaths.","category":"Actuarial life tables","checks":9,"contract":"Input qd, qw (associated single-decrement rates per 100000, equal lengths else 'length mismatch'), timing udd|eoy, radix. UDD in each decrement: q(d)=q'd(1-q'w/2), q(w)=q'w(1-q'd/2). eoy (lapses at year end): q(d)=q'd, q(w)=(1-q'd)q'w. Each year counts are rounded half-up and subtracted from l. Return [[deaths, lapses] per year, final l].","contract_signature":"x","evaluation_group":"w2-actuarial_life_tables-multiple-decrement","failed_approach":"Recomputing survivors from exact rates disagrees with the rounded counts.","family":"w2-actuarial_life_tables-multiple-decrement-survivor-update","id":"FA-63731","implementations":{"attempt":{"sha256":"6ec40d269cd374873eb3e2f10f226af187ea79da3ef0b8f247609ef3fb63acd5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    if len(x['qd'])!=len(x['qw']): return 'length mismatch'\n    l=x['radix']; out=[]\n    for qd,qw in zip(x['qd'],x['qw']):\n        qd=Fraction(qd,100000); qw=Fraction(qw,100000)\n        if x['timing']=='udd':\n            a=qd*(1-qw/2); b=qw*(1-qd/2)\n        else:\n            a=qd; b=(1-qd)*qw\n        dd=math.floor(l*a+Fraction(1,2)); ww=math.floor(l*b+Fraction(1,2))\n        out.append([dd,ww]); l=math.floor(l*(1-a-b)+Fraction(1,2))\n    return [out,l]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['udd decrement table 0', {'qd': [1141, 1494, 1970, 2562, 3342], 'qw': [11888, 13297, 3547, 10964, 8496], 'timing': 'udd', 'radix': 37055}, [[[398, 4380], [450, 4260], [533, 968], [631, 2821], [724, 1889]], 20001]], ['udd decrement table 1', {'qd': [1456, 1926, 2551, 3360], 'qw': [9249, 5186, 14177, 11845], 'timing': 'udd', 'radix': 76371}, [[[1061, 7012], [1281, 3508], [1505, 8889], [1679, 6186]], 45250]], ['eoy decrement table 2', {'qd': [1176, 1554, 2037], 'qw': [5555, 4516, 10904], 'timing': 'eoy', 'radix': 17793}, [[[209, 977], [258, 738], [318, 1668]], 13625]], ['eoy decrement table 3', {'qd': [914, 1233, 1614, 2119, 2784, 3651], 'qw': [10472, 5562, 3304, 9768, 14288, 3207], 'timing': 'eoy', 'radix': 55727}, [[[509, 5782], [610, 2716], [744, 1499], [930, 4194], [1079, 5381], [1179, 998]], 30106]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10007}, [[[1601, 3603], [1081, 2041]], 1681]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10007}, [[[2001, 3202], [1441, 1681]], 1682]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [1238, 1628, 2136, 2796, 3668, 4778, 6251, 8129], 'qw': [3279, 5982, 12121, 4971, 8271, 12739, 8017, 14793], 'timing': 'udd', 'radix': 100000}, [[[1218, 3259], [1509, 5668], [1773, 10594], [2072, 3724], [2468, 5698], [2774, 7712], [3092, 4002], [3345, 6306]], 34786]]], [['udd decrement table 0', {'qd': [930, 1213, 1603], 'qw': [13393, 10163, 5206], 'timing': 'udd', 'radix': 54431}, [[[472, 7256], [538, 4718], [647, 2140]], 38660]], ['udd decrement table 1', {'qd': [755, 1006, 1311, 1719], 'qw': [10661, 14309, 10319, 6918], 'timing': 'udd', 'radix': 33489}, [[[239, 3557], [277, 4227], [313, 2582], [370, 1529]], 20395]], ['eoy decrement table 2', {'qd': [1190, 1564, 2044, 2694, 3536, 4612], 'qw': [4523, 14857, 3747, 14471, 13570, 14825], 'timing': 'eoy', 'radix': 14539}, [[[173, 650], [215, 2006], [235, 422], [292, 1526], [319, 1181], [347, 1063]], 6110]], ['eoy decrement table 3', {'qd': [1410, 1864, 2446], 'qw': [11121, 9322, 11894], 'timing': 'eoy', 'radix': 40451}, [[[570, 4435], [661, 3243], [772, 3660]], 27110]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10014}, [[[1602, 3605], [1082, 2043]], 1682]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10014}, [[[2003, 3204], [1442, 1682]], 1683]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [828, 1080, 1427, 1896, 2502, 3265, 4277, 5590], 'qw': [6711, 4424, 4588, 10512, 13157, 5312, 3373, 8767], 'timing': 'udd', 'radix': 100000}, [[[800, 6683], [977, 4071], [1220, 3984], [1478, 8566], [1688, 9383], [1944, 3195], [2355, 1849], [2769, 4415]], 44623]]], [['udd decrement table 0', {'qd': [1079, 1440, 1900, 2490], 'qw': [12382, 12480, 9166, 14124], 'timing': 'udd', 'radix': 97739}, [[[989, 12037], [1144, 10496], [1325, 6634], [1507, 9082]], 54525]], ['udd decrement table 1', {'qd': [926, 1207, 1573, 2050], 'qw': [5818, 14108, 5594, 7476], 'timing': 'udd', 'radix': 58255}, [[[524, 3374], [610, 7622], [705, 2560], [846, 3171]], 38843]], ['eoy decrement table 2', {'qd': [1496, 1992, 2610, 3423], 'qw': [7077, 5443, 10634, 8058], 'timing': 'eoy', 'radix': 97309}, [[[1456, 6784], [1774, 4751], [2154, 8549], [2459, 5591]], 63791]], ['eoy decrement table 3', {'qd': [1123, 1473, 1932], 'qw': [9193, 3282, 4474], 'timing': 'eoy', 'radix': 99825}, [[[1121, 9074], [1320, 2898], [1650, 3748]], 80014]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10021}, [[[1603, 3608], [1082, 2044]], 1684]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10021}, [[[2004, 3207], [1443, 1684]], 1683]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [1439, 1878, 2462, 3201, 4200, 5488, 7157, 9346], 'qw': [9710, 12625, 8404, 8046, 3063, 8590, 14798, 7301], 'timing': 'udd', 'radix': 100000}, [[[1369, 9640], [1566, 11130], [1799, 6333], [2094, 5397], [2509, 1819], [2959, 4707], [3226, 6946], [3467, 2680]], 32359]]], [['udd decrement table 0', {'qd': [529, 709, 958], 'qw': [13843, 8215, 5302], 'timing': 'udd', 'radix': 93791}, [[[462, 12949], [546, 6580], [683, 3865]], 68706]], ['udd decrement table 1', {'qd': [846, 1101, 1460, 1909, 2488, 3271], 'qw': [8145, 7576, 8774, 6560, 7393, 6414], 'timing': 'udd', 'radix': 15725}, [[[128, 1275], [152, 1079], [183, 1140], [217, 765], [258, 787], [308, 615]], 8818]], ['eoy decrement table 2', {'qd': [940, 1250, 1628], 'qw': [8737, 12691, 6270], 'timing': 'eoy', 'radix': 35371}, [[[332, 3061], [400, 4008], [449, 1700]], 25421]], ['eoy decrement table 3', {'qd': [649, 890, 1181, 1569, 2056], 'qw': [3329, 10015, 13961, 3880, 4359], 'timing': 'eoy', 'radix': 51217}, [[[332, 1694], [438, 4883], [518, 6052], [585, 1425], [726, 1507]], 33057]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10028}, [[[1604, 3610], [1083, 2046]], 1685]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10028}, [[[2006, 3209], [1444, 1685]], 1684]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [1103, 1461, 1917, 2496, 3281, 4301, 5597, 7311], 'qw': [12505, 9020, 5190, 7658, 5537, 11768, 6537, 14241], 'timing': 'udd', 'radix': 100000}, [[[1034, 12436], [1207, 7748], [1449, 3988], [1732, 5455], [2072, 3537], [2402, 6833], [2713, 3184], [3002, 6066]], 35142]]], [['udd decrement table 0', {'qd': [507, 663, 903, 1187, 1545, 2051], 'qw': [8115, 12097, 11178, 14750, 10909, 8914], 'timing': 'udd', 'radix': 91817}, [[[447, 7432], [523, 10120], [625, 8156], [709, 9459], [794, 5883], [934, 4206]], 42529]], ['udd decrement table 1', {'qd': [908, 1197, 1597, 2118, 2774], 'qw': [5334, 8356, 12199, 5950, 3708], 'timing': 'udd', 'radix': 44847}, [[[396, 2381], [483, 3494], [571, 4610], [676, 1938], [825, 1108]], 28365]], ['eoy decrement table 2', {'qd': [731, 983, 1287, 1699, 2237, 2954], 'qw': [13569, 10174, 10715, 12076, 6449, 3074], 'timing': 'eoy', 'radix': 91077}, [[[666, 12268], [768, 7872], [895, 7351], [1041, 7272], [1184, 3338], [1430, 1445]], 45547]], ['eoy decrement table 3', {'qd': [883, 1167, 1548], 'qw': [3198, 5134, 5923], 'timing': 'eoy', 'radix': 23497}, [[[207, 745], [263, 1144], [327, 1233]], 19578]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10035}, [[[1606, 3613], [1084, 2047]], 1685]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10035}, [[[2007, 3211], [1445, 1686]], 1686]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [1256, 1663, 2199, 2866, 3731, 4859, 6351, 8258], 'qw': [8556, 10289, 12789, 3526, 8367, 5298, 13350, 9941], 'timing': 'udd', 'radix': 100000}, [[[1202, 8502], [1424, 9213], [1640, 10076], [1913, 2361], [2276, 5228], [2657, 2903], [2999, 6541], [3223, 3914]], 33928]]]]\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":"90884c254f898b72e6beb05ca171d069f3f5360d5ccc89a842065572e1ff2881","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    if len(x['qd'])!=len(x['qw']): return 'length mismatch'\n    l=x['radix']; out=[]\n    for qd,qw in zip(x['qd'],x['qw']):\n        qd=Fraction(qd,100000); qw=Fraction(qw,100000)\n        if x['timing']=='udd':\n            a=qd*(1-qw/2); b=qw*(1-qd/2)\n        else:\n            a=qd; b=(1-qd)*qw\n        dd=math.floor(l*a+Fraction(1,2)); ww=math.floor(l*b+Fraction(1,2))\n        out.append([dd,ww]); l=l-dd\n    return [out,l]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['udd decrement table 0', {'qd': [1141, 1494, 1970, 2562, 3342], 'qw': [11888, 13297, 3547, 10964, 8496], 'timing': 'udd', 'radix': 37055}, [[[398, 4380], [450, 4260], [533, 968], [631, 2821], [724, 1889]], 20001]], ['udd decrement table 1', {'qd': [1456, 1926, 2551, 3360], 'qw': [9249, 5186, 14177, 11845], 'timing': 'udd', 'radix': 76371}, [[[1061, 7012], [1281, 3508], [1505, 8889], [1679, 6186]], 45250]], ['eoy decrement table 2', {'qd': [1176, 1554, 2037], 'qw': [5555, 4516, 10904], 'timing': 'eoy', 'radix': 17793}, [[[209, 977], [258, 738], [318, 1668]], 13625]], ['eoy decrement table 3', {'qd': [914, 1233, 1614, 2119, 2784, 3651], 'qw': [10472, 5562, 3304, 9768, 14288, 3207], 'timing': 'eoy', 'radix': 55727}, [[[509, 5782], [610, 2716], [744, 1499], [930, 4194], [1079, 5381], [1179, 998]], 30106]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10007}, [[[1601, 3603], [1081, 2041]], 1681]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10007}, [[[2001, 3202], [1441, 1681]], 1682]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [1238, 1628, 2136, 2796, 3668, 4778, 6251, 8129], 'qw': [3279, 5982, 12121, 4971, 8271, 12739, 8017, 14793], 'timing': 'udd', 'radix': 100000}, [[[1218, 3259], [1509, 5668], [1773, 10594], [2072, 3724], [2468, 5698], [2774, 7712], [3092, 4002], [3345, 6306]], 34786]]], [['udd decrement table 0', {'qd': [930, 1213, 1603], 'qw': [13393, 10163, 5206], 'timing': 'udd', 'radix': 54431}, [[[472, 7256], [538, 4718], [647, 2140]], 38660]], ['udd decrement table 1', {'qd': [755, 1006, 1311, 1719], 'qw': [10661, 14309, 10319, 6918], 'timing': 'udd', 'radix': 33489}, [[[239, 3557], [277, 4227], [313, 2582], [370, 1529]], 20395]], ['eoy decrement table 2', {'qd': [1190, 1564, 2044, 2694, 3536, 4612], 'qw': [4523, 14857, 3747, 14471, 13570, 14825], 'timing': 'eoy', 'radix': 14539}, [[[173, 650], [215, 2006], [235, 422], [292, 1526], [319, 1181], [347, 1063]], 6110]], ['eoy decrement table 3', {'qd': [1410, 1864, 2446], 'qw': [11121, 9322, 11894], 'timing': 'eoy', 'radix': 40451}, [[[570, 4435], [661, 3243], [772, 3660]], 27110]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10014}, [[[1602, 3605], [1082, 2043]], 1682]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10014}, [[[2003, 3204], [1442, 1682]], 1683]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [828, 1080, 1427, 1896, 2502, 3265, 4277, 5590], 'qw': [6711, 4424, 4588, 10512, 13157, 5312, 3373, 8767], 'timing': 'udd', 'radix': 100000}, [[[800, 6683], [977, 4071], [1220, 3984], [1478, 8566], [1688, 9383], [1944, 3195], [2355, 1849], [2769, 4415]], 44623]]], [['udd decrement table 0', {'qd': [1079, 1440, 1900, 2490], 'qw': [12382, 12480, 9166, 14124], 'timing': 'udd', 'radix': 97739}, [[[989, 12037], [1144, 10496], [1325, 6634], [1507, 9082]], 54525]], ['udd decrement table 1', {'qd': [926, 1207, 1573, 2050], 'qw': [5818, 14108, 5594, 7476], 'timing': 'udd', 'radix': 58255}, [[[524, 3374], [610, 7622], [705, 2560], [846, 3171]], 38843]], ['eoy decrement table 2', {'qd': [1496, 1992, 2610, 3423], 'qw': [7077, 5443, 10634, 8058], 'timing': 'eoy', 'radix': 97309}, [[[1456, 6784], [1774, 4751], [2154, 8549], [2459, 5591]], 63791]], ['eoy decrement table 3', {'qd': [1123, 1473, 1932], 'qw': [9193, 3282, 4474], 'timing': 'eoy', 'radix': 99825}, [[[1121, 9074], [1320, 2898], [1650, 3748]], 80014]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10021}, [[[1603, 3608], [1082, 2044]], 1684]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10021}, [[[2004, 3207], [1443, 1684]], 1683]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [1439, 1878, 2462, 3201, 4200, 5488, 7157, 9346], 'qw': [9710, 12625, 8404, 8046, 3063, 8590, 14798, 7301], 'timing': 'udd', 'radix': 100000}, [[[1369, 9640], [1566, 11130], [1799, 6333], [2094, 5397], [2509, 1819], [2959, 4707], [3226, 6946], [3467, 2680]], 32359]]], [['udd decrement table 0', {'qd': [529, 709, 958], 'qw': [13843, 8215, 5302], 'timing': 'udd', 'radix': 93791}, [[[462, 12949], [546, 6580], [683, 3865]], 68706]], ['udd decrement table 1', {'qd': [846, 1101, 1460, 1909, 2488, 3271], 'qw': [8145, 7576, 8774, 6560, 7393, 6414], 'timing': 'udd', 'radix': 15725}, [[[128, 1275], [152, 1079], [183, 1140], [217, 765], [258, 787], [308, 615]], 8818]], ['eoy decrement table 2', {'qd': [940, 1250, 1628], 'qw': [8737, 12691, 6270], 'timing': 'eoy', 'radix': 35371}, [[[332, 3061], [400, 4008], [449, 1700]], 25421]], ['eoy decrement table 3', {'qd': [649, 890, 1181, 1569, 2056], 'qw': [3329, 10015, 13961, 3880, 4359], 'timing': 'eoy', 'radix': 51217}, [[[332, 1694], [438, 4883], [518, 6052], [585, 1425], [726, 1507]], 33057]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10028}, [[[1604, 3610], [1083, 2046]], 1685]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10028}, [[[2006, 3209], [1444, 1685]], 1684]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [1103, 1461, 1917, 2496, 3281, 4301, 5597, 7311], 'qw': [12505, 9020, 5190, 7658, 5537, 11768, 6537, 14241], 'timing': 'udd', 'radix': 100000}, [[[1034, 12436], [1207, 7748], [1449, 3988], [1732, 5455], [2072, 3537], [2402, 6833], [2713, 3184], [3002, 6066]], 35142]]], [['udd decrement table 0', {'qd': [507, 663, 903, 1187, 1545, 2051], 'qw': [8115, 12097, 11178, 14750, 10909, 8914], 'timing': 'udd', 'radix': 91817}, [[[447, 7432], [523, 10120], [625, 8156], [709, 9459], [794, 5883], [934, 4206]], 42529]], ['udd decrement table 1', {'qd': [908, 1197, 1597, 2118, 2774], 'qw': [5334, 8356, 12199, 5950, 3708], 'timing': 'udd', 'radix': 44847}, [[[396, 2381], [483, 3494], [571, 4610], [676, 1938], [825, 1108]], 28365]], ['eoy decrement table 2', {'qd': [731, 983, 1287, 1699, 2237, 2954], 'qw': [13569, 10174, 10715, 12076, 6449, 3074], 'timing': 'eoy', 'radix': 91077}, [[[666, 12268], [768, 7872], [895, 7351], [1041, 7272], [1184, 3338], [1430, 1445]], 45547]], ['eoy decrement table 3', {'qd': [883, 1167, 1548], 'qw': [3198, 5134, 5923], 'timing': 'eoy', 'radix': 23497}, [[[207, 745], [263, 1144], [327, 1233]], 19578]], ['high lapse udd', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'udd', 'radix': 10035}, [[[1606, 3613], [1084, 2047]], 1685]], ['high lapse year-end', {'qd': [20000, 30000], 'qw': [40000, 50000], 'timing': 'eoy', 'radix': 10035}, [[[2007, 3211], [1445, 1686]], 1686]], ['length mismatch', {'qd': [1000, 2000, 3000], 'qw': [5000, 6000], 'timing': 'udd', 'radix': 1000}, 'length mismatch'], ['lapse list longer', {'qd': [1000], 'qw': [5000, 6000], 'timing': 'eoy', 'radix': 1000}, 'length mismatch'], ['long udd table', {'qd': [1256, 1663, 2199, 2866, 3731, 4859, 6351, 8258], 'qw': [8556, 10289, 12789, 3526, 8367, 5298, 13350, 9941], 'timing': 'udd', 'radix': 100000}, [[[1202, 8502], [1424, 9213], [1640, 10076], [1913, 2361], [2276, 5228], [2657, 2903], [2999, 6541], [3223, 3914]], 33928]]]]\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-multiple-decrement-survivor-update","generated_at":"2026-09-29T14:47:17.184881+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.","root_cause":"Lapse counts are not subtracted.","sha256":"3ef5dc6af10ccbe8ae4e2bf5e56b6c9c7d397273aa8f6111d762b9a304d00183","title":"Double-decrement death and lapse table: Lapses are not removed from the in-force count · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":46.709,"exit_code":1,"observations":[{"actual":[[[398,4380],[450,4260],[533,968],[631,2821],[724,1889]],20000],"check":"udd decrement table 0","expected":[[[398,4380],[450,4260],[533,968],[631,2821],[724,1889]],20001],"passed":false},{"actual":[[[1061,7012],[1281,3508],[1505,8889],[1679,6186]],45250],"check":"udd decrement table 1","expected":[[[1061,7012],[1281,3508],[1505,8889],[1679,6186]],45250],"passed":true},{"actual":[[[209,977],[258,738],[318,1668]],13625],"check":"eoy decrement table 2","expected":[[[209,977],[258,738],[318,1668]],13625],"passed":true},{"actual":[[[509,5782],[610,2716],[744,1499],[930,4194],[1079,5381],[1179,998]],30107],"check":"eoy decrement table 3","expected":[[[509,5782],[610,2716],[744,1499],[930,4194],[1079,5381],[1179,998]],30106],"passed":false},{"actual":[[[1601,3603],[1081,2041]],1681],"check":"high lapse udd","expected":[[[1601,3603],[1081,2041]],1681],"passed":true},{"actual":[[[2001,3202],[1441,1681]],1681],"check":"high lapse year-end","expected":[[[2001,3202],[1441,1681]],1682],"passed":false},{"actual":"length mismatch","check":"length mismatch","expected":"length mismatch","passed":true},{"actual":"length mismatch","check":"lapse list longer","expected":"length mismatch","passed":true},{"actual":[[[1218,3259],[1509,5668],[1773,10594],[2072,3724],[2468,5699],[2775,7712],[3092,4002],[3345,6307]],34787],"check":"long udd table","expected":[[[1218,3259],[1509,5668],[1773,10594],[2072,3724],[2468,5698],[2774,7712],[3092,4002],[3345,6306]],34786],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"udd decrement table 0\", \"actual\": [[[398, 4380], [450, 4260], [533, 968], [631, 2821], [724, 1889]], 20000], \"expected\": [[[398, 4380], [450, 4260], [533, 968], [631, 2821], [724, 1889]], 20001], \"passed\": false}, {\"check\": \"udd decrement table 1\", \"actual\": [[[1061, 7012], [1281, 3508], [1505, 8889], [1679, 6186]], 45250], \"expected\": [[[1061, 7012], [1281, 3508], [1505, 8889], [1679, 6186]], 45250], \"passed\": true}, {\"check\": \"eoy decrement table 2\", \"actual\": [[[209, 977], [258, 738], [318, 1668]], 13625], \"expected\": [[[209, 977], [258, 738], [318, 1668]], 13625], \"passed\": true}, {\"check\": \"eoy decrement table 3\", \"actual\": [[[509, 5782], [610, 2716], [744, 1499], [930, 4194], [1079, 5381], [1179, 998]], 30107], \"expected\": [[[509, 5782], [610, 2716], [744, 1499], [930, 4194], [1079, 5381], [1179, 998]], 30106], \"passed\": false}, {\"check\": \"high lapse udd\", \"actual\": [[[1601, 3603], [1081, 2041]], 1681], \"expected\": [[[1601, 3603], [1081, 2041]], 1681], \"passed\": true}, {\"check\": \"high lapse year-end\", \"actual\": [[[2001, 3202], [1441, 1681]], 1681], \"expected\": [[[2001, 3202], [1441, 1681]], 1682], \"passed\": false}, {\"check\": \"length mismatch\", \"actual\": \"length mismatch\", \"expected\": \"length mismatch\", \"passed\": true}, {\"check\": \"lapse list longer\", \"actual\": \"length mismatch\", \"expected\": \"length mismatch\", \"passed\": true}, {\"check\": \"long udd table\", \"actual\": [[[1218, 3259], [1509, 5668], [1773, 10594], [2072, 3724], [2468, 5699], [2775, 7712], [3092, 4002], [3345, 6307]], 34787], \"expected\": [[[1218, 3259], [1509, 5668], [1773, 10594], [2072, 3724], [2468, 5698], [2774, 7712], [3092, 4002], [3345, 6306]], 34786], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.016,"exit_code":1,"observations":[{"actual":[[[398,4380],[511,4838],[699,1269],[858,3837],[1107,2890]],33482],"check":"udd decrement table 0","expected":[[[398,4380],[450,4260],[533,968],[631,2821],[724,1889]],20001],"passed":false},{"actual":[[[1061,7012],[1413,3868],[1751,10343],[2281,8402]],69865],"check":"udd decrement table 1","expected":[[[1061,7012],[1281,3508],[1505,8889],[1679,6186]],45250],"passed":false},{"actual":[[[209,977],[273,782],[353,1849]],16958],"check":"eoy decrement table 2","expected":[[[209,977],[258,738],[318,1668]],13625],"passed":false},{"actual":[[[509,5782],[681,3033],[880,1773],[1137,5130],[1462,7295],[1864,1578]],49194],"check":"eoy decrement table 3","expected":[[[509,5782],[610,2716],[744,1499],[930,4194],[1079,5381],[1179,998]],30106],"passed":false},{"actual":[[[1601,3603],[1891,3573]],6515],"check":"high lapse udd","expected":[[[1601,3603],[1081,2041]],1681],"passed":false},{"actual":[[[2001,3202],[2402,2802]],5604],"check":"high lapse year-end","expected":[[[2001,3202],[1441,1681]],1682],"passed":false},{"actual":"length mismatch","check":"length mismatch","expected":"length mismatch","passed":true},{"actual":"length mismatch","check":"lapse list longer","expected":"length mismatch","passed":true},{"actual":[[[1218,3259],[1560,5861],[1951,11658],[2598,4670],[3259,7524],[4000,11118],[5125,6634],[6044,11394]],74245],"check":"long udd table","expected":[[[1218,3259],[1509,5668],[1773,10594],[2072,3724],[2468,5698],[2774,7712],[3092,4002],[3345,6306]],34786],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"udd decrement table 0\", \"actual\": [[[398, 4380], [511, 4838], [699, 1269], [858, 3837], [1107, 2890]], 33482], \"expected\": [[[398, 4380], [450, 4260], [533, 968], [631, 2821], [724, 1889]], 20001], \"passed\": false}, {\"check\": \"udd decrement table 1\", \"actual\": [[[1061, 7012], [1413, 3868], [1751, 10343], [2281, 8402]], 69865], \"expected\": [[[1061, 7012], [1281, 3508], [1505, 8889], [1679, 6186]], 45250], \"passed\": false}, {\"check\": \"eoy decrement table 2\", \"actual\": [[[209, 977], [273, 782], [353, 1849]], 16958], \"expected\": [[[209, 977], [258, 738], [318, 1668]], 13625], \"passed\": false}, {\"check\": \"eoy decrement table 3\", \"actual\": [[[509, 5782], [681, 3033], [880, 1773], [1137, 5130], [1462, 7295], [1864, 1578]], 49194], \"expected\": [[[509, 5782], [610, 2716], [744, 1499], [930, 4194], [1079, 5381], [1179, 998]], 30106], \"passed\": false}, {\"check\": \"high lapse udd\", \"actual\": [[[1601, 3603], [1891, 3573]], 6515], \"expected\": [[[1601, 3603], [1081, 2041]], 1681], \"passed\": false}, {\"check\": \"high lapse year-end\", \"actual\": [[[2001, 3202], [2402, 2802]], 5604], \"expected\": [[[2001, 3202], [1441, 1681]], 1682], \"passed\": false}, {\"check\": \"length mismatch\", \"actual\": \"length mismatch\", \"expected\": \"length mismatch\", \"passed\": true}, {\"check\": \"lapse list longer\", \"actual\": \"length mismatch\", \"expected\": \"length mismatch\", \"passed\": true}, {\"check\": \"long udd table\", \"actual\": [[[1218, 3259], [1560, 5861], [1951, 11658], [2598, 4670], [3259, 7524], [4000, 11118], [5125, 6634], [6044, 11394]], 74245], \"expected\": [[[1218, 3259], [1509, 5668], [1773, 10594], [2072, 3724], [2468, 5698], [2774, 7712], [3092, 4002], [3345, 6306]], 34786], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}