def start(backdate=None):
    """
    Mark the start of timing, overwriting the automatic start data written on
    import, or the automatic start at the beginning of a subdivision.

    Notes:
        Backdating: For subdivisions only.  Backdate time must be in the past
        but more recent than the latest stamp in the parent timer.

    Args:
        backdate (float, optional): time to use for start instead of current.

    Returns:
        float: The current time.

    Raises:
        BackdateError: If given backdate time is out of range or used in root timer.
        StartError: If the timer is not in a pristine state (if any stamps or
            subdivisions, must reset instead).
        StoppedError: If the timer is already stopped (must reset instead).
        TypeError: If given backdate value is not type float.
    """
    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.  # (In case previously paused.)
    f.t.start_t = t_start
    f.t.last_t = t_start
    return t
Mark the start of timing, overwriting the automatic start data written on
    import, or the automatic start at the beginning of a subdivision.

    Notes:
        Backdating: For subdivisions only.  Backdate time must be in the past
        but more recent than the latest stamp in the parent timer.

    Args:
        backdate (float, optional): time to use for start instead of current.

    Returns:
        float: The current time.

    Raises:
        BackdateError: If given backdate time is out of range or used in root timer.
        StartError: If the timer is not in a pristine state (if any stamps or
            subdivisions, must reset instead).
        StoppedError: If the timer is already stopped (must reset instead).
        TypeError: If given backdate value is not type float.