{"abstract":"Heavy rain drives the drought index negative.","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":"Restoring the floor but scaling net rain by 10 treats Q as tenths of an inch.","family":"w2-weather_index_computation-keetch-byram-drought-rain-reduction-floor","id":"FA-71046","implementations":{"attempt":{"sha256":"11371385bf1ac977a68c0877dadf0436082300995c40ace7f1d77c79555869fd","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 - 10.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 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 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 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 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 20', [150, 70, [[45, 0], [70, 0.3], [50, 0.6], [70, 0.3], [50, 0.05], [70, 0.3], [50, 0.3]]], [150, 149, 89, 69, 64, 45, 15]]], [['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 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 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 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]]]]\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":"d5e2386c14e2c803036cdfef1ad3bcbac81e3b5669a3ba8339378219eec1e38f","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 = q - 100.0 * net\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 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 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 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 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 20', [150, 70, [[45, 0], [70, 0.3], [50, 0.6], [70, 0.3], [50, 0.05], [70, 0.3], [50, 0.3]]], [150, 149, 89, 69, 64, 45, 15]]], [['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 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 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 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]]]]\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":"24a81ed32228d3c74fbb1fcea33b3f40aa8f86d3aa1b0cd8450657cbd052994a","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 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 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 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 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 20', [150, 70, [[45, 0], [70, 0.3], [50, 0.6], [70, 0.3], [50, 0.05], [70, 0.3], [50, 0.3]]], [150, 149, 89, 69, 64, 45, 15]]], [['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 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 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 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]]]]\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-rain-reduction-floor","generated_at":"2026-09-29T14:48:26.178829+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":"Clamp Q at zero after subtracting 100*net.","root_cause":"The rainfall reduction is not floored at zero.","sha256":"65962d973261c5308b8e75cd021d650bbcb0c2b812dc1babecb903f6bfdd5ef9","title":"Keetch-Byram style drought index: rain reduction floor · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.034,"exit_code":1,"observations":[{"actual":[691,688,685,685,685,685,686],"check":"station 0","expected":[602,548,519,519,519,519,520],"passed":false},{"actual":[161,171,169,158,158,169,164],"check":"station 1","expected":[161,166,151,32,33,45,1],"passed":false},{"actual":[8,7,19,22,34,41,41],"check":"station 2","expected":[8,0,13,16,19,26,26],"passed":false},{"actual":[150,151,153,153,152,163,163],"check":"station 3","expected":[150,151,153,153,143,154,154],"passed":false},{"actual":[152,152,152,152,152,146,147],"check":"station 4","expected":[152,152,152,152,50,8,8],"passed":false},{"actual":[400,402,397,387,400,397,408],"check":"station 5","expected":[400,402,343,225,231,201,193],"passed":false},{"actual":[11,20,23,50,94,90,90],"check":"station 6","expected":[11,11,9,37,73,16,16],"passed":false},{"actual":[404,408,411,427,428,424,424],"check":"station 7","expected":[404,408,411,427,428,383,383],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"station 0\", \"actual\": [691, 688, 685, 685, 685, 685, 686], \"expected\": [602, 548, 519, 519, 519, 519, 520], \"passed\": false}, {\"check\": \"station 1\", \"actual\": [161, 171, 169, 158, 158, 169, 164], \"expected\": [161, 166, 151, 32, 33, 45, 1], \"passed\": false}, {\"check\": \"station 2\", \"actual\": [8, 7, 19, 22, 34, 41, 41], \"expected\": [8, 0, 13, 16, 19, 26, 26], \"passed\": false}, {\"check\": \"station 3\", \"actual\": [150, 151, 153, 153, 152, 163, 163], \"expected\": [150, 151, 153, 153, 143, 154, 154], \"passed\": false}, {\"check\": \"station 4\", \"actual\": [152, 152, 152, 152, 152, 146, 147], \"expected\": [152, 152, 152, 152, 50, 8, 8], \"passed\": false}, {\"check\": \"station 5\", \"actual\": [400, 402, 397, 387, 400, 397, 408], \"expected\": [400, 402, 343, 225, 231, 201, 193], \"passed\": false}, {\"check\": \"station 6\", \"actual\": [11, 20, 23, 50, 94, 90, 90], \"expected\": [11, 11, 9, 37, 73, 16, 16], \"passed\": false}, {\"check\": \"station 7\", \"actual\": [404, 408, 411, 427, 428, 424, 424], \"expected\": [404, 408, 411, 427, 428, 383, 383], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.814,"exit_code":1,"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,-9],"check":"station 1","expected":[161,166,151,32,33,45,1],"passed":false},{"actual":[8,-2,11,14,17,24,24],"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,-62,-61],"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,2,0,28,65,8,8],"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, 519, 520], \"expected\": [602, 548, 519, 519, 519, 519, 520], \"passed\": true}, {\"check\": \"station 1\", \"actual\": [161, 166, 151, 32, 33, 45, -9], \"expected\": [161, 166, 151, 32, 33, 45, 1], \"passed\": false}, {\"check\": \"station 2\", \"actual\": [8, -2, 11, 14, 17, 24, 24], \"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, -62, -61], \"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, 2, 0, 28, 65, 8, 8], \"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"},"fixed":{"elapsed_ms":40.552,"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"}