<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _exponential_timeout_generator(initial, maximum, multiplier, deadline):
 """A generator that yields exponential timeout values. Args: initial (float):
 The initial timeout. maximum (float):
 The maximum timeout. multiplier (float):
 The multiplier applied to the timeout. deadline (float):
 The overall deadline across all invocations. Yields: float: A timeout value. """

    if deadline is not None:
        deadline_datetime = datetime_helpers.utcnow() + datetime.timedelta(
            seconds=deadline
        )
    else:
        deadline_datetime = datetime.datetime.max

    timeout = initial
    while True:
        now = datetime_helpers.utcnow()
        yield min(
            # The calculated timeout based on invocations.
            timeout,
            # The set maximum timeout.
            maximum,
            # The remaining time before the deadline is reached.
            float((deadline_datetime - now).seconds),
        )
        timeout = timeout * multiplier