def start(backdate=None):
    if f.s.cum:
        raise StartError("Already have stamps, can't start again (must reset).")
    if f.t.subdvsn_awaiting or f.t.par_subdvsn_awaiting:
        raise StartError("Already have subdivisions, can't start again (must reset).")
    if f.t.stopped:
        raise StoppedError("Timer already stopped (must open new or reset).")
    t = timer()
    if backdate is None:
        t_start = t
    else:
        if f.t is f.root:
            raise BackdateError("Cannot backdate start of root timer.")
        if not isinstance(backdate, float):
            raise TypeError("Backdate must be type float.")
        if backdate > t:
            raise BackdateError("Cannot backdate to future time.")
        if backdate < f.tm1.last_t:
            raise BackdateError("Cannot backdate start to time previous to latest stamp in parent timer.")
        t_start = backdate
    f.t.paused = False
    f.t.tmp_total = 0.
    f.t.start_t = t_start
    f.t.last_t = t_start
    return t