FAILURE MAP
← Case archive

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

Secondary port differences: Time difference is rounded before being applied · case 01

Corrected times are a minute off when the interpolated difference has a half minute.

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

ROOT CAUSE

The interpolated time difference is truncated toward zero before adding it to the standard port time.

VERIFIED REPAIR

Add the unrounded difference and round the corrected time once.

Unsuccessful approach: Rounding the difference with Python round uses bankers rounding and still double-rounds.

Case contract

Input dict: standard port HW time hw (minutes of day), height hh, today range rng, mean spring/neap ranges sr/nr, time differences ts/tn (spring/neap, minutes) and height differences hs/hn. Interpolation factor k=(rng-nr)/(sr-nr) clamped to [0,1]; difference = neap+(spring-neap)*k. Time is wrapped to [0,1440) and rounded to whole minutes half up; height rounded to 2 decimals. Return [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):
    k=(x['rng']-x['nr'])/(x['sr']-x['nr'])
    k=max(0.0,min(1.0,k))
    dt=x['tn']+(x['ts']-x['tn'])*k
    dh=x['hn']+(x['hs']-x['hn'])*k
    t=math.floor(x['hw']+int(dt)+0.5)
    t=t%1440
    return [t,round(x['hh']+dh,2)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 1.8, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [620, 3.9]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.4, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.4, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [606, 3.8]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.6, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [579, 3.6])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.6, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [579, 3.6]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 4.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 4.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [565, 3.5]), ('secondary port differences {"hw": 10, "hh": 3.8, "rng": 3.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 10, 'hh': 3.8, 'rng': 3.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1422, 3.25]), ('secondary port differences {"hw": 1430, "hh": 4.4, "rng": 2.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1430, 'hh': 4.4, 'rng': 2.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 4.17])], [('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 4.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 4.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [565, 3.5]), ('secondary port differences {"hw": 10, "hh": 3.8, "rng": 3.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 10, 'hh': 3.8, 'rng': 3.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1422, 3.25]), ('secondary port differences {"hw": 1430, "hh": 4.4, "rng": 2.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1430, 'hh': 4.4, 'rng': 2.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 4.17]), ('secondary port differences {"hw": 20, "hh": 3.0, "rng": 1.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 20, 'hh': 3.0, 'rng': 1.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [40, 2.8]), ('secondary port differences {"hw": 700, "hh": 5.0, "rng": 5.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 700, 'hh': 5.0, 'rng': 5.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [665, 4.4])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 20, "hh": 3.0, "rng": 1.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 20, 'hh': 3.0, 'rng': 1.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [40, 2.8]), ('secondary port differences {"hw": 700, "hh": 5.0, "rng": 5.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 700, 'hh': 5.0, 'rng': 5.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [665, 4.4]), ('secondary port differences {"hw": 1425, "hh": 4.0, "rng": 1.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1425, 'hh': 4.0, 'rng': 1.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 3.8]), ('secondary port differences {"hw": 30, "hh": 4.9, "rng": 4.7, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 30, 'hh': 4.9, 'rng': 4.7, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1435, 4.3]), ('secondary port differences {"hw": 300, "hh": 2.2, "rng": 0.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 300, 'hh': 2.2, 'rng': 0.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [320, 2.0])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 30, "hh": 4.9, "rng": 4.7, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 30, 'hh': 4.9, 'rng': 4.7, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1435, 4.3]), ('secondary port differences {"hw": 300, "hh": 2.2, "rng": 0.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 300, 'hh': 2.2, 'rng': 0.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [320, 2.0]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 1.8, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [620, 3.9]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83])]]
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
secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[610, 3.83][611, 3.83]Failed
secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}[593, 3.7][593, 3.7]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[620, 3.9][620, 3.9]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.4, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[606, 3.8][606, 3.8]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[593, 3.7][593, 3.7]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[591, 3.68][590, 3.68]Failed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[579, 3.6][579, 3.6]Passed

SHA-256 / 07ebd713160fff533d0e7fef213ee18bb5592571f6569093ff780ff300d4577d

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    k=(x['rng']-x['nr'])/(x['sr']-x['nr'])
    k=max(0.0,min(1.0,k))
    dt=x['tn']+(x['ts']-x['tn'])*k
    dh=x['hn']+(x['hs']-x['hn'])*k
    t=math.floor(x['hw']+round(dt)+0.5)
    t=t%1440
    return [t,round(x['hh']+dh,2)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 1.8, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [620, 3.9]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.4, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.4, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [606, 3.8]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.6, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [579, 3.6])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.6, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [579, 3.6]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 4.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 4.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [565, 3.5]), ('secondary port differences {"hw": 10, "hh": 3.8, "rng": 3.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 10, 'hh': 3.8, 'rng': 3.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1422, 3.25]), ('secondary port differences {"hw": 1430, "hh": 4.4, "rng": 2.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1430, 'hh': 4.4, 'rng': 2.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 4.17])], [('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 4.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 4.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [565, 3.5]), ('secondary port differences {"hw": 10, "hh": 3.8, "rng": 3.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 10, 'hh': 3.8, 'rng': 3.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1422, 3.25]), ('secondary port differences {"hw": 1430, "hh": 4.4, "rng": 2.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1430, 'hh': 4.4, 'rng': 2.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 4.17]), ('secondary port differences {"hw": 20, "hh": 3.0, "rng": 1.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 20, 'hh': 3.0, 'rng': 1.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [40, 2.8]), ('secondary port differences {"hw": 700, "hh": 5.0, "rng": 5.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 700, 'hh': 5.0, 'rng': 5.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [665, 4.4])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 20, "hh": 3.0, "rng": 1.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 20, 'hh': 3.0, 'rng': 1.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [40, 2.8]), ('secondary port differences {"hw": 700, "hh": 5.0, "rng": 5.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 700, 'hh': 5.0, 'rng': 5.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [665, 4.4]), ('secondary port differences {"hw": 1425, "hh": 4.0, "rng": 1.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1425, 'hh': 4.0, 'rng': 1.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 3.8]), ('secondary port differences {"hw": 30, "hh": 4.9, "rng": 4.7, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 30, 'hh': 4.9, 'rng': 4.7, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1435, 4.3]), ('secondary port differences {"hw": 300, "hh": 2.2, "rng": 0.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 300, 'hh': 2.2, 'rng': 0.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [320, 2.0])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 30, "hh": 4.9, "rng": 4.7, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 30, 'hh': 4.9, 'rng': 4.7, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1435, 4.3]), ('secondary port differences {"hw": 300, "hh": 2.2, "rng": 0.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 300, 'hh': 2.2, 'rng': 0.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [320, 2.0]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 1.8, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [620, 3.9]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83])]]
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
secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[611, 3.83][611, 3.83]Passed
secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}[592, 3.7][593, 3.7]Failed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[620, 3.9][620, 3.9]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.4, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[606, 3.8][606, 3.8]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[593, 3.7][593, 3.7]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[590, 3.68][590, 3.68]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[579, 3.6][579, 3.6]Passed

SHA-256 / 47a1b910caedf94d97146596c1e22396aec438820372f973358f539666b29572

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    k=(x['rng']-x['nr'])/(x['sr']-x['nr'])
    k=max(0.0,min(1.0,k))
    dt=x['tn']+(x['ts']-x['tn'])*k
    dh=x['hn']+(x['hs']-x['hn'])*k
    t=math.floor(x['hw']+dt+0.5)
    t=t%1440
    return [t,round(x['hh']+dh,2)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 1.8, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [620, 3.9]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.4, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.4, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [606, 3.8]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.6, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [579, 3.6])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.6, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [579, 3.6]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 4.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 4.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [565, 3.5]), ('secondary port differences {"hw": 10, "hh": 3.8, "rng": 3.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 10, 'hh': 3.8, 'rng': 3.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1422, 3.25]), ('secondary port differences {"hw": 1430, "hh": 4.4, "rng": 2.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1430, 'hh': 4.4, 'rng': 2.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 4.17])], [('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 4.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 4.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [565, 3.5]), ('secondary port differences {"hw": 10, "hh": 3.8, "rng": 3.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 10, 'hh': 3.8, 'rng': 3.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1422, 3.25]), ('secondary port differences {"hw": 1430, "hh": 4.4, "rng": 2.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1430, 'hh': 4.4, 'rng': 2.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 4.17]), ('secondary port differences {"hw": 20, "hh": 3.0, "rng": 1.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 20, 'hh': 3.0, 'rng': 1.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [40, 2.8]), ('secondary port differences {"hw": 700, "hh": 5.0, "rng": 5.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 700, 'hh': 5.0, 'rng': 5.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [665, 4.4])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 20, "hh": 3.0, "rng": 1.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 20, 'hh': 3.0, 'rng': 1.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [40, 2.8]), ('secondary port differences {"hw": 700, "hh": 5.0, "rng": 5.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 700, 'hh': 5.0, 'rng': 5.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [665, 4.4]), ('secondary port differences {"hw": 1425, "hh": 4.0, "rng": 1.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 1425, 'hh': 4.0, 'rng': 1.0, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [5, 3.8]), ('secondary port differences {"hw": 30, "hh": 4.9, "rng": 4.7, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 30, 'hh': 4.9, 'rng': 4.7, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1435, 4.3]), ('secondary port differences {"hw": 300, "hh": 2.2, "rng": 0.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 300, 'hh': 2.2, 'rng': 0.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [320, 2.0])], [('secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 3.1, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [590, 3.68]), ('secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}', {'hw': 600, 'hh': 4.0, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -35, 'tn': 20, 'hs': -0.5, 'hn': -0.1}, [593, 3.7]), ('secondary port differences {"hw": 30, "hh": 4.9, "rng": 4.7, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 30, 'hh': 4.9, 'rng': 4.7, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [1435, 4.3]), ('secondary port differences {"hw": 300, "hh": 2.2, "rng": 0.9, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 300, 'hh': 2.2, 'rng': 0.9, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [320, 2.0]), ('secondary port differences {"hw": 610, "hh": 3.5, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -12, "tn": 25, "hs": -0.4, "hn": 0.1}', {'hw': 610, 'hh': 3.5, 'rng': 3.0, 'sr': 4.0, 'nr': 2.0, 'ts': -12, 'tn': 25, 'hs': -0.4, 'hn': 0.1}, [617, 3.35]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 1.8, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [620, 3.9]), ('secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}', {'hw': 600, 'hh': 4.1, 'rng': 2.2, 'sr': 4.2, 'nr': 1.8, 'ts': -35, 'tn': 20, 'hs': -0.6, 'hn': -0.2}, [611, 3.83])]]
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
secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.2, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[611, 3.83][611, 3.83]Passed
secondary port differences {"hw": 600, "hh": 4.0, "rng": 3.0, "sr": 4.0, "nr": 2.0, "ts": -35, "tn": 20, "hs": -0.5, "hn": -0.1}[593, 3.7][593, 3.7]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 1.8, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[620, 3.9][620, 3.9]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 2.4, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[606, 3.8][606, 3.8]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.0, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[593, 3.7][593, 3.7]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.1, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[590, 3.68][590, 3.68]Passed
secondary port differences {"hw": 600, "hh": 4.1, "rng": 3.6, "sr": 4.2, "nr": 1.8, "ts": -35, "tn": 20, "hs": -0.6, "hn": -0.2}[579, 3.6][579, 3.6]Passed

SHA-256 / e0c85d41ca141b723883eb8b3922a0aedc0f0ffad78c4e3c1d4c25a72cab843b

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

Case digest / 9fe765db0c36e1331e7d86a5776fe7380384fdc6843fe492d715c3e7e8177d29