FA-67901 / Traffic signal timing plans / Open access
Yellow and all-red intervals: approach speed in mph is used as ft/s · case 01
Yellow and all-red intervals returns a wrong result when approach speed in mph is used as ft/s.
ROOT CAUSE
The mph to ft/s factor is omitted, so the kinematic yellow uses a speed about a third too low and all-red is too long.
VERIFIED REPAIR
Restore the approach speed conversion rule so that the step reads `Fraction(x['speed_mph']) * Fraction(1467, 1000)`.
Unsuccessful approach: Converting to m/s mixes metric speed with ft/s^2 deceleration and feet of width.
Case contract
Input {speed_mph, grade_pct (uphill positive), reaction_tenths, decel ft/s^2, width_ft, veh_len_ft, crosswalk_ft, ped}. v = 1.467*speed ft/s; yellow = t + v/(2a + 2*32.2*grade/100), rounded UP to 0.1 s and clamped to [3.0, 6.0]; a non-positive denominator returns 'invalid'. All-red = (W + vehicle length)/v where W includes the far crosswalk when ped is true, rounded UP to 0.1 s and clamped to [1.0, 6.0]. Return tenths.
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):
v = Fraction(x['speed_mph']) * Fraction(1)
t = Fraction(x['reaction_tenths'], 10)
den = 2 * x['decel'] + 2 * Fraction(322, 10) * Fraction(x['grade_pct'], 100)
if den <= 0:
return 'invalid'
yl = max(30, min(60, math.ceil((t + v / den) * 10)))
w = x['width_ft'] + (x['crosswalk_ft'] if x['ped'] else 0)
rd = max(10, min(60, math.ceil((w + x['veh_len_ft']) / v * 10)))
return {'yellow_tenths': yl, 'red_tenths': rd}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'speed_mph': 70, 'grade_pct': -3, 'reaction_tenths': 15, 'decel': 11, 'width_ft': 108, 'veh_len_ft': 25, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 60, 'red_tenths': 13}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 35, 'grade_pct': 8, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 103, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 31, 'red_tenths': 27}), ({'speed_mph': 35, 'grade_pct': 4, 'reaction_tenths': 15, 'decel': 10, 'width_ft': 51, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 38, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 35, 'grade_pct': 5, 'reaction_tenths': 12, 'decel': 8, 'width_ft': 105, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 39, 'red_tenths': 25}), ({'speed_mph': 70, 'grade_pct': 1, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 94, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': False}, {'yellow_tenths': 60, 'red_tenths': 12})], [({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 35, 'grade_pct': 3, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 139, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 39, 'red_tenths': 31}), ({'speed_mph': 20, 'grade_pct': 0, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 130, 'veh_len_ft': 40, 'crosswalk_ft': 8, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 20, 'grade_pct': -5, 'reaction_tenths': 8, 'decel': 11, 'width_ft': 138, 'veh_len_ft': 40, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 20, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 52, 'veh_len_ft': 25, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 30, 'red_tenths': 27}), ({'speed_mph': 55, 'grade_pct': 8, 'reaction_tenths': 15, 'decel': 12, 'width_ft': 77, 'veh_len_ft': 40, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 43, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17})], [({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 60, 'grade_pct': 3, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 68, 'veh_len_ft': 40, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 51, 'red_tenths': 13}), ({'speed_mph': 35, 'grade_pct': -5, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 60, 'veh_len_ft': 25, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 37, 'red_tenths': 17}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 30, 'grade_pct': 4, 'reaction_tenths': 8, 'decel': 10, 'width_ft': 121, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 35}), ({'speed_mph': 30, 'grade_pct': -3, 'reaction_tenths': 12, 'decel': 8, 'width_ft': 122, 'veh_len_ft': 16, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 44, 'red_tenths': 32}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 55, 'grade_pct': 2, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 137, 'veh_len_ft': 40, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 57, 'red_tenths': 22})], [({'speed_mph': 20, 'grade_pct': 5, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 134, 'veh_len_ft': 40, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 60, 'grade_pct': -6, 'reaction_tenths': 15, 'decel': 12, 'width_ft': 70, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 59, 'red_tenths': 11}), ({'speed_mph': 30, 'grade_pct': -1, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 61, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': True}, {'yellow_tenths': 39, 'red_tenths': 21}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 50, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 11, 'width_ft': 68, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': True}, {'yellow_tenths': 44, 'red_tenths': 15}), ({'speed_mph': 30, 'grade_pct': -3, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 74, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': True}, {'yellow_tenths': 35, 'red_tenths': 25}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19})], [({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 20, 'grade_pct': 6, 'reaction_tenths': 12, 'decel': 10, 'width_ft': 140, 'veh_len_ft': 25, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 65, 'grade_pct': 8, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 68, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': False}, {'yellow_tenths': 48, 'red_tenths': 10}), ({'speed_mph': 40, 'grade_pct': -8, 'reaction_tenths': 15, 'decel': 11, 'width_ft': 134, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 50, 'red_tenths': 27}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 50, 'grade_pct': 7, 'reaction_tenths': 12, 'decel': 11, 'width_ft': 55, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 40, 'red_tenths': 11}), ({'speed_mph': 25, 'grade_pct': 4, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 112, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 40})]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'red_tenths': 19, 'yellow_tenths': 50} | {'red_tenths': 13, 'yellow_tenths': 60} | Failed |
| timing oracle 1 | {'red_tenths': 24, 'yellow_tenths': 52} | {'red_tenths': 16, 'yellow_tenths': 60} | Failed |
| timing oracle 2 | {'red_tenths': 39, 'yellow_tenths': 30} | {'red_tenths': 27, 'yellow_tenths': 31} | Failed |
| timing oracle 3 | {'red_tenths': 24, 'yellow_tenths': 31} | {'red_tenths': 16, 'yellow_tenths': 38} | Failed |
| timing oracle 4 | {'red_tenths': 25, 'yellow_tenths': 36} | {'red_tenths': 17, 'yellow_tenths': 48} | Failed |
| timing oracle 5 | {'red_tenths': 27, 'yellow_tenths': 30} | {'red_tenths': 19, 'yellow_tenths': 33} | Failed |
| timing oracle 6 | {'red_tenths': 36, 'yellow_tenths': 31} | {'red_tenths': 25, 'yellow_tenths': 39} | Failed |
| timing oracle 7 | {'red_tenths': 17, 'yellow_tenths': 44} | {'red_tenths': 12, 'yellow_tenths': 60} | Failed |
SHA-256 / 09d05b7bcc55f5a04091e5846b561d71a18a13cc5d453627fc8f82306a3a2789
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):
v = Fraction(x['speed_mph']) * Fraction(447, 1000)
t = Fraction(x['reaction_tenths'], 10)
den = 2 * x['decel'] + 2 * Fraction(322, 10) * Fraction(x['grade_pct'], 100)
if den <= 0:
return 'invalid'
yl = max(30, min(60, math.ceil((t + v / den) * 10)))
w = x['width_ft'] + (x['crosswalk_ft'] if x['ped'] else 0)
rd = max(10, min(60, math.ceil((w + x['veh_len_ft']) / v * 10)))
return {'yellow_tenths': yl, 'red_tenths': rd}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'speed_mph': 70, 'grade_pct': -3, 'reaction_tenths': 15, 'decel': 11, 'width_ft': 108, 'veh_len_ft': 25, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 60, 'red_tenths': 13}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 35, 'grade_pct': 8, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 103, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 31, 'red_tenths': 27}), ({'speed_mph': 35, 'grade_pct': 4, 'reaction_tenths': 15, 'decel': 10, 'width_ft': 51, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 38, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 35, 'grade_pct': 5, 'reaction_tenths': 12, 'decel': 8, 'width_ft': 105, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 39, 'red_tenths': 25}), ({'speed_mph': 70, 'grade_pct': 1, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 94, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': False}, {'yellow_tenths': 60, 'red_tenths': 12})], [({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 35, 'grade_pct': 3, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 139, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 39, 'red_tenths': 31}), ({'speed_mph': 20, 'grade_pct': 0, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 130, 'veh_len_ft': 40, 'crosswalk_ft': 8, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 20, 'grade_pct': -5, 'reaction_tenths': 8, 'decel': 11, 'width_ft': 138, 'veh_len_ft': 40, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 20, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 52, 'veh_len_ft': 25, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 30, 'red_tenths': 27}), ({'speed_mph': 55, 'grade_pct': 8, 'reaction_tenths': 15, 'decel': 12, 'width_ft': 77, 'veh_len_ft': 40, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 43, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17})], [({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 60, 'grade_pct': 3, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 68, 'veh_len_ft': 40, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 51, 'red_tenths': 13}), ({'speed_mph': 35, 'grade_pct': -5, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 60, 'veh_len_ft': 25, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 37, 'red_tenths': 17}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 30, 'grade_pct': 4, 'reaction_tenths': 8, 'decel': 10, 'width_ft': 121, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 35}), ({'speed_mph': 30, 'grade_pct': -3, 'reaction_tenths': 12, 'decel': 8, 'width_ft': 122, 'veh_len_ft': 16, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 44, 'red_tenths': 32}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 55, 'grade_pct': 2, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 137, 'veh_len_ft': 40, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 57, 'red_tenths': 22})], [({'speed_mph': 20, 'grade_pct': 5, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 134, 'veh_len_ft': 40, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 60, 'grade_pct': -6, 'reaction_tenths': 15, 'decel': 12, 'width_ft': 70, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 59, 'red_tenths': 11}), ({'speed_mph': 30, 'grade_pct': -1, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 61, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': True}, {'yellow_tenths': 39, 'red_tenths': 21}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 50, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 11, 'width_ft': 68, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': True}, {'yellow_tenths': 44, 'red_tenths': 15}), ({'speed_mph': 30, 'grade_pct': -3, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 74, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': True}, {'yellow_tenths': 35, 'red_tenths': 25}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19})], [({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 20, 'grade_pct': 6, 'reaction_tenths': 12, 'decel': 10, 'width_ft': 140, 'veh_len_ft': 25, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 65, 'grade_pct': 8, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 68, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': False}, {'yellow_tenths': 48, 'red_tenths': 10}), ({'speed_mph': 40, 'grade_pct': -8, 'reaction_tenths': 15, 'decel': 11, 'width_ft': 134, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 50, 'red_tenths': 27}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 50, 'grade_pct': 7, 'reaction_tenths': 12, 'decel': 11, 'width_ft': 55, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 40, 'red_tenths': 11}), ({'speed_mph': 25, 'grade_pct': 4, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 112, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 40})]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'red_tenths': 43, 'yellow_tenths': 31} | {'red_tenths': 13, 'yellow_tenths': 60} | Failed |
| timing oracle 1 | {'red_tenths': 52, 'yellow_tenths': 30} | {'red_tenths': 16, 'yellow_tenths': 60} | Failed |
| timing oracle 2 | {'red_tenths': 60, 'yellow_tenths': 30} | {'red_tenths': 27, 'yellow_tenths': 31} | Failed |
| timing oracle 3 | {'red_tenths': 52, 'yellow_tenths': 30} | {'red_tenths': 16, 'yellow_tenths': 38} | Failed |
| timing oracle 4 | {'red_tenths': 55, 'yellow_tenths': 30} | {'red_tenths': 17, 'yellow_tenths': 48} | Failed |
| timing oracle 5 | {'red_tenths': 60, 'yellow_tenths': 30} | {'red_tenths': 19, 'yellow_tenths': 33} | Failed |
| timing oracle 6 | {'red_tenths': 60, 'yellow_tenths': 30} | {'red_tenths': 25, 'yellow_tenths': 39} | Failed |
| timing oracle 7 | {'red_tenths': 37, 'yellow_tenths': 30} | {'red_tenths': 12, 'yellow_tenths': 60} | Failed |
SHA-256 / 03af231c2fadb61196691227cd88cefa41d6cec28d8073de45b891507209fb01
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):
v = Fraction(x['speed_mph']) * Fraction(1467, 1000)
t = Fraction(x['reaction_tenths'], 10)
den = 2 * x['decel'] + 2 * Fraction(322, 10) * Fraction(x['grade_pct'], 100)
if den <= 0:
return 'invalid'
yl = max(30, min(60, math.ceil((t + v / den) * 10)))
w = x['width_ft'] + (x['crosswalk_ft'] if x['ped'] else 0)
rd = max(10, min(60, math.ceil((w + x['veh_len_ft']) / v * 10)))
return {'yellow_tenths': yl, 'red_tenths': rd}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'speed_mph': 70, 'grade_pct': -3, 'reaction_tenths': 15, 'decel': 11, 'width_ft': 108, 'veh_len_ft': 25, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 60, 'red_tenths': 13}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 35, 'grade_pct': 8, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 103, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 31, 'red_tenths': 27}), ({'speed_mph': 35, 'grade_pct': 4, 'reaction_tenths': 15, 'decel': 10, 'width_ft': 51, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 38, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 35, 'grade_pct': 5, 'reaction_tenths': 12, 'decel': 8, 'width_ft': 105, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 39, 'red_tenths': 25}), ({'speed_mph': 70, 'grade_pct': 1, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 94, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': False}, {'yellow_tenths': 60, 'red_tenths': 12})], [({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 35, 'grade_pct': 3, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 139, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 39, 'red_tenths': 31}), ({'speed_mph': 20, 'grade_pct': 0, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 130, 'veh_len_ft': 40, 'crosswalk_ft': 8, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 20, 'grade_pct': -5, 'reaction_tenths': 8, 'decel': 11, 'width_ft': 138, 'veh_len_ft': 40, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 20, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 52, 'veh_len_ft': 25, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 30, 'red_tenths': 27}), ({'speed_mph': 55, 'grade_pct': 8, 'reaction_tenths': 15, 'decel': 12, 'width_ft': 77, 'veh_len_ft': 40, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 43, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17})], [({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 60, 'grade_pct': 3, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 68, 'veh_len_ft': 40, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 51, 'red_tenths': 13}), ({'speed_mph': 35, 'grade_pct': -5, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 60, 'veh_len_ft': 25, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 37, 'red_tenths': 17}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 30, 'grade_pct': 4, 'reaction_tenths': 8, 'decel': 10, 'width_ft': 121, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 35}), ({'speed_mph': 30, 'grade_pct': -3, 'reaction_tenths': 12, 'decel': 8, 'width_ft': 122, 'veh_len_ft': 16, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 44, 'red_tenths': 32}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 55, 'grade_pct': 2, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 137, 'veh_len_ft': 40, 'crosswalk_ft': 8, 'ped': False}, {'yellow_tenths': 57, 'red_tenths': 22})], [({'speed_mph': 20, 'grade_pct': 5, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 134, 'veh_len_ft': 40, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 60, 'grade_pct': -6, 'reaction_tenths': 15, 'decel': 12, 'width_ft': 70, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': False}, {'yellow_tenths': 59, 'red_tenths': 11}), ({'speed_mph': 30, 'grade_pct': -1, 'reaction_tenths': 10, 'decel': 8, 'width_ft': 61, 'veh_len_ft': 20, 'crosswalk_ft': 8, 'ped': True}, {'yellow_tenths': 39, 'red_tenths': 21}), ({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 50, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 11, 'width_ft': 68, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': True}, {'yellow_tenths': 44, 'red_tenths': 15}), ({'speed_mph': 30, 'grade_pct': -3, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 74, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': True}, {'yellow_tenths': 35, 'red_tenths': 25}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19})], [({'speed_mph': 65, 'grade_pct': -7, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 120, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 60, 'red_tenths': 16}), ({'speed_mph': 20, 'grade_pct': 6, 'reaction_tenths': 12, 'decel': 10, 'width_ft': 140, 'veh_len_ft': 25, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 60}), ({'speed_mph': 65, 'grade_pct': 8, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 68, 'veh_len_ft': 20, 'crosswalk_ft': 15, 'ped': False}, {'yellow_tenths': 48, 'red_tenths': 10}), ({'speed_mph': 40, 'grade_pct': -8, 'reaction_tenths': 15, 'decel': 11, 'width_ft': 134, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 50, 'red_tenths': 27}), ({'speed_mph': 30, 'grade_pct': 0, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 60, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 33, 'red_tenths': 19}), ({'speed_mph': 45, 'grade_pct': -4, 'reaction_tenths': 10, 'decel': 10, 'width_ft': 80, 'veh_len_ft': 20, 'crosswalk_ft': 10, 'ped': True}, {'yellow_tenths': 48, 'red_tenths': 17}), ({'speed_mph': 50, 'grade_pct': 7, 'reaction_tenths': 12, 'decel': 11, 'width_ft': 55, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': False}, {'yellow_tenths': 40, 'red_tenths': 11}), ({'speed_mph': 25, 'grade_pct': 4, 'reaction_tenths': 12, 'decel': 12, 'width_ft': 112, 'veh_len_ft': 20, 'crosswalk_ft': 12, 'ped': True}, {'yellow_tenths': 30, 'red_tenths': 40})]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'red_tenths': 13, 'yellow_tenths': 60} | {'red_tenths': 13, 'yellow_tenths': 60} | Passed |
| timing oracle 1 | {'red_tenths': 16, 'yellow_tenths': 60} | {'red_tenths': 16, 'yellow_tenths': 60} | Passed |
| timing oracle 2 | {'red_tenths': 27, 'yellow_tenths': 31} | {'red_tenths': 27, 'yellow_tenths': 31} | Passed |
| timing oracle 3 | {'red_tenths': 16, 'yellow_tenths': 38} | {'red_tenths': 16, 'yellow_tenths': 38} | Passed |
| timing oracle 4 | {'red_tenths': 17, 'yellow_tenths': 48} | {'red_tenths': 17, 'yellow_tenths': 48} | Passed |
| timing oracle 5 | {'red_tenths': 19, 'yellow_tenths': 33} | {'red_tenths': 19, 'yellow_tenths': 33} | Passed |
| timing oracle 6 | {'red_tenths': 25, 'yellow_tenths': 39} | {'red_tenths': 25, 'yellow_tenths': 39} | Passed |
| timing oracle 7 | {'red_tenths': 12, 'yellow_tenths': 60} | {'red_tenths': 12, 'yellow_tenths': 60} | Passed |
SHA-256 / bcbb03b26b89cc63496f0f1d36bf6560d07d54ec4f236253f4853953f35ef5f9
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:57.219055+00:00.
Case digest / 56eefffdbd6d266061272add118e3b0930b36e506f34ddb55adf7973684d4238