human
I wrote the below code

    if (step <= 0.0):
        raise ValueError('Invalid    ``step``    ({!r}).    Must    be    >    0.0.'.format(step))
    steps = imap((lambda x: (x * step)), count(start=1))
    if (maximum_step is not None):
        if (maximum_step <= 0.0):
            raise ValueError('Invalid    ``maximum_step``    ({!r}).    Must    be    >    0.0.'.format(maximum_step))
        steps = takewhile((lambda x: (x < maximum_step)), steps)
        steps = chain(steps, repeat(maximum_step))
    if (jitter is not None):
        steps = imap((lambda x: (x + uniform((- jitter), jitter))), steps)
    if (timeout is not None):
        total_time = [0]
        def maybe_timeout(values):
            for value in values:
                total_time[0] += value
                if (total_time[0] > timeout):
                    break
                (yield value)
        steps = maybe_timeout(steps)
    return steps

What's a good function header?

Here's a good function header?
assistant
#Here's a good function header.

def backoff(step=5.0, maximum_step=60.0, timeout=(10 * 60.0), jitter=0.2):