FA-71001 / Weather index computation / Open access
Modified growing degree days with biofix: minimum temperature floor · case 01
Cool nights subtract from the season total.
ROOT CAUSE
Night lows below 50 degF are averaged without raising them to the base.
VERIFIED REPAIR
Raise tmin to 50 before averaging.
Unsuccessful approach: Clamping the daily result at zero instead of raising tmin under-counts warm days with cold nights.
Case contract
days are [day_of_year, tmax_F, tmin_F]; only days with day_of_year >= biofix count. Each day clamps tmax to at most 86 and at least 50, tmin to at least 50 and at most 86, and adds (tmax+tmin)/2 - 50. Return [total rounded to 0.1, number of counted days].
Why this case matters
Pest spray timing and crop stage models accumulate GDD from a biofix date.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(days, biofix):
total = 0.0
counted = 0
for doy, hi, lo in days:
if doy < biofix:
continue
hi = min(hi, 86.0)
hi = max(hi, 50.0)
lo = float(lo)
lo = min(lo, 86.0)
gdd = (hi + lo) / 2 - 50.0
total += gdd
counted += 1
return [round(total, 1), counted]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['season 0 biofix 91', [[[90, 53, 39], [91, 89, 59], [92, 63, 41], [93, 78, 55], [94, 65, 52], [95, 87, 62], [96, 54, 37], [97, 39, 37]], 91], [80.0, 7]], ['season 1 biofix 93', [[[91, 94, 67], [92, 71, 42], [93, 93, 64], [94, 66, 52], [95, 54, 33], [96, 68, 62], [97, 75, 68], [98, 63, 48]], 93], [79.0, 6]], ['season 2 biofix 95', [[[92, 60, 39], [93, 80, 69], [94, 57, 40], [95, 91, 72], [96, 53, 41], [97, 67, 48], [98, 75, 57], [99, 68, 67]], 95], [72.5, 5]], ['season 3 biofix 94', [[[93, 88, 59], [94, 65, 43], [95, 63, 34], [96, 91, 68], [97, 57, 37], [98, 68, 54], [99, 78, 51], [100, 52, 37]], 94], [71.0, 7]], ['season 4 biofix 96', [[[94, 58, 31], [95, 65, 42], [96, 56, 44], [97, 51, 51], [98, 63, 38], [99, 60, 31], [100, 43, 40], [101, 42, 39]], 96], [15.5, 6]], ['season 5 biofix 98', [[[95, 78, 67], [96, 92, 67], [97, 66, 36], [98, 39, 30], [99, 87, 63], [100, 76, 66], [101, 53, 48], [102, 57, 52]], 98], [51.5, 5]], ['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 7 biofix 99', [[[97, 64, 45], [98, 91, 67], [99, 85, 72], [100, 84, 60], [101, 79, 49], [102, 51, 38], [103, 88, 64], [104, 45, 37]], 99], [90.5, 6]]], [['season 3 biofix 94', [[[93, 88, 59], [94, 65, 43], [95, 63, 34], [96, 91, 68], [97, 57, 37], [98, 68, 54], [99, 78, 51], [100, 52, 37]], 94], [71.0, 7]], ['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 7 biofix 99', [[[97, 64, 45], [98, 91, 67], [99, 85, 72], [100, 84, 60], [101, 79, 49], [102, 51, 38], [103, 88, 64], [104, 45, 37]], 99], [90.5, 6]], ['season 8 biofix 101', [[[98, 60, 38], [99, 63, 35], [100, 84, 72], [101, 59, 47], [102, 44, 42], [103, 55, 49], [104, 47, 41], [105, 56, 50]], 101], [10.0, 5]], ['season 9 biofix 100', [[[99, 54, 47], [100, 73, 59], [101, 66, 65], [102, 43, 36], [103, 77, 62], [104, 67, 49], [105, 65, 63], [106, 59, 45]], 100], [78.0, 7]], ['season 10 biofix 102', [[[100, 79, 54], [101, 75, 68], [102, 71, 56], [103, 67, 47], [104, 86, 64], [105, 51, 34], [106, 72, 56], [107, 73, 50]], 102], [73.0, 6]], ['season 11 biofix 104', [[[101, 72, 43], [102, 65, 50], [103, 54, 42], [104, 75, 56], [105, 60, 40], [106, 64, 42], [107, 73, 56], [108, 49, 44]], 104], [42.0, 5]], ['season 12 biofix 103', [[[102, 86, 60], [103, 90, 72], [104, 78, 69], [105, 87, 59], [106, 80, 56], [107, 77, 72], [108, 60, 53], [109, 77, 63]], 103], [144.0, 7]]], [['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 11 biofix 104', [[[101, 72, 43], [102, 65, 50], [103, 54, 42], [104, 75, 56], [105, 60, 40], [106, 64, 42], [107, 73, 56], [108, 49, 44]], 104], [42.0, 5]], ['season 14 biofix 107', [[[104, 63, 45], [105, 46, 36], [106, 102, 72], [107, 65, 45], [108, 70, 69], [109, 55, 39], [110, 84, 63], [111, 72, 63]], 107], [70.5, 5]], ['season 15 biofix 106', [[[105, 54, 48], [106, 54, 37], [107, 47, 37], [108, 74, 65], [109, 79, 70], [110, 66, 51], [111, 50, 33], [112, 69, 65]], 106], [71.5, 7]], ['season 16 biofix 108', [[[106, 85, 68], [107, 49, 49], [108, 74, 71], [109, 53, 38], [110, 90, 60], [111, 53, 45], [112, 84, 56], [113, 80, 67]], 108], [92.0, 6]], ['season 17 biofix 110', [[[107, 50, 45], [108, 46, 40], [109, 81, 55], [110, 57, 40], [111, 78, 56], [112, 59, 37], [113, 93, 63], [114, 76, 66]], 110], [70.5, 5]], ['season 18 biofix 109', [[[108, 75, 70], [109, 52, 49], [110, 62, 53], [111, 40, 31], [112, 79, 51], [113, 50, 31], [114, 77, 61], [115, 78, 68]], 109], [65.5, 7]], ['season 19 biofix 111', [[[109, 53, 48], [110, 85, 64], [111, 89, 65], [112, 60, 57], [113, 63, 35], [114, 77, 57], [115, 50, 45], [116, 76, 46]], 111], [70.5, 6]]], [['season 9 biofix 100', [[[99, 54, 47], [100, 73, 59], [101, 66, 65], [102, 43, 36], [103, 77, 62], [104, 67, 49], [105, 65, 63], [106, 59, 45]], 100], [78.0, 7]], ['season 17 biofix 110', [[[107, 50, 45], [108, 46, 40], [109, 81, 55], [110, 57, 40], [111, 78, 56], [112, 59, 37], [113, 93, 63], [114, 76, 66]], 110], [70.5, 5]], ['season 21 biofix 112', [[[111, 41, 35], [112, 94, 67], [113, 75, 55], [114, 60, 41], [115, 68, 63], [116, 60, 51], [117, 68, 41], [118, 83, 70]], 112], [103.0, 7]], ['season 22 biofix 114', [[[112, 68, 62], [113, 95, 68], [114, 78, 49], [115, 57, 34], [116, 77, 53], [117, 58, 44], [118, 95, 72], [119, 72, 67]], 114], [85.0, 6]], ['season 23 biofix 116', [[[113, 41, 33], [114, 59, 35], [115, 64, 56], [116, 62, 36], [117, 44, 32], [118, 81, 64], [119, 61, 51], [120, 38, 33]], 116], [34.5, 5]], ['hot spell capped', [[[150, 95, 70], [151, 99, 75], [152, 88, 66]], 150], [84.5, 3]], ['cold snap floored', [[[120, 45, 30], [121, 60, 40], [122, 48, 20]], 120], [5.0, 3]], ['biofix day itself', [[[130, 70, 55], [131, 80, 60]], 131], [20.0, 1]]], [['season 0 biofix 91', [[[90, 53, 39], [91, 89, 59], [92, 63, 41], [93, 78, 55], [94, 65, 52], [95, 87, 62], [96, 54, 37], [97, 39, 37]], 91], [80.0, 7]], ['season 1 biofix 93', [[[91, 94, 67], [92, 71, 42], [93, 93, 64], [94, 66, 52], [95, 54, 33], [96, 68, 62], [97, 75, 68], [98, 63, 48]], 93], [79.0, 6]], ['season 2 biofix 95', [[[92, 60, 39], [93, 80, 69], [94, 57, 40], [95, 91, 72], [96, 53, 41], [97, 67, 48], [98, 75, 57], [99, 68, 67]], 95], [72.5, 5]], ['season 13 biofix 105', [[[103, 51, 31], [104, 47, 47], [105, 77, 60], [106, 59, 52], [107, 85, 57], [108, 58, 31], [109, 43, 34], [110, 57, 38]], 105], [52.5, 6]], ['season 22 biofix 114', [[[112, 68, 62], [113, 95, 68], [114, 78, 49], [115, 57, 34], [116, 77, 53], [117, 58, 44], [118, 95, 72], [119, 72, 67]], 114], [85.0, 6]], ['record gap after biofix', [[[140, 75, 55], [141, 80, 58], [145, 82, 60], [146, 70, 52]], 140], [66.0, 4]], ['record starts after biofix', [[[160, 84, 62], [161, 88, 64]], 150], [48.0, 2]], ['cold day after biofix with gap', [[[170, 48, 35], [172, 70, 55]], 169], [12.5, 2]]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| season 0 biofix 91 | [62.5, 7] | [80.0, 7] | Failed |
| season 1 biofix 93 | [69.5, 6] | [79.0, 6] | Failed |
| season 2 biofix 95 | [67.0, 5] | [72.5, 5] | Failed |
| season 3 biofix 94 | [46.5, 7] | [71.0, 7] | Failed |
| season 4 biofix 96 | [-13.5, 6] | [15.5, 6] | Failed |
| season 5 biofix 98 | [40.5, 5] | [51.5, 5] | Failed |
| season 6 biofix 97 | [91.5, 7] | [101.5, 7] | Failed |
| season 7 biofix 99 | [77.5, 6] | [90.5, 6] | Failed |
SHA-256 / dd10f8609a20f8f690451ca72237e08d62bfe7cd9da6f1c05380ab4a856e96c8
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(days, biofix):
total = 0.0
counted = 0
for doy, hi, lo in days:
if doy < biofix:
continue
hi = min(hi, 86.0)
hi = max(hi, 50.0)
lo = float(lo)
lo = min(lo, 86.0)
gdd = max((hi + lo) / 2 - 50.0, 0.0)
total += gdd
counted += 1
return [round(total, 1), counted]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['season 0 biofix 91', [[[90, 53, 39], [91, 89, 59], [92, 63, 41], [93, 78, 55], [94, 65, 52], [95, 87, 62], [96, 54, 37], [97, 39, 37]], 91], [80.0, 7]], ['season 1 biofix 93', [[[91, 94, 67], [92, 71, 42], [93, 93, 64], [94, 66, 52], [95, 54, 33], [96, 68, 62], [97, 75, 68], [98, 63, 48]], 93], [79.0, 6]], ['season 2 biofix 95', [[[92, 60, 39], [93, 80, 69], [94, 57, 40], [95, 91, 72], [96, 53, 41], [97, 67, 48], [98, 75, 57], [99, 68, 67]], 95], [72.5, 5]], ['season 3 biofix 94', [[[93, 88, 59], [94, 65, 43], [95, 63, 34], [96, 91, 68], [97, 57, 37], [98, 68, 54], [99, 78, 51], [100, 52, 37]], 94], [71.0, 7]], ['season 4 biofix 96', [[[94, 58, 31], [95, 65, 42], [96, 56, 44], [97, 51, 51], [98, 63, 38], [99, 60, 31], [100, 43, 40], [101, 42, 39]], 96], [15.5, 6]], ['season 5 biofix 98', [[[95, 78, 67], [96, 92, 67], [97, 66, 36], [98, 39, 30], [99, 87, 63], [100, 76, 66], [101, 53, 48], [102, 57, 52]], 98], [51.5, 5]], ['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 7 biofix 99', [[[97, 64, 45], [98, 91, 67], [99, 85, 72], [100, 84, 60], [101, 79, 49], [102, 51, 38], [103, 88, 64], [104, 45, 37]], 99], [90.5, 6]]], [['season 3 biofix 94', [[[93, 88, 59], [94, 65, 43], [95, 63, 34], [96, 91, 68], [97, 57, 37], [98, 68, 54], [99, 78, 51], [100, 52, 37]], 94], [71.0, 7]], ['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 7 biofix 99', [[[97, 64, 45], [98, 91, 67], [99, 85, 72], [100, 84, 60], [101, 79, 49], [102, 51, 38], [103, 88, 64], [104, 45, 37]], 99], [90.5, 6]], ['season 8 biofix 101', [[[98, 60, 38], [99, 63, 35], [100, 84, 72], [101, 59, 47], [102, 44, 42], [103, 55, 49], [104, 47, 41], [105, 56, 50]], 101], [10.0, 5]], ['season 9 biofix 100', [[[99, 54, 47], [100, 73, 59], [101, 66, 65], [102, 43, 36], [103, 77, 62], [104, 67, 49], [105, 65, 63], [106, 59, 45]], 100], [78.0, 7]], ['season 10 biofix 102', [[[100, 79, 54], [101, 75, 68], [102, 71, 56], [103, 67, 47], [104, 86, 64], [105, 51, 34], [106, 72, 56], [107, 73, 50]], 102], [73.0, 6]], ['season 11 biofix 104', [[[101, 72, 43], [102, 65, 50], [103, 54, 42], [104, 75, 56], [105, 60, 40], [106, 64, 42], [107, 73, 56], [108, 49, 44]], 104], [42.0, 5]], ['season 12 biofix 103', [[[102, 86, 60], [103, 90, 72], [104, 78, 69], [105, 87, 59], [106, 80, 56], [107, 77, 72], [108, 60, 53], [109, 77, 63]], 103], [144.0, 7]]], [['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 11 biofix 104', [[[101, 72, 43], [102, 65, 50], [103, 54, 42], [104, 75, 56], [105, 60, 40], [106, 64, 42], [107, 73, 56], [108, 49, 44]], 104], [42.0, 5]], ['season 14 biofix 107', [[[104, 63, 45], [105, 46, 36], [106, 102, 72], [107, 65, 45], [108, 70, 69], [109, 55, 39], [110, 84, 63], [111, 72, 63]], 107], [70.5, 5]], ['season 15 biofix 106', [[[105, 54, 48], [106, 54, 37], [107, 47, 37], [108, 74, 65], [109, 79, 70], [110, 66, 51], [111, 50, 33], [112, 69, 65]], 106], [71.5, 7]], ['season 16 biofix 108', [[[106, 85, 68], [107, 49, 49], [108, 74, 71], [109, 53, 38], [110, 90, 60], [111, 53, 45], [112, 84, 56], [113, 80, 67]], 108], [92.0, 6]], ['season 17 biofix 110', [[[107, 50, 45], [108, 46, 40], [109, 81, 55], [110, 57, 40], [111, 78, 56], [112, 59, 37], [113, 93, 63], [114, 76, 66]], 110], [70.5, 5]], ['season 18 biofix 109', [[[108, 75, 70], [109, 52, 49], [110, 62, 53], [111, 40, 31], [112, 79, 51], [113, 50, 31], [114, 77, 61], [115, 78, 68]], 109], [65.5, 7]], ['season 19 biofix 111', [[[109, 53, 48], [110, 85, 64], [111, 89, 65], [112, 60, 57], [113, 63, 35], [114, 77, 57], [115, 50, 45], [116, 76, 46]], 111], [70.5, 6]]], [['season 9 biofix 100', [[[99, 54, 47], [100, 73, 59], [101, 66, 65], [102, 43, 36], [103, 77, 62], [104, 67, 49], [105, 65, 63], [106, 59, 45]], 100], [78.0, 7]], ['season 17 biofix 110', [[[107, 50, 45], [108, 46, 40], [109, 81, 55], [110, 57, 40], [111, 78, 56], [112, 59, 37], [113, 93, 63], [114, 76, 66]], 110], [70.5, 5]], ['season 21 biofix 112', [[[111, 41, 35], [112, 94, 67], [113, 75, 55], [114, 60, 41], [115, 68, 63], [116, 60, 51], [117, 68, 41], [118, 83, 70]], 112], [103.0, 7]], ['season 22 biofix 114', [[[112, 68, 62], [113, 95, 68], [114, 78, 49], [115, 57, 34], [116, 77, 53], [117, 58, 44], [118, 95, 72], [119, 72, 67]], 114], [85.0, 6]], ['season 23 biofix 116', [[[113, 41, 33], [114, 59, 35], [115, 64, 56], [116, 62, 36], [117, 44, 32], [118, 81, 64], [119, 61, 51], [120, 38, 33]], 116], [34.5, 5]], ['hot spell capped', [[[150, 95, 70], [151, 99, 75], [152, 88, 66]], 150], [84.5, 3]], ['cold snap floored', [[[120, 45, 30], [121, 60, 40], [122, 48, 20]], 120], [5.0, 3]], ['biofix day itself', [[[130, 70, 55], [131, 80, 60]], 131], [20.0, 1]]], [['season 0 biofix 91', [[[90, 53, 39], [91, 89, 59], [92, 63, 41], [93, 78, 55], [94, 65, 52], [95, 87, 62], [96, 54, 37], [97, 39, 37]], 91], [80.0, 7]], ['season 1 biofix 93', [[[91, 94, 67], [92, 71, 42], [93, 93, 64], [94, 66, 52], [95, 54, 33], [96, 68, 62], [97, 75, 68], [98, 63, 48]], 93], [79.0, 6]], ['season 2 biofix 95', [[[92, 60, 39], [93, 80, 69], [94, 57, 40], [95, 91, 72], [96, 53, 41], [97, 67, 48], [98, 75, 57], [99, 68, 67]], 95], [72.5, 5]], ['season 13 biofix 105', [[[103, 51, 31], [104, 47, 47], [105, 77, 60], [106, 59, 52], [107, 85, 57], [108, 58, 31], [109, 43, 34], [110, 57, 38]], 105], [52.5, 6]], ['season 22 biofix 114', [[[112, 68, 62], [113, 95, 68], [114, 78, 49], [115, 57, 34], [116, 77, 53], [117, 58, 44], [118, 95, 72], [119, 72, 67]], 114], [85.0, 6]], ['record gap after biofix', [[[140, 75, 55], [141, 80, 58], [145, 82, 60], [146, 70, 52]], 140], [66.0, 4]], ['record starts after biofix', [[[160, 84, 62], [161, 88, 64]], 150], [48.0, 2]], ['cold day after biofix with gap', [[[170, 48, 35], [172, 70, 55]], 169], [12.5, 2]]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| season 0 biofix 91 | [73.5, 7] | [80.0, 7] | Failed |
| season 1 biofix 93 | [76.0, 6] | [79.0, 6] | Failed |
| season 2 biofix 95 | [70.0, 5] | [72.5, 5] | Failed |
| season 3 biofix 94 | [56.5, 7] | [71.0, 7] | Failed |
| season 4 biofix 96 | [1.5, 6] | [15.5, 6] | Failed |
| season 5 biofix 98 | [50.5, 5] | [51.5, 5] | Failed |
| season 6 biofix 97 | [99.5, 7] | [101.5, 7] | Failed |
| season 7 biofix 99 | [89.5, 6] | [90.5, 6] | Failed |
SHA-256 / edf8511a4fd885682484bdad630678d15e735e6bd506fa0b9da41739a0019d60
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(days, biofix):
total = 0.0
counted = 0
for doy, hi, lo in days:
if doy < biofix:
continue
hi = min(hi, 86.0)
hi = max(hi, 50.0)
lo = max(lo, 50.0)
lo = min(lo, 86.0)
gdd = (hi + lo) / 2 - 50.0
total += gdd
counted += 1
return [round(total, 1), counted]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['season 0 biofix 91', [[[90, 53, 39], [91, 89, 59], [92, 63, 41], [93, 78, 55], [94, 65, 52], [95, 87, 62], [96, 54, 37], [97, 39, 37]], 91], [80.0, 7]], ['season 1 biofix 93', [[[91, 94, 67], [92, 71, 42], [93, 93, 64], [94, 66, 52], [95, 54, 33], [96, 68, 62], [97, 75, 68], [98, 63, 48]], 93], [79.0, 6]], ['season 2 biofix 95', [[[92, 60, 39], [93, 80, 69], [94, 57, 40], [95, 91, 72], [96, 53, 41], [97, 67, 48], [98, 75, 57], [99, 68, 67]], 95], [72.5, 5]], ['season 3 biofix 94', [[[93, 88, 59], [94, 65, 43], [95, 63, 34], [96, 91, 68], [97, 57, 37], [98, 68, 54], [99, 78, 51], [100, 52, 37]], 94], [71.0, 7]], ['season 4 biofix 96', [[[94, 58, 31], [95, 65, 42], [96, 56, 44], [97, 51, 51], [98, 63, 38], [99, 60, 31], [100, 43, 40], [101, 42, 39]], 96], [15.5, 6]], ['season 5 biofix 98', [[[95, 78, 67], [96, 92, 67], [97, 66, 36], [98, 39, 30], [99, 87, 63], [100, 76, 66], [101, 53, 48], [102, 57, 52]], 98], [51.5, 5]], ['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 7 biofix 99', [[[97, 64, 45], [98, 91, 67], [99, 85, 72], [100, 84, 60], [101, 79, 49], [102, 51, 38], [103, 88, 64], [104, 45, 37]], 99], [90.5, 6]]], [['season 3 biofix 94', [[[93, 88, 59], [94, 65, 43], [95, 63, 34], [96, 91, 68], [97, 57, 37], [98, 68, 54], [99, 78, 51], [100, 52, 37]], 94], [71.0, 7]], ['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 7 biofix 99', [[[97, 64, 45], [98, 91, 67], [99, 85, 72], [100, 84, 60], [101, 79, 49], [102, 51, 38], [103, 88, 64], [104, 45, 37]], 99], [90.5, 6]], ['season 8 biofix 101', [[[98, 60, 38], [99, 63, 35], [100, 84, 72], [101, 59, 47], [102, 44, 42], [103, 55, 49], [104, 47, 41], [105, 56, 50]], 101], [10.0, 5]], ['season 9 biofix 100', [[[99, 54, 47], [100, 73, 59], [101, 66, 65], [102, 43, 36], [103, 77, 62], [104, 67, 49], [105, 65, 63], [106, 59, 45]], 100], [78.0, 7]], ['season 10 biofix 102', [[[100, 79, 54], [101, 75, 68], [102, 71, 56], [103, 67, 47], [104, 86, 64], [105, 51, 34], [106, 72, 56], [107, 73, 50]], 102], [73.0, 6]], ['season 11 biofix 104', [[[101, 72, 43], [102, 65, 50], [103, 54, 42], [104, 75, 56], [105, 60, 40], [106, 64, 42], [107, 73, 56], [108, 49, 44]], 104], [42.0, 5]], ['season 12 biofix 103', [[[102, 86, 60], [103, 90, 72], [104, 78, 69], [105, 87, 59], [106, 80, 56], [107, 77, 72], [108, 60, 53], [109, 77, 63]], 103], [144.0, 7]]], [['season 6 biofix 97', [[[96, 60, 60], [97, 95, 65], [98, 89, 63], [99, 61, 60], [100, 71, 46], [101, 40, 34], [102, 72, 61], [103, 71, 57]], 97], [101.5, 7]], ['season 11 biofix 104', [[[101, 72, 43], [102, 65, 50], [103, 54, 42], [104, 75, 56], [105, 60, 40], [106, 64, 42], [107, 73, 56], [108, 49, 44]], 104], [42.0, 5]], ['season 14 biofix 107', [[[104, 63, 45], [105, 46, 36], [106, 102, 72], [107, 65, 45], [108, 70, 69], [109, 55, 39], [110, 84, 63], [111, 72, 63]], 107], [70.5, 5]], ['season 15 biofix 106', [[[105, 54, 48], [106, 54, 37], [107, 47, 37], [108, 74, 65], [109, 79, 70], [110, 66, 51], [111, 50, 33], [112, 69, 65]], 106], [71.5, 7]], ['season 16 biofix 108', [[[106, 85, 68], [107, 49, 49], [108, 74, 71], [109, 53, 38], [110, 90, 60], [111, 53, 45], [112, 84, 56], [113, 80, 67]], 108], [92.0, 6]], ['season 17 biofix 110', [[[107, 50, 45], [108, 46, 40], [109, 81, 55], [110, 57, 40], [111, 78, 56], [112, 59, 37], [113, 93, 63], [114, 76, 66]], 110], [70.5, 5]], ['season 18 biofix 109', [[[108, 75, 70], [109, 52, 49], [110, 62, 53], [111, 40, 31], [112, 79, 51], [113, 50, 31], [114, 77, 61], [115, 78, 68]], 109], [65.5, 7]], ['season 19 biofix 111', [[[109, 53, 48], [110, 85, 64], [111, 89, 65], [112, 60, 57], [113, 63, 35], [114, 77, 57], [115, 50, 45], [116, 76, 46]], 111], [70.5, 6]]], [['season 9 biofix 100', [[[99, 54, 47], [100, 73, 59], [101, 66, 65], [102, 43, 36], [103, 77, 62], [104, 67, 49], [105, 65, 63], [106, 59, 45]], 100], [78.0, 7]], ['season 17 biofix 110', [[[107, 50, 45], [108, 46, 40], [109, 81, 55], [110, 57, 40], [111, 78, 56], [112, 59, 37], [113, 93, 63], [114, 76, 66]], 110], [70.5, 5]], ['season 21 biofix 112', [[[111, 41, 35], [112, 94, 67], [113, 75, 55], [114, 60, 41], [115, 68, 63], [116, 60, 51], [117, 68, 41], [118, 83, 70]], 112], [103.0, 7]], ['season 22 biofix 114', [[[112, 68, 62], [113, 95, 68], [114, 78, 49], [115, 57, 34], [116, 77, 53], [117, 58, 44], [118, 95, 72], [119, 72, 67]], 114], [85.0, 6]], ['season 23 biofix 116', [[[113, 41, 33], [114, 59, 35], [115, 64, 56], [116, 62, 36], [117, 44, 32], [118, 81, 64], [119, 61, 51], [120, 38, 33]], 116], [34.5, 5]], ['hot spell capped', [[[150, 95, 70], [151, 99, 75], [152, 88, 66]], 150], [84.5, 3]], ['cold snap floored', [[[120, 45, 30], [121, 60, 40], [122, 48, 20]], 120], [5.0, 3]], ['biofix day itself', [[[130, 70, 55], [131, 80, 60]], 131], [20.0, 1]]], [['season 0 biofix 91', [[[90, 53, 39], [91, 89, 59], [92, 63, 41], [93, 78, 55], [94, 65, 52], [95, 87, 62], [96, 54, 37], [97, 39, 37]], 91], [80.0, 7]], ['season 1 biofix 93', [[[91, 94, 67], [92, 71, 42], [93, 93, 64], [94, 66, 52], [95, 54, 33], [96, 68, 62], [97, 75, 68], [98, 63, 48]], 93], [79.0, 6]], ['season 2 biofix 95', [[[92, 60, 39], [93, 80, 69], [94, 57, 40], [95, 91, 72], [96, 53, 41], [97, 67, 48], [98, 75, 57], [99, 68, 67]], 95], [72.5, 5]], ['season 13 biofix 105', [[[103, 51, 31], [104, 47, 47], [105, 77, 60], [106, 59, 52], [107, 85, 57], [108, 58, 31], [109, 43, 34], [110, 57, 38]], 105], [52.5, 6]], ['season 22 biofix 114', [[[112, 68, 62], [113, 95, 68], [114, 78, 49], [115, 57, 34], [116, 77, 53], [117, 58, 44], [118, 95, 72], [119, 72, 67]], 114], [85.0, 6]], ['record gap after biofix', [[[140, 75, 55], [141, 80, 58], [145, 82, 60], [146, 70, 52]], 140], [66.0, 4]], ['record starts after biofix', [[[160, 84, 62], [161, 88, 64]], 150], [48.0, 2]], ['cold day after biofix with gap', [[[170, 48, 35], [172, 70, 55]], 169], [12.5, 2]]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| season 0 biofix 91 | [80.0, 7] | [80.0, 7] | Passed |
| season 1 biofix 93 | [79.0, 6] | [79.0, 6] | Passed |
| season 2 biofix 95 | [72.5, 5] | [72.5, 5] | Passed |
| season 3 biofix 94 | [71.0, 7] | [71.0, 7] | Passed |
| season 4 biofix 96 | [15.5, 6] | [15.5, 6] | Passed |
| season 5 biofix 98 | [51.5, 5] | [51.5, 5] | Passed |
| season 6 biofix 97 | [101.5, 7] | [101.5, 7] | Passed |
| season 7 biofix 99 | [90.5, 6] | [90.5, 6] | Passed |
SHA-256 / 9b0cbecd2e7f6e5dd3ca39fac659e37b50fc2975592ddef00f3c2f6988db5c72
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:48:25.770322+00:00.
Case digest / 2313eb366b32d890027a4013325bc971a5ddc4d235c9f9a5251af822ba88a418