FAILURE MAP
← Case archive

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

High and low water extraction: Ripples exactly at the threshold are discarded · case 01

A genuine event whose height difference equals minr disappears.

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

ROOT CAUSE

The ripple filter uses <= instead of <.

VERIFIED REPAIR

Only ignore candidates strictly closer than minr.

Unsuccessful approach: Comparing with the first accepted event rather than the last filters unrelated heights.

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+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 [[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 [[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 [[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 [[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.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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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.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 [[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 [[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.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 [[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 [[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]])]]
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 [[2.0, 1.0, 2.0, 1.0, 2.0, 1.0], 10, 1.0][['LW', 30.0, 1.0]][['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]Failed
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 [[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 [[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 [[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.3][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed

SHA-256 / 05990d11f90dd63cf5839de99cf1203b266c52ebb7c5c532b5706023334a3525

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',(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[0][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 [[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 [[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 [[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 [[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.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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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.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 [[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 [[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.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 [[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 [[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]])]]
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 [[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', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]Failed
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', 210.0, 0.8]][['HW', 60.0, 4.8], ['LW', 90.0, 4.6], ['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]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.0, 4.1], ['LW', 210.0, 0.5]][['HW', 90.0, 4.1], ['LW', 210.0, 0.5]]Passed
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 [[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.3][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed

SHA-256 / 593db848160f909b1be0cdbfd6d663584c6e8f049b918b7d5ead2cba5309f12c

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 [[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 [[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 [[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 [[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.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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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 [[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.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 [[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 [[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.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 [[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 [[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]])]]
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 [[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]][['LW', 10.0, 1.0], ['HW', 20.0, 2.0], ['LW', 30.0, 1.0], ['HW', 40.0, 2.0]]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 [[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 [[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 [[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.3][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]][['HW', 120.0, 4.9], ['LW', 210.0, 0.8]]Passed

SHA-256 / bd5fbf8fc7c467472e129e4fe3a9115c5db3f9cfa1bb71721541bd257e2a1aae

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

Case digest / ddb4fa3da165c0b0e985dc29a3cf078d767f54dc3ceb826cc5bdcb4fa34865e1