'Initializer.
Args:
min_backoff_seconds: The minimum number of seconds to wait before retrying
a task after failure. (optional)
max_backoff_seconds: The maximum number of seconds to wait before retrying
a task after failure. (optional)
task_age_limit: The number of seconds after creation afterwhich a failed
task will no longer be retried. The given value will be rounded up to
the nearest integer. If task_retry_limit is also specified then the task
will be retried until both limits are reached. (optional)
max_doublings: The maximum number of times that the interval between
failed task retries will be doubled before the increase becomes
constant. The constant will be:
2**(max_doublings - 1) * min_backoff_seconds. (optional)
task_retry_limit: The maximum number of times to retry a failed task
before giving up. If task_age_limit is specified then the task will be
retried until both limits are reached. (optional)
Raises:
InvalidTaskRetryOptionsError if any of the parameters are invalid.'

def __init__(self, **kwargs):

    args_diff = (set(kwargs.iterkeys()) - self.__CONSTRUCTOR_KWARGS)
    if args_diff:
        raise TypeError(('Invalid    arguments:    %s' % ',    '.join(args_diff)))
    self.__min_backoff_seconds = kwargs.get('min_backoff_seconds')
    if ((self.__min_backoff_seconds is not None) and (self.__min_backoff_seconds < 0)):
        raise InvalidTaskRetryOptionsError('The    minimum    retry    interval    cannot    be    negative')
    self.__max_backoff_seconds = kwargs.get('max_backoff_seconds')
    if ((self.__max_backoff_seconds is not None) and (self.__max_backoff_seconds < 0)):
        raise InvalidTaskRetryOptionsError('The    maximum    retry    interval    cannot    be    negative')
    if ((self.__min_backoff_seconds is not None) and (self.__max_backoff_seconds is not None) and (self.__max_backoff_seconds < self.__min_backoff_seconds)):
        raise InvalidTaskRetryOptionsError('The    maximum    retry    interval    cannot    be    less    than    the    minimum    retry    interval')
    self.__max_doublings = kwargs.get('max_doublings')
    if ((self.__max_doublings is not None) and (self.__max_doublings < 0)):
        raise InvalidTaskRetryOptionsError('The    maximum    number    of    retry    interval    doublings    cannot    be    negative')
    self.__task_retry_limit = kwargs.get('task_retry_limit')
    if ((self.__task_retry_limit is not None) and (self.__task_retry_limit < 0)):
        raise InvalidTaskRetryOptionsError('The    maximum    number    of    retries    cannot    be    negative')
    self.__task_age_limit = kwargs.get('task_age_limit')
    if (self.__task_age_limit is not None):
        if (self.__task_age_limit < 0):
            raise InvalidTaskRetryOptionsError('The    expiry    countdown    cannot    be    negative')
        self.__task_age_limit = int(math.ceil(self.__task_age_limit))
