Source code for diff_binom_confint._confint

"""
"""

from dataclasses import dataclass
from enum import Enum
from typing import Tuple

__all__ = ["ConfidenceInterval"]


class ConfidenceIntervalSides(Enum):
    TwoSided = "two-sided"
    LeftSided = "left-sided"
    RightSided = "right-sided"


_SIDE_NAME_MAP = {
    "two-sided": ConfidenceIntervalSides.TwoSided.value,
    "2-sided": ConfidenceIntervalSides.TwoSided.value,
    "two_sided": ConfidenceIntervalSides.TwoSided.value,
    "2_sided": ConfidenceIntervalSides.TwoSided.value,
    "ts": ConfidenceIntervalSides.TwoSided.value,
    "t": ConfidenceIntervalSides.TwoSided.value,
    "2-sides": ConfidenceIntervalSides.TwoSided.value,
    "two_sides": ConfidenceIntervalSides.TwoSided.value,
    "two-sides": ConfidenceIntervalSides.TwoSided.value,
    "2_sides": ConfidenceIntervalSides.TwoSided.value,
    "two": ConfidenceIntervalSides.TwoSided.value,
    "2": ConfidenceIntervalSides.TwoSided.value,
    2: ConfidenceIntervalSides.TwoSided.value,
    "left-sided": ConfidenceIntervalSides.LeftSided.value,
    "left_sided": ConfidenceIntervalSides.LeftSided.value,
    "left": ConfidenceIntervalSides.LeftSided.value,
    "ls": ConfidenceIntervalSides.LeftSided.value,
    "l": ConfidenceIntervalSides.LeftSided.value,
    "right-sided": ConfidenceIntervalSides.RightSided.value,
    "right": ConfidenceIntervalSides.RightSided.value,
    "rs": ConfidenceIntervalSides.RightSided.value,
    "r": ConfidenceIntervalSides.RightSided.value,
}


[docs]@dataclass class ConfidenceInterval: """Dataclass for holding meta information of a confidence interval. Attributes ---------- lower_bound : float The lower bound of the confidence interval. upper_bound : float The upper bound of the confidence interval. estimate : float Estimate of (the difference of) the binomial proportion. level : float Confidence level, should be inside the interval (0, 1). method : str Computation method of the confidence interval. sides : str, default "two-sided" Sides of the confidence interval, should be one of - "two-sided" (aliases "2-sided", "two_sided", "2_sided", "2-sides", "two_sides", "two-sides", "2_sides", "ts", "t", "two", "2"), - "left-sided" (aliases "left_sided", "left", "ls", "l"), - "right-sided" (aliases "right_sided", "right", "rs", "r"), case insensitive. """ lower_bound: float upper_bound: float estimate: float level: float method: str sides: str = "two-sided" def __post_init__(self) -> None: assert 0 < self.level < 1 assert self.sides.lower() in _SIDE_NAME_MAP self.sides = _SIDE_NAME_MAP[self.sides.lower()] def astuple(self) -> Tuple[float, float]: return (self.lower_bound, self.upper_bound) def __repr__(self) -> str: return f"({round(self.lower_bound, 5):.5f}, {round(self.upper_bound, 5):.5f})" __str__ = __repr__