def stamp(name, backdate=None,
          unique=None, keep_subdivisions=None, quick_print=None,
          un=None, ks=None, qp=None):
    t = timer()
    if f.t.stopped:
        raise StoppedError("Cannot stamp stopped timer.")
    if f.t.paused:
        raise PausedError("Cannot stamp paused timer.")
    if backdate is None:
        t_stamp = t
    else:
        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.t.last_t:
            raise BackdateError("Cannot backdate to time earlier than last stamp.")
        t_stamp = backdate
    elapsed = t_stamp - f.t.last_t
    unique = SET['UN'] if (unique is None and un is None) else bool(unique or un)
    keep_subdivisions = SET['KS'] if (keep_subdivisions is None and ks is None) else bool(keep_subdivisions or ks)
    quick_print = SET['QP'] if (quick_print is None and qp is None) else bool(quick_print or qp)
    _stamp(name, elapsed, unique, keep_subdivisions, quick_print)
    tmp_self = timer() - t
    f.t.self_cut += tmp_self
    f.t.last_t = t_stamp + tmp_self
    return t