"""Andrade Safe: fictitious straight-line stopping-distance model.
Not an accident reconstruction, vehicle test, speed limit or design clearance.
Assumes constant speed during reaction, then constant positive deceleration.
Excludes extra brake delay, gradient, variable grip, pedestrian motion and perception distance.
"""
import math,csv

def stop(v_kmh=10,reaction_s=1,deceleration_m_s2=2):
    if not all(math.isfinite(x)for x in(v_kmh,reaction_s,deceleration_m_s2))or v_kmh<0 or reaction_s<0 or deceleration_m_s2<=0:
        raise ValueError('Finite values required: speed/reaction >=0, deceleration>0')
    v=v_kmh/3.6;reaction=v*reaction_s;braking=v*v/(2*deceleration_m_s2)
    return dict(v_kmh=v_kmh,v_m_s=v,reaction_s=reaction_s,deceleration_m_s2=deceleration_m_s2,reaction_m=reaction,braking_m=braking,total_m=reaction+braking)

if __name__=='__main__':
    for v in(5,10,15,20):print(stop(v))
    print('2s reaction',stop(reaction_s=2))
    print('1m/s2 deceleration',stop(deceleration_m_s2=1))
