Return the survival probability of a Gamma(shape, 1) variable.
Source code in vllm/v1/watermarking/gumbel.py
| def _gamma_survival_integer_shape(score: float, shape: int) -> float:
"""Return the survival probability of a Gamma(shape, 1) variable."""
if shape <= 0 or score <= 0:
return 1.0
log_score = math.log(score)
log_term = 0.0
max_log_term = 0.0
log_terms = [log_term]
for index in range(1, shape):
log_term += log_score - math.log(index)
log_terms.append(log_term)
max_log_term = max(max_log_term, log_term)
log_sum = max_log_term + math.log(
sum(math.exp(term - max_log_term) for term in log_terms)
)
return min(1.0, math.exp(min(0.0, -score + log_sum)))
|