FA-71156 / Weather index computation / Open access
Utah chill unit accumulation: hourly zero floor · case 01
Warm autumn hours create a chill debt that later cold hours must repay.
ROOT CAUSE
The accumulation is allowed to go negative between hours.
VERIFIED REPAIR
Floor the running total at zero after every hour.
Unsuccessful approach: Flooring only the final total still lets an early warm spell cancel later chill.
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 = total + u
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 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 13', [[2.5, 15.9, 1.4, 12.5, 5.0, 1.4, 12.4, 2.4, 18.1, 0.0, 1.4, 12.4]], 2.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 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 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], ['warm start', [[19.0, 19.0, 6.0]], 1.0]], [['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 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 27', [[1.5, 16.0, 9.2, 12.5, 2.5, 22.0, 2.4, 12.5, 1.4, 22.0, 12.5, 22.0]], 0.0]], [['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 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 27', [[1.5, 16.0, 9.2, 12.5, 2.5, 22.0, 2.4, 12.5, 1.4, 22.0, 12.5, 22.0]], 0.0], ['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 | 1.0 | 2.0 | Failed |
| orchard night 1 | 4.0 | 4.0 | Passed |
| orchard night 2 | -1.5 | 1.0 | Failed |
| 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 | 2.0 | 3.0 | Failed |
| orchard night 7 | 1.0 | 1.5 | Failed |
SHA-256 / 7de091220e3337fb9e3ec0891a82f3a0822e9b4ce0ecd3a088af561cb4018050
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.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 = total + u
return max(total, 0.0)
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 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 13', [[2.5, 15.9, 1.4, 12.5, 5.0, 1.4, 12.4, 2.4, 18.1, 0.0, 1.4, 12.4]], 2.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 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 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], ['warm start', [[19.0, 19.0, 6.0]], 1.0]], [['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 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 27', [[1.5, 16.0, 9.2, 12.5, 2.5, 22.0, 2.4, 12.5, 1.4, 22.0, 12.5, 22.0]], 0.0]], [['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 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 27', [[1.5, 16.0, 9.2, 12.5, 2.5, 22.0, 2.4, 12.5, 1.4, 22.0, 12.5, 22.0]], 0.0], ['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 | 1.0 | 2.0 | Failed |
| orchard night 1 | 4.0 | 4.0 | Passed |
| orchard night 2 | 0.0 | 1.0 | Failed |
| 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 | 2.0 | 3.0 | Failed |
| orchard night 7 | 1.0 | 1.5 | Failed |
SHA-256 / a169ff472dcb5f57504e07954f82263cd65bcf3d07cc1085b02552fcec24d5f4
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 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 13', [[2.5, 15.9, 1.4, 12.5, 5.0, 1.4, 12.4, 2.4, 18.1, 0.0, 1.4, 12.4]], 2.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 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 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], ['warm start', [[19.0, 19.0, 6.0]], 1.0]], [['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 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 27', [[1.5, 16.0, 9.2, 12.5, 2.5, 22.0, 2.4, 12.5, 1.4, 22.0, 12.5, 22.0]], 0.0]], [['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 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 27', [[1.5, 16.0, 9.2, 12.5, 2.5, 22.0, 2.4, 12.5, 1.4, 22.0, 12.5, 22.0]], 0.0], ['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 / 217f4791b8b55f28d63167292d4914872fa9115a1d4a15d11e28caafc0c43b83
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.214781+00:00.
Case digest / c1b555f0331f9492707bbb55b21ffb64dfb8918ecd78e65d8e7f6eda3c0ea6be