Sortable protocol for statistics.median_high/median_low; fix #3894 (#3961)

This commit is contained in:
Luciano Ramalho
2020-05-01 02:08:09 -03:00
committed by GitHub
parent fec46043ed
commit 38330702fd

View File

@@ -3,12 +3,17 @@
from decimal import Decimal
from fractions import Fraction
import sys
from typing import Any, Iterable, List, Optional, SupportsFloat, Type, TypeVar, Union
from typing import Any, Iterable, List, Optional, SupportsFloat, Type, TypeVar, Union, Protocol
_T = TypeVar("_T")
# Most functions in this module accept homogeneous collections of one of these types
_Number = TypeVar('_Number', float, Decimal, Fraction)
# Used in median_high, median_low
class _Sortable(Protocol):
def __lt__(self, other) -> bool: ...
_SortableT = TypeVar("_SortableT", bound=_Sortable)
class StatisticsError(ValueError): ...
if sys.version_info >= (3, 8):
@@ -18,8 +23,8 @@ def mean(data: Iterable[_Number]) -> _Number: ...
if sys.version_info >= (3, 6):
def harmonic_mean(data: Iterable[_Number]) -> _Number: ...
def median(data: Iterable[_Number]) -> _Number: ...
def median_low(data: Iterable[_Number]) -> _Number: ...
def median_high(data: Iterable[_Number]) -> _Number: ...
def median_low(data: Iterable[_SortableT]) -> _SortableT: ...
def median_high(data: Iterable[_SortableT]) -> _SortableT: ...
def median_grouped(data: Iterable[_Number], interval: _Number = ...) -> _Number: ...
def mode(data: Iterable[_Number]) -> _Number: ...
if sys.version_info >= (3, 8):