FAILURE MAP
← Case archive

FA-69041 / Tide and marine navigation tables / Open access

High and low water extraction: Stand of the tide is timed at its first sample · case 01

Flat high waters are reported at the start of the stand.

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

ROOT CAUSE

The event time uses the first plateau index instead of the plateau midpoint.

VERIFIED REPAIR

Use the midpoint (i+j)/2 of the plateau.

Unsuccessful approach: Using the last plateau sample shifts the event late by the same amount.

Case contract

Input [h, dt, minr]: equally spaced heights every dt minutes. Interior extrema (plateaus collapse to their midpoint time) are candidates; series endpoints never are. A candidate of the same type as the last accepted event replaces it only if more extreme; otherwise a candidate whose height differs from the last accepted event by less than minr is ignored. Return [[type, minutes, height], ...].

Why this case matters

Tide tables and passage plans turn published predictions into go/no-go decisions about depth, clearance and timing.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    h,dt,minr=x
    n=len(h)
    ev=[]
    i=1
    while i<n-1:
        j=i
        while j+1<n-1 and h[j+1]==h[i]: j+=1
        if h[i]>h[i-1] and h[i]>h[j+1]: ev.append(['HW',i*dt,h[i]])
        elif h[i]<h[i-1] and h[i]<h[j+1]: ev.append(['LW',(i+j)*dt/2,h[i]])
        i=j+1
    out=[]
    for e in ev:
        if out and out[-1][0]==e[0]:
            if (e[2]>out[-1][2])==(e[0]=='HW'): out[-1]=e
            continue
        if out and abs(e[2]-out[-1][2])<minr: continue
        out.append(e)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3], [['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], [])], [('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3], [['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], []), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]])], [('high and low water extraction [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5]', [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5], [['HW', 37.5, 5.0], ['LW', 97.5, 1.0]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], []), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05]', [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05], [['HW', 30.0, 3.0], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2]', [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2], [['HW', 30.0, 3.0], ['LW', 60.0, 2.8], ['HW', 90.0, 3.2], ['LW', 210.0, 0.4]]), ('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]])], [('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]]), ('high and low water extraction [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5]', [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5], [['HW', 37.5, 5.0], ['LW', 97.5, 1.0]]), ('high and low water extraction [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05]', [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05], [['HW', 30.0, 3.0], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2]', [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2], [['HW', 30.0, 3.0], ['LW', 60.0, 2.8], ['HW', 90.0, 3.2], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3]', [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3], [['HW', 30.0, 2.5], ['LW', 150.0, 0.2]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]])], [('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]), ('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]]), ('high and low water extraction [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3]', [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3], [['HW', 30.0, 2.5], ['LW', 150.0, 0.2]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]])]]
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
high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2][['HW', 120, 4.0], ['LW', 360.0, 1.0]][['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]Failed
high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2][['HW', 90, 4.1], ['LW', 210.0, 0.5]][['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]Passed
high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3][['LW', 40.0, 1.0], ['HW', 80, 3.0], ['LW', 180.0, 0.4]][['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]Failed
high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2][['HW', 60, 4.8], ['LW', 210.0, 0.8]][['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2][['HW', 60, 4.8], ['LW', 90.0, 4.6], ['HW', 120, 4.9], ['LW', 210.0, 0.8]][['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3][['HW', 120, 4.9], ['LW', 210.0, 0.8]][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1][][]Passed

SHA-256 / a4dd546e0c3b9e9b7b7a7ee55d0608bef172285028981f5c6e8c402277812db0

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    h,dt,minr=x
    n=len(h)
    ev=[]
    i=1
    while i<n-1:
        j=i
        while j+1<n-1 and h[j+1]==h[i]: j+=1
        if h[i]>h[i-1] and h[i]>h[j+1]: ev.append(['HW',j*dt,h[i]])
        elif h[i]<h[i-1] and h[i]<h[j+1]: ev.append(['LW',(i+j)*dt/2,h[i]])
        i=j+1
    out=[]
    for e in ev:
        if out and out[-1][0]==e[0]:
            if (e[2]>out[-1][2])==(e[0]=='HW'): out[-1]=e
            continue
        if out and abs(e[2]-out[-1][2])<minr: continue
        out.append(e)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3], [['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], [])], [('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3], [['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], []), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]])], [('high and low water extraction [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5]', [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5], [['HW', 37.5, 5.0], ['LW', 97.5, 1.0]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], []), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05]', [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05], [['HW', 30.0, 3.0], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2]', [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2], [['HW', 30.0, 3.0], ['LW', 60.0, 2.8], ['HW', 90.0, 3.2], ['LW', 210.0, 0.4]]), ('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]])], [('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]]), ('high and low water extraction [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5]', [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5], [['HW', 37.5, 5.0], ['LW', 97.5, 1.0]]), ('high and low water extraction [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05]', [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05], [['HW', 30.0, 3.0], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2]', [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2], [['HW', 30.0, 3.0], ['LW', 60.0, 2.8], ['HW', 90.0, 3.2], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3]', [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3], [['HW', 30.0, 2.5], ['LW', 150.0, 0.2]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]])], [('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]), ('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]]), ('high and low water extraction [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3]', [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3], [['HW', 30.0, 2.5], ['LW', 150.0, 0.2]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]])]]
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
high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2][['HW', 180, 4.0], ['LW', 360.0, 1.0]][['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]Failed
high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2][['HW', 90, 4.1], ['LW', 210.0, 0.5]][['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]Passed
high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3][['LW', 40.0, 1.0], ['HW', 120, 3.0], ['LW', 180.0, 0.4]][['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]Failed
high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2][['HW', 60, 4.8], ['LW', 210.0, 0.8]][['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2][['HW', 60, 4.8], ['LW', 90.0, 4.6], ['HW', 120, 4.9], ['LW', 210.0, 0.8]][['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3][['HW', 120, 4.9], ['LW', 210.0, 0.8]][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1][][]Passed

SHA-256 / 8676d5fc4067ba241f3ada95b835d30eb6495ac1ad3a12df8eb27f3b4437ef3b

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    h,dt,minr=x
    n=len(h)
    ev=[]
    i=1
    while i<n-1:
        j=i
        while j+1<n-1 and h[j+1]==h[i]: j+=1
        if h[i]>h[i-1] and h[i]>h[j+1]: ev.append(['HW',(i+j)*dt/2,h[i]])
        elif h[i]<h[i-1] and h[i]<h[j+1]: ev.append(['LW',(i+j)*dt/2,h[i]])
        i=j+1
    out=[]
    for e in ev:
        if out and out[-1][0]==e[0]:
            if (e[2]>out[-1][2])==(e[0]=='HW'): out[-1]=e
            continue
        if out and abs(e[2]-out[-1][2])<minr: continue
        out.append(e)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3], [['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], [])], [('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3], [['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], []), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]])], [('high and low water extraction [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5]', [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5], [['HW', 37.5, 5.0], ['LW', 97.5, 1.0]]), ('high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1]', [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1], []), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 0.5], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0]', [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0], [['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]), ('high and low water extraction [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05]', [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05], [['HW', 30.0, 3.0], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2]', [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2], [['HW', 30.0, 3.0], ['LW', 60.0, 2.8], ['HW', 90.0, 3.2], ['LW', 210.0, 0.4]]), ('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]])], [('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]]), ('high and low water extraction [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5]', [[4.0, 5.0, 5.0, 5.0, 5.0, 4.0, 1.0, 1.0, 2.0], 15, 0.5], [['HW', 37.5, 5.0], ['LW', 97.5, 1.0]]), ('high and low water extraction [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05]', [[1.0, 3.0, 2.99, 3.0, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.05], [['HW', 30.0, 3.0], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2]', [[1.0, 3.0, 2.8, 3.2, 1.0, 0.5, 0.52, 0.4, 2.0], 30, 0.2], [['HW', 30.0, 3.0], ['LW', 60.0, 2.8], ['HW', 90.0, 3.2], ['LW', 210.0, 0.4]]), ('high and low water extraction [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3]', [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3], [['HW', 30.0, 2.5], ['LW', 150.0, 0.2]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]])], [('high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2]', [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2], [['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]), ('high and low water extraction [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1]', [[3.0, 1.0, 1.0, 3.0, 3.5, 3.5, 2.0], 45, 0.1], [['LW', 67.5, 1.0], ['HW', 202.5, 3.5]]), ('high and low water extraction [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3]', [[1.0, 2.5, 2.2, 2.5, 1.0, 0.2, 1.0], 30, 0.3], [['HW', 30.0, 2.5], ['LW', 150.0, 0.2]]), ('high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2]', [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2], [['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]), ('high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3]', [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3], [['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]), ('high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2]', [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2], [['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]])]]
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
high and low water extraction [[1.0, 2.0, 4.0, 4.0, 3.0, 1.0, 1.0, 1.0, 2.0], 60, 0.2][['HW', 150.0, 4.0], ['LW', 360.0, 1.0]][['HW', 150.0, 4.0], ['LW', 360.0, 1.0]]Passed
high and low water extraction [[1.0, 2.0, 3.5, 4.1, 3.6, 2.0, 0.9, 0.5, 1.1, 2.4], 30, 0.2][['HW', 90.0, 4.1], ['LW', 210.0, 0.5]][['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]Passed
high and low water extraction [[3.0, 2.0, 1.0, 2.0, 3.0, 3.0, 3.0, 2.5, 1.2, 0.4, 1.5], 20, 0.3][['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]][['LW', 40.0, 1.0], ['HW', 100.0, 3.0], ['LW', 180.0, 0.4]]Passed
high and low water extraction [[0.5, 2.0, 4.8, 4.7, 4.75, 3.0, 1.0, 0.8, 1.5], 30, 0.2][['HW', 60.0, 4.8], ['LW', 210.0, 0.8]][['HW', 60.0, 4.8], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.2][['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]][['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[0.5, 2.0, 4.8, 4.6, 4.9, 3.0, 1.0, 0.8, 1.5], 30, 0.3][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed
high and low water extraction [[5.0, 4.0, 3.0, 2.0, 1.0], 60, 0.1][][]Passed

SHA-256 / 339b4446014c58155edb7c504fc9e99bf6e6f163f5ae63d42be2bba31643e8e4

Verification & scope

A deterministic toy model with stipulated rules and constants; not certified hydrographic software or a substitute for official tide tables. 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:07.732894+00:00.

Case digest / 0f41df8eafb8090852574a3cb2f6ba33d009d0951ec8277995f60b57944f9997