FAILURE MAP
← Case archive

FA-71006 / Weather index computation / Open access

Modified growing degree days with biofix: maximum temperature floor · case 01

Cold days produce negative degree days even though tmin is floored.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The daily maximum is never raised to the 50 degF base.

VERIFIED REPAIR

Raise tmax to at least 50.

Unsuccessful approach: Flooring tmax at freezing still allows negative contributions.

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)
        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 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 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 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 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 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]]], [['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 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 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 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]], ['cold snap floored', [[[120, 45, 30], [121, 60, 40], [122, 48, 20]], 120], [5.0, 3]], ['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 fixtureActualExpectedOutcome
season 0 biofix 91[74.5, 7][80.0, 7]Failed
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[8.0, 6][15.5, 6]Failed
season 5 biofix 98[46.0, 5][51.5, 5]Failed
season 6 biofix 97[96.5, 7][101.5, 7]Failed
season 7 biofix 99[88.0, 6][90.5, 6]Failed

SHA-256 / d9e0cbf47333f8c8c506db7cb6b8d3ac2e306a19ae611d72699d249621a6eb94

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, 32.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 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 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 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 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 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]]], [['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 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 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 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]], ['cold snap floored', [[[120, 45, 30], [121, 60, 40], [122, 48, 20]], 120], [5.0, 3]], ['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 fixtureActualExpectedOutcome
season 0 biofix 91[74.5, 7][80.0, 7]Failed
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[8.0, 6][15.5, 6]Failed
season 5 biofix 98[46.0, 5][51.5, 5]Failed
season 6 biofix 97[96.5, 7][101.5, 7]Failed
season 7 biofix 99[88.0, 6][90.5, 6]Failed

SHA-256 / 28221e7b3527ef605614f57196a95e130f44d3ee4908a6500a16aa69105481be

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 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 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 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 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 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]]], [['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 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 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 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]], ['cold snap floored', [[[120, 45, 30], [121, 60, 40], [122, 48, 20]], 120], [5.0, 3]], ['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 fixtureActualExpectedOutcome
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 / ada5d75a8d87671853f912e2dc37c6e45dcb089c16eac6a8b97d096a08a5afdc

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.851659+00:00.

Case digest / eebda2c07b7a9ab8009e8aa16cb3578741ffada3628dc0e2efc9c70876b508a5