{"abstract":"Md grows too fast with duration.","category":"Seismic magnitude estimation","checks":8,"contract":"envelope is a list of amplitude samples, dt s per sample, p_index the P pick sample, noise the pre-event noise level. From the peak at or after the pick (first maximum), the coda ends at the first sample with amplitude <= 2*noise. tau = (end - p_index)*dt; Md = -0.87 + 2.0 log10(tau) + 0.0035 epi_km. Return [tau rounded 0.01, Md rounded 0.01] or None when no end or tau <= 0.","evaluation_group":"w2-seismic_magnitude_estimation-coda-duration-md","failed_approach":"Dividing by dt uses sample counts instead of seconds.","family":"w2-seismic_magnitude_estimation-coda-duration-md-duration-log-base","id":"FA-71486","implementations":{"attempt":{"sha256":"5c5095434d79062056b999db408421d3b32cc0c09af01b538f19a9f07baf83b3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(envelope, dt, p_index, noise, epi_km):\n    if p_index >= len(envelope):\n        return None\n    peak = max(range(p_index, len(envelope)), key=lambda i: envelope[i])\n    end = None\n    for i in range(peak, len(envelope)):\n        if envelope[i] <= 2 * noise:\n            end = i\n            break\n    if end is None:\n        return None\n    tau = (end - p_index) * dt\n    if tau <= 0:\n        return None\n    md = -0.87 + 2.0 * math.log10(tau / dt) + 0.0035 * epi_km\n    return [round(tau, 2), round(md, 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['coda 0', [[1, 0, 1, 1, 19, 59, 29, 23, 13, 6, 4, 2, 1], 1.0, 4, 1, 30], [7.0, 0.93]], ['coda 1', [[0, 1, 3, 3, 1, 23, 70, 49, 39, 31, 21, 14, 7, 4, 2, 3, 3, 1], 0.5, 5, 3, 5], [4.0, 0.35]], ['coda 2', [[0, 2, 26, 78, 39, 27, 21, 14, 8, 4, 2, 0], 0.5, 2, 3, 5], [3.5, 0.24]], ['coda 3', [[0, 2, 2, 0, 1, 14, 44, 30, 21, 14, 9, 7, 5, 3, 1, 2, 0, 2], 0.5, 5, 2, 5], [4.0, 0.35]], ['coda 4', [[0, 1, 1, 19, 59, 35, 21, 12, 7, 5, 2, 1], 0.5, 3, 1, 5], [3.5, 0.24]], ['coda 5', [[2, 0, 0, 24, 72, 43, 25, 17, 13, 9, 4, 3, 1, 1, 1, 1], 2.0, 3, 2, 120], [14.0, 1.84]], ['coda 6', [[1, 1, 0, 1, 0, 20, 61, 30, 24, 19, 15, 12, 8, 6, 3, 2, 1, 0, 1, 1], 2.0, 5, 1, 120], [20.0, 2.15]], ['coda 7', [[0, 0, 1, 0, 0, 16, 50, 35, 21, 12, 8, 4, 2, 1, 1], 1.0, 5, 1, 30], [7.0, 0.93]]], [['coda 3', [[0, 2, 2, 0, 1, 14, 44, 30, 21, 14, 9, 7, 5, 3, 1, 2, 0, 2], 0.5, 5, 2, 5], [4.0, 0.35]], ['coda 7', [[0, 0, 1, 0, 0, 16, 50, 35, 21, 12, 8, 4, 2, 1, 1], 1.0, 5, 1, 30], [7.0, 0.93]], ['coda 8', [[0, 0, 1, 2, 9, 27, 18, 10, 7, 4, 2], 0.5, 4, 2, 5], [2.5, -0.06]], ['coda 9', [[1, 1, 17, 53, 42, 29, 23, 18, 14, 9, 6, 4, 2, 1, 1, 1, 1], 1.0, 2, 1, 30], [10.0, 1.23]], ['coda 10', [[1, 2, 0, 2, 10, 30, 18, 12, 7, 5, 2, 0, 1], 2.0, 4, 2, 120], [12.0, 1.71]], ['coda 11', [[1, 0, 10, 31, 24, 16, 8, 4, 2, 1, 0], 1.0, 2, 1, 30], [6.0, 0.79]], ['coda 12', [[2, 1, 9, 28, 22, 13, 9, 7, 5, 4, 2, 2], 1.0, 2, 2, 30], [7.0, 0.93]], ['coda 13', [[0, 2, 1, 0, 1, 9, 29, 20, 12, 9, 6, 4, 2], 1.0, 5, 2, 30], [6.0, 0.79]]], [['coda 6', [[1, 1, 0, 1, 0, 20, 61, 30, 24, 19, 15, 12, 8, 6, 3, 2, 1, 0, 1, 1], 2.0, 5, 1, 120], [20.0, 2.15]], ['coda 14', [[0, 1, 0, 25, 75, 45, 36, 25, 17, 13, 6, 4, 2, 1, 0, 0], 0.5, 3, 1, 5], [4.5, 0.45]], ['coda 15', [[2, 1, 2, 1, 1, 25, 75, 60, 42, 25, 15, 12, 6, 3, 0], 0.5, 5, 3, 5], [3.5, 0.24]], ['coda 16', [[0, 1, 1, 1, 0, 23, 69, 55, 27, 21, 10, 6, 3, 1, 0], 1.0, 5, 1, 30], [8.0, 1.04]], ['coda 17', [[1, 2, 22, 68, 40, 28, 19, 15, 12, 8, 6, 4, 2, 0, 2], 2.0, 2, 2, 120], [18.0, 2.06]], ['coda 18', [[1, 1, 1, 1, 10, 31, 24, 12, 9, 7, 4, 2, 1, 1, 0, 1], 0.5, 4, 1, 5], [3.5, 0.24]], ['coda 19', [[1, 1, 11, 33, 16, 12, 6, 3, 2, 1], 2.0, 2, 3, 120], [8.0, 1.36]], ['coda 20', [[2, 0, 0, 1, 2, 10, 31, 18, 10, 8, 4, 3, 1, 2], 2.0, 5, 3, 120], [10.0, 1.55]]], [['coda 9', [[1, 1, 17, 53, 42, 29, 23, 18, 14, 9, 6, 4, 2, 1, 1, 1, 1], 1.0, 2, 1, 30], [10.0, 1.23]], ['coda 21', [[0, 1, 0, 8, 26, 18, 10, 6, 3, 2, 1], 0.5, 3, 1, 5], [3.0, 0.1]], ['coda 22', [[1, 1, 0, 0, 1, 23, 69, 34, 23, 13, 9, 5, 4, 3, 2, 1, 1, 0], 0.5, 5, 1, 5], [4.5, 0.45]], ['coda 23', [[0, 2, 0, 2, 1, 16, 48, 28, 19, 15, 9, 4, 3, 1, 1, 2], 1.0, 5, 2, 30], [6.0, 0.79]], ['coda 24', [[1, 0, 1, 1, 0, 11, 35, 24, 19, 15, 9, 7, 5, 3, 2, 1, 1, 1, 0], 2.0, 5, 1, 120], [18.0, 2.06]], ['coda 25', [[1, 0, 12, 36, 18, 14, 8, 4, 3, 1, 1, 1], 1.0, 2, 2, 30], [5.0, 0.63]], ['coda 26', [[0, 0, 1, 11, 34, 17, 11, 7, 3, 1], 2.0, 3, 1, 120], [12.0, 1.71]], ['coda 27', [[1, 1, 0, 8, 24, 16, 9, 5, 3, 1], 2.0, 3, 1, 120], [12.0, 1.71]]], [['coda 12', [[2, 1, 9, 28, 22, 13, 9, 7, 5, 4, 2, 2], 1.0, 2, 2, 30], [7.0, 0.93]], ['coda 28', [[1, 2, 3, 7, 21, 16, 12, 9, 5, 3, 1, 0, 0], 0.5, 3, 3, 5], [2.5, -0.06]], ['coda 29', [[0, 0, 1, 17, 53, 42, 33, 16, 12, 9, 6, 3, 2, 1], 2.0, 3, 1, 120], [18.0, 2.06]], ['coda 30', [[2, 2, 0, 1, 2, 19, 58, 34, 27, 16, 11, 7, 5, 4, 2, 1], 2.0, 5, 2, 120], [16.0, 1.96]], ['coda 31', [[2, 3, 1, 19, 59, 47, 23, 13, 10, 6, 3, 0, 1, 3], 0.5, 3, 3, 5], [3.0, 0.1]], ['coda 32', [[1, 0, 12, 38, 26, 15, 9, 4, 3, 2, 1], 0.5, 2, 2, 5], [2.5, -0.06]], ['coda 33', [[2, 0, 11, 34, 23, 16, 8, 4, 2, 1, 0, 3], 2.0, 2, 3, 120], [10.0, 1.55]], ['coda never ends', [[0, 0, 40, 30, 25, 20], 1.0, 2, 1, 10], None]]]\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":"4fd63cc06597e43eec3b922a1b4431650c73d06a3fadfc39afe7225f08a0bba5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(envelope, dt, p_index, noise, epi_km):\n    if p_index >= len(envelope):\n        return None\n    peak = max(range(p_index, len(envelope)), key=lambda i: envelope[i])\n    end = None\n    for i in range(peak, len(envelope)):\n        if envelope[i] <= 2 * noise:\n            end = i\n            break\n    if end is None:\n        return None\n    tau = (end - p_index) * dt\n    if tau <= 0:\n        return None\n    md = -0.87 + 2.0 * math.log(tau) + 0.0035 * epi_km\n    return [round(tau, 2), round(md, 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['coda 0', [[1, 0, 1, 1, 19, 59, 29, 23, 13, 6, 4, 2, 1], 1.0, 4, 1, 30], [7.0, 0.93]], ['coda 1', [[0, 1, 3, 3, 1, 23, 70, 49, 39, 31, 21, 14, 7, 4, 2, 3, 3, 1], 0.5, 5, 3, 5], [4.0, 0.35]], ['coda 2', [[0, 2, 26, 78, 39, 27, 21, 14, 8, 4, 2, 0], 0.5, 2, 3, 5], [3.5, 0.24]], ['coda 3', [[0, 2, 2, 0, 1, 14, 44, 30, 21, 14, 9, 7, 5, 3, 1, 2, 0, 2], 0.5, 5, 2, 5], [4.0, 0.35]], ['coda 4', [[0, 1, 1, 19, 59, 35, 21, 12, 7, 5, 2, 1], 0.5, 3, 1, 5], [3.5, 0.24]], ['coda 5', [[2, 0, 0, 24, 72, 43, 25, 17, 13, 9, 4, 3, 1, 1, 1, 1], 2.0, 3, 2, 120], [14.0, 1.84]], ['coda 6', [[1, 1, 0, 1, 0, 20, 61, 30, 24, 19, 15, 12, 8, 6, 3, 2, 1, 0, 1, 1], 2.0, 5, 1, 120], [20.0, 2.15]], ['coda 7', [[0, 0, 1, 0, 0, 16, 50, 35, 21, 12, 8, 4, 2, 1, 1], 1.0, 5, 1, 30], [7.0, 0.93]]], [['coda 3', [[0, 2, 2, 0, 1, 14, 44, 30, 21, 14, 9, 7, 5, 3, 1, 2, 0, 2], 0.5, 5, 2, 5], [4.0, 0.35]], ['coda 7', [[0, 0, 1, 0, 0, 16, 50, 35, 21, 12, 8, 4, 2, 1, 1], 1.0, 5, 1, 30], [7.0, 0.93]], ['coda 8', [[0, 0, 1, 2, 9, 27, 18, 10, 7, 4, 2], 0.5, 4, 2, 5], [2.5, -0.06]], ['coda 9', [[1, 1, 17, 53, 42, 29, 23, 18, 14, 9, 6, 4, 2, 1, 1, 1, 1], 1.0, 2, 1, 30], [10.0, 1.23]], ['coda 10', [[1, 2, 0, 2, 10, 30, 18, 12, 7, 5, 2, 0, 1], 2.0, 4, 2, 120], [12.0, 1.71]], ['coda 11', [[1, 0, 10, 31, 24, 16, 8, 4, 2, 1, 0], 1.0, 2, 1, 30], [6.0, 0.79]], ['coda 12', [[2, 1, 9, 28, 22, 13, 9, 7, 5, 4, 2, 2], 1.0, 2, 2, 30], [7.0, 0.93]], ['coda 13', [[0, 2, 1, 0, 1, 9, 29, 20, 12, 9, 6, 4, 2], 1.0, 5, 2, 30], [6.0, 0.79]]], [['coda 6', [[1, 1, 0, 1, 0, 20, 61, 30, 24, 19, 15, 12, 8, 6, 3, 2, 1, 0, 1, 1], 2.0, 5, 1, 120], [20.0, 2.15]], ['coda 14', [[0, 1, 0, 25, 75, 45, 36, 25, 17, 13, 6, 4, 2, 1, 0, 0], 0.5, 3, 1, 5], [4.5, 0.45]], ['coda 15', [[2, 1, 2, 1, 1, 25, 75, 60, 42, 25, 15, 12, 6, 3, 0], 0.5, 5, 3, 5], [3.5, 0.24]], ['coda 16', [[0, 1, 1, 1, 0, 23, 69, 55, 27, 21, 10, 6, 3, 1, 0], 1.0, 5, 1, 30], [8.0, 1.04]], ['coda 17', [[1, 2, 22, 68, 40, 28, 19, 15, 12, 8, 6, 4, 2, 0, 2], 2.0, 2, 2, 120], [18.0, 2.06]], ['coda 18', [[1, 1, 1, 1, 10, 31, 24, 12, 9, 7, 4, 2, 1, 1, 0, 1], 0.5, 4, 1, 5], [3.5, 0.24]], ['coda 19', [[1, 1, 11, 33, 16, 12, 6, 3, 2, 1], 2.0, 2, 3, 120], [8.0, 1.36]], ['coda 20', [[2, 0, 0, 1, 2, 10, 31, 18, 10, 8, 4, 3, 1, 2], 2.0, 5, 3, 120], [10.0, 1.55]]], [['coda 9', [[1, 1, 17, 53, 42, 29, 23, 18, 14, 9, 6, 4, 2, 1, 1, 1, 1], 1.0, 2, 1, 30], [10.0, 1.23]], ['coda 21', [[0, 1, 0, 8, 26, 18, 10, 6, 3, 2, 1], 0.5, 3, 1, 5], [3.0, 0.1]], ['coda 22', [[1, 1, 0, 0, 1, 23, 69, 34, 23, 13, 9, 5, 4, 3, 2, 1, 1, 0], 0.5, 5, 1, 5], [4.5, 0.45]], ['coda 23', [[0, 2, 0, 2, 1, 16, 48, 28, 19, 15, 9, 4, 3, 1, 1, 2], 1.0, 5, 2, 30], [6.0, 0.79]], ['coda 24', [[1, 0, 1, 1, 0, 11, 35, 24, 19, 15, 9, 7, 5, 3, 2, 1, 1, 1, 0], 2.0, 5, 1, 120], [18.0, 2.06]], ['coda 25', [[1, 0, 12, 36, 18, 14, 8, 4, 3, 1, 1, 1], 1.0, 2, 2, 30], [5.0, 0.63]], ['coda 26', [[0, 0, 1, 11, 34, 17, 11, 7, 3, 1], 2.0, 3, 1, 120], [12.0, 1.71]], ['coda 27', [[1, 1, 0, 8, 24, 16, 9, 5, 3, 1], 2.0, 3, 1, 120], [12.0, 1.71]]], [['coda 12', [[2, 1, 9, 28, 22, 13, 9, 7, 5, 4, 2, 2], 1.0, 2, 2, 30], [7.0, 0.93]], ['coda 28', [[1, 2, 3, 7, 21, 16, 12, 9, 5, 3, 1, 0, 0], 0.5, 3, 3, 5], [2.5, -0.06]], ['coda 29', [[0, 0, 1, 17, 53, 42, 33, 16, 12, 9, 6, 3, 2, 1], 2.0, 3, 1, 120], [18.0, 2.06]], ['coda 30', [[2, 2, 0, 1, 2, 19, 58, 34, 27, 16, 11, 7, 5, 4, 2, 1], 2.0, 5, 2, 120], [16.0, 1.96]], ['coda 31', [[2, 3, 1, 19, 59, 47, 23, 13, 10, 6, 3, 0, 1, 3], 0.5, 3, 3, 5], [3.0, 0.1]], ['coda 32', [[1, 0, 12, 38, 26, 15, 9, 4, 3, 2, 1], 0.5, 2, 2, 5], [2.5, -0.06]], ['coda 33', [[2, 0, 11, 34, 23, 16, 8, 4, 2, 1, 0, 3], 2.0, 2, 3, 120], [10.0, 1.55]], ['coda never ends', [[0, 0, 40, 30, 25, 20], 1.0, 2, 1, 10], None]]]\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":"44e6a9fbc64ce6d1d383f8308daf7632afec1c574535649cf5794b5a0d9d418d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(envelope, dt, p_index, noise, epi_km):\n    if p_index >= len(envelope):\n        return None\n    peak = max(range(p_index, len(envelope)), key=lambda i: envelope[i])\n    end = None\n    for i in range(peak, len(envelope)):\n        if envelope[i] <= 2 * noise:\n            end = i\n            break\n    if end is None:\n        return None\n    tau = (end - p_index) * dt\n    if tau <= 0:\n        return None\n    md = -0.87 + 2.0 * math.log10(tau) + 0.0035 * epi_km\n    return [round(tau, 2), round(md, 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['coda 0', [[1, 0, 1, 1, 19, 59, 29, 23, 13, 6, 4, 2, 1], 1.0, 4, 1, 30], [7.0, 0.93]], ['coda 1', [[0, 1, 3, 3, 1, 23, 70, 49, 39, 31, 21, 14, 7, 4, 2, 3, 3, 1], 0.5, 5, 3, 5], [4.0, 0.35]], ['coda 2', [[0, 2, 26, 78, 39, 27, 21, 14, 8, 4, 2, 0], 0.5, 2, 3, 5], [3.5, 0.24]], ['coda 3', [[0, 2, 2, 0, 1, 14, 44, 30, 21, 14, 9, 7, 5, 3, 1, 2, 0, 2], 0.5, 5, 2, 5], [4.0, 0.35]], ['coda 4', [[0, 1, 1, 19, 59, 35, 21, 12, 7, 5, 2, 1], 0.5, 3, 1, 5], [3.5, 0.24]], ['coda 5', [[2, 0, 0, 24, 72, 43, 25, 17, 13, 9, 4, 3, 1, 1, 1, 1], 2.0, 3, 2, 120], [14.0, 1.84]], ['coda 6', [[1, 1, 0, 1, 0, 20, 61, 30, 24, 19, 15, 12, 8, 6, 3, 2, 1, 0, 1, 1], 2.0, 5, 1, 120], [20.0, 2.15]], ['coda 7', [[0, 0, 1, 0, 0, 16, 50, 35, 21, 12, 8, 4, 2, 1, 1], 1.0, 5, 1, 30], [7.0, 0.93]]], [['coda 3', [[0, 2, 2, 0, 1, 14, 44, 30, 21, 14, 9, 7, 5, 3, 1, 2, 0, 2], 0.5, 5, 2, 5], [4.0, 0.35]], ['coda 7', [[0, 0, 1, 0, 0, 16, 50, 35, 21, 12, 8, 4, 2, 1, 1], 1.0, 5, 1, 30], [7.0, 0.93]], ['coda 8', [[0, 0, 1, 2, 9, 27, 18, 10, 7, 4, 2], 0.5, 4, 2, 5], [2.5, -0.06]], ['coda 9', [[1, 1, 17, 53, 42, 29, 23, 18, 14, 9, 6, 4, 2, 1, 1, 1, 1], 1.0, 2, 1, 30], [10.0, 1.23]], ['coda 10', [[1, 2, 0, 2, 10, 30, 18, 12, 7, 5, 2, 0, 1], 2.0, 4, 2, 120], [12.0, 1.71]], ['coda 11', [[1, 0, 10, 31, 24, 16, 8, 4, 2, 1, 0], 1.0, 2, 1, 30], [6.0, 0.79]], ['coda 12', [[2, 1, 9, 28, 22, 13, 9, 7, 5, 4, 2, 2], 1.0, 2, 2, 30], [7.0, 0.93]], ['coda 13', [[0, 2, 1, 0, 1, 9, 29, 20, 12, 9, 6, 4, 2], 1.0, 5, 2, 30], [6.0, 0.79]]], [['coda 6', [[1, 1, 0, 1, 0, 20, 61, 30, 24, 19, 15, 12, 8, 6, 3, 2, 1, 0, 1, 1], 2.0, 5, 1, 120], [20.0, 2.15]], ['coda 14', [[0, 1, 0, 25, 75, 45, 36, 25, 17, 13, 6, 4, 2, 1, 0, 0], 0.5, 3, 1, 5], [4.5, 0.45]], ['coda 15', [[2, 1, 2, 1, 1, 25, 75, 60, 42, 25, 15, 12, 6, 3, 0], 0.5, 5, 3, 5], [3.5, 0.24]], ['coda 16', [[0, 1, 1, 1, 0, 23, 69, 55, 27, 21, 10, 6, 3, 1, 0], 1.0, 5, 1, 30], [8.0, 1.04]], ['coda 17', [[1, 2, 22, 68, 40, 28, 19, 15, 12, 8, 6, 4, 2, 0, 2], 2.0, 2, 2, 120], [18.0, 2.06]], ['coda 18', [[1, 1, 1, 1, 10, 31, 24, 12, 9, 7, 4, 2, 1, 1, 0, 1], 0.5, 4, 1, 5], [3.5, 0.24]], ['coda 19', [[1, 1, 11, 33, 16, 12, 6, 3, 2, 1], 2.0, 2, 3, 120], [8.0, 1.36]], ['coda 20', [[2, 0, 0, 1, 2, 10, 31, 18, 10, 8, 4, 3, 1, 2], 2.0, 5, 3, 120], [10.0, 1.55]]], [['coda 9', [[1, 1, 17, 53, 42, 29, 23, 18, 14, 9, 6, 4, 2, 1, 1, 1, 1], 1.0, 2, 1, 30], [10.0, 1.23]], ['coda 21', [[0, 1, 0, 8, 26, 18, 10, 6, 3, 2, 1], 0.5, 3, 1, 5], [3.0, 0.1]], ['coda 22', [[1, 1, 0, 0, 1, 23, 69, 34, 23, 13, 9, 5, 4, 3, 2, 1, 1, 0], 0.5, 5, 1, 5], [4.5, 0.45]], ['coda 23', [[0, 2, 0, 2, 1, 16, 48, 28, 19, 15, 9, 4, 3, 1, 1, 2], 1.0, 5, 2, 30], [6.0, 0.79]], ['coda 24', [[1, 0, 1, 1, 0, 11, 35, 24, 19, 15, 9, 7, 5, 3, 2, 1, 1, 1, 0], 2.0, 5, 1, 120], [18.0, 2.06]], ['coda 25', [[1, 0, 12, 36, 18, 14, 8, 4, 3, 1, 1, 1], 1.0, 2, 2, 30], [5.0, 0.63]], ['coda 26', [[0, 0, 1, 11, 34, 17, 11, 7, 3, 1], 2.0, 3, 1, 120], [12.0, 1.71]], ['coda 27', [[1, 1, 0, 8, 24, 16, 9, 5, 3, 1], 2.0, 3, 1, 120], [12.0, 1.71]]], [['coda 12', [[2, 1, 9, 28, 22, 13, 9, 7, 5, 4, 2, 2], 1.0, 2, 2, 30], [7.0, 0.93]], ['coda 28', [[1, 2, 3, 7, 21, 16, 12, 9, 5, 3, 1, 0, 0], 0.5, 3, 3, 5], [2.5, -0.06]], ['coda 29', [[0, 0, 1, 17, 53, 42, 33, 16, 12, 9, 6, 3, 2, 1], 2.0, 3, 1, 120], [18.0, 2.06]], ['coda 30', [[2, 2, 0, 1, 2, 19, 58, 34, 27, 16, 11, 7, 5, 4, 2, 1], 2.0, 5, 2, 120], [16.0, 1.96]], ['coda 31', [[2, 3, 1, 19, 59, 47, 23, 13, 10, 6, 3, 0, 1, 3], 0.5, 3, 3, 5], [3.0, 0.1]], ['coda 32', [[1, 0, 12, 38, 26, 15, 9, 4, 3, 2, 1], 0.5, 2, 2, 5], [2.5, -0.06]], ['coda 33', [[2, 0, 11, 34, 23, 16, 8, 4, 2, 1, 0, 3], 2.0, 2, 3, 120], [10.0, 1.55]], ['coda never ends', [[0, 0, 40, 30, 25, 20], 1.0, 2, 1, 10], None]]]\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":"Stipulated deterministic teaching model of a seismological magnitude procedure; constants and tables are fixed by the contract and no claim of agency or standards conformance is made. 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-seismic_magnitude_estimation-coda-duration-md-duration-log-base","generated_at":"2026-09-29T14:48:30.050368+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Duration magnitude is robust for small events with clipped or noisy amplitudes.","repair":"Use log10 of duration in seconds.","root_cause":"The duration term uses the natural log.","sha256":"fbb8e629434415ba2994ea354ca7d2aa2d100f90694279c1da53942abe2f34c0","title":"Coda duration magnitude: duration log base · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.148,"exit_code":1,"observations":[{"actual":[7.0,0.93],"check":"coda 0","expected":[7.0,0.93],"passed":true},{"actual":[4.0,0.95],"check":"coda 1","expected":[4.0,0.35],"passed":false},{"actual":[3.5,0.84],"check":"coda 2","expected":[3.5,0.24],"passed":false},{"actual":[4.0,0.95],"check":"coda 3","expected":[4.0,0.35],"passed":false},{"actual":[3.5,0.84],"check":"coda 4","expected":[3.5,0.24],"passed":false},{"actual":[14.0,1.24],"check":"coda 5","expected":[14.0,1.84],"passed":false},{"actual":[20.0,1.55],"check":"coda 6","expected":[20.0,2.15],"passed":false},{"actual":[7.0,0.93],"check":"coda 7","expected":[7.0,0.93],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"coda 0\", \"actual\": [7.0, 0.93], \"expected\": [7.0, 0.93], \"passed\": true}, {\"check\": \"coda 1\", \"actual\": [4.0, 0.95], \"expected\": [4.0, 0.35], \"passed\": false}, {\"check\": \"coda 2\", \"actual\": [3.5, 0.84], \"expected\": [3.5, 0.24], \"passed\": false}, {\"check\": \"coda 3\", \"actual\": [4.0, 0.95], \"expected\": [4.0, 0.35], \"passed\": false}, {\"check\": \"coda 4\", \"actual\": [3.5, 0.84], \"expected\": [3.5, 0.24], \"passed\": false}, {\"check\": \"coda 5\", \"actual\": [14.0, 1.24], \"expected\": [14.0, 1.84], \"passed\": false}, {\"check\": \"coda 6\", \"actual\": [20.0, 1.55], \"expected\": [20.0, 2.15], \"passed\": false}, {\"check\": \"coda 7\", \"actual\": [7.0, 0.93], \"expected\": [7.0, 0.93], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.049,"exit_code":1,"observations":[{"actual":[7.0,3.13],"check":"coda 0","expected":[7.0,0.93],"passed":false},{"actual":[4.0,1.92],"check":"coda 1","expected":[4.0,0.35],"passed":false},{"actual":[3.5,1.65],"check":"coda 2","expected":[3.5,0.24],"passed":false},{"actual":[4.0,1.92],"check":"coda 3","expected":[4.0,0.35],"passed":false},{"actual":[3.5,1.65],"check":"coda 4","expected":[3.5,0.24],"passed":false},{"actual":[14.0,4.83],"check":"coda 5","expected":[14.0,1.84],"passed":false},{"actual":[20.0,5.54],"check":"coda 6","expected":[20.0,2.15],"passed":false},{"actual":[7.0,3.13],"check":"coda 7","expected":[7.0,0.93],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"coda 0\", \"actual\": [7.0, 3.13], \"expected\": [7.0, 0.93], \"passed\": false}, {\"check\": \"coda 1\", \"actual\": [4.0, 1.92], \"expected\": [4.0, 0.35], \"passed\": false}, {\"check\": \"coda 2\", \"actual\": [3.5, 1.65], \"expected\": [3.5, 0.24], \"passed\": false}, {\"check\": \"coda 3\", \"actual\": [4.0, 1.92], \"expected\": [4.0, 0.35], \"passed\": false}, {\"check\": \"coda 4\", \"actual\": [3.5, 1.65], \"expected\": [3.5, 0.24], \"passed\": false}, {\"check\": \"coda 5\", \"actual\": [14.0, 4.83], \"expected\": [14.0, 1.84], \"passed\": false}, {\"check\": \"coda 6\", \"actual\": [20.0, 5.54], \"expected\": [20.0, 2.15], \"passed\": false}, {\"check\": \"coda 7\", \"actual\": [7.0, 3.13], \"expected\": [7.0, 0.93], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.075,"exit_code":0,"observations":[{"actual":[7.0,0.93],"check":"coda 0","expected":[7.0,0.93],"passed":true},{"actual":[4.0,0.35],"check":"coda 1","expected":[4.0,0.35],"passed":true},{"actual":[3.5,0.24],"check":"coda 2","expected":[3.5,0.24],"passed":true},{"actual":[4.0,0.35],"check":"coda 3","expected":[4.0,0.35],"passed":true},{"actual":[3.5,0.24],"check":"coda 4","expected":[3.5,0.24],"passed":true},{"actual":[14.0,1.84],"check":"coda 5","expected":[14.0,1.84],"passed":true},{"actual":[20.0,2.15],"check":"coda 6","expected":[20.0,2.15],"passed":true},{"actual":[7.0,0.93],"check":"coda 7","expected":[7.0,0.93],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"coda 0\", \"actual\": [7.0, 0.93], \"expected\": [7.0, 0.93], \"passed\": true}, {\"check\": \"coda 1\", \"actual\": [4.0, 0.35], \"expected\": [4.0, 0.35], \"passed\": true}, {\"check\": \"coda 2\", \"actual\": [3.5, 0.24], \"expected\": [3.5, 0.24], \"passed\": true}, {\"check\": \"coda 3\", \"actual\": [4.0, 0.35], \"expected\": [4.0, 0.35], \"passed\": true}, {\"check\": \"coda 4\", \"actual\": [3.5, 0.24], \"expected\": [3.5, 0.24], \"passed\": true}, {\"check\": \"coda 5\", \"actual\": [14.0, 1.84], \"expected\": [14.0, 1.84], \"passed\": true}, {\"check\": \"coda 6\", \"actual\": [20.0, 2.15], \"expected\": [20.0, 2.15], \"passed\": true}, {\"check\": \"coda 7\", \"actual\": [7.0, 0.93], \"expected\": [7.0, 0.93], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}