'Determines the ETA for a task.
If \'eta\' and \'countdown\' are both None, the current time will be used.
Otherwise, only one of them may be specified.
Args:
eta: A datetime.datetime specifying the absolute ETA or None;
this may be timezone-aware or timezone-naive.
countdown: Count in seconds into the future from the present time that
the ETA should be assigned to.
current_time: Function that returns the current datetime. (Defaults to
time.time if None is provided.)
Returns:
A float giving a POSIX timestamp containing the ETA.
Raises:
InvalidTaskError if the parameters are invalid.'

@staticmethod
def __determine_eta_posix(eta=None, countdown=None, current_time=None):

    if (not current_time):
        current_time = time.time
    if ((eta is not None) and (countdown is not None)):
        raise InvalidTaskError('May    not    use    a    countdown    and    ETA    together')
    elif (eta is not None):
        if (not isinstance(eta, datetime.datetime)):
            raise InvalidTaskError('ETA    must    be    a    datetime.datetime    instance')
        elif (eta.tzinfo is None):
            return (time.mktime(eta.timetuple()) + (eta.microsecond * 1e-06))
        else:
            return (calendar.timegm(eta.utctimetuple()) + (eta.microsecond * 1e-06))
    elif (countdown is not None):
        try:
            countdown = float(countdown)
        except ValueError:
            raise InvalidTaskError('Countdown    must    be    a    number')
        except OverflowError:
            raise InvalidTaskError('Countdown    out    of    range')
        else:
            return (current_time() + countdown)
    else:
        return current_time()
