1# Stubs for statistics
2
3from decimal import Decimal
4from fractions import Fraction
5import sys
6from typing import Any, Iterable, List, Optional, SupportsFloat, Type, TypeVar, Union
7
8_T = TypeVar("_T")
9# Most functions in this module accept homogeneous collections of one of these types
10_Number = TypeVar('_Number', float, Decimal, Fraction)
11
12class StatisticsError(ValueError): ...
13
14if sys.version_info >= (3, 8):
15    def fmean(data: Iterable[SupportsFloat]) -> float: ...
16    def geometric_mean(data: Iterable[SupportsFloat]) -> float: ...
17def mean(data: Iterable[_Number]) -> _Number: ...
18if sys.version_info >= (3, 6):
19    def harmonic_mean(data: Iterable[_Number]) -> _Number: ...
20def median(data: Iterable[_Number]) -> _Number: ...
21def median_low(data: Iterable[_Number]) -> _Number: ...
22def median_high(data: Iterable[_Number]) -> _Number: ...
23def median_grouped(data: Iterable[_Number]) -> _Number: ...
24def mode(data: Iterable[_Number]) -> _Number: ...
25if sys.version_info >= (3, 8):
26    def multimode(data: Iterable[_T]) -> List[_T]: ...
27def pstdev(data: Iterable[_Number], mu: Optional[_Number] = ...) -> _Number: ...
28def pvariance(data: Iterable[_Number], mu: Optional[_Number] = ...) -> _Number: ...
29if sys.version_info >= (3, 8):
30    def quantiles(data: Iterable[_Number], *, n: int = ..., method: str = ...) -> List[_Number]: ...
31def stdev(data: Iterable[_Number], xbar: Optional[_Number] = ...) -> _Number: ...
32def variance(data: Iterable[_Number], xbar: Optional[_Number] = ...) -> _Number: ...
33
34if sys.version_info >= (3, 8):
35    class NormalDist:
36        def __init__(self, mu: float = ..., sigma: float = ...) -> None: ...
37        @property
38        def mean(self) -> float: ...
39        @property
40        def median(self) -> float: ...
41        @property
42        def mode(self) -> float: ...
43        @property
44        def stdev(self) -> float: ...
45        @property
46        def variance(self) -> float: ...
47        @classmethod
48        def from_samples(cls: Type[_T], data: Iterable[SupportsFloat]) -> _T: ...
49        def samples(self, n: int, *, seed: Optional[Any]) -> List[float]: ...
50        def pdf(self, x: float) -> float: ...
51        def cdf(self, x: float) -> float: ...
52        def inv_cdf(self, p: float) -> float: ...
53        def overlap(self, other: NormalDist) -> float: ...
54        def quantiles(self, n: int = ...) -> List[float]: ...
55        def __add__(self, x2: Union[float, NormalDist]) -> NormalDist: ...
56        def __sub__(self, x2: Union[float, NormalDist]) -> NormalDist: ...
57        def __mul__(self, x2: float) -> NormalDist: ...
58        def __truediv__(self, x2: float) -> NormalDist: ...
59        def __pos__(self) -> NormalDist: ...
60        def __neg__(self) -> NormalDist: ...
61        __radd__ = __add__
62        def __rsub__(self, x2: Union[float, NormalDist]) -> NormalDist: ...
63        __rmul__ = __mul__
64        def __hash__(self) -> int: ...
65