FA-71161 / Weather index computation / Open access
Utah chill unit accumulation: full-chill band upper edge · case 01
Hours at exactly 9.1 degC earn half a unit.
ROOT CAUSE
The full-unit band excludes its upper limit.
VERIFIED REPAIR
Assign 1 unit through 9.1 degC inclusive.
Unsuccessful approach: Including 9.2 gives full credit to the next band.
Case contract
Hourly degC readings (None = missing hour, skipped with no effect). Units: <=1.4:0, <=2.4:0.5, <=9.1:1, <=12.4:0.5, <=15.9:0, <=18.0:-0.5, else -1. The running total is floored at zero after every hour. Return the total.
Why this case matters
Orchard dormancy and bloom forecasts depend on accumulated chill units.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(hourly):
total = 0.0
for t in hourly:
if t is None:
continue
if t <= 1.4:
u = 0.0
elif t <= 2.4:
u = 0.5
elif t < 9.1:
u = 1.0
elif t <= 12.4:
u = 0.5
elif t <= 15.9:
u = 0.0
elif t <= 18.0:
u = -0.5
else:
u = -1.0
total = max(total + u, 0.0)
return total
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['orchard night 0', [[2.4, 2.4, 12.5, 18.1, None, 1.4, 18.1, 5.0, 22.0, 12.5, 2.5, 5.0]], 2.0], ['orchard night 1', [[9.2, 18.0, 2.4, 2.4, 12.4, 2.5, 22.0, 12.4, 0.0, 9.1, 2.5, 1.4]], 4.0], ['orchard night 2', [[18.0, 0.0, 18.1, 2.4, 2.5, 22.0, 22.0, None, 16.0, 1.5, 1.5, 1.4]], 1.0], ['orchard night 3', [[None, 15.9, 1.4, 0.0, 9.1, 12.4, 1.5, 2.5, 12.5, 18.1, 2.4, 1.4]], 2.5], ['orchard night 4', [[5.0, 12.5, 9.1, 1.5, 22.0, 1.5, 1.4, 1.4, 15.9, 2.4, 9.1, 12.5]], 3.5], ['orchard night 5', [[0.0, 15.9, 2.5, 12.4, 18.0, 0.0, 1.4, 1.4, 2.5, 12.4, 15.9, 12.4]], 3.0], ['orchard night 6', [[22.0, 15.9, 12.4, 9.2, 12.4, 0.0, 5.0, 2.4, 22.0, 1.4, 9.1, None]], 3.0], ['orchard night 7', [[None, 5.0, 12.4, 0.0, 22.0, 18.1, 2.5, 9.2, None, None, 1.4, 12.5]], 1.5]], [['orchard night 6', [[22.0, 15.9, 12.4, 9.2, 12.4, 0.0, 5.0, 2.4, 22.0, 1.4, 9.1, None]], 3.0], ['orchard night 7', [[None, 5.0, 12.4, 0.0, 22.0, 18.1, 2.5, 9.2, None, None, 1.4, 12.5]], 1.5], ['orchard night 8', [[18.1, 22.0, 2.5, 18.0, 12.5, 2.4, 5.0, 9.1, None, 2.4, 2.5, 15.9]], 4.5], ['orchard night 9', [[2.5, None, 1.4, 18.0, None, 12.4, 5.0, None, 22.0, 18.1, 5.0, 18.1]], 0.0], ['orchard night 10', [[12.4, 2.4, 12.4, None, 9.1, 0.0, 12.4, 18.1, 9.1, 12.5, 1.4, 9.1]], 4.0], ['orchard night 11', [[9.1, 5.0, 18.1, 2.5, 5.0, 1.4, 9.1, None, 15.9, 2.4, 2.4, 18.1]], 4.0], ['orchard night 12', [[9.2, 16.0, 0.0, 9.2, 2.5, 15.9, 0.0, 9.2, 0.0, 0.0, 9.2, 2.5]], 3.5], ['orchard night 20', [[1.5, None, 18.0, 1.4, 18.1, 9.2, 9.1, 2.5, 2.5, 2.4, 2.5, 9.2]], 5.5]], [['orchard night 11', [[9.1, 5.0, 18.1, 2.5, 5.0, 1.4, 9.1, None, 15.9, 2.4, 2.4, 18.1]], 4.0], ['orchard night 14', [[1.4, 1.4, 18.0, 16.0, 12.4, 2.4, 15.9, 18.1, 18.0, 2.4, 0.0, 18.0]], 0.0], ['orchard night 15', [[1.5, 2.4, 12.5, 16.0, 16.0, 12.4, 12.4, 12.4, 18.0, 18.0, 2.5, 1.5]], 2.0], ['orchard night 16', [[16.0, 1.5, 22.0, 1.5, 12.5, 12.4, 1.4, 9.1, 22.0, 9.1, 9.1, 15.9]], 3.0], ['orchard night 17', [[1.5, 12.5, 9.2, 1.4, None, 0.0, 15.9, 12.5, 0.0, 16.0, 2.4, 12.4]], 1.5], ['orchard night 18', [[15.9, 9.2, 9.1, 15.9, 9.2, 15.9, 15.9, 9.2, 22.0, 12.4, 2.4, None]], 2.5], ['orchard night 19', [[16.0, 1.5, 18.1, 9.1, 22.0, 16.0, 12.4, 16.0, 12.4, 12.5, 2.4, 22.0]], 0.0], ['orchard night 29', [[5.0, 12.5, 18.1, 2.4, 1.4, 9.2, 1.4, 1.4, None, None, 18.0, 15.9]], 0.5]], [['orchard night 17', [[1.5, 12.5, 9.2, 1.4, None, 0.0, 15.9, 12.5, 0.0, 16.0, 2.4, 12.4]], 1.5], ['orchard night 20', [[1.5, None, 18.0, 1.4, 18.1, 9.2, 9.1, 2.5, 2.5, 2.4, 2.5, 9.2]], 5.5], ['orchard night 21', [[9.1, 16.0, 15.9, 9.2, 5.0, 0.0, 9.2, 16.0, 18.0, 12.5, 9.2, 18.0]], 1.5], ['orchard night 22', [[1.5, 22.0, 2.5, 2.4, 12.5, 12.4, 22.0, 2.5, 15.9, 18.1, 1.5, 9.1]], 2.5], ['orchard night 23', [[2.4, 16.0, 18.0, 1.5, 15.9, 16.0, 9.1, 9.2, 1.5, 12.5, 16.0, 22.0]], 0.5], ['orchard night 24', [[2.5, 16.0, 2.5, 18.0, 18.0, 12.5, 22.0, 9.1, 12.4, 5.0, 9.1, 1.4]], 3.5], ['orchard night 25', [[0.0, None, 5.0, 22.0, 5.0, 9.1, 2.4, 1.4, 5.0, 9.1, 22.0, 2.4]], 4.0], ['orchard night 26', [[5.0, 9.1, None, 18.1, 9.2, None, 0.0, 2.5, 22.0, 15.9, 18.1, 15.9]], 0.5]], [['orchard night 0', [[2.4, 2.4, 12.5, 18.1, None, 1.4, 18.1, 5.0, 22.0, 12.5, 2.5, 5.0]], 2.0], ['orchard night 23', [[2.4, 16.0, 18.0, 1.5, 15.9, 16.0, 9.1, 9.2, 1.5, 12.5, 16.0, 22.0]], 0.5], ['orchard night 26', [[5.0, 9.1, None, 18.1, 9.2, None, 0.0, 2.5, 22.0, 15.9, 18.1, 15.9]], 0.5], ['orchard night 28', [[9.2, 16.0, 15.9, 0.0, 5.0, 12.5, 22.0, 12.4, 2.4, 9.1, 18.0, 0.0]], 1.5], ['orchard night 29', [[5.0, 12.5, 18.1, 2.4, 1.4, 9.2, 1.4, 1.4, None, None, 18.0, 15.9]], 0.5], ['warm spell after chill', [[5.0, 5.0, 20.0, 20.0, 20.0, 5.0]], 1.0], ['gap mid night', [[5.0, None, 5.0]], 2.0], ['warm start', [[19.0, 19.0, 6.0]], 1.0]]]
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 |
|---|---|---|---|
| orchard night 0 | 2.0 | 2.0 | Passed |
| orchard night 1 | 3.5 | 4.0 | Failed |
| orchard night 2 | 1.0 | 1.0 | Passed |
| orchard night 3 | 2.0 | 2.5 | Failed |
| orchard night 4 | 2.5 | 3.5 | Failed |
| orchard night 5 | 3.0 | 3.0 | Passed |
| orchard night 6 | 2.5 | 3.0 | Failed |
| orchard night 7 | 1.5 | 1.5 | Passed |
SHA-256 / 31bf6c2fa202dac2137b75abea685f67c2c01236208883a2089f5a62f9781664
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(hourly):
total = 0.0
for t in hourly:
if t is None:
continue
if t <= 1.4:
u = 0.0
elif t <= 2.4:
u = 0.5
elif t <= 9.2:
u = 1.0
elif t <= 12.4:
u = 0.5
elif t <= 15.9:
u = 0.0
elif t <= 18.0:
u = -0.5
else:
u = -1.0
total = max(total + u, 0.0)
return total
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['orchard night 0', [[2.4, 2.4, 12.5, 18.1, None, 1.4, 18.1, 5.0, 22.0, 12.5, 2.5, 5.0]], 2.0], ['orchard night 1', [[9.2, 18.0, 2.4, 2.4, 12.4, 2.5, 22.0, 12.4, 0.0, 9.1, 2.5, 1.4]], 4.0], ['orchard night 2', [[18.0, 0.0, 18.1, 2.4, 2.5, 22.0, 22.0, None, 16.0, 1.5, 1.5, 1.4]], 1.0], ['orchard night 3', [[None, 15.9, 1.4, 0.0, 9.1, 12.4, 1.5, 2.5, 12.5, 18.1, 2.4, 1.4]], 2.5], ['orchard night 4', [[5.0, 12.5, 9.1, 1.5, 22.0, 1.5, 1.4, 1.4, 15.9, 2.4, 9.1, 12.5]], 3.5], ['orchard night 5', [[0.0, 15.9, 2.5, 12.4, 18.0, 0.0, 1.4, 1.4, 2.5, 12.4, 15.9, 12.4]], 3.0], ['orchard night 6', [[22.0, 15.9, 12.4, 9.2, 12.4, 0.0, 5.0, 2.4, 22.0, 1.4, 9.1, None]], 3.0], ['orchard night 7', [[None, 5.0, 12.4, 0.0, 22.0, 18.1, 2.5, 9.2, None, None, 1.4, 12.5]], 1.5]], [['orchard night 6', [[22.0, 15.9, 12.4, 9.2, 12.4, 0.0, 5.0, 2.4, 22.0, 1.4, 9.1, None]], 3.0], ['orchard night 7', [[None, 5.0, 12.4, 0.0, 22.0, 18.1, 2.5, 9.2, None, None, 1.4, 12.5]], 1.5], ['orchard night 8', [[18.1, 22.0, 2.5, 18.0, 12.5, 2.4, 5.0, 9.1, None, 2.4, 2.5, 15.9]], 4.5], ['orchard night 9', [[2.5, None, 1.4, 18.0, None, 12.4, 5.0, None, 22.0, 18.1, 5.0, 18.1]], 0.0], ['orchard night 10', [[12.4, 2.4, 12.4, None, 9.1, 0.0, 12.4, 18.1, 9.1, 12.5, 1.4, 9.1]], 4.0], ['orchard night 11', [[9.1, 5.0, 18.1, 2.5, 5.0, 1.4, 9.1, None, 15.9, 2.4, 2.4, 18.1]], 4.0], ['orchard night 12', [[9.2, 16.0, 0.0, 9.2, 2.5, 15.9, 0.0, 9.2, 0.0, 0.0, 9.2, 2.5]], 3.5], ['orchard night 20', [[1.5, None, 18.0, 1.4, 18.1, 9.2, 9.1, 2.5, 2.5, 2.4, 2.5, 9.2]], 5.5]], [['orchard night 11', [[9.1, 5.0, 18.1, 2.5, 5.0, 1.4, 9.1, None, 15.9, 2.4, 2.4, 18.1]], 4.0], ['orchard night 14', [[1.4, 1.4, 18.0, 16.0, 12.4, 2.4, 15.9, 18.1, 18.0, 2.4, 0.0, 18.0]], 0.0], ['orchard night 15', [[1.5, 2.4, 12.5, 16.0, 16.0, 12.4, 12.4, 12.4, 18.0, 18.0, 2.5, 1.5]], 2.0], ['orchard night 16', [[16.0, 1.5, 22.0, 1.5, 12.5, 12.4, 1.4, 9.1, 22.0, 9.1, 9.1, 15.9]], 3.0], ['orchard night 17', [[1.5, 12.5, 9.2, 1.4, None, 0.0, 15.9, 12.5, 0.0, 16.0, 2.4, 12.4]], 1.5], ['orchard night 18', [[15.9, 9.2, 9.1, 15.9, 9.2, 15.9, 15.9, 9.2, 22.0, 12.4, 2.4, None]], 2.5], ['orchard night 19', [[16.0, 1.5, 18.1, 9.1, 22.0, 16.0, 12.4, 16.0, 12.4, 12.5, 2.4, 22.0]], 0.0], ['orchard night 29', [[5.0, 12.5, 18.1, 2.4, 1.4, 9.2, 1.4, 1.4, None, None, 18.0, 15.9]], 0.5]], [['orchard night 17', [[1.5, 12.5, 9.2, 1.4, None, 0.0, 15.9, 12.5, 0.0, 16.0, 2.4, 12.4]], 1.5], ['orchard night 20', [[1.5, None, 18.0, 1.4, 18.1, 9.2, 9.1, 2.5, 2.5, 2.4, 2.5, 9.2]], 5.5], ['orchard night 21', [[9.1, 16.0, 15.9, 9.2, 5.0, 0.0, 9.2, 16.0, 18.0, 12.5, 9.2, 18.0]], 1.5], ['orchard night 22', [[1.5, 22.0, 2.5, 2.4, 12.5, 12.4, 22.0, 2.5, 15.9, 18.1, 1.5, 9.1]], 2.5], ['orchard night 23', [[2.4, 16.0, 18.0, 1.5, 15.9, 16.0, 9.1, 9.2, 1.5, 12.5, 16.0, 22.0]], 0.5], ['orchard night 24', [[2.5, 16.0, 2.5, 18.0, 18.0, 12.5, 22.0, 9.1, 12.4, 5.0, 9.1, 1.4]], 3.5], ['orchard night 25', [[0.0, None, 5.0, 22.0, 5.0, 9.1, 2.4, 1.4, 5.0, 9.1, 22.0, 2.4]], 4.0], ['orchard night 26', [[5.0, 9.1, None, 18.1, 9.2, None, 0.0, 2.5, 22.0, 15.9, 18.1, 15.9]], 0.5]], [['orchard night 0', [[2.4, 2.4, 12.5, 18.1, None, 1.4, 18.1, 5.0, 22.0, 12.5, 2.5, 5.0]], 2.0], ['orchard night 23', [[2.4, 16.0, 18.0, 1.5, 15.9, 16.0, 9.1, 9.2, 1.5, 12.5, 16.0, 22.0]], 0.5], ['orchard night 26', [[5.0, 9.1, None, 18.1, 9.2, None, 0.0, 2.5, 22.0, 15.9, 18.1, 15.9]], 0.5], ['orchard night 28', [[9.2, 16.0, 15.9, 0.0, 5.0, 12.5, 22.0, 12.4, 2.4, 9.1, 18.0, 0.0]], 1.5], ['orchard night 29', [[5.0, 12.5, 18.1, 2.4, 1.4, 9.2, 1.4, 1.4, None, None, 18.0, 15.9]], 0.5], ['warm spell after chill', [[5.0, 5.0, 20.0, 20.0, 20.0, 5.0]], 1.0], ['gap mid night', [[5.0, None, 5.0]], 2.0], ['warm start', [[19.0, 19.0, 6.0]], 1.0]]]
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 |
|---|---|---|---|
| orchard night 0 | 2.0 | 2.0 | Passed |
| orchard night 1 | 4.5 | 4.0 | Failed |
| orchard night 2 | 1.0 | 1.0 | Passed |
| orchard night 3 | 2.5 | 2.5 | Passed |
| orchard night 4 | 3.5 | 3.5 | Passed |
| orchard night 5 | 3.0 | 3.0 | Passed |
| orchard night 6 | 3.5 | 3.0 | Failed |
| orchard night 7 | 2.0 | 1.5 | Failed |
SHA-256 / e8cd4ae029973bda55c5c15fa6e3d3696855057878b4caf39e95f102d588cda1
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(hourly):
total = 0.0
for t in hourly:
if t is None:
continue
if t <= 1.4:
u = 0.0
elif t <= 2.4:
u = 0.5
elif t <= 9.1:
u = 1.0
elif t <= 12.4:
u = 0.5
elif t <= 15.9:
u = 0.0
elif t <= 18.0:
u = -0.5
else:
u = -1.0
total = max(total + u, 0.0)
return total
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['orchard night 0', [[2.4, 2.4, 12.5, 18.1, None, 1.4, 18.1, 5.0, 22.0, 12.5, 2.5, 5.0]], 2.0], ['orchard night 1', [[9.2, 18.0, 2.4, 2.4, 12.4, 2.5, 22.0, 12.4, 0.0, 9.1, 2.5, 1.4]], 4.0], ['orchard night 2', [[18.0, 0.0, 18.1, 2.4, 2.5, 22.0, 22.0, None, 16.0, 1.5, 1.5, 1.4]], 1.0], ['orchard night 3', [[None, 15.9, 1.4, 0.0, 9.1, 12.4, 1.5, 2.5, 12.5, 18.1, 2.4, 1.4]], 2.5], ['orchard night 4', [[5.0, 12.5, 9.1, 1.5, 22.0, 1.5, 1.4, 1.4, 15.9, 2.4, 9.1, 12.5]], 3.5], ['orchard night 5', [[0.0, 15.9, 2.5, 12.4, 18.0, 0.0, 1.4, 1.4, 2.5, 12.4, 15.9, 12.4]], 3.0], ['orchard night 6', [[22.0, 15.9, 12.4, 9.2, 12.4, 0.0, 5.0, 2.4, 22.0, 1.4, 9.1, None]], 3.0], ['orchard night 7', [[None, 5.0, 12.4, 0.0, 22.0, 18.1, 2.5, 9.2, None, None, 1.4, 12.5]], 1.5]], [['orchard night 6', [[22.0, 15.9, 12.4, 9.2, 12.4, 0.0, 5.0, 2.4, 22.0, 1.4, 9.1, None]], 3.0], ['orchard night 7', [[None, 5.0, 12.4, 0.0, 22.0, 18.1, 2.5, 9.2, None, None, 1.4, 12.5]], 1.5], ['orchard night 8', [[18.1, 22.0, 2.5, 18.0, 12.5, 2.4, 5.0, 9.1, None, 2.4, 2.5, 15.9]], 4.5], ['orchard night 9', [[2.5, None, 1.4, 18.0, None, 12.4, 5.0, None, 22.0, 18.1, 5.0, 18.1]], 0.0], ['orchard night 10', [[12.4, 2.4, 12.4, None, 9.1, 0.0, 12.4, 18.1, 9.1, 12.5, 1.4, 9.1]], 4.0], ['orchard night 11', [[9.1, 5.0, 18.1, 2.5, 5.0, 1.4, 9.1, None, 15.9, 2.4, 2.4, 18.1]], 4.0], ['orchard night 12', [[9.2, 16.0, 0.0, 9.2, 2.5, 15.9, 0.0, 9.2, 0.0, 0.0, 9.2, 2.5]], 3.5], ['orchard night 20', [[1.5, None, 18.0, 1.4, 18.1, 9.2, 9.1, 2.5, 2.5, 2.4, 2.5, 9.2]], 5.5]], [['orchard night 11', [[9.1, 5.0, 18.1, 2.5, 5.0, 1.4, 9.1, None, 15.9, 2.4, 2.4, 18.1]], 4.0], ['orchard night 14', [[1.4, 1.4, 18.0, 16.0, 12.4, 2.4, 15.9, 18.1, 18.0, 2.4, 0.0, 18.0]], 0.0], ['orchard night 15', [[1.5, 2.4, 12.5, 16.0, 16.0, 12.4, 12.4, 12.4, 18.0, 18.0, 2.5, 1.5]], 2.0], ['orchard night 16', [[16.0, 1.5, 22.0, 1.5, 12.5, 12.4, 1.4, 9.1, 22.0, 9.1, 9.1, 15.9]], 3.0], ['orchard night 17', [[1.5, 12.5, 9.2, 1.4, None, 0.0, 15.9, 12.5, 0.0, 16.0, 2.4, 12.4]], 1.5], ['orchard night 18', [[15.9, 9.2, 9.1, 15.9, 9.2, 15.9, 15.9, 9.2, 22.0, 12.4, 2.4, None]], 2.5], ['orchard night 19', [[16.0, 1.5, 18.1, 9.1, 22.0, 16.0, 12.4, 16.0, 12.4, 12.5, 2.4, 22.0]], 0.0], ['orchard night 29', [[5.0, 12.5, 18.1, 2.4, 1.4, 9.2, 1.4, 1.4, None, None, 18.0, 15.9]], 0.5]], [['orchard night 17', [[1.5, 12.5, 9.2, 1.4, None, 0.0, 15.9, 12.5, 0.0, 16.0, 2.4, 12.4]], 1.5], ['orchard night 20', [[1.5, None, 18.0, 1.4, 18.1, 9.2, 9.1, 2.5, 2.5, 2.4, 2.5, 9.2]], 5.5], ['orchard night 21', [[9.1, 16.0, 15.9, 9.2, 5.0, 0.0, 9.2, 16.0, 18.0, 12.5, 9.2, 18.0]], 1.5], ['orchard night 22', [[1.5, 22.0, 2.5, 2.4, 12.5, 12.4, 22.0, 2.5, 15.9, 18.1, 1.5, 9.1]], 2.5], ['orchard night 23', [[2.4, 16.0, 18.0, 1.5, 15.9, 16.0, 9.1, 9.2, 1.5, 12.5, 16.0, 22.0]], 0.5], ['orchard night 24', [[2.5, 16.0, 2.5, 18.0, 18.0, 12.5, 22.0, 9.1, 12.4, 5.0, 9.1, 1.4]], 3.5], ['orchard night 25', [[0.0, None, 5.0, 22.0, 5.0, 9.1, 2.4, 1.4, 5.0, 9.1, 22.0, 2.4]], 4.0], ['orchard night 26', [[5.0, 9.1, None, 18.1, 9.2, None, 0.0, 2.5, 22.0, 15.9, 18.1, 15.9]], 0.5]], [['orchard night 0', [[2.4, 2.4, 12.5, 18.1, None, 1.4, 18.1, 5.0, 22.0, 12.5, 2.5, 5.0]], 2.0], ['orchard night 23', [[2.4, 16.0, 18.0, 1.5, 15.9, 16.0, 9.1, 9.2, 1.5, 12.5, 16.0, 22.0]], 0.5], ['orchard night 26', [[5.0, 9.1, None, 18.1, 9.2, None, 0.0, 2.5, 22.0, 15.9, 18.1, 15.9]], 0.5], ['orchard night 28', [[9.2, 16.0, 15.9, 0.0, 5.0, 12.5, 22.0, 12.4, 2.4, 9.1, 18.0, 0.0]], 1.5], ['orchard night 29', [[5.0, 12.5, 18.1, 2.4, 1.4, 9.2, 1.4, 1.4, None, None, 18.0, 15.9]], 0.5], ['warm spell after chill', [[5.0, 5.0, 20.0, 20.0, 20.0, 5.0]], 1.0], ['gap mid night', [[5.0, None, 5.0]], 2.0], ['warm start', [[19.0, 19.0, 6.0]], 1.0]]]
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 |
|---|---|---|---|
| orchard night 0 | 2.0 | 2.0 | Passed |
| orchard night 1 | 4.0 | 4.0 | Passed |
| orchard night 2 | 1.0 | 1.0 | Passed |
| orchard night 3 | 2.5 | 2.5 | Passed |
| orchard night 4 | 3.5 | 3.5 | Passed |
| orchard night 5 | 3.0 | 3.0 | Passed |
| orchard night 6 | 3.0 | 3.0 | Passed |
| orchard night 7 | 1.5 | 1.5 | Passed |
SHA-256 / 4914abba2d75904602057b8b284c5adde144ac2a5ef9e9e23a44649962fb8892
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:27.258858+00:00.
Case digest / af9c292fff9b5f187a9081c2b6a9f6b593f4edf0c099e9f11d19e918fa5c3930