FAILURE MAP
← Case archive

FA-68141 / Traffic signal timing plans / Open access

Uniform delay level of service: the delay is truncated to tenths · case 01

Uniform delay level of service returns a wrong result when the delay is truncated to tenths.

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

ROOT CAUSE

Truncation drops up to 0.1 s, moving delays across LOS thresholds.

VERIFIED REPAIR

Restore the delay rounding rule so that the step reads `int(d * 10 + Fraction(1, 2))`.

Unsuccessful approach: Rounding down to whole seconds before scaling loses the tenths resolution entirely.

Case contract

Input {cycle, green, volume, sat_per_lane, lanes}. lam = green/cycle, capacity = sat*lanes*lam, X = volume/capacity, uniform delay d = 0.5*C*(1-lam)^2/(1 - min(1,X)*lam) rounded half up to tenths. LOS thresholds on tenths: <=100 A, <=200 B, <=350 C, <=550 D, <=800 E, else F; any X > 1 is F. Return {vc_milli: floor(1000X), delay_tenths, los}.

Why this case matters

Signal timing arithmetic is exact and integer or rational; a wrong rule silently produces unsafe or inefficient timing plans.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
    C, g = x['cycle'], x['green']
    lam = Fraction(g, C)
    cap = x['sat_per_lane'] * x['lanes'] * lam
    X = Fraction(x['volume']) / cap
    d = Fraction(1, 2) * C * (1 - lam) ** 2 / (1 - min(1, X) * lam)
    tenths = int(d * 10)
    if X > 1:
        los = 'F'
    else:
        los = 'F'
        for lim, lab in ((100, 'A'), (200, 'B'), (350, 'C'), (550, 'D'), (800, 'E')):
            if tenths <= lim:
                los = lab
                break
    return {'vc_milli': int(X * 1000), 'delay_tenths': tenths, 'los': los}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 70, 'green': 37, 'volume': 970, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1079, 'delay_tenths': 165, 'los': 'F'}), ({'cycle': 60, 'green': 11, 'volume': 919, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 982, 'delay_tenths': 244, 'los': 'C'}), ({'cycle': 70, 'green': 21, 'volume': 420, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 777, 'delay_tenths': 224, 'los': 'C'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 150, 'green': 103, 'volume': 3653, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 985, 'delay_tenths': 228, 'los': 'C'}), ({'cycle': 110, 'green': 32, 'volume': 535, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 360, 'delay_tenths': 309, 'los': 'C'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 80, 'green': 50, 'volume': 1381, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 1162, 'delay_tenths': 150, 'los': 'F'}), ({'cycle': 70, 'green': 13, 'volume': 1930, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1924, 'delay_tenths': 285, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 70, 'green': 45, 'volume': 1366, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 393, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 120, 'green': 64, 'volume': 894, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 465, 'delay_tenths': 174, 'los': 'B'}), ({'cycle': 80, 'green': 45, 'volume': 1158, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 571, 'delay_tenths': 113, 'los': 'B'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'})], [({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 140, 'green': 22, 'volume': 523, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 875, 'delay_tenths': 577, 'los': 'E'}), ({'cycle': 90, 'green': 30, 'volume': 2101, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1853, 'delay_tenths': 300, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 140, 'green': 38, 'volume': 1193, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 771, 'delay_tenths': 470, 'los': 'D'}), ({'cycle': 80, 'green': 14, 'volume': 334, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1122, 'delay_tenths': 330, 'los': 'F'}), ({'cycle': 130, 'green': 103, 'volume': 1066, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 373, 'delay_tenths': 40, 'los': 'A'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 130, 'green': 50, 'volume': 340, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 520, 'delay_tenths': 308, 'los': 'C'}), ({'cycle': 150, 'green': 54, 'volume': 754, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 581, 'delay_tenths': 389, 'los': 'D'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 110, 'green': 61, 'volume': 4988, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1665, 'delay_tenths': 245, 'los': 'F'}), ({'cycle': 80, 'green': 20, 'volume': 841, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1868, 'delay_tenths': 300, 'los': 'F'}), ({'cycle': 130, 'green': 67, 'volume': 1113, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 568, 'delay_tenths': 216, 'los': 'C'})], [({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 60, 'green': 22, 'volume': 835, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 669, 'delay_tenths': 160, 'los': 'B'}), ({'cycle': 140, 'green': 116, 'volume': 4381, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 927, 'delay_tenths': 89, 'los': 'A'}), ({'cycle': 100, 'green': 84, 'volume': 5008, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1753, 'delay_tenths': 80, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 150, 'green': 13, 'volume': 284, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1927, 'delay_tenths': 685, 'los': 'F'}), ({'cycle': 100, 'green': 70, 'volume': 1463, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 387, 'delay_tenths': 62, 'los': 'A'})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('timing oracle' + ' %d' % i, 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
timing oracle 0{'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000}{'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000}Passed
timing oracle 1{'delay_tenths': 200, 'los': 'B', 'vc_milli': 750}{'delay_tenths': 200, 'los': 'B', 'vc_milli': 750}Passed
timing oracle 2{'delay_tenths': 165, 'los': 'F', 'vc_milli': 1079}{'delay_tenths': 165, 'los': 'F', 'vc_milli': 1079}Passed
timing oracle 3{'delay_tenths': 244, 'los': 'C', 'vc_milli': 982}{'delay_tenths': 244, 'los': 'C', 'vc_milli': 982}Passed
timing oracle 4{'delay_tenths': 223, 'los': 'C', 'vc_milli': 777}{'delay_tenths': 224, 'los': 'C', 'vc_milli': 777}Failed
timing oracle 5{'delay_tenths': 60, 'los': 'A', 'vc_milli': 666}{'delay_tenths': 60, 'los': 'A', 'vc_milli': 666}Passed
timing oracle 6{'delay_tenths': 227, 'los': 'C', 'vc_milli': 985}{'delay_tenths': 228, 'los': 'C', 'vc_milli': 985}Failed
timing oracle 7{'delay_tenths': 308, 'los': 'C', 'vc_milli': 360}{'delay_tenths': 309, 'los': 'C', 'vc_milli': 360}Failed

SHA-256 / ce0054451d2deb0df646ab786cbb277a5f08ddfb71bbfc1edbc60f1ba95182af

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
    C, g = x['cycle'], x['green']
    lam = Fraction(g, C)
    cap = x['sat_per_lane'] * x['lanes'] * lam
    X = Fraction(x['volume']) / cap
    d = Fraction(1, 2) * C * (1 - lam) ** 2 / (1 - min(1, X) * lam)
    tenths = int(d) * 10
    if X > 1:
        los = 'F'
    else:
        los = 'F'
        for lim, lab in ((100, 'A'), (200, 'B'), (350, 'C'), (550, 'D'), (800, 'E')):
            if tenths <= lim:
                los = lab
                break
    return {'vc_milli': int(X * 1000), 'delay_tenths': tenths, 'los': los}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 70, 'green': 37, 'volume': 970, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1079, 'delay_tenths': 165, 'los': 'F'}), ({'cycle': 60, 'green': 11, 'volume': 919, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 982, 'delay_tenths': 244, 'los': 'C'}), ({'cycle': 70, 'green': 21, 'volume': 420, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 777, 'delay_tenths': 224, 'los': 'C'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 150, 'green': 103, 'volume': 3653, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 985, 'delay_tenths': 228, 'los': 'C'}), ({'cycle': 110, 'green': 32, 'volume': 535, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 360, 'delay_tenths': 309, 'los': 'C'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 80, 'green': 50, 'volume': 1381, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 1162, 'delay_tenths': 150, 'los': 'F'}), ({'cycle': 70, 'green': 13, 'volume': 1930, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1924, 'delay_tenths': 285, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 70, 'green': 45, 'volume': 1366, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 393, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 120, 'green': 64, 'volume': 894, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 465, 'delay_tenths': 174, 'los': 'B'}), ({'cycle': 80, 'green': 45, 'volume': 1158, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 571, 'delay_tenths': 113, 'los': 'B'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'})], [({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 140, 'green': 22, 'volume': 523, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 875, 'delay_tenths': 577, 'los': 'E'}), ({'cycle': 90, 'green': 30, 'volume': 2101, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1853, 'delay_tenths': 300, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 140, 'green': 38, 'volume': 1193, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 771, 'delay_tenths': 470, 'los': 'D'}), ({'cycle': 80, 'green': 14, 'volume': 334, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1122, 'delay_tenths': 330, 'los': 'F'}), ({'cycle': 130, 'green': 103, 'volume': 1066, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 373, 'delay_tenths': 40, 'los': 'A'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 130, 'green': 50, 'volume': 340, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 520, 'delay_tenths': 308, 'los': 'C'}), ({'cycle': 150, 'green': 54, 'volume': 754, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 581, 'delay_tenths': 389, 'los': 'D'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 110, 'green': 61, 'volume': 4988, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1665, 'delay_tenths': 245, 'los': 'F'}), ({'cycle': 80, 'green': 20, 'volume': 841, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1868, 'delay_tenths': 300, 'los': 'F'}), ({'cycle': 130, 'green': 67, 'volume': 1113, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 568, 'delay_tenths': 216, 'los': 'C'})], [({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 60, 'green': 22, 'volume': 835, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 669, 'delay_tenths': 160, 'los': 'B'}), ({'cycle': 140, 'green': 116, 'volume': 4381, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 927, 'delay_tenths': 89, 'los': 'A'}), ({'cycle': 100, 'green': 84, 'volume': 5008, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1753, 'delay_tenths': 80, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 150, 'green': 13, 'volume': 284, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1927, 'delay_tenths': 685, 'los': 'F'}), ({'cycle': 100, 'green': 70, 'volume': 1463, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 387, 'delay_tenths': 62, 'los': 'A'})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('timing oracle' + ' %d' % i, 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
timing oracle 0{'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000}{'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000}Passed
timing oracle 1{'delay_tenths': 200, 'los': 'B', 'vc_milli': 750}{'delay_tenths': 200, 'los': 'B', 'vc_milli': 750}Passed
timing oracle 2{'delay_tenths': 160, 'los': 'F', 'vc_milli': 1079}{'delay_tenths': 165, 'los': 'F', 'vc_milli': 1079}Failed
timing oracle 3{'delay_tenths': 240, 'los': 'C', 'vc_milli': 982}{'delay_tenths': 244, 'los': 'C', 'vc_milli': 982}Failed
timing oracle 4{'delay_tenths': 220, 'los': 'C', 'vc_milli': 777}{'delay_tenths': 224, 'los': 'C', 'vc_milli': 777}Failed
timing oracle 5{'delay_tenths': 60, 'los': 'A', 'vc_milli': 666}{'delay_tenths': 60, 'los': 'A', 'vc_milli': 666}Passed
timing oracle 6{'delay_tenths': 220, 'los': 'C', 'vc_milli': 985}{'delay_tenths': 228, 'los': 'C', 'vc_milli': 985}Failed
timing oracle 7{'delay_tenths': 300, 'los': 'C', 'vc_milli': 360}{'delay_tenths': 309, 'los': 'C', 'vc_milli': 360}Failed

SHA-256 / c9e86bcb112d3bec21a31b48db3edd158e540eeeb77204d8fc8e03e365a115d3

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
    C, g = x['cycle'], x['green']
    lam = Fraction(g, C)
    cap = x['sat_per_lane'] * x['lanes'] * lam
    X = Fraction(x['volume']) / cap
    d = Fraction(1, 2) * C * (1 - lam) ** 2 / (1 - min(1, X) * lam)
    tenths = int(d * 10 + Fraction(1, 2))
    if X > 1:
        los = 'F'
    else:
        los = 'F'
        for lim, lab in ((100, 'A'), (200, 'B'), (350, 'C'), (550, 'D'), (800, 'E')):
            if tenths <= lim:
                los = lab
                break
    return {'vc_milli': int(X * 1000), 'delay_tenths': tenths, 'los': los}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 70, 'green': 37, 'volume': 970, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1079, 'delay_tenths': 165, 'los': 'F'}), ({'cycle': 60, 'green': 11, 'volume': 919, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 982, 'delay_tenths': 244, 'los': 'C'}), ({'cycle': 70, 'green': 21, 'volume': 420, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 777, 'delay_tenths': 224, 'los': 'C'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 150, 'green': 103, 'volume': 3653, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 985, 'delay_tenths': 228, 'los': 'C'}), ({'cycle': 110, 'green': 32, 'volume': 535, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 360, 'delay_tenths': 309, 'los': 'C'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 80, 'green': 50, 'volume': 1381, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 1162, 'delay_tenths': 150, 'los': 'F'}), ({'cycle': 70, 'green': 13, 'volume': 1930, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1924, 'delay_tenths': 285, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 70, 'green': 45, 'volume': 1366, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 393, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 120, 'green': 64, 'volume': 894, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 465, 'delay_tenths': 174, 'los': 'B'}), ({'cycle': 80, 'green': 45, 'volume': 1158, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 571, 'delay_tenths': 113, 'los': 'B'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'})], [({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 140, 'green': 22, 'volume': 523, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 875, 'delay_tenths': 577, 'los': 'E'}), ({'cycle': 90, 'green': 30, 'volume': 2101, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1853, 'delay_tenths': 300, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 140, 'green': 38, 'volume': 1193, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 771, 'delay_tenths': 470, 'los': 'D'}), ({'cycle': 80, 'green': 14, 'volume': 334, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1122, 'delay_tenths': 330, 'los': 'F'}), ({'cycle': 130, 'green': 103, 'volume': 1066, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 373, 'delay_tenths': 40, 'los': 'A'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 130, 'green': 50, 'volume': 340, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 520, 'delay_tenths': 308, 'los': 'C'}), ({'cycle': 150, 'green': 54, 'volume': 754, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 581, 'delay_tenths': 389, 'los': 'D'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 110, 'green': 61, 'volume': 4988, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1665, 'delay_tenths': 245, 'los': 'F'}), ({'cycle': 80, 'green': 20, 'volume': 841, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1868, 'delay_tenths': 300, 'los': 'F'}), ({'cycle': 130, 'green': 67, 'volume': 1113, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 568, 'delay_tenths': 216, 'los': 'C'})], [({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 60, 'green': 22, 'volume': 835, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 669, 'delay_tenths': 160, 'los': 'B'}), ({'cycle': 140, 'green': 116, 'volume': 4381, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 927, 'delay_tenths': 89, 'los': 'A'}), ({'cycle': 100, 'green': 84, 'volume': 5008, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1753, 'delay_tenths': 80, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 150, 'green': 13, 'volume': 284, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1927, 'delay_tenths': 685, 'los': 'F'}), ({'cycle': 100, 'green': 70, 'volume': 1463, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 387, 'delay_tenths': 62, 'los': 'A'})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('timing oracle' + ' %d' % i, 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
timing oracle 0{'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000}{'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000}Passed
timing oracle 1{'delay_tenths': 200, 'los': 'B', 'vc_milli': 750}{'delay_tenths': 200, 'los': 'B', 'vc_milli': 750}Passed
timing oracle 2{'delay_tenths': 165, 'los': 'F', 'vc_milli': 1079}{'delay_tenths': 165, 'los': 'F', 'vc_milli': 1079}Passed
timing oracle 3{'delay_tenths': 244, 'los': 'C', 'vc_milli': 982}{'delay_tenths': 244, 'los': 'C', 'vc_milli': 982}Passed
timing oracle 4{'delay_tenths': 224, 'los': 'C', 'vc_milli': 777}{'delay_tenths': 224, 'los': 'C', 'vc_milli': 777}Passed
timing oracle 5{'delay_tenths': 60, 'los': 'A', 'vc_milli': 666}{'delay_tenths': 60, 'los': 'A', 'vc_milli': 666}Passed
timing oracle 6{'delay_tenths': 228, 'los': 'C', 'vc_milli': 985}{'delay_tenths': 228, 'los': 'C', 'vc_milli': 985}Passed
timing oracle 7{'delay_tenths': 309, 'los': 'C', 'vc_milli': 360}{'delay_tenths': 309, 'los': 'C', 'vc_milli': 360}Passed

SHA-256 / c78f9f769e747d148cf94c9a92b715eb883a801bbf123a15530ef90deff6c508

Verification & scope

A deterministic, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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:47:59.435636+00:00.

Case digest / 7de9995463660732819cbe20ab0d83078a55c5fe3192a8818d252bfa3d3a0f20