diff --git a/stdlib/2/random.pyi b/stdlib/2/random.pyi index 3292db864..65d323db1 100644 --- a/stdlib/2/random.pyi +++ b/stdlib/2/random.pyi @@ -7,12 +7,14 @@ # ----- random classes ----- import _random -from typing import ( - Any, TypeVar, Sequence, List, Callable, AbstractSet, Union, - overload -) +from typing import AbstractSet, Any, Callable, Iterator, List, Protocol, Sequence, TypeVar, Union, overload -_T = TypeVar('_T') +_T = TypeVar("_T") +_T_co = TypeVar('_T_co', covariant=True) + +class _Sampleable(Protocol[_T_co]): + def __iter__(self) -> Iterator[_T_co]: ... + def __len__(self) -> int: ... class Random(_random.Random): def __init__(self, x: object = ...) -> None: ... @@ -28,7 +30,7 @@ class Random(_random.Random): def randint(self, a: int, b: int) -> int: ... def choice(self, seq: Sequence[_T]) -> _T: ... def shuffle(self, x: List[Any], random: Callable[[], None] = ...) -> None: ... - def sample(self, population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... + def sample(self, population: _Sampleable[_T], k: int) -> List[_T]: ... def random(self) -> float: ... def uniform(self, a: float, b: float) -> float: ... def triangular(self, low: float = ..., high: float = ..., mode: float = ...) -> float: ... @@ -59,7 +61,7 @@ def randrange(start: int, stop: int, step: int = ...) -> int: ... def randint(a: int, b: int) -> int: ... def choice(seq: Sequence[_T]) -> _T: ... def shuffle(x: List[Any], random: Callable[[], float] = ...) -> None: ... -def sample(population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... +def sample(population: _Sampleable[_T], k: int) -> List[_T]: ... def random() -> float: ... def uniform(a: float, b: float) -> float: ... def triangular(low: float = ..., high: float = ...,