def is_close(
    given: float,
    expected: float,
    epsilon=2.2204460492503131e-16,
    relative=1e-16,
    ulps=4,
) -> bool: ...

# float
def sign(x: float) -> bool: ...
def exponent(x: float) -> int: ...
def exponent_bits(x: float) -> int: ...
def mantissa(x: float) -> int: ...
def mantissa_bits(x: float) -> int: ...

# functions
def erf(x: float) -> float: ...
def erf_inv(x: float) -> float: ...
def erfc(x: float) -> float: ...
def erfc_inv(x: float) -> float: ...
def ei(n: int, x: float) -> float: ...
def factorial(x: float) -> float: ...
def ln_factorial(x: float) -> float: ...
def binomial(n: int, k: int) -> float: ...
def ln_binomial(n: int, k: int) -> float: ...
def gamma(x: float) -> float: ...
def ln_gamma(x: float) -> float: ...
def gamma_ui(s: float, x: float) -> float: ...
def gamma_li(s: float, x: float) -> float: ...
def gamma_ur(s: float, x: float) -> float: ...
def gamma_lr(s: float, x: float) -> float: ...
def digamma(x: float) -> float: ...
def digamma_inv(x: float) -> float: ...
def harmonic(t: int) -> float: ...
def generalized_harmonic(n: int, m: float) -> float: ...
def logistic(p: float) -> float: ...
def logit(p: float) -> float: ...
