{"abstract":"Numerically dissipative integrators pass the monitor.","category":"Physics integrator stability","checks":8,"contract":"solve(states, k, m, tol, blowup): states [[x,v],...] of a spring integrator; E=0.5 m v^2+0.5 k x^2. Relative drift r=|E-E0|/E0 (absolute when E0=0). Scan in order: first state with E>blowup*E0 (E0>0) returns [\"blowup\", index, its r]. Otherwise [\"drift\", first index with r>tol, max r] or [\"ok\", -1, max r].","contract_signature":"states, k, m, tol, blowup","evaluation_group":"w2-physics_integrator_stability-energy-drift-monitor","failed_approach":"Flagging only losses misses energy gain.","family":"w2-physics_integrator_stability-energy-drift-monitor-drift-magnitude","id":"FA-87316","implementations":{"attempt":{"sha256":"fc7ff21f293f772dceb1db363aba9eb779b1762bf8e54d3de9afa36cebd4042e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(states, k, m, tol, blowup):\n    def en(s):\n        return 0.5 * m * s[1] * s[1] + 0.5 * k * s[0] * s[0]\n    e0 = en(states[0])\n    scale = e0 if e0 > 0 else 1.0\n    worst = 0.0\n    first_drift = -1\n    for i, s in enumerate(states):\n        e = en(s)\n        if e0 > 0 and e > blowup * e0:\n            return ['blowup', i, round(abs(e - e0) / scale, 6)]\n        r = max(0.0, e0 - e) / scale\n        if r > worst:\n            worst = r\n        if r > tol and first_drift < 0:\n            first_drift = i\n    if first_drift >= 0:\n        return ['drift', first_drift, round(worst, 6)]\n    return ['ok', -1, round(worst, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[[0.642, -0.278], [0.5937, -0.2502], [0.5306, -0.2252], [0.4774, -0.2027], [0.4326, -0.1824], [0.3961, -0.1642]], 2.502, 2.772, 0.05, 2.0], ['drift', 1, 0.624807]], [[[[0.0, 0.0], [0.0023, 0.0], [0.008, 0.0], [0.0167, 0.0], [0.0239, 0.0]], 1.47, 2.583, 0.01, 2.0], ['ok', -1, 0.00042]], [[[[0.354, -0.856], [0.3699, -0.8731], [0.3842, -0.8906], [0.404, -0.9084], [0.4055, -0.9266], [0.422, -0.9451], [0.4415, -0.964], [0.4623, -0.9833], [0.4764, -1.0029]], 2.622, 2.687, 0.05, 1.5], ['drift', 2, 0.435375]], [[[[0.007, 0.342], [0.0094, 0.3488], [0.0178, 0.3558], [0.0276, 0.3629]], 3.958, 2.139, 0.1, 2.0], ['drift', 3, 0.137127]], [[[[0.77, -0.528], [0.7846, -0.5386], [0.8008, -0.5493], [0.8252, -0.5603]], 4.089, 2.468, 0.01, 1.5], ['drift', 1, 0.143558]], [[[[-0.506, -0.658], [-0.4427, -0.5922], [-0.4045, -0.533], [-0.3529, -0.4797], [-0.3127, -0.4317], [-0.2739, -0.3885], [-0.2412, -0.3497], [-0.2179, -0.3147], [-0.1951, -0.2832]], 2.054, 1.583, 0.01, 1.5], ['drift', 1, 0.830639]], [[[[-0.727, -0.401], [-0.7918, -0.4411], [-0.8566, -0.4852], [-0.9532, -0.5337], [-1.0294, -0.5871], [-1.1522, -0.6458], [-1.2399, -0.7104]], 3.173, 0.604, 0.01, 3.0], ['drift', 1, 1.921313]], [[[[-0.138, 0.988], [-0.1281, 0.988], [-0.1264, 0.988]], 2.839, 1.096, 0.1, 3.0], ['ok', -1, 0.007747]]], [[[[[-0.219, 0.241], [-0.2354, 0.2651], [-0.2595, 0.2916], [-0.2794, 0.3208], [-0.2964, 0.3528], [-0.3284, 0.3881], [-0.3564, 0.4269]], 0.937, 2.683, 0.1, 3.0], ['blowup', 6, 2.028221]], [[[[-0.377, -0.929], [-0.3548, -0.9011], [-0.3496, -0.8741], [-0.3253, -0.8479], [-0.3166, -0.8224], [-0.2976, -0.7978]], 3.422, 0.967, 0.1, 1.5], ['drift', 2, 0.304614]], [[[[-0.274, -0.857], [-0.2679, -0.857], [-0.26, -0.857], [-0.2528, -0.857], [-0.2452, -0.857], [-0.2428, -0.857], [-0.2392, -0.857], [-0.2348, -0.857], [-0.2249, -0.857]], 3.816, 2.244, 0.1, 1.5], ['ok', -1, 0.048319]], [[[[0.098, -0.389], [0.1119, -0.4279], [0.1325, -0.4707], [0.1538, -0.5178], [0.1799, -0.5695], [0.203, -0.6265]], 1.475, 2.624, 0.01, 3.0], ['drift', 1, 1.652295]], [[[[0.303, 0.246], [0.3325, 0.2706], [0.3676, 0.2977], [0.4034, 0.3274], [0.4447, 0.3602], [0.5066, 0.3962]], 0.771, 1.949, 0.05, 2.0], ['blowup', 4, 1.147733]], [[[[0.0, 0.0], [0.0002, 0.0], [0.0055, 0.0], [0.0097, 0.0], [0.0174, 0.0], [0.0202, 0.0], [0.025, 0.0], [0.0315, 0.0], [0.0373, 0.0], [0.0427, 0.0]], 2.182, 1.732, 0.1, 2.0], ['ok', -1, 0.001989]], [[[[0.339, -0.79], [0.3312, -0.7663], [0.3266, -0.7433], [0.318, -0.721], [0.3149, -0.6994]], 1.641, 0.591, 0.01, 3.0], ['drift', 1, 0.189459]], [[[[-0.245, -0.092], [-0.247, -0.0938], [-0.2501, -0.0957], [-0.2553, -0.0976], [-0.253, -0.0996], [-0.2532, -0.1016]], 3.639, 1.24, 0.01, 1.5], ['drift', 1, 0.087664]]], [[[[[-0.602, -0.323], [-0.6548, -0.3553], [-0.7281, -0.3908], [-0.8042, -0.4299], [-0.8676, -0.4729], [-0.9515, -0.5202]], 4.781, 2.289, 0.05, 3.0], ['drift', 1, 1.509767]], [[[[-0.844, -0.85], [-0.8281, -0.85], [-0.8348, -0.85], [-0.8267, -0.85], [-0.8342, -0.85]], 1.842, 1.328, 0.01, 1.5], ['drift', 1, 0.023437]], [[[[0.983, 0.177], [1.0223, 0.1805], [1.0565, 0.1842], [1.0753, 0.1878], [1.1016, 0.1916], [1.126, 0.1954], [1.1604, 0.1993]], 2.096, 1.011, 0.01, 1.5], ['drift', 1, 0.39157]], [[[[0.846, 0.987], [0.8713, 1.0067], [0.9005, 1.0269], [0.9276, 1.0474], [0.9484, 1.0684]], 2.346, 2.182, 0.1, 3.0], ['drift', 2, 0.209251]], [[[[0.596, -0.74], [0.5494, -0.666], [0.496, -0.5994], [0.45, -0.5395], [0.4177, -0.4855], [0.3802, -0.437], [0.3542, -0.3933]], 2.077, 1.541, 0.05, 3.0], ['drift', 1, 0.684539]], [[[[0.0, 0.0], [0.0015, 0.0], [0.0069, 0.0], [0.0103, 0.0], [0.017, 0.0], [0.0223, 0.0], [0.0323, 0.0]], 4.193, 1.563, 0.05, 2.0], ['ok', -1, 0.002187]], [[[[0.494, 0.726], [0.4862, 0.7042], [0.4712, 0.6831], [0.4542, 0.6626]], 4.432, 1.484, 0.1, 1.5], ['drift', 2, 0.159841]], [[[[-0.61, -0.248], [-0.6209, -0.253], [-0.6338, -0.258], [-0.6283, -0.2632], [-0.6383, -0.2684], [-0.6504, -0.2738], [-0.6504, -0.2793], [-0.6669, -0.2849]], 3.89, 2.753, 0.05, 3.0], ['drift', 2, 0.208293]]], [[[[[-0.142, 0.767], [-0.1338, 0.7823], [-0.1303, 0.798], [-0.1279, 0.8139], [-0.1294, 0.8302], [-0.1206, 0.8468], [-0.1187, 0.8638], [-0.1125, 0.881]], 3.962, 2.055, 0.1, 1.5], ['drift', 3, 0.276478]], [[[[0.533, -0.86], [0.535, -0.8342], [0.522, -0.8092]], 3.784, 2.389, 0.01, 1.5], ['drift', 1, 0.086734]], [[[[0.46, -0.857], [0.4146, -0.7713], [0.3847, -0.6942], [0.347, -0.6248], [0.313, -0.5623], [0.2833, -0.506], [0.2638, -0.4554], [0.2445, -0.4099]], 4.633, 2.893, 0.01, 1.5], ['drift', 1, 0.754263]], [[[[0.0, 0.0], [0.0095, 0.0], [0.0112, 0.0]], 4.453, 1.79, 0.1, 3.0], ['ok', -1, 0.000279]], [[[[0.0, 0.0], [0.0044, 0.0], [0.0106, 0.0], [0.0193, 0.0], [0.024, 0.0], [0.0241, 0.0], [0.03, 0.0], [0.0297, 0.0], [0.0363, 0.0]], 4.075, 1.166, 0.01, 2.0], ['ok', -1, 0.002685]], [[[[0.769, -0.203], [0.8009, -0.2071], [0.8291, -0.2112], [0.847, -0.2154], [0.8719, -0.2197]], 3.998, 0.622, 0.1, 2.0], ['drift', 2, 0.2843]], [[[[0.611, 0.179], [0.6286, 0.1826], [0.6327, 0.1862], [0.6452, 0.19]], 0.929, 1.354, 0.05, 3.0], ['drift', 1, 0.116371]], [[[[-0.944, -0.357], [-0.9235, -0.3463], [-0.9004, -0.3359], [-0.8797, -0.3258], [-0.8621, -0.316], [-0.8187, -0.3066], [-0.7942, -0.2974]], 0.792, 1.826, 0.1, 3.0], ['drift', 3, 0.295621]]], [[[[[0.803, 0.52], [0.7338, 0.468], [0.6728, 0.4212], [0.6205, 0.3791], [0.5593, 0.3412], [0.5062, 0.3071], [0.4563, 0.2763], [0.4139, 0.2487], [0.3713, 0.2238], [0.3301, 0.2015]], 0.955, 1.682, 0.05, 3.0], ['drift', 1, 0.839011]], [[[[0.0, 0.0], [0.0018, 0.0], [0.0028, 0.0], [0.0066, 0.0], [0.0144, 0.0]], 0.719, 1.234, 0.01, 2.0], ['ok', -1, 7.5e-05]], [[[[0.812, 0.7], [0.7824, 0.679], [0.7661, 0.6586], [0.7494, 0.6389], [0.7496, 0.6197], [0.7346, 0.6011]], 3.833, 2.927, 0.01, 2.0], ['drift', 1, 0.2109]], [[[[-0.612, 0.33], [-0.6277, 0.3366], [-0.6415, 0.3433], [-0.6394, 0.3502]], 2.324, 0.739, 0.01, 2.0], ['drift', 1, 0.097332]], [[[[-0.648, -0.612], [-0.7038, -0.6732], [-0.766, -0.7405], [-0.8245, -0.8146], [-0.9148, -0.896], [-1.0192, -0.9856], [-1.1118, -1.0842], [-1.2153, -1.1926]], 1.534, 1.581, 0.1, 3.0], ['blowup', 6, 2.037018]], [[[[-0.388, 0.367], [-0.3827, 0.3743], [-0.3809, 0.3818]], 4.434, 2.813, 0.05, 3.0], ['ok', -1, 0.006659]], [[[[0.788, 0.541], [0.8584, 0.5951], [0.9528, 0.6546], [1.0365, 0.7201], [1.1562, 0.7921], [1.2724, 0.8713]], 4.609, 2.968, 0.1, 3.0], ['drift', 1, 1.604181]], [[[[0.304, 0.926], [0.2951, 0.8982], [0.2913, 0.8713], [0.2845, 0.8451], [0.273, 0.8198]], 4.318, 0.794, 0.01, 2.0], ['drift', 1, 0.207843]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, 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":"3b5642fe6346292bf5369e25e942eff8aacf4adce3784a238dc75905ea22fbdf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(states, k, m, tol, blowup):\n    def en(s):\n        return 0.5 * m * s[1] * s[1] + 0.5 * k * s[0] * s[0]\n    e0 = en(states[0])\n    scale = e0 if e0 > 0 else 1.0\n    worst = 0.0\n    first_drift = -1\n    for i, s in enumerate(states):\n        e = en(s)\n        if e0 > 0 and e > blowup * e0:\n            return ['blowup', i, round(abs(e - e0) / scale, 6)]\n        r = (e - e0) / scale\n        if r > worst:\n            worst = r\n        if r > tol and first_drift < 0:\n            first_drift = i\n    if first_drift >= 0:\n        return ['drift', first_drift, round(worst, 6)]\n    return ['ok', -1, round(worst, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[[0.642, -0.278], [0.5937, -0.2502], [0.5306, -0.2252], [0.4774, -0.2027], [0.4326, -0.1824], [0.3961, -0.1642]], 2.502, 2.772, 0.05, 2.0], ['drift', 1, 0.624807]], [[[[0.0, 0.0], [0.0023, 0.0], [0.008, 0.0], [0.0167, 0.0], [0.0239, 0.0]], 1.47, 2.583, 0.01, 2.0], ['ok', -1, 0.00042]], [[[[0.354, -0.856], [0.3699, -0.8731], [0.3842, -0.8906], [0.404, -0.9084], [0.4055, -0.9266], [0.422, -0.9451], [0.4415, -0.964], [0.4623, -0.9833], [0.4764, -1.0029]], 2.622, 2.687, 0.05, 1.5], ['drift', 2, 0.435375]], [[[[0.007, 0.342], [0.0094, 0.3488], [0.0178, 0.3558], [0.0276, 0.3629]], 3.958, 2.139, 0.1, 2.0], ['drift', 3, 0.137127]], [[[[0.77, -0.528], [0.7846, -0.5386], [0.8008, -0.5493], [0.8252, -0.5603]], 4.089, 2.468, 0.01, 1.5], ['drift', 1, 0.143558]], [[[[-0.506, -0.658], [-0.4427, -0.5922], [-0.4045, -0.533], [-0.3529, -0.4797], [-0.3127, -0.4317], [-0.2739, -0.3885], [-0.2412, -0.3497], [-0.2179, -0.3147], [-0.1951, -0.2832]], 2.054, 1.583, 0.01, 1.5], ['drift', 1, 0.830639]], [[[[-0.727, -0.401], [-0.7918, -0.4411], [-0.8566, -0.4852], [-0.9532, -0.5337], [-1.0294, -0.5871], [-1.1522, -0.6458], [-1.2399, -0.7104]], 3.173, 0.604, 0.01, 3.0], ['drift', 1, 1.921313]], [[[[-0.138, 0.988], [-0.1281, 0.988], [-0.1264, 0.988]], 2.839, 1.096, 0.1, 3.0], ['ok', -1, 0.007747]]], [[[[[-0.219, 0.241], [-0.2354, 0.2651], [-0.2595, 0.2916], [-0.2794, 0.3208], [-0.2964, 0.3528], [-0.3284, 0.3881], [-0.3564, 0.4269]], 0.937, 2.683, 0.1, 3.0], ['blowup', 6, 2.028221]], [[[[-0.377, -0.929], [-0.3548, -0.9011], [-0.3496, -0.8741], [-0.3253, -0.8479], [-0.3166, -0.8224], [-0.2976, -0.7978]], 3.422, 0.967, 0.1, 1.5], ['drift', 2, 0.304614]], [[[[-0.274, -0.857], [-0.2679, -0.857], [-0.26, -0.857], [-0.2528, -0.857], [-0.2452, -0.857], [-0.2428, -0.857], [-0.2392, -0.857], [-0.2348, -0.857], [-0.2249, -0.857]], 3.816, 2.244, 0.1, 1.5], ['ok', -1, 0.048319]], [[[[0.098, -0.389], [0.1119, -0.4279], [0.1325, -0.4707], [0.1538, -0.5178], [0.1799, -0.5695], [0.203, -0.6265]], 1.475, 2.624, 0.01, 3.0], ['drift', 1, 1.652295]], [[[[0.303, 0.246], [0.3325, 0.2706], [0.3676, 0.2977], [0.4034, 0.3274], [0.4447, 0.3602], [0.5066, 0.3962]], 0.771, 1.949, 0.05, 2.0], ['blowup', 4, 1.147733]], [[[[0.0, 0.0], [0.0002, 0.0], [0.0055, 0.0], [0.0097, 0.0], [0.0174, 0.0], [0.0202, 0.0], [0.025, 0.0], [0.0315, 0.0], [0.0373, 0.0], [0.0427, 0.0]], 2.182, 1.732, 0.1, 2.0], ['ok', -1, 0.001989]], [[[[0.339, -0.79], [0.3312, -0.7663], [0.3266, -0.7433], [0.318, -0.721], [0.3149, -0.6994]], 1.641, 0.591, 0.01, 3.0], ['drift', 1, 0.189459]], [[[[-0.245, -0.092], [-0.247, -0.0938], [-0.2501, -0.0957], [-0.2553, -0.0976], [-0.253, -0.0996], [-0.2532, -0.1016]], 3.639, 1.24, 0.01, 1.5], ['drift', 1, 0.087664]]], [[[[[-0.602, -0.323], [-0.6548, -0.3553], [-0.7281, -0.3908], [-0.8042, -0.4299], [-0.8676, -0.4729], [-0.9515, -0.5202]], 4.781, 2.289, 0.05, 3.0], ['drift', 1, 1.509767]], [[[[-0.844, -0.85], [-0.8281, -0.85], [-0.8348, -0.85], [-0.8267, -0.85], [-0.8342, -0.85]], 1.842, 1.328, 0.01, 1.5], ['drift', 1, 0.023437]], [[[[0.983, 0.177], [1.0223, 0.1805], [1.0565, 0.1842], [1.0753, 0.1878], [1.1016, 0.1916], [1.126, 0.1954], [1.1604, 0.1993]], 2.096, 1.011, 0.01, 1.5], ['drift', 1, 0.39157]], [[[[0.846, 0.987], [0.8713, 1.0067], [0.9005, 1.0269], [0.9276, 1.0474], [0.9484, 1.0684]], 2.346, 2.182, 0.1, 3.0], ['drift', 2, 0.209251]], [[[[0.596, -0.74], [0.5494, -0.666], [0.496, -0.5994], [0.45, -0.5395], [0.4177, -0.4855], [0.3802, -0.437], [0.3542, -0.3933]], 2.077, 1.541, 0.05, 3.0], ['drift', 1, 0.684539]], [[[[0.0, 0.0], [0.0015, 0.0], [0.0069, 0.0], [0.0103, 0.0], [0.017, 0.0], [0.0223, 0.0], [0.0323, 0.0]], 4.193, 1.563, 0.05, 2.0], ['ok', -1, 0.002187]], [[[[0.494, 0.726], [0.4862, 0.7042], [0.4712, 0.6831], [0.4542, 0.6626]], 4.432, 1.484, 0.1, 1.5], ['drift', 2, 0.159841]], [[[[-0.61, -0.248], [-0.6209, -0.253], [-0.6338, -0.258], [-0.6283, -0.2632], [-0.6383, -0.2684], [-0.6504, -0.2738], [-0.6504, -0.2793], [-0.6669, -0.2849]], 3.89, 2.753, 0.05, 3.0], ['drift', 2, 0.208293]]], [[[[[-0.142, 0.767], [-0.1338, 0.7823], [-0.1303, 0.798], [-0.1279, 0.8139], [-0.1294, 0.8302], [-0.1206, 0.8468], [-0.1187, 0.8638], [-0.1125, 0.881]], 3.962, 2.055, 0.1, 1.5], ['drift', 3, 0.276478]], [[[[0.533, -0.86], [0.535, -0.8342], [0.522, -0.8092]], 3.784, 2.389, 0.01, 1.5], ['drift', 1, 0.086734]], [[[[0.46, -0.857], [0.4146, -0.7713], [0.3847, -0.6942], [0.347, -0.6248], [0.313, -0.5623], [0.2833, -0.506], [0.2638, -0.4554], [0.2445, -0.4099]], 4.633, 2.893, 0.01, 1.5], ['drift', 1, 0.754263]], [[[[0.0, 0.0], [0.0095, 0.0], [0.0112, 0.0]], 4.453, 1.79, 0.1, 3.0], ['ok', -1, 0.000279]], [[[[0.0, 0.0], [0.0044, 0.0], [0.0106, 0.0], [0.0193, 0.0], [0.024, 0.0], [0.0241, 0.0], [0.03, 0.0], [0.0297, 0.0], [0.0363, 0.0]], 4.075, 1.166, 0.01, 2.0], ['ok', -1, 0.002685]], [[[[0.769, -0.203], [0.8009, -0.2071], [0.8291, -0.2112], [0.847, -0.2154], [0.8719, -0.2197]], 3.998, 0.622, 0.1, 2.0], ['drift', 2, 0.2843]], [[[[0.611, 0.179], [0.6286, 0.1826], [0.6327, 0.1862], [0.6452, 0.19]], 0.929, 1.354, 0.05, 3.0], ['drift', 1, 0.116371]], [[[[-0.944, -0.357], [-0.9235, -0.3463], [-0.9004, -0.3359], [-0.8797, -0.3258], [-0.8621, -0.316], [-0.8187, -0.3066], [-0.7942, -0.2974]], 0.792, 1.826, 0.1, 3.0], ['drift', 3, 0.295621]]], [[[[[0.803, 0.52], [0.7338, 0.468], [0.6728, 0.4212], [0.6205, 0.3791], [0.5593, 0.3412], [0.5062, 0.3071], [0.4563, 0.2763], [0.4139, 0.2487], [0.3713, 0.2238], [0.3301, 0.2015]], 0.955, 1.682, 0.05, 3.0], ['drift', 1, 0.839011]], [[[[0.0, 0.0], [0.0018, 0.0], [0.0028, 0.0], [0.0066, 0.0], [0.0144, 0.0]], 0.719, 1.234, 0.01, 2.0], ['ok', -1, 7.5e-05]], [[[[0.812, 0.7], [0.7824, 0.679], [0.7661, 0.6586], [0.7494, 0.6389], [0.7496, 0.6197], [0.7346, 0.6011]], 3.833, 2.927, 0.01, 2.0], ['drift', 1, 0.2109]], [[[[-0.612, 0.33], [-0.6277, 0.3366], [-0.6415, 0.3433], [-0.6394, 0.3502]], 2.324, 0.739, 0.01, 2.0], ['drift', 1, 0.097332]], [[[[-0.648, -0.612], [-0.7038, -0.6732], [-0.766, -0.7405], [-0.8245, -0.8146], [-0.9148, -0.896], [-1.0192, -0.9856], [-1.1118, -1.0842], [-1.2153, -1.1926]], 1.534, 1.581, 0.1, 3.0], ['blowup', 6, 2.037018]], [[[[-0.388, 0.367], [-0.3827, 0.3743], [-0.3809, 0.3818]], 4.434, 2.813, 0.05, 3.0], ['ok', -1, 0.006659]], [[[[0.788, 0.541], [0.8584, 0.5951], [0.9528, 0.6546], [1.0365, 0.7201], [1.1562, 0.7921], [1.2724, 0.8713]], 4.609, 2.968, 0.1, 3.0], ['drift', 1, 1.604181]], [[[[0.304, 0.926], [0.2951, 0.8982], [0.2913, 0.8713], [0.2845, 0.8451], [0.273, 0.8198]], 4.318, 0.794, 0.01, 2.0], ['drift', 1, 0.207843]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, 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 with stipulated toy conventions and rounded float output; not a production physics engine or a proof of numerical stability. 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-physics_integrator_stability-energy-drift-monitor-drift-magnitude","generated_at":"2026-09-29T14:50:57.714696+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Game and robotics physics loops depend on integrator update order, step control and stabilization terms; a wrong decision point turns a stable simulation into drifting or exploding motion.","root_cause":"r is signed (E-E0)/E0.","sha256":"59f6050a54b122818eba68e14bc0c82f85d53363037466b0182363fc25214908","title":"Energy loss is not treated as drift · 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":41.317,"exit_code":1,"observations":[{"actual":["drift",1,0.624807],"check":"case 0","expected":["drift",1,0.624807],"passed":true},{"actual":["ok",-1,0.0],"check":"case 1","expected":["ok",-1,0.00042],"passed":false},{"actual":["ok",-1,0.0],"check":"case 2","expected":["drift",2,0.435375],"passed":false},{"actual":["ok",-1,0.0],"check":"case 3","expected":["drift",3,0.137127],"passed":false},{"actual":["ok",-1,0.0],"check":"case 4","expected":["drift",1,0.143558],"passed":false},{"actual":["drift",1,0.830639],"check":"case 5","expected":["drift",1,0.830639],"passed":true},{"actual":["ok",-1,0.0],"check":"case 6","expected":["drift",1,1.921313],"passed":false},{"actual":["ok",-1,0.007747],"check":"case 7","expected":["ok",-1,0.007747],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [\"drift\", 1, 0.624807], \"expected\": [\"drift\", 1, 0.624807], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [\"ok\", -1, 0.0], \"expected\": [\"ok\", -1, 0.00042], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [\"ok\", -1, 0.0], \"expected\": [\"drift\", 2, 0.435375], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [\"ok\", -1, 0.0], \"expected\": [\"drift\", 3, 0.137127], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [\"ok\", -1, 0.0], \"expected\": [\"drift\", 1, 0.143558], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [\"drift\", 1, 0.830639], \"expected\": [\"drift\", 1, 0.830639], \"passed\": true}, {\"check\": \"case 6\", \"actual\": [\"ok\", -1, 0.0], \"expected\": [\"drift\", 1, 1.921313], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [\"ok\", -1, 0.007747], \"expected\": [\"ok\", -1, 0.007747], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.813,"exit_code":1,"observations":[{"actual":["ok",-1,0.0],"check":"case 0","expected":["drift",1,0.624807],"passed":false},{"actual":["ok",-1,0.00042],"check":"case 1","expected":["ok",-1,0.00042],"passed":true},{"actual":["drift",2,0.435375],"check":"case 2","expected":["drift",2,0.435375],"passed":true},{"actual":["drift",3,0.137127],"check":"case 3","expected":["drift",3,0.137127],"passed":true},{"actual":["drift",1,0.143558],"check":"case 4","expected":["drift",1,0.143558],"passed":true},{"actual":["ok",-1,0.0],"check":"case 5","expected":["drift",1,0.830639],"passed":false},{"actual":["drift",1,1.921313],"check":"case 6","expected":["drift",1,1.921313],"passed":true},{"actual":["ok",-1,0.0],"check":"case 7","expected":["ok",-1,0.007747],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [\"ok\", -1, 0.0], \"expected\": [\"drift\", 1, 0.624807], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [\"ok\", -1, 0.00042], \"expected\": [\"ok\", -1, 0.00042], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [\"drift\", 2, 0.435375], \"expected\": [\"drift\", 2, 0.435375], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [\"drift\", 3, 0.137127], \"expected\": [\"drift\", 3, 0.137127], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [\"drift\", 1, 0.143558], \"expected\": [\"drift\", 1, 0.143558], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [\"ok\", -1, 0.0], \"expected\": [\"drift\", 1, 0.830639], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [\"drift\", 1, 1.921313], \"expected\": [\"drift\", 1, 1.921313], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [\"ok\", -1, 0.0], \"expected\": [\"ok\", -1, 0.007747], \"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."}}