{"abstract":"Every expectation is short by the current year's person-years.","category":"Actuarial life tables","checks":8,"contract":"Input l (survivors by age, last entry is the open interval) and m_open (per mille central rate of the open interval, <=0 -> 'invalid open rate'). L_x = l_{x+1} + d_x/2, L_open = l_open/m, T_x = sum of L from x, e_x = T_x/l_x rounded to 4 places (None where l_x=0).","evaluation_group":"w2-actuarial_life_tables-lifetable-columns","failed_approach":"Subtracting half of L_x is still not the full tail.","family":"w2-actuarial_life_tables-lifetable-columns-tail-accumulation","id":"FA-63376","implementations":{"attempt":{"sha256":"2921e4e94bae09e1be48d6daca2fffb115f6baf4342762c4182f6e555f100ec6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    l=x['l']; m=Fraction(x['m_open'],1000)\n    if m<=0: return 'invalid open rate'\n    L=[]\n    for i in range(len(l)-1):\n        d=l[i]-l[i+1]\n        L.append(l[i+1]+Fraction(d,2))\n    L.append(l[-1]/m)\n    T=[]; acc=Fraction(0)\n    for v in reversed(L):\n        acc+=v; T.append(acc-v/2)\n    T.reverse()\n    return [round(float(T[i]/l[i]),4) if l[i] else None for i in range(len(l))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['table 0', {'l': [100000, 99736, 99400, 99024, 98587, 98055, 97450, 96745], 'm_open': 800}, [8.1156, 7.1357, 6.1581, 5.1796, 4.2004, 3.2205, 2.2373, 1.25]], ['table 1', {'l': [100000, 99688, 99329, 98881, 98385, 97779, 97092], 'm_open': 250}, [9.8098, 8.8389, 7.869, 6.9024, 5.9347, 4.9684, 4.0]], ['table 2', {'l': [100000, 99380, 98687, 97892, 96992, 95970, 94815, 93535], 'm_open': 400}, [9.1434, 8.1973, 7.2514, 6.3062, 5.3601, 4.4118, 3.4595, 2.5]], ['table 3', {'l': [100000, 99494, 98897, 98225, 97474, 96626], 'm_open': 250}, [8.7891, 7.8312, 6.8755, 5.9191, 4.9609, 4.0]], ['table 4', {'l': [100000, 99458, 98844, 98161, 97382, 96516], 'm_open': 800}, [6.1275, 5.1581, 4.1871, 3.2127, 2.2344, 1.25]], ['extinct before open interval', {'l': [1000, 601, 200, 0], 'm_open': 500}, [1.301, 0.8328, 0.5, None]], ['two-age table', {'l': [5000, 1001], 'm_open': 1000}, [0.8003, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99580, 99059, 98462, 97802], 'm_open': 500}, [5.9161, 4.9389, 3.9622, 2.9832, 2.0]], ['table 1', {'l': [100000, 99560, 99034, 98428, 97736], 'm_open': 400}, [6.4023, 5.4284, 4.4546, 3.4789, 2.5]], ['table 2', {'l': [100000, 99658, 99276, 98811, 98264, 97604], 'm_open': 800}, [6.1682, 5.1876, 4.2056, 3.2231, 2.2382, 1.25]], ['table 3', {'l': [100000, 99474, 98827, 98088], 'm_open': 250}, [6.897, 5.9308, 4.9664, 4.0]], ['table 4', {'l': [100000, 99385, 98714, 97935, 97044], 'm_open': 400}, [6.3717, 5.408, 4.4414, 3.4727, 2.5]], ['extinct before open interval', {'l': [1000, 602, 200, 0], 'm_open': 500}, [1.302, 0.8322, 0.5, None]], ['two-age table', {'l': [5000, 1002], 'm_open': 1000}, [0.8006, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99748, 99427, 99064, 98638], 'm_open': 800}, [5.2086, 4.2205, 3.2325, 2.2425, 1.25]], ['table 1', {'l': [100000, 99540, 98977, 98365, 97658], 'm_open': 500}, [5.9103, 4.9353, 3.9605, 2.982, 2.0]], ['table 2', {'l': [100000, 99695, 99290, 98834, 98304], 'm_open': 500}, [5.9358, 4.9524, 3.9706, 2.9866, 2.0]], ['table 3', {'l': [100000, 99416, 98740, 97979, 97117, 96159], 'm_open': 250}, [8.7597, 7.8082, 6.8582, 5.9076, 4.9556, 4.0]], ['table 4', {'l': [100000, 99727, 99393, 98994, 98502, 97935, 97305], 'm_open': 800}, [7.1483, 6.1665, 5.1856, 4.2045, 3.223, 2.2387, 1.25]], ['extinct before open interval', {'l': [1000, 603, 200, 0], 'm_open': 500}, [1.303, 0.8317, 0.5, None]], ['two-age table', {'l': [5000, 1003], 'm_open': 1000}, [0.8009, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99373, 98660, 97828, 96893], 'm_open': 400}, [6.3654, 5.4024, 4.4378, 3.4713, 2.5]], ['table 1', {'l': [100000, 99504, 98936, 98264], 'm_open': 500}, [4.941, 3.9631, 2.983, 2.0]], ['table 2', {'l': [100000, 99438, 98785, 98036, 97220, 96288, 95262, 94105], 'm_open': 500}, [8.7029, 7.7493, 6.7972, 5.8453, 4.8902, 3.9327, 2.9696, 2.0]], ['table 3', {'l': [100000, 99509, 98902, 98199, 97416, 96521, 95521], 'm_open': 250}, [9.7039, 8.7493, 7.8, 6.8522, 5.9033, 4.9534, 4.0]], ['table 4', {'l': [100000, 99565, 99005, 98381, 97680], 'm_open': 250}, [7.8651, 6.8973, 5.9335, 4.9679, 4.0]], ['extinct before open interval', {'l': [1000, 604, 200, 0], 'm_open': 500}, [1.304, 0.8311, 0.5, None]], ['two-age table', {'l': [5000, 1004], 'm_open': 1000}, [0.8012, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99457, 98786, 98018, 97163, 96196, 95080, 93823], 'm_open': 250}, [10.569, 9.624, 8.686, 7.7501, 6.8139, 5.8774, 4.9405, 4.0]], ['table 1', {'l': [100000, 99396, 98710, 97875, 96955], 'm_open': 250}, [7.8228, 6.8673, 5.9115, 4.9577, 4.0]], ['table 2', {'l': [100000, 99541, 99001, 98405], 'm_open': 500}, [4.9455, 3.966, 2.9849, 2.0]], ['table 3', {'l': [100000, 99775, 99473, 99125, 98710, 98213, 97648], 'm_open': 250}, [9.8471, 8.8682, 7.8936, 6.9196, 5.9466, 4.9741, 4.0]], ['table 4', {'l': [100000, 99459, 98858, 98167, 97346, 96409], 'm_open': 800}, [6.1255, 5.1561, 4.1844, 3.2103, 2.2332, 1.25]], ['extinct before open interval', {'l': [1000, 605, 200, 0], 'm_open': 500}, [1.305, 0.8306, 0.5, None]], ['two-age table', {'l': [5000, 1005], 'm_open': 1000}, [0.8015, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']]]\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":"268b4a9716ad9afe1371fb48bacb535c2b85cb253c1f1485b1c40c2ed7398ea6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    l=x['l']; m=Fraction(x['m_open'],1000)\n    if m<=0: return 'invalid open rate'\n    L=[]\n    for i in range(len(l)-1):\n        d=l[i]-l[i+1]\n        L.append(l[i+1]+Fraction(d,2))\n    L.append(l[-1]/m)\n    T=[]; acc=Fraction(0)\n    for v in reversed(L):\n        T.append(acc); acc+=v\n    T.reverse()\n    return [round(float(T[i]/l[i]),4) if l[i] else None for i in range(len(l))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['table 0', {'l': [100000, 99736, 99400, 99024, 98587, 98055, 97450, 96745], 'm_open': 800}, [8.1156, 7.1357, 6.1581, 5.1796, 4.2004, 3.2205, 2.2373, 1.25]], ['table 1', {'l': [100000, 99688, 99329, 98881, 98385, 97779, 97092], 'm_open': 250}, [9.8098, 8.8389, 7.869, 6.9024, 5.9347, 4.9684, 4.0]], ['table 2', {'l': [100000, 99380, 98687, 97892, 96992, 95970, 94815, 93535], 'm_open': 400}, [9.1434, 8.1973, 7.2514, 6.3062, 5.3601, 4.4118, 3.4595, 2.5]], ['table 3', {'l': [100000, 99494, 98897, 98225, 97474, 96626], 'm_open': 250}, [8.7891, 7.8312, 6.8755, 5.9191, 4.9609, 4.0]], ['table 4', {'l': [100000, 99458, 98844, 98161, 97382, 96516], 'm_open': 800}, [6.1275, 5.1581, 4.1871, 3.2127, 2.2344, 1.25]], ['extinct before open interval', {'l': [1000, 601, 200, 0], 'm_open': 500}, [1.301, 0.8328, 0.5, None]], ['two-age table', {'l': [5000, 1001], 'm_open': 1000}, [0.8003, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99580, 99059, 98462, 97802], 'm_open': 500}, [5.9161, 4.9389, 3.9622, 2.9832, 2.0]], ['table 1', {'l': [100000, 99560, 99034, 98428, 97736], 'm_open': 400}, [6.4023, 5.4284, 4.4546, 3.4789, 2.5]], ['table 2', {'l': [100000, 99658, 99276, 98811, 98264, 97604], 'm_open': 800}, [6.1682, 5.1876, 4.2056, 3.2231, 2.2382, 1.25]], ['table 3', {'l': [100000, 99474, 98827, 98088], 'm_open': 250}, [6.897, 5.9308, 4.9664, 4.0]], ['table 4', {'l': [100000, 99385, 98714, 97935, 97044], 'm_open': 400}, [6.3717, 5.408, 4.4414, 3.4727, 2.5]], ['extinct before open interval', {'l': [1000, 602, 200, 0], 'm_open': 500}, [1.302, 0.8322, 0.5, None]], ['two-age table', {'l': [5000, 1002], 'm_open': 1000}, [0.8006, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99748, 99427, 99064, 98638], 'm_open': 800}, [5.2086, 4.2205, 3.2325, 2.2425, 1.25]], ['table 1', {'l': [100000, 99540, 98977, 98365, 97658], 'm_open': 500}, [5.9103, 4.9353, 3.9605, 2.982, 2.0]], ['table 2', {'l': [100000, 99695, 99290, 98834, 98304], 'm_open': 500}, [5.9358, 4.9524, 3.9706, 2.9866, 2.0]], ['table 3', {'l': [100000, 99416, 98740, 97979, 97117, 96159], 'm_open': 250}, [8.7597, 7.8082, 6.8582, 5.9076, 4.9556, 4.0]], ['table 4', {'l': [100000, 99727, 99393, 98994, 98502, 97935, 97305], 'm_open': 800}, [7.1483, 6.1665, 5.1856, 4.2045, 3.223, 2.2387, 1.25]], ['extinct before open interval', {'l': [1000, 603, 200, 0], 'm_open': 500}, [1.303, 0.8317, 0.5, None]], ['two-age table', {'l': [5000, 1003], 'm_open': 1000}, [0.8009, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99373, 98660, 97828, 96893], 'm_open': 400}, [6.3654, 5.4024, 4.4378, 3.4713, 2.5]], ['table 1', {'l': [100000, 99504, 98936, 98264], 'm_open': 500}, [4.941, 3.9631, 2.983, 2.0]], ['table 2', {'l': [100000, 99438, 98785, 98036, 97220, 96288, 95262, 94105], 'm_open': 500}, [8.7029, 7.7493, 6.7972, 5.8453, 4.8902, 3.9327, 2.9696, 2.0]], ['table 3', {'l': [100000, 99509, 98902, 98199, 97416, 96521, 95521], 'm_open': 250}, [9.7039, 8.7493, 7.8, 6.8522, 5.9033, 4.9534, 4.0]], ['table 4', {'l': [100000, 99565, 99005, 98381, 97680], 'm_open': 250}, [7.8651, 6.8973, 5.9335, 4.9679, 4.0]], ['extinct before open interval', {'l': [1000, 604, 200, 0], 'm_open': 500}, [1.304, 0.8311, 0.5, None]], ['two-age table', {'l': [5000, 1004], 'm_open': 1000}, [0.8012, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99457, 98786, 98018, 97163, 96196, 95080, 93823], 'm_open': 250}, [10.569, 9.624, 8.686, 7.7501, 6.8139, 5.8774, 4.9405, 4.0]], ['table 1', {'l': [100000, 99396, 98710, 97875, 96955], 'm_open': 250}, [7.8228, 6.8673, 5.9115, 4.9577, 4.0]], ['table 2', {'l': [100000, 99541, 99001, 98405], 'm_open': 500}, [4.9455, 3.966, 2.9849, 2.0]], ['table 3', {'l': [100000, 99775, 99473, 99125, 98710, 98213, 97648], 'm_open': 250}, [9.8471, 8.8682, 7.8936, 6.9196, 5.9466, 4.9741, 4.0]], ['table 4', {'l': [100000, 99459, 98858, 98167, 97346, 96409], 'm_open': 800}, [6.1255, 5.1561, 4.1844, 3.2103, 2.2332, 1.25]], ['extinct before open interval', {'l': [1000, 605, 200, 0], 'm_open': 500}, [1.305, 0.8306, 0.5, None]], ['two-age table', {'l': [5000, 1005], 'm_open': 1000}, [0.8015, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']]]\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":"2af500718da98e43f7fe9edc431212faf190e94ff131872a412a65ab2ba3e543","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    l=x['l']; m=Fraction(x['m_open'],1000)\n    if m<=0: return 'invalid open rate'\n    L=[]\n    for i in range(len(l)-1):\n        d=l[i]-l[i+1]\n        L.append(l[i+1]+Fraction(d,2))\n    L.append(l[-1]/m)\n    T=[]; acc=Fraction(0)\n    for v in reversed(L):\n        acc+=v; T.append(acc)\n    T.reverse()\n    return [round(float(T[i]/l[i]),4) if l[i] else None for i in range(len(l))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['table 0', {'l': [100000, 99736, 99400, 99024, 98587, 98055, 97450, 96745], 'm_open': 800}, [8.1156, 7.1357, 6.1581, 5.1796, 4.2004, 3.2205, 2.2373, 1.25]], ['table 1', {'l': [100000, 99688, 99329, 98881, 98385, 97779, 97092], 'm_open': 250}, [9.8098, 8.8389, 7.869, 6.9024, 5.9347, 4.9684, 4.0]], ['table 2', {'l': [100000, 99380, 98687, 97892, 96992, 95970, 94815, 93535], 'm_open': 400}, [9.1434, 8.1973, 7.2514, 6.3062, 5.3601, 4.4118, 3.4595, 2.5]], ['table 3', {'l': [100000, 99494, 98897, 98225, 97474, 96626], 'm_open': 250}, [8.7891, 7.8312, 6.8755, 5.9191, 4.9609, 4.0]], ['table 4', {'l': [100000, 99458, 98844, 98161, 97382, 96516], 'm_open': 800}, [6.1275, 5.1581, 4.1871, 3.2127, 2.2344, 1.25]], ['extinct before open interval', {'l': [1000, 601, 200, 0], 'm_open': 500}, [1.301, 0.8328, 0.5, None]], ['two-age table', {'l': [5000, 1001], 'm_open': 1000}, [0.8003, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99580, 99059, 98462, 97802], 'm_open': 500}, [5.9161, 4.9389, 3.9622, 2.9832, 2.0]], ['table 1', {'l': [100000, 99560, 99034, 98428, 97736], 'm_open': 400}, [6.4023, 5.4284, 4.4546, 3.4789, 2.5]], ['table 2', {'l': [100000, 99658, 99276, 98811, 98264, 97604], 'm_open': 800}, [6.1682, 5.1876, 4.2056, 3.2231, 2.2382, 1.25]], ['table 3', {'l': [100000, 99474, 98827, 98088], 'm_open': 250}, [6.897, 5.9308, 4.9664, 4.0]], ['table 4', {'l': [100000, 99385, 98714, 97935, 97044], 'm_open': 400}, [6.3717, 5.408, 4.4414, 3.4727, 2.5]], ['extinct before open interval', {'l': [1000, 602, 200, 0], 'm_open': 500}, [1.302, 0.8322, 0.5, None]], ['two-age table', {'l': [5000, 1002], 'm_open': 1000}, [0.8006, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99748, 99427, 99064, 98638], 'm_open': 800}, [5.2086, 4.2205, 3.2325, 2.2425, 1.25]], ['table 1', {'l': [100000, 99540, 98977, 98365, 97658], 'm_open': 500}, [5.9103, 4.9353, 3.9605, 2.982, 2.0]], ['table 2', {'l': [100000, 99695, 99290, 98834, 98304], 'm_open': 500}, [5.9358, 4.9524, 3.9706, 2.9866, 2.0]], ['table 3', {'l': [100000, 99416, 98740, 97979, 97117, 96159], 'm_open': 250}, [8.7597, 7.8082, 6.8582, 5.9076, 4.9556, 4.0]], ['table 4', {'l': [100000, 99727, 99393, 98994, 98502, 97935, 97305], 'm_open': 800}, [7.1483, 6.1665, 5.1856, 4.2045, 3.223, 2.2387, 1.25]], ['extinct before open interval', {'l': [1000, 603, 200, 0], 'm_open': 500}, [1.303, 0.8317, 0.5, None]], ['two-age table', {'l': [5000, 1003], 'm_open': 1000}, [0.8009, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99373, 98660, 97828, 96893], 'm_open': 400}, [6.3654, 5.4024, 4.4378, 3.4713, 2.5]], ['table 1', {'l': [100000, 99504, 98936, 98264], 'm_open': 500}, [4.941, 3.9631, 2.983, 2.0]], ['table 2', {'l': [100000, 99438, 98785, 98036, 97220, 96288, 95262, 94105], 'm_open': 500}, [8.7029, 7.7493, 6.7972, 5.8453, 4.8902, 3.9327, 2.9696, 2.0]], ['table 3', {'l': [100000, 99509, 98902, 98199, 97416, 96521, 95521], 'm_open': 250}, [9.7039, 8.7493, 7.8, 6.8522, 5.9033, 4.9534, 4.0]], ['table 4', {'l': [100000, 99565, 99005, 98381, 97680], 'm_open': 250}, [7.8651, 6.8973, 5.9335, 4.9679, 4.0]], ['extinct before open interval', {'l': [1000, 604, 200, 0], 'm_open': 500}, [1.304, 0.8311, 0.5, None]], ['two-age table', {'l': [5000, 1004], 'm_open': 1000}, [0.8012, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']], [['table 0', {'l': [100000, 99457, 98786, 98018, 97163, 96196, 95080, 93823], 'm_open': 250}, [10.569, 9.624, 8.686, 7.7501, 6.8139, 5.8774, 4.9405, 4.0]], ['table 1', {'l': [100000, 99396, 98710, 97875, 96955], 'm_open': 250}, [7.8228, 6.8673, 5.9115, 4.9577, 4.0]], ['table 2', {'l': [100000, 99541, 99001, 98405], 'm_open': 500}, [4.9455, 3.966, 2.9849, 2.0]], ['table 3', {'l': [100000, 99775, 99473, 99125, 98710, 98213, 97648], 'm_open': 250}, [9.8471, 8.8682, 7.8936, 6.9196, 5.9466, 4.9741, 4.0]], ['table 4', {'l': [100000, 99459, 98858, 98167, 97346, 96409], 'm_open': 800}, [6.1255, 5.1561, 4.1844, 3.2103, 2.2332, 1.25]], ['extinct before open interval', {'l': [1000, 605, 200, 0], 'm_open': 500}, [1.305, 0.8306, 0.5, None]], ['two-age table', {'l': [5000, 1005], 'm_open': 1000}, [0.8015, 1.0]], ['zero open rate rejected', {'l': [100, 50], 'm_open': 0}, 'invalid open rate']]]\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-lifetable-columns-tail-accumulation","generated_at":"2026-09-29T14:47:13.691050+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":"Accumulate L_x into T_x before recording it.","root_cause":"T is appended before adding L_x.","sha256":"8964019de2fc855752bc2f6c29233e0ce19c7f072657b626c80022e709e52771","title":"Life table person-years and expectation: T_x excludes the current age's person-years · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.948,"exit_code":1,"observations":[{"actual":[7.6162,6.6366,5.6591,4.6807,3.7017,2.722,1.7391,0.625],"check":"table 0","expected":[8.1156,7.1357,6.1581,5.1796,4.2004,3.2205,2.2373,1.25],"passed":false},{"actual":[9.3105,8.3398,7.3702,6.4037,5.4362,4.4701,2.0],"check":"table 1","expected":[9.8098,8.8389,7.869,6.9024,5.9347,4.9684,4.0],"passed":false},{"actual":[8.645,7.6991,6.7534,5.8085,4.8627,3.9149,2.9629,1.25],"check":"table 2","expected":[9.1434,8.1973,7.2514,6.3062,5.3601,4.4118,3.4595,2.5],"passed":false},{"actual":[8.2903,7.3327,6.3772,5.421,4.463,2.0],"check":"table 3","expected":[8.7891,7.8312,6.8755,5.9191,4.9609,4.0],"passed":false},{"actual":[5.6288,4.6597,3.6888,2.7147,1.7367,0.625],"check":"table 4","expected":[6.1275,5.1581,4.1871,3.2127,2.2344,1.25],"passed":false},{"actual":[0.9008,0.4996,0.25,null],"check":"extinct before open interval","expected":[1.301,0.8328,0.5,null],"passed":false},{"actual":[0.5002,0.5],"check":"two-age table","expected":[0.8003,1.0],"passed":false},{"actual":"invalid open rate","check":"zero open rate rejected","expected":"invalid open rate","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"table 0\", \"actual\": [7.6162, 6.6366, 5.6591, 4.6807, 3.7017, 2.722, 1.7391, 0.625], \"expected\": [8.1156, 7.1357, 6.1581, 5.1796, 4.2004, 3.2205, 2.2373, 1.25], \"passed\": false}, {\"check\": \"table 1\", \"actual\": [9.3105, 8.3398, 7.3702, 6.4037, 5.4362, 4.4701, 2.0], \"expected\": [9.8098, 8.8389, 7.869, 6.9024, 5.9347, 4.9684, 4.0], \"passed\": false}, {\"check\": \"table 2\", \"actual\": [8.645, 7.6991, 6.7534, 5.8085, 4.8627, 3.9149, 2.9629, 1.25], \"expected\": [9.1434, 8.1973, 7.2514, 6.3062, 5.3601, 4.4118, 3.4595, 2.5], \"passed\": false}, {\"check\": \"table 3\", \"actual\": [8.2903, 7.3327, 6.3772, 5.421, 4.463, 2.0], \"expected\": [8.7891, 7.8312, 6.8755, 5.9191, 4.9609, 4.0], \"passed\": false}, {\"check\": \"table 4\", \"actual\": [5.6288, 4.6597, 3.6888, 2.7147, 1.7367, 0.625], \"expected\": [6.1275, 5.1581, 4.1871, 3.2127, 2.2344, 1.25], \"passed\": false}, {\"check\": \"extinct before open interval\", \"actual\": [0.9008, 0.4996, 0.25, null], \"expected\": [1.301, 0.8328, 0.5, null], \"passed\": false}, {\"check\": \"two-age table\", \"actual\": [0.5002, 0.5], \"expected\": [0.8003, 1.0], \"passed\": false}, {\"check\": \"zero open rate rejected\", \"actual\": \"invalid open rate\", \"expected\": \"invalid open rate\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.394,"exit_code":1,"observations":[{"actual":[7.1169,6.1374,5.16,4.1818,3.2031,2.2235,1.241,0.0],"check":"table 0","expected":[8.1156,7.1357,6.1581,5.1796,4.2004,3.2205,2.2373,1.25],"passed":false},{"actual":[8.8113,7.8407,6.8713,5.9049,4.9378,3.9719,0.0],"check":"table 1","expected":[9.8098,8.8389,7.869,6.9024,5.9347,4.9684,4.0],"passed":false},{"actual":[8.1465,7.2008,6.2554,5.3108,4.3654,3.4179,2.4663,0.0],"check":"table 2","expected":[9.1434,8.1973,7.2514,6.3062,5.3601,4.4118,3.4595,2.5],"passed":false},{"actual":[7.7916,6.8342,5.8789,4.9229,3.9652,0.0],"check":"table 3","expected":[8.7891,7.8312,6.8755,5.9191,4.9609,4.0],"passed":false},{"actual":[5.1302,4.1612,3.1905,2.2167,1.2389,0.0],"check":"table 4","expected":[6.1275,5.1581,4.1871,3.2127,2.2344,1.25],"passed":false},{"actual":[0.5005,0.1664,0.0,null],"check":"extinct before open interval","expected":[1.301,0.8328,0.5,null],"passed":false},{"actual":[0.2002,0.0],"check":"two-age table","expected":[0.8003,1.0],"passed":false},{"actual":"invalid open rate","check":"zero open rate rejected","expected":"invalid open rate","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"table 0\", \"actual\": [7.1169, 6.1374, 5.16, 4.1818, 3.2031, 2.2235, 1.241, 0.0], \"expected\": [8.1156, 7.1357, 6.1581, 5.1796, 4.2004, 3.2205, 2.2373, 1.25], \"passed\": false}, {\"check\": \"table 1\", \"actual\": [8.8113, 7.8407, 6.8713, 5.9049, 4.9378, 3.9719, 0.0], \"expected\": [9.8098, 8.8389, 7.869, 6.9024, 5.9347, 4.9684, 4.0], \"passed\": false}, {\"check\": \"table 2\", \"actual\": [8.1465, 7.2008, 6.2554, 5.3108, 4.3654, 3.4179, 2.4663, 0.0], \"expected\": [9.1434, 8.1973, 7.2514, 6.3062, 5.3601, 4.4118, 3.4595, 2.5], \"passed\": false}, {\"check\": \"table 3\", \"actual\": [7.7916, 6.8342, 5.8789, 4.9229, 3.9652, 0.0], \"expected\": [8.7891, 7.8312, 6.8755, 5.9191, 4.9609, 4.0], \"passed\": false}, {\"check\": \"table 4\", \"actual\": [5.1302, 4.1612, 3.1905, 2.2167, 1.2389, 0.0], \"expected\": [6.1275, 5.1581, 4.1871, 3.2127, 2.2344, 1.25], \"passed\": false}, {\"check\": \"extinct before open interval\", \"actual\": [0.5005, 0.1664, 0.0, null], \"expected\": [1.301, 0.8328, 0.5, null], \"passed\": false}, {\"check\": \"two-age table\", \"actual\": [0.2002, 0.0], \"expected\": [0.8003, 1.0], \"passed\": false}, {\"check\": \"zero open rate rejected\", \"actual\": \"invalid open rate\", \"expected\": \"invalid open rate\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":46.164,"exit_code":0,"observations":[{"actual":[8.1156,7.1357,6.1581,5.1796,4.2004,3.2205,2.2373,1.25],"check":"table 0","expected":[8.1156,7.1357,6.1581,5.1796,4.2004,3.2205,2.2373,1.25],"passed":true},{"actual":[9.8098,8.8389,7.869,6.9024,5.9347,4.9684,4.0],"check":"table 1","expected":[9.8098,8.8389,7.869,6.9024,5.9347,4.9684,4.0],"passed":true},{"actual":[9.1434,8.1973,7.2514,6.3062,5.3601,4.4118,3.4595,2.5],"check":"table 2","expected":[9.1434,8.1973,7.2514,6.3062,5.3601,4.4118,3.4595,2.5],"passed":true},{"actual":[8.7891,7.8312,6.8755,5.9191,4.9609,4.0],"check":"table 3","expected":[8.7891,7.8312,6.8755,5.9191,4.9609,4.0],"passed":true},{"actual":[6.1275,5.1581,4.1871,3.2127,2.2344,1.25],"check":"table 4","expected":[6.1275,5.1581,4.1871,3.2127,2.2344,1.25],"passed":true},{"actual":[1.301,0.8328,0.5,null],"check":"extinct before open interval","expected":[1.301,0.8328,0.5,null],"passed":true},{"actual":[0.8003,1.0],"check":"two-age table","expected":[0.8003,1.0],"passed":true},{"actual":"invalid open rate","check":"zero open rate rejected","expected":"invalid open rate","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"table 0\", \"actual\": [8.1156, 7.1357, 6.1581, 5.1796, 4.2004, 3.2205, 2.2373, 1.25], \"expected\": [8.1156, 7.1357, 6.1581, 5.1796, 4.2004, 3.2205, 2.2373, 1.25], \"passed\": true}, {\"check\": \"table 1\", \"actual\": [9.8098, 8.8389, 7.869, 6.9024, 5.9347, 4.9684, 4.0], \"expected\": [9.8098, 8.8389, 7.869, 6.9024, 5.9347, 4.9684, 4.0], \"passed\": true}, {\"check\": \"table 2\", \"actual\": [9.1434, 8.1973, 7.2514, 6.3062, 5.3601, 4.4118, 3.4595, 2.5], \"expected\": [9.1434, 8.1973, 7.2514, 6.3062, 5.3601, 4.4118, 3.4595, 2.5], \"passed\": true}, {\"check\": \"table 3\", \"actual\": [8.7891, 7.8312, 6.8755, 5.9191, 4.9609, 4.0], \"expected\": [8.7891, 7.8312, 6.8755, 5.9191, 4.9609, 4.0], \"passed\": true}, {\"check\": \"table 4\", \"actual\": [6.1275, 5.1581, 4.1871, 3.2127, 2.2344, 1.25], \"expected\": [6.1275, 5.1581, 4.1871, 3.2127, 2.2344, 1.25], \"passed\": true}, {\"check\": \"extinct before open interval\", \"actual\": [1.301, 0.8328, 0.5, null], \"expected\": [1.301, 0.8328, 0.5, null], \"passed\": true}, {\"check\": \"two-age table\", \"actual\": [0.8003, 1.0], \"expected\": [0.8003, 1.0], \"passed\": true}, {\"check\": \"zero open rate rejected\", \"actual\": \"invalid open rate\", \"expected\": \"invalid open rate\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}