{"abstract":"After the first storm of the season, later showers are never intercepted.","category":"Weather index computation","checks":8,"contract":"State Q in hundredths of an inch (0..800). Each day [tmax_F, rain_in]: rain days extend the current wet spell; the first 0.20 in of each spell is intercepted and only newly exceeding rain reduces Q by 100*net (floor 0). A dry day ends the spell. If tmax > 50, Q increases by (800-Q)*(0.968exp(0.0486T)-8.30)*0.001/(1+10.88exp(-0.0441*annual_in)), capped at 800. Return daily Q rounded to integers.","evaluation_group":"w2-weather_index_computation-keetch-byram-drought","failed_approach":"Decaying the spell by 0.20 per dry day still carries interception credit across dry days.","family":"w2-weather_index_computation-keetch-byram-drought-wet-spell-reset","id":"FA-71036","implementations":{"attempt":{"sha256":"6a4e7d7d0a82843a922ea67574a1a1bfc3af33108cff717cc4cb8ca246548ea3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(q0, annual_in, days):\n    q = float(q0)\n    spell = 0.0\n    out = []\n    for tmax, rain in days:\n        if rain > 0:\n            before = max(spell - 0.20, 0.0)\n            spell += rain\n            net = max(spell - 0.20, 0.0) - before\n            q = max(q - 100.0 * net, 0.0)\n        else:\n            spell = max(spell - 0.20, 0.0)\n        if tmax > 50:\n            dq = (800.0 - q) * (0.968 * math.exp(0.0486 * tmax) - 8.30) * 0.001 / (1 + 10.88 * math.exp(-0.0441 * annual_in))\n            q = min(q + max(dq, 0.0), 800.0)\n        out.append(round(q))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['station 0', [700, 50, [[70, 1.2], [85, 0.6], [55, 0.3], [50, 0], [55, 0], [45, 0.05], [55, 0.05]]], [602, 548, 519, 519, 519, 519, 520]], ['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 2', [0, 20, [[85, 0.15], [50, 0.15], [95, 0], [70, 0], [95, 0.3], [85, 0], [50, 0.15]]], [8, 0, 13, 16, 19, 26, 26]], ['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 4', [150, 20, [[70, 0.15], [45, 0.05], [45, 0], [50, 0.15], [95, 1.2], [85, 1.2], [55, 0]]], [152, 152, 152, 152, 50, 8, 8]], ['station 5', [400, 70, [[50, 0.1], [55, 0.1], [55, 0.6], [55, 1.2], [85, 0.15], [45, 0.3], [85, 0.3]]], [400, 402, 343, 225, 231, 201, 193]], ['station 6', [0, 70, [[70, 0.1], [70, 0.3], [55, 0.05], [85, 0], [95, 0.3], [55, 0.6], [50, 0]]], [11, 11, 9, 37, 73, 16, 16]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]]], [['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 8', [150, 20, [[85, 0.3], [70, 0], [45, 0.1], [55, 0], [95, 1.2], [55, 0.6], [85, 0.15]]], [146, 149, 149, 149, 62, 2, 8]], ['station 9', [700, 50, [[95, 0.3], [50, 0], [95, 0], [45, 0.1], [85, 0.1], [70, 0.1], [45, 0.1]]], [694, 694, 699, 699, 701, 692, 682]], ['station 10', [0, 70, [[95, 1.2], [55, 0.3], [70, 0], [45, 0], [95, 0.15], [95, 0], [85, 0]]], [48, 21, 32, 32, 78, 121, 145]], ['station 11', [700, 50, [[45, 0.6], [45, 0], [50, 0.6], [95, 0.05], [95, 0.1], [85, 0], [50, 1.2]]], [660, 660, 620, 623, 620, 624, 524]], ['station 12', [700, 50, [[45, 0.6], [50, 0.15], [70, 0.15], [85, 0.3], [50, 0.05], [50, 0.05], [45, 0]]], [660, 645, 632, 606, 601, 596, 596]], ['station 13', [400, 50, [[45, 0.05], [50, 0], [95, 0.3], [85, 0.1], [55, 0.3], [45, 0], [95, 0.1]]], [400, 400, 407, 406, 377, 377, 395]]], [['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 14', [0, 20, [[55, 0], [95, 0.05], [50, 0.3], [70, 0.15], [70, 0.1], [85, 0.15], [55, 0.15]]], [1, 14, 0, 3, 3, 8, 1]], ['station 15', [150, 20, [[50, 0.1], [55, 0], [45, 0], [70, 0.1], [85, 0], [45, 0], [70, 0.05]]], [150, 151, 151, 153, 159, 159, 162]], ['station 16', [400, 50, [[95, 0.05], [85, 1.2], [45, 0], [55, 0], [55, 0], [50, 1.2], [95, 1.2]]], [416, 323, 323, 324, 325, 225, 134]], ['station 17', [700, 70, [[70, 0.3], [50, 0.3], [50, 0.6], [55, 1.2], [50, 0], [45, 0], [70, 1.2]]], [692, 662, 602, 483, 483, 483, 389]], ['station 18', [150, 20, [[55, 1.2], [55, 0.1], [85, 0.1], [85, 0.6], [95, 0.05], [85, 0.6], [45, 0.6]]], [51, 42, 39, 8, 16, 8, 0]], ['station 19', [0, 70, [[85, 0.6], [45, 0.15], [50, 0], [55, 1.2], [50, 0], [85, 0.3], [95, 0.05]]], [28, 13, 13, 3, 3, 28, 69]]], [['station 10', [0, 70, [[95, 1.2], [55, 0.3], [70, 0], [45, 0], [95, 0.15], [95, 0], [85, 0]]], [48, 21, 32, 32, 78, 121, 145]], ['station 13', [400, 50, [[45, 0.05], [50, 0], [95, 0.3], [85, 0.1], [55, 0.3], [45, 0], [95, 0.1]]], [400, 400, 407, 406, 377, 377, 395]], ['station 21', [150, 20, [[45, 0], [55, 0.1], [70, 0], [55, 0.15], [45, 0.15], [55, 0.1], [85, 0]]], [150, 151, 153, 154, 144, 134, 141]], ['station 22', [150, 20, [[45, 0.05], [70, 0], [50, 0], [85, 1.2], [50, 0], [95, 0], [95, 1.2]]], [150, 152, 152, 60, 60, 72, 13]], ['station 23', [400, 50, [[95, 0.1], [85, 0.3], [50, 0.6], [50, 1.2], [85, 1.2], [45, 0.3], [95, 0.3]]], [416, 406, 346, 226, 122, 92, 92]], ['wet spell of small showers', [300, 50, [[80, 0.1], [80, 0.1], [80, 0.1], [80, 0], [80, 0.15]]], [309, 318, 316, 325, 333]], ['exactly 50F day', [200, 40, [[50, 0], [50, 0]]], [200, 200]], ['downpour on dry soil', [40, 50, [[70, 1.0]]], [8]]], [['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 2', [0, 20, [[85, 0.15], [50, 0.15], [95, 0], [70, 0], [95, 0.3], [85, 0], [50, 0.15]]], [8, 0, 13, 16, 19, 26, 26]], ['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 4', [150, 20, [[70, 0.15], [45, 0.05], [45, 0], [50, 0.15], [95, 1.2], [85, 1.2], [55, 0]]], [152, 152, 152, 152, 50, 8, 8]], ['station 5', [400, 70, [[50, 0.1], [55, 0.1], [55, 0.6], [55, 1.2], [85, 0.15], [45, 0.3], [85, 0.3]]], [400, 402, 343, 225, 231, 201, 193]], ['station 6', [0, 70, [[70, 0.1], [70, 0.3], [55, 0.05], [85, 0], [95, 0.3], [55, 0.6], [50, 0]]], [11, 11, 9, 37, 73, 16, 16]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 15', [150, 20, [[50, 0.1], [55, 0], [45, 0], [70, 0.1], [85, 0], [45, 0], [70, 0.05]]], [150, 151, 151, 153, 159, 159, 162]]]]\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":"572a4a103b94d047f357f8ccdce12379deb0a5b5c92cc3e6a196bfb24f994e11","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(q0, annual_in, days):\n    q = float(q0)\n    spell = 0.0\n    out = []\n    for tmax, rain in days:\n        if rain > 0:\n            before = max(spell - 0.20, 0.0)\n            spell += rain\n            net = max(spell - 0.20, 0.0) - before\n            q = max(q - 100.0 * net, 0.0)\n        else:\n            pass\n        if tmax > 50:\n            dq = (800.0 - q) * (0.968 * math.exp(0.0486 * tmax) - 8.30) * 0.001 / (1 + 10.88 * math.exp(-0.0441 * annual_in))\n            q = min(q + max(dq, 0.0), 800.0)\n        out.append(round(q))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['station 0', [700, 50, [[70, 1.2], [85, 0.6], [55, 0.3], [50, 0], [55, 0], [45, 0.05], [55, 0.05]]], [602, 548, 519, 519, 519, 519, 520]], ['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 2', [0, 20, [[85, 0.15], [50, 0.15], [95, 0], [70, 0], [95, 0.3], [85, 0], [50, 0.15]]], [8, 0, 13, 16, 19, 26, 26]], ['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 4', [150, 20, [[70, 0.15], [45, 0.05], [45, 0], [50, 0.15], [95, 1.2], [85, 1.2], [55, 0]]], [152, 152, 152, 152, 50, 8, 8]], ['station 5', [400, 70, [[50, 0.1], [55, 0.1], [55, 0.6], [55, 1.2], [85, 0.15], [45, 0.3], [85, 0.3]]], [400, 402, 343, 225, 231, 201, 193]], ['station 6', [0, 70, [[70, 0.1], [70, 0.3], [55, 0.05], [85, 0], [95, 0.3], [55, 0.6], [50, 0]]], [11, 11, 9, 37, 73, 16, 16]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]]], [['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 8', [150, 20, [[85, 0.3], [70, 0], [45, 0.1], [55, 0], [95, 1.2], [55, 0.6], [85, 0.15]]], [146, 149, 149, 149, 62, 2, 8]], ['station 9', [700, 50, [[95, 0.3], [50, 0], [95, 0], [45, 0.1], [85, 0.1], [70, 0.1], [45, 0.1]]], [694, 694, 699, 699, 701, 692, 682]], ['station 10', [0, 70, [[95, 1.2], [55, 0.3], [70, 0], [45, 0], [95, 0.15], [95, 0], [85, 0]]], [48, 21, 32, 32, 78, 121, 145]], ['station 11', [700, 50, [[45, 0.6], [45, 0], [50, 0.6], [95, 0.05], [95, 0.1], [85, 0], [50, 1.2]]], [660, 660, 620, 623, 620, 624, 524]], ['station 12', [700, 50, [[45, 0.6], [50, 0.15], [70, 0.15], [85, 0.3], [50, 0.05], [50, 0.05], [45, 0]]], [660, 645, 632, 606, 601, 596, 596]], ['station 13', [400, 50, [[45, 0.05], [50, 0], [95, 0.3], [85, 0.1], [55, 0.3], [45, 0], [95, 0.1]]], [400, 400, 407, 406, 377, 377, 395]]], [['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 14', [0, 20, [[55, 0], [95, 0.05], [50, 0.3], [70, 0.15], [70, 0.1], [85, 0.15], [55, 0.15]]], [1, 14, 0, 3, 3, 8, 1]], ['station 15', [150, 20, [[50, 0.1], [55, 0], [45, 0], [70, 0.1], [85, 0], [45, 0], [70, 0.05]]], [150, 151, 151, 153, 159, 159, 162]], ['station 16', [400, 50, [[95, 0.05], [85, 1.2], [45, 0], [55, 0], [55, 0], [50, 1.2], [95, 1.2]]], [416, 323, 323, 324, 325, 225, 134]], ['station 17', [700, 70, [[70, 0.3], [50, 0.3], [50, 0.6], [55, 1.2], [50, 0], [45, 0], [70, 1.2]]], [692, 662, 602, 483, 483, 483, 389]], ['station 18', [150, 20, [[55, 1.2], [55, 0.1], [85, 0.1], [85, 0.6], [95, 0.05], [85, 0.6], [45, 0.6]]], [51, 42, 39, 8, 16, 8, 0]], ['station 19', [0, 70, [[85, 0.6], [45, 0.15], [50, 0], [55, 1.2], [50, 0], [85, 0.3], [95, 0.05]]], [28, 13, 13, 3, 3, 28, 69]]], [['station 10', [0, 70, [[95, 1.2], [55, 0.3], [70, 0], [45, 0], [95, 0.15], [95, 0], [85, 0]]], [48, 21, 32, 32, 78, 121, 145]], ['station 13', [400, 50, [[45, 0.05], [50, 0], [95, 0.3], [85, 0.1], [55, 0.3], [45, 0], [95, 0.1]]], [400, 400, 407, 406, 377, 377, 395]], ['station 21', [150, 20, [[45, 0], [55, 0.1], [70, 0], [55, 0.15], [45, 0.15], [55, 0.1], [85, 0]]], [150, 151, 153, 154, 144, 134, 141]], ['station 22', [150, 20, [[45, 0.05], [70, 0], [50, 0], [85, 1.2], [50, 0], [95, 0], [95, 1.2]]], [150, 152, 152, 60, 60, 72, 13]], ['station 23', [400, 50, [[95, 0.1], [85, 0.3], [50, 0.6], [50, 1.2], [85, 1.2], [45, 0.3], [95, 0.3]]], [416, 406, 346, 226, 122, 92, 92]], ['wet spell of small showers', [300, 50, [[80, 0.1], [80, 0.1], [80, 0.1], [80, 0], [80, 0.15]]], [309, 318, 316, 325, 333]], ['exactly 50F day', [200, 40, [[50, 0], [50, 0]]], [200, 200]], ['downpour on dry soil', [40, 50, [[70, 1.0]]], [8]]], [['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 2', [0, 20, [[85, 0.15], [50, 0.15], [95, 0], [70, 0], [95, 0.3], [85, 0], [50, 0.15]]], [8, 0, 13, 16, 19, 26, 26]], ['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 4', [150, 20, [[70, 0.15], [45, 0.05], [45, 0], [50, 0.15], [95, 1.2], [85, 1.2], [55, 0]]], [152, 152, 152, 152, 50, 8, 8]], ['station 5', [400, 70, [[50, 0.1], [55, 0.1], [55, 0.6], [55, 1.2], [85, 0.15], [45, 0.3], [85, 0.3]]], [400, 402, 343, 225, 231, 201, 193]], ['station 6', [0, 70, [[70, 0.1], [70, 0.3], [55, 0.05], [85, 0], [95, 0.3], [55, 0.6], [50, 0]]], [11, 11, 9, 37, 73, 16, 16]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 15', [150, 20, [[50, 0.1], [55, 0], [45, 0], [70, 0.1], [85, 0], [45, 0], [70, 0.05]]], [150, 151, 151, 153, 159, 159, 162]]]]\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":"e28e8b5ac0bc3e41b409bd70135371a2abfc45c4ba1bb98867d8c2e61d6ace78","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(q0, annual_in, days):\n    q = float(q0)\n    spell = 0.0\n    out = []\n    for tmax, rain in days:\n        if rain > 0:\n            before = max(spell - 0.20, 0.0)\n            spell += rain\n            net = max(spell - 0.20, 0.0) - before\n            q = max(q - 100.0 * net, 0.0)\n        else:\n            spell = 0.0\n        if tmax > 50:\n            dq = (800.0 - q) * (0.968 * math.exp(0.0486 * tmax) - 8.30) * 0.001 / (1 + 10.88 * math.exp(-0.0441 * annual_in))\n            q = min(q + max(dq, 0.0), 800.0)\n        out.append(round(q))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['station 0', [700, 50, [[70, 1.2], [85, 0.6], [55, 0.3], [50, 0], [55, 0], [45, 0.05], [55, 0.05]]], [602, 548, 519, 519, 519, 519, 520]], ['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 2', [0, 20, [[85, 0.15], [50, 0.15], [95, 0], [70, 0], [95, 0.3], [85, 0], [50, 0.15]]], [8, 0, 13, 16, 19, 26, 26]], ['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 4', [150, 20, [[70, 0.15], [45, 0.05], [45, 0], [50, 0.15], [95, 1.2], [85, 1.2], [55, 0]]], [152, 152, 152, 152, 50, 8, 8]], ['station 5', [400, 70, [[50, 0.1], [55, 0.1], [55, 0.6], [55, 1.2], [85, 0.15], [45, 0.3], [85, 0.3]]], [400, 402, 343, 225, 231, 201, 193]], ['station 6', [0, 70, [[70, 0.1], [70, 0.3], [55, 0.05], [85, 0], [95, 0.3], [55, 0.6], [50, 0]]], [11, 11, 9, 37, 73, 16, 16]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]]], [['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 8', [150, 20, [[85, 0.3], [70, 0], [45, 0.1], [55, 0], [95, 1.2], [55, 0.6], [85, 0.15]]], [146, 149, 149, 149, 62, 2, 8]], ['station 9', [700, 50, [[95, 0.3], [50, 0], [95, 0], [45, 0.1], [85, 0.1], [70, 0.1], [45, 0.1]]], [694, 694, 699, 699, 701, 692, 682]], ['station 10', [0, 70, [[95, 1.2], [55, 0.3], [70, 0], [45, 0], [95, 0.15], [95, 0], [85, 0]]], [48, 21, 32, 32, 78, 121, 145]], ['station 11', [700, 50, [[45, 0.6], [45, 0], [50, 0.6], [95, 0.05], [95, 0.1], [85, 0], [50, 1.2]]], [660, 660, 620, 623, 620, 624, 524]], ['station 12', [700, 50, [[45, 0.6], [50, 0.15], [70, 0.15], [85, 0.3], [50, 0.05], [50, 0.05], [45, 0]]], [660, 645, 632, 606, 601, 596, 596]], ['station 13', [400, 50, [[45, 0.05], [50, 0], [95, 0.3], [85, 0.1], [55, 0.3], [45, 0], [95, 0.1]]], [400, 400, 407, 406, 377, 377, 395]]], [['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 14', [0, 20, [[55, 0], [95, 0.05], [50, 0.3], [70, 0.15], [70, 0.1], [85, 0.15], [55, 0.15]]], [1, 14, 0, 3, 3, 8, 1]], ['station 15', [150, 20, [[50, 0.1], [55, 0], [45, 0], [70, 0.1], [85, 0], [45, 0], [70, 0.05]]], [150, 151, 151, 153, 159, 159, 162]], ['station 16', [400, 50, [[95, 0.05], [85, 1.2], [45, 0], [55, 0], [55, 0], [50, 1.2], [95, 1.2]]], [416, 323, 323, 324, 325, 225, 134]], ['station 17', [700, 70, [[70, 0.3], [50, 0.3], [50, 0.6], [55, 1.2], [50, 0], [45, 0], [70, 1.2]]], [692, 662, 602, 483, 483, 483, 389]], ['station 18', [150, 20, [[55, 1.2], [55, 0.1], [85, 0.1], [85, 0.6], [95, 0.05], [85, 0.6], [45, 0.6]]], [51, 42, 39, 8, 16, 8, 0]], ['station 19', [0, 70, [[85, 0.6], [45, 0.15], [50, 0], [55, 1.2], [50, 0], [85, 0.3], [95, 0.05]]], [28, 13, 13, 3, 3, 28, 69]]], [['station 10', [0, 70, [[95, 1.2], [55, 0.3], [70, 0], [45, 0], [95, 0.15], [95, 0], [85, 0]]], [48, 21, 32, 32, 78, 121, 145]], ['station 13', [400, 50, [[45, 0.05], [50, 0], [95, 0.3], [85, 0.1], [55, 0.3], [45, 0], [95, 0.1]]], [400, 400, 407, 406, 377, 377, 395]], ['station 21', [150, 20, [[45, 0], [55, 0.1], [70, 0], [55, 0.15], [45, 0.15], [55, 0.1], [85, 0]]], [150, 151, 153, 154, 144, 134, 141]], ['station 22', [150, 20, [[45, 0.05], [70, 0], [50, 0], [85, 1.2], [50, 0], [95, 0], [95, 1.2]]], [150, 152, 152, 60, 60, 72, 13]], ['station 23', [400, 50, [[95, 0.1], [85, 0.3], [50, 0.6], [50, 1.2], [85, 1.2], [45, 0.3], [95, 0.3]]], [416, 406, 346, 226, 122, 92, 92]], ['wet spell of small showers', [300, 50, [[80, 0.1], [80, 0.1], [80, 0.1], [80, 0], [80, 0.15]]], [309, 318, 316, 325, 333]], ['exactly 50F day', [200, 40, [[50, 0], [50, 0]]], [200, 200]], ['downpour on dry soil', [40, 50, [[70, 1.0]]], [8]]], [['station 1', [150, 20, [[95, 0.1], [95, 0.15], [50, 0.15], [55, 1.2], [55, 0], [95, 0.15], [55, 0.6]]], [161, 166, 151, 32, 33, 45, 1]], ['station 2', [0, 20, [[85, 0.15], [50, 0.15], [95, 0], [70, 0], [95, 0.3], [85, 0], [50, 0.15]]], [8, 0, 13, 16, 19, 26, 26]], ['station 3', [150, 20, [[50, 0], [55, 0.05], [70, 0.1], [50, 0], [45, 0.3], [95, 0], [45, 0]]], [150, 151, 153, 153, 143, 154, 154]], ['station 4', [150, 20, [[70, 0.15], [45, 0.05], [45, 0], [50, 0.15], [95, 1.2], [85, 1.2], [55, 0]]], [152, 152, 152, 152, 50, 8, 8]], ['station 5', [400, 70, [[50, 0.1], [55, 0.1], [55, 0.6], [55, 1.2], [85, 0.15], [45, 0.3], [85, 0.3]]], [400, 402, 343, 225, 231, 201, 193]], ['station 6', [0, 70, [[70, 0.1], [70, 0.3], [55, 0.05], [85, 0], [95, 0.3], [55, 0.6], [50, 0]]], [11, 11, 9, 37, 73, 16, 16]], ['station 7', [400, 50, [[70, 0], [70, 0.05], [70, 0.15], [95, 0], [55, 0.05], [45, 0.6], [50, 0]]], [404, 408, 411, 427, 428, 383, 383]], ['station 15', [150, 20, [[50, 0.1], [55, 0], [45, 0], [70, 0.1], [85, 0], [45, 0], [70, 0.05]]], [150, 151, 151, 153, 159, 159, 162]]]]\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 an operational weather index; coefficients and thresholds are fixed by the contract and no claim of 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-weather_index_computation-keetch-byram-drought-wet-spell-reset","generated_at":"2026-09-29T14:48:26.095535+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Wildfire danger ratings and burn bans use the daily drought index.","repair":"Reset the spell total to zero on every rain-free day.","root_cause":"The wet-spell accumulator is not reset on dry days.","sha256":"69accd0948d4aa2073da67b8192d6fed8b40d3ecab019f69f93fcd338139a59f","title":"Keetch-Byram style drought index: wet spell reset · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.177,"exit_code":1,"observations":[{"actual":[602,548,519,519,519,514,510],"check":"station 0","expected":[602,548,519,519,519,519,520],"passed":false},{"actual":[161,166,151,32,33,30,1],"check":"station 1","expected":[161,166,151,32,33,45,1],"passed":false},{"actual":[8,0,13,16,19,26,21],"check":"station 2","expected":[8,0,13,16,19,26,26],"passed":false},{"actual":[150,151,153,153,143,154,154],"check":"station 3","expected":[150,151,153,153,143,154,154],"passed":true},{"actual":[152,152,152,152,50,8,8],"check":"station 4","expected":[152,152,152,152,50,8,8],"passed":true},{"actual":[400,402,343,225,231,201,193],"check":"station 5","expected":[400,402,343,225,231,201,193],"passed":true},{"actual":[11,11,9,37,54,3,3],"check":"station 6","expected":[11,11,9,37,73,16,16],"passed":false},{"actual":[404,408,411,427,428,383,383],"check":"station 7","expected":[404,408,411,427,428,383,383],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"station 0\", \"actual\": [602, 548, 519, 519, 519, 514, 510], \"expected\": [602, 548, 519, 519, 519, 519, 520], \"passed\": false}, {\"check\": \"station 1\", \"actual\": [161, 166, 151, 32, 33, 30, 1], \"expected\": [161, 166, 151, 32, 33, 45, 1], \"passed\": false}, {\"check\": \"station 2\", \"actual\": [8, 0, 13, 16, 19, 26, 21], \"expected\": [8, 0, 13, 16, 19, 26, 26], \"passed\": false}, {\"check\": \"station 3\", \"actual\": [150, 151, 153, 153, 143, 154, 154], \"expected\": [150, 151, 153, 153, 143, 154, 154], \"passed\": true}, {\"check\": \"station 4\", \"actual\": [152, 152, 152, 152, 50, 8, 8], \"expected\": [152, 152, 152, 152, 50, 8, 8], \"passed\": true}, {\"check\": \"station 5\", \"actual\": [400, 402, 343, 225, 231, 201, 193], \"expected\": [400, 402, 343, 225, 231, 201, 193], \"passed\": true}, {\"check\": \"station 6\", \"actual\": [11, 11, 9, 37, 54, 3, 3], \"expected\": [11, 11, 9, 37, 73, 16, 16], \"passed\": false}, {\"check\": \"station 7\", \"actual\": [404, 408, 411, 427, 428, 383, 383], \"expected\": [404, 408, 411, 427, 428, 383, 383], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.246,"exit_code":1,"observations":[{"actual":[602,548,519,519,519,514,510],"check":"station 0","expected":[602,548,519,519,519,519,520],"passed":false},{"actual":[161,166,151,32,33,30,1],"check":"station 1","expected":[161,166,151,32,33,45,1],"passed":false},{"actual":[8,0,13,16,13,20,5],"check":"station 2","expected":[8,0,13,16,19,26,26],"passed":false},{"actual":[150,151,153,153,128,139,139],"check":"station 3","expected":[150,151,153,153,143,154,154],"passed":false},{"actual":[152,152,152,137,30,8,8],"check":"station 4","expected":[152,152,152,152,50,8,8],"passed":false},{"actual":[400,402,343,225,231,201,193],"check":"station 5","expected":[400,402,343,225,231,201,193],"passed":true},{"actual":[11,11,9,37,54,3,3],"check":"station 6","expected":[11,11,9,37,73,16,16],"passed":false},{"actual":[404,408,411,427,423,363,363],"check":"station 7","expected":[404,408,411,427,428,383,383],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"station 0\", \"actual\": [602, 548, 519, 519, 519, 514, 510], \"expected\": [602, 548, 519, 519, 519, 519, 520], \"passed\": false}, {\"check\": \"station 1\", \"actual\": [161, 166, 151, 32, 33, 30, 1], \"expected\": [161, 166, 151, 32, 33, 45, 1], \"passed\": false}, {\"check\": \"station 2\", \"actual\": [8, 0, 13, 16, 13, 20, 5], \"expected\": [8, 0, 13, 16, 19, 26, 26], \"passed\": false}, {\"check\": \"station 3\", \"actual\": [150, 151, 153, 153, 128, 139, 139], \"expected\": [150, 151, 153, 153, 143, 154, 154], \"passed\": false}, {\"check\": \"station 4\", \"actual\": [152, 152, 152, 137, 30, 8, 8], \"expected\": [152, 152, 152, 152, 50, 8, 8], \"passed\": false}, {\"check\": \"station 5\", \"actual\": [400, 402, 343, 225, 231, 201, 193], \"expected\": [400, 402, 343, 225, 231, 201, 193], \"passed\": true}, {\"check\": \"station 6\", \"actual\": [11, 11, 9, 37, 54, 3, 3], \"expected\": [11, 11, 9, 37, 73, 16, 16], \"passed\": false}, {\"check\": \"station 7\", \"actual\": [404, 408, 411, 427, 423, 363, 363], \"expected\": [404, 408, 411, 427, 428, 383, 383], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.978,"exit_code":0,"observations":[{"actual":[602,548,519,519,519,519,520],"check":"station 0","expected":[602,548,519,519,519,519,520],"passed":true},{"actual":[161,166,151,32,33,45,1],"check":"station 1","expected":[161,166,151,32,33,45,1],"passed":true},{"actual":[8,0,13,16,19,26,26],"check":"station 2","expected":[8,0,13,16,19,26,26],"passed":true},{"actual":[150,151,153,153,143,154,154],"check":"station 3","expected":[150,151,153,153,143,154,154],"passed":true},{"actual":[152,152,152,152,50,8,8],"check":"station 4","expected":[152,152,152,152,50,8,8],"passed":true},{"actual":[400,402,343,225,231,201,193],"check":"station 5","expected":[400,402,343,225,231,201,193],"passed":true},{"actual":[11,11,9,37,73,16,16],"check":"station 6","expected":[11,11,9,37,73,16,16],"passed":true},{"actual":[404,408,411,427,428,383,383],"check":"station 7","expected":[404,408,411,427,428,383,383],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"station 0\", \"actual\": [602, 548, 519, 519, 519, 519, 520], \"expected\": [602, 548, 519, 519, 519, 519, 520], \"passed\": true}, {\"check\": \"station 1\", \"actual\": [161, 166, 151, 32, 33, 45, 1], \"expected\": [161, 166, 151, 32, 33, 45, 1], \"passed\": true}, {\"check\": \"station 2\", \"actual\": [8, 0, 13, 16, 19, 26, 26], \"expected\": [8, 0, 13, 16, 19, 26, 26], \"passed\": true}, {\"check\": \"station 3\", \"actual\": [150, 151, 153, 153, 143, 154, 154], \"expected\": [150, 151, 153, 153, 143, 154, 154], \"passed\": true}, {\"check\": \"station 4\", \"actual\": [152, 152, 152, 152, 50, 8, 8], \"expected\": [152, 152, 152, 152, 50, 8, 8], \"passed\": true}, {\"check\": \"station 5\", \"actual\": [400, 402, 343, 225, 231, 201, 193], \"expected\": [400, 402, 343, 225, 231, 201, 193], \"passed\": true}, {\"check\": \"station 6\", \"actual\": [11, 11, 9, 37, 73, 16, 16], \"expected\": [11, 11, 9, 37, 73, 16, 16], \"passed\": true}, {\"check\": \"station 7\", \"actual\": [404, 408, 411, 427, 428, 383, 383], \"expected\": [404, 408, 411, 427, 428, 383, 383], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}