more.pyi 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. """Stubs for more_itertools.more"""
  2. from __future__ import annotations
  3. from types import TracebackType
  4. from typing import (
  5. Any,
  6. Callable,
  7. Container,
  8. ContextManager,
  9. Generic,
  10. Hashable,
  11. Iterable,
  12. Iterator,
  13. overload,
  14. Reversible,
  15. Sequence,
  16. Sized,
  17. Type,
  18. TypeVar,
  19. type_check_only,
  20. )
  21. from typing_extensions import Protocol
  22. # Type and type variable definitions
  23. _T = TypeVar('_T')
  24. _T1 = TypeVar('_T1')
  25. _T2 = TypeVar('_T2')
  26. _U = TypeVar('_U')
  27. _V = TypeVar('_V')
  28. _W = TypeVar('_W')
  29. _T_co = TypeVar('_T_co', covariant=True)
  30. _GenFn = TypeVar('_GenFn', bound=Callable[..., Iterator[Any]])
  31. _Raisable = BaseException | Type[BaseException]
  32. @type_check_only
  33. class _SizedIterable(Protocol[_T_co], Sized, Iterable[_T_co]): ...
  34. @type_check_only
  35. class _SizedReversible(Protocol[_T_co], Sized, Reversible[_T_co]): ...
  36. @type_check_only
  37. class _SupportsSlicing(Protocol[_T_co]):
  38. def __getitem__(self, __k: slice) -> _T_co: ...
  39. def chunked(
  40. iterable: Iterable[_T], n: int | None, strict: bool = ...
  41. ) -> Iterator[list[_T]]: ...
  42. @overload
  43. def first(iterable: Iterable[_T]) -> _T: ...
  44. @overload
  45. def first(iterable: Iterable[_T], default: _U) -> _T | _U: ...
  46. @overload
  47. def last(iterable: Iterable[_T]) -> _T: ...
  48. @overload
  49. def last(iterable: Iterable[_T], default: _U) -> _T | _U: ...
  50. @overload
  51. def nth_or_last(iterable: Iterable[_T], n: int) -> _T: ...
  52. @overload
  53. def nth_or_last(iterable: Iterable[_T], n: int, default: _U) -> _T | _U: ...
  54. class peekable(Generic[_T], Iterator[_T]):
  55. def __init__(self, iterable: Iterable[_T]) -> None: ...
  56. def __iter__(self) -> peekable[_T]: ...
  57. def __bool__(self) -> bool: ...
  58. @overload
  59. def peek(self) -> _T: ...
  60. @overload
  61. def peek(self, default: _U) -> _T | _U: ...
  62. def prepend(self, *items: _T) -> None: ...
  63. def __next__(self) -> _T: ...
  64. @overload
  65. def __getitem__(self, index: int) -> _T: ...
  66. @overload
  67. def __getitem__(self, index: slice) -> list[_T]: ...
  68. def consumer(func: _GenFn) -> _GenFn: ...
  69. def ilen(iterable: Iterable[_T]) -> int: ...
  70. def iterate(func: Callable[[_T], _T], start: _T) -> Iterator[_T]: ...
  71. def with_iter(
  72. context_manager: ContextManager[Iterable[_T]],
  73. ) -> Iterator[_T]: ...
  74. def one(
  75. iterable: Iterable[_T],
  76. too_short: _Raisable | None = ...,
  77. too_long: _Raisable | None = ...,
  78. ) -> _T: ...
  79. def raise_(exception: _Raisable, *args: Any) -> None: ...
  80. def strictly_n(
  81. iterable: Iterable[_T],
  82. n: int,
  83. too_short: _GenFn | None = ...,
  84. too_long: _GenFn | None = ...,
  85. ) -> list[_T]: ...
  86. def distinct_permutations(
  87. iterable: Iterable[_T], r: int | None = ...
  88. ) -> Iterator[tuple[_T, ...]]: ...
  89. def intersperse(
  90. e: _U, iterable: Iterable[_T], n: int = ...
  91. ) -> Iterator[_T | _U]: ...
  92. def unique_to_each(*iterables: Iterable[_T]) -> list[list[_T]]: ...
  93. @overload
  94. def windowed(
  95. seq: Iterable[_T], n: int, *, step: int = ...
  96. ) -> Iterator[tuple[_T | None, ...]]: ...
  97. @overload
  98. def windowed(
  99. seq: Iterable[_T], n: int, fillvalue: _U, step: int = ...
  100. ) -> Iterator[tuple[_T | _U, ...]]: ...
  101. def substrings(iterable: Iterable[_T]) -> Iterator[tuple[_T, ...]]: ...
  102. def substrings_indexes(
  103. seq: Sequence[_T], reverse: bool = ...
  104. ) -> Iterator[tuple[Sequence[_T], int, int]]: ...
  105. class bucket(Generic[_T, _U], Container[_U]):
  106. def __init__(
  107. self,
  108. iterable: Iterable[_T],
  109. key: Callable[[_T], _U],
  110. validator: Callable[[_U], object] | None = ...,
  111. ) -> None: ...
  112. def __contains__(self, value: object) -> bool: ...
  113. def __iter__(self) -> Iterator[_U]: ...
  114. def __getitem__(self, value: object) -> Iterator[_T]: ...
  115. def spy(
  116. iterable: Iterable[_T], n: int = ...
  117. ) -> tuple[list[_T], Iterator[_T]]: ...
  118. def interleave(*iterables: Iterable[_T]) -> Iterator[_T]: ...
  119. def interleave_longest(*iterables: Iterable[_T]) -> Iterator[_T]: ...
  120. def interleave_evenly(
  121. iterables: list[Iterable[_T]], lengths: list[int] | None = ...
  122. ) -> Iterator[_T]: ...
  123. def collapse(
  124. iterable: Iterable[Any],
  125. base_type: type | None = ...,
  126. levels: int | None = ...,
  127. ) -> Iterator[Any]: ...
  128. @overload
  129. def side_effect(
  130. func: Callable[[_T], object],
  131. iterable: Iterable[_T],
  132. chunk_size: None = ...,
  133. before: Callable[[], object] | None = ...,
  134. after: Callable[[], object] | None = ...,
  135. ) -> Iterator[_T]: ...
  136. @overload
  137. def side_effect(
  138. func: Callable[[list[_T]], object],
  139. iterable: Iterable[_T],
  140. chunk_size: int,
  141. before: Callable[[], object] | None = ...,
  142. after: Callable[[], object] | None = ...,
  143. ) -> Iterator[_T]: ...
  144. def sliced(
  145. seq: _SupportsSlicing[_T], n: int, strict: bool = ...
  146. ) -> Iterator[_T]: ...
  147. def split_at(
  148. iterable: Iterable[_T],
  149. pred: Callable[[_T], object],
  150. maxsplit: int = ...,
  151. keep_separator: bool = ...,
  152. ) -> Iterator[list[_T]]: ...
  153. def split_before(
  154. iterable: Iterable[_T], pred: Callable[[_T], object], maxsplit: int = ...
  155. ) -> Iterator[list[_T]]: ...
  156. def split_after(
  157. iterable: Iterable[_T], pred: Callable[[_T], object], maxsplit: int = ...
  158. ) -> Iterator[list[_T]]: ...
  159. def split_when(
  160. iterable: Iterable[_T],
  161. pred: Callable[[_T, _T], object],
  162. maxsplit: int = ...,
  163. ) -> Iterator[list[_T]]: ...
  164. def split_into(
  165. iterable: Iterable[_T], sizes: Iterable[int | None]
  166. ) -> Iterator[list[_T]]: ...
  167. @overload
  168. def padded(
  169. iterable: Iterable[_T],
  170. *,
  171. n: int | None = ...,
  172. next_multiple: bool = ...,
  173. ) -> Iterator[_T | None]: ...
  174. @overload
  175. def padded(
  176. iterable: Iterable[_T],
  177. fillvalue: _U,
  178. n: int | None = ...,
  179. next_multiple: bool = ...,
  180. ) -> Iterator[_T | _U]: ...
  181. @overload
  182. def repeat_last(iterable: Iterable[_T]) -> Iterator[_T]: ...
  183. @overload
  184. def repeat_last(iterable: Iterable[_T], default: _U) -> Iterator[_T | _U]: ...
  185. def distribute(n: int, iterable: Iterable[_T]) -> list[Iterator[_T]]: ...
  186. @overload
  187. def stagger(
  188. iterable: Iterable[_T],
  189. offsets: _SizedIterable[int] = ...,
  190. longest: bool = ...,
  191. ) -> Iterator[tuple[_T | None, ...]]: ...
  192. @overload
  193. def stagger(
  194. iterable: Iterable[_T],
  195. offsets: _SizedIterable[int] = ...,
  196. longest: bool = ...,
  197. fillvalue: _U = ...,
  198. ) -> Iterator[tuple[_T | _U, ...]]: ...
  199. class UnequalIterablesError(ValueError):
  200. def __init__(self, details: tuple[int, int, int] | None = ...) -> None: ...
  201. @overload
  202. def zip_equal(__iter1: Iterable[_T1]) -> Iterator[tuple[_T1]]: ...
  203. @overload
  204. def zip_equal(
  205. __iter1: Iterable[_T1], __iter2: Iterable[_T2]
  206. ) -> Iterator[tuple[_T1, _T2]]: ...
  207. @overload
  208. def zip_equal(
  209. __iter1: Iterable[_T],
  210. __iter2: Iterable[_T],
  211. __iter3: Iterable[_T],
  212. *iterables: Iterable[_T],
  213. ) -> Iterator[tuple[_T, ...]]: ...
  214. @overload
  215. def zip_offset(
  216. __iter1: Iterable[_T1],
  217. *,
  218. offsets: _SizedIterable[int],
  219. longest: bool = ...,
  220. fillvalue: None = None,
  221. ) -> Iterator[tuple[_T1 | None]]: ...
  222. @overload
  223. def zip_offset(
  224. __iter1: Iterable[_T1],
  225. __iter2: Iterable[_T2],
  226. *,
  227. offsets: _SizedIterable[int],
  228. longest: bool = ...,
  229. fillvalue: None = None,
  230. ) -> Iterator[tuple[_T1 | None, _T2 | None]]: ...
  231. @overload
  232. def zip_offset(
  233. __iter1: Iterable[_T],
  234. __iter2: Iterable[_T],
  235. __iter3: Iterable[_T],
  236. *iterables: Iterable[_T],
  237. offsets: _SizedIterable[int],
  238. longest: bool = ...,
  239. fillvalue: None = None,
  240. ) -> Iterator[tuple[_T | None, ...]]: ...
  241. @overload
  242. def zip_offset(
  243. __iter1: Iterable[_T1],
  244. *,
  245. offsets: _SizedIterable[int],
  246. longest: bool = ...,
  247. fillvalue: _U,
  248. ) -> Iterator[tuple[_T1 | _U]]: ...
  249. @overload
  250. def zip_offset(
  251. __iter1: Iterable[_T1],
  252. __iter2: Iterable[_T2],
  253. *,
  254. offsets: _SizedIterable[int],
  255. longest: bool = ...,
  256. fillvalue: _U,
  257. ) -> Iterator[tuple[_T1 | _U, _T2 | _U]]: ...
  258. @overload
  259. def zip_offset(
  260. __iter1: Iterable[_T],
  261. __iter2: Iterable[_T],
  262. __iter3: Iterable[_T],
  263. *iterables: Iterable[_T],
  264. offsets: _SizedIterable[int],
  265. longest: bool = ...,
  266. fillvalue: _U,
  267. ) -> Iterator[tuple[_T | _U, ...]]: ...
  268. def sort_together(
  269. iterables: Iterable[Iterable[_T]],
  270. key_list: Iterable[int] = ...,
  271. key: Callable[..., Any] | None = ...,
  272. reverse: bool = ...,
  273. ) -> list[tuple[_T, ...]]: ...
  274. def unzip(iterable: Iterable[Sequence[_T]]) -> tuple[Iterator[_T], ...]: ...
  275. def divide(n: int, iterable: Iterable[_T]) -> list[Iterator[_T]]: ...
  276. def always_iterable(
  277. obj: object,
  278. base_type: type | tuple[type | tuple[Any, ...], ...] | None = ...,
  279. ) -> Iterator[Any]: ...
  280. def adjacent(
  281. predicate: Callable[[_T], bool],
  282. iterable: Iterable[_T],
  283. distance: int = ...,
  284. ) -> Iterator[tuple[bool, _T]]: ...
  285. @overload
  286. def groupby_transform(
  287. iterable: Iterable[_T],
  288. keyfunc: None = None,
  289. valuefunc: None = None,
  290. reducefunc: None = None,
  291. ) -> Iterator[tuple[_T, Iterator[_T]]]: ...
  292. @overload
  293. def groupby_transform(
  294. iterable: Iterable[_T],
  295. keyfunc: Callable[[_T], _U],
  296. valuefunc: None,
  297. reducefunc: None,
  298. ) -> Iterator[tuple[_U, Iterator[_T]]]: ...
  299. @overload
  300. def groupby_transform(
  301. iterable: Iterable[_T],
  302. keyfunc: None,
  303. valuefunc: Callable[[_T], _V],
  304. reducefunc: None,
  305. ) -> Iterable[tuple[_T, Iterable[_V]]]: ...
  306. @overload
  307. def groupby_transform(
  308. iterable: Iterable[_T],
  309. keyfunc: Callable[[_T], _U],
  310. valuefunc: Callable[[_T], _V],
  311. reducefunc: None,
  312. ) -> Iterable[tuple[_U, Iterator[_V]]]: ...
  313. @overload
  314. def groupby_transform(
  315. iterable: Iterable[_T],
  316. keyfunc: None,
  317. valuefunc: None,
  318. reducefunc: Callable[[Iterator[_T]], _W],
  319. ) -> Iterable[tuple[_T, _W]]: ...
  320. @overload
  321. def groupby_transform(
  322. iterable: Iterable[_T],
  323. keyfunc: Callable[[_T], _U],
  324. valuefunc: None,
  325. reducefunc: Callable[[Iterator[_T]], _W],
  326. ) -> Iterable[tuple[_U, _W]]: ...
  327. @overload
  328. def groupby_transform(
  329. iterable: Iterable[_T],
  330. keyfunc: None,
  331. valuefunc: Callable[[_T], _V],
  332. reducefunc: Callable[[Iterable[_V]], _W],
  333. ) -> Iterable[tuple[_T, _W]]: ...
  334. @overload
  335. def groupby_transform(
  336. iterable: Iterable[_T],
  337. keyfunc: Callable[[_T], _U],
  338. valuefunc: Callable[[_T], _V],
  339. reducefunc: Callable[[Iterable[_V]], _W],
  340. ) -> Iterable[tuple[_U, _W]]: ...
  341. class numeric_range(Generic[_T, _U], Sequence[_T], Hashable, Reversible[_T]):
  342. @overload
  343. def __init__(self, __stop: _T) -> None: ...
  344. @overload
  345. def __init__(self, __start: _T, __stop: _T) -> None: ...
  346. @overload
  347. def __init__(self, __start: _T, __stop: _T, __step: _U) -> None: ...
  348. def __bool__(self) -> bool: ...
  349. def __contains__(self, elem: object) -> bool: ...
  350. def __eq__(self, other: object) -> bool: ...
  351. @overload
  352. def __getitem__(self, key: int) -> _T: ...
  353. @overload
  354. def __getitem__(self, key: slice) -> numeric_range[_T, _U]: ...
  355. def __hash__(self) -> int: ...
  356. def __iter__(self) -> Iterator[_T]: ...
  357. def __len__(self) -> int: ...
  358. def __reduce__(
  359. self,
  360. ) -> tuple[Type[numeric_range[_T, _U]], tuple[_T, _T, _U]]: ...
  361. def __repr__(self) -> str: ...
  362. def __reversed__(self) -> Iterator[_T]: ...
  363. def count(self, value: _T) -> int: ...
  364. def index(self, value: _T) -> int: ... # type: ignore
  365. def count_cycle(
  366. iterable: Iterable[_T], n: int | None = ...
  367. ) -> Iterable[tuple[int, _T]]: ...
  368. def mark_ends(
  369. iterable: Iterable[_T],
  370. ) -> Iterable[tuple[bool, bool, _T]]: ...
  371. def locate(
  372. iterable: Iterable[_T],
  373. pred: Callable[..., Any] = ...,
  374. window_size: int | None = ...,
  375. ) -> Iterator[int]: ...
  376. def lstrip(
  377. iterable: Iterable[_T], pred: Callable[[_T], object]
  378. ) -> Iterator[_T]: ...
  379. def rstrip(
  380. iterable: Iterable[_T], pred: Callable[[_T], object]
  381. ) -> Iterator[_T]: ...
  382. def strip(
  383. iterable: Iterable[_T], pred: Callable[[_T], object]
  384. ) -> Iterator[_T]: ...
  385. class islice_extended(Generic[_T], Iterator[_T]):
  386. def __init__(self, iterable: Iterable[_T], *args: int | None) -> None: ...
  387. def __iter__(self) -> islice_extended[_T]: ...
  388. def __next__(self) -> _T: ...
  389. def __getitem__(self, index: slice) -> islice_extended[_T]: ...
  390. def always_reversible(iterable: Iterable[_T]) -> Iterator[_T]: ...
  391. def consecutive_groups(
  392. iterable: Iterable[_T], ordering: Callable[[_T], int] = ...
  393. ) -> Iterator[Iterator[_T]]: ...
  394. @overload
  395. def difference(
  396. iterable: Iterable[_T],
  397. func: Callable[[_T, _T], _U] = ...,
  398. *,
  399. initial: None = ...,
  400. ) -> Iterator[_T | _U]: ...
  401. @overload
  402. def difference(
  403. iterable: Iterable[_T], func: Callable[[_T, _T], _U] = ..., *, initial: _U
  404. ) -> Iterator[_U]: ...
  405. class SequenceView(Generic[_T], Sequence[_T]):
  406. def __init__(self, target: Sequence[_T]) -> None: ...
  407. @overload
  408. def __getitem__(self, index: int) -> _T: ...
  409. @overload
  410. def __getitem__(self, index: slice) -> Sequence[_T]: ...
  411. def __len__(self) -> int: ...
  412. class seekable(Generic[_T], Iterator[_T]):
  413. def __init__(
  414. self, iterable: Iterable[_T], maxlen: int | None = ...
  415. ) -> None: ...
  416. def __iter__(self) -> seekable[_T]: ...
  417. def __next__(self) -> _T: ...
  418. def __bool__(self) -> bool: ...
  419. @overload
  420. def peek(self) -> _T: ...
  421. @overload
  422. def peek(self, default: _U) -> _T | _U: ...
  423. def elements(self) -> SequenceView[_T]: ...
  424. def seek(self, index: int) -> None: ...
  425. def relative_seek(self, count: int) -> None: ...
  426. class run_length:
  427. @staticmethod
  428. def encode(iterable: Iterable[_T]) -> Iterator[tuple[_T, int]]: ...
  429. @staticmethod
  430. def decode(iterable: Iterable[tuple[_T, int]]) -> Iterator[_T]: ...
  431. def exactly_n(
  432. iterable: Iterable[_T], n: int, predicate: Callable[[_T], object] = ...
  433. ) -> bool: ...
  434. def circular_shifts(iterable: Iterable[_T]) -> list[tuple[_T, ...]]: ...
  435. def make_decorator(
  436. wrapping_func: Callable[..., _U], result_index: int = ...
  437. ) -> Callable[..., Callable[[Callable[..., Any]], Callable[..., _U]]]: ...
  438. @overload
  439. def map_reduce(
  440. iterable: Iterable[_T],
  441. keyfunc: Callable[[_T], _U],
  442. valuefunc: None = ...,
  443. reducefunc: None = ...,
  444. ) -> dict[_U, list[_T]]: ...
  445. @overload
  446. def map_reduce(
  447. iterable: Iterable[_T],
  448. keyfunc: Callable[[_T], _U],
  449. valuefunc: Callable[[_T], _V],
  450. reducefunc: None = ...,
  451. ) -> dict[_U, list[_V]]: ...
  452. @overload
  453. def map_reduce(
  454. iterable: Iterable[_T],
  455. keyfunc: Callable[[_T], _U],
  456. valuefunc: None = ...,
  457. reducefunc: Callable[[list[_T]], _W] = ...,
  458. ) -> dict[_U, _W]: ...
  459. @overload
  460. def map_reduce(
  461. iterable: Iterable[_T],
  462. keyfunc: Callable[[_T], _U],
  463. valuefunc: Callable[[_T], _V],
  464. reducefunc: Callable[[list[_V]], _W],
  465. ) -> dict[_U, _W]: ...
  466. def rlocate(
  467. iterable: Iterable[_T],
  468. pred: Callable[..., object] = ...,
  469. window_size: int | None = ...,
  470. ) -> Iterator[int]: ...
  471. def replace(
  472. iterable: Iterable[_T],
  473. pred: Callable[..., object],
  474. substitutes: Iterable[_U],
  475. count: int | None = ...,
  476. window_size: int = ...,
  477. ) -> Iterator[_T | _U]: ...
  478. def partitions(iterable: Iterable[_T]) -> Iterator[list[list[_T]]]: ...
  479. def set_partitions(
  480. iterable: Iterable[_T], k: int | None = ...
  481. ) -> Iterator[list[list[_T]]]: ...
  482. class time_limited(Generic[_T], Iterator[_T]):
  483. def __init__(
  484. self, limit_seconds: float, iterable: Iterable[_T]
  485. ) -> None: ...
  486. def __iter__(self) -> islice_extended[_T]: ...
  487. def __next__(self) -> _T: ...
  488. @overload
  489. def only(
  490. iterable: Iterable[_T], *, too_long: _Raisable | None = ...
  491. ) -> _T | None: ...
  492. @overload
  493. def only(
  494. iterable: Iterable[_T], default: _U, too_long: _Raisable | None = ...
  495. ) -> _T | _U: ...
  496. def ichunked(iterable: Iterable[_T], n: int) -> Iterator[Iterator[_T]]: ...
  497. def distinct_combinations(
  498. iterable: Iterable[_T], r: int
  499. ) -> Iterator[tuple[_T, ...]]: ...
  500. def filter_except(
  501. validator: Callable[[Any], object],
  502. iterable: Iterable[_T],
  503. *exceptions: Type[BaseException],
  504. ) -> Iterator[_T]: ...
  505. def map_except(
  506. function: Callable[[Any], _U],
  507. iterable: Iterable[_T],
  508. *exceptions: Type[BaseException],
  509. ) -> Iterator[_U]: ...
  510. def map_if(
  511. iterable: Iterable[Any],
  512. pred: Callable[[Any], bool],
  513. func: Callable[[Any], Any],
  514. func_else: Callable[[Any], Any] | None = ...,
  515. ) -> Iterator[Any]: ...
  516. def sample(
  517. iterable: Iterable[_T],
  518. k: int,
  519. weights: Iterable[float] | None = ...,
  520. ) -> list[_T]: ...
  521. def is_sorted(
  522. iterable: Iterable[_T],
  523. key: Callable[[_T], _U] | None = ...,
  524. reverse: bool = False,
  525. strict: bool = False,
  526. ) -> bool: ...
  527. class AbortThread(BaseException):
  528. pass
  529. class callback_iter(Generic[_T], Iterator[_T]):
  530. def __init__(
  531. self,
  532. func: Callable[..., Any],
  533. callback_kwd: str = ...,
  534. wait_seconds: float = ...,
  535. ) -> None: ...
  536. def __enter__(self) -> callback_iter[_T]: ...
  537. def __exit__(
  538. self,
  539. exc_type: Type[BaseException] | None,
  540. exc_value: BaseException | None,
  541. traceback: TracebackType | None,
  542. ) -> bool | None: ...
  543. def __iter__(self) -> callback_iter[_T]: ...
  544. def __next__(self) -> _T: ...
  545. def _reader(self) -> Iterator[_T]: ...
  546. @property
  547. def done(self) -> bool: ...
  548. @property
  549. def result(self) -> Any: ...
  550. def windowed_complete(
  551. iterable: Iterable[_T], n: int
  552. ) -> Iterator[tuple[_T, ...]]: ...
  553. def all_unique(
  554. iterable: Iterable[_T], key: Callable[[_T], _U] | None = ...
  555. ) -> bool: ...
  556. def nth_product(index: int, *args: Iterable[_T]) -> tuple[_T, ...]: ...
  557. def nth_combination_with_replacement(
  558. iterable: Iterable[_T], r: int, index: int
  559. ) -> tuple[_T, ...]: ...
  560. def nth_permutation(
  561. iterable: Iterable[_T], r: int, index: int
  562. ) -> tuple[_T, ...]: ...
  563. def value_chain(*args: _T | Iterable[_T]) -> Iterable[_T]: ...
  564. def product_index(element: Iterable[_T], *args: Iterable[_T]) -> int: ...
  565. def combination_index(
  566. element: Iterable[_T], iterable: Iterable[_T]
  567. ) -> int: ...
  568. def combination_with_replacement_index(
  569. element: Iterable[_T], iterable: Iterable[_T]
  570. ) -> int: ...
  571. def permutation_index(
  572. element: Iterable[_T], iterable: Iterable[_T]
  573. ) -> int: ...
  574. def repeat_each(iterable: Iterable[_T], n: int = ...) -> Iterator[_T]: ...
  575. class countable(Generic[_T], Iterator[_T]):
  576. def __init__(self, iterable: Iterable[_T]) -> None: ...
  577. def __iter__(self) -> countable[_T]: ...
  578. def __next__(self) -> _T: ...
  579. def chunked_even(iterable: Iterable[_T], n: int) -> Iterator[list[_T]]: ...
  580. def zip_broadcast(
  581. *objects: _T | Iterable[_T],
  582. scalar_types: type | tuple[type | tuple[Any, ...], ...] | None = ...,
  583. strict: bool = ...,
  584. ) -> Iterable[tuple[_T, ...]]: ...
  585. def unique_in_window(
  586. iterable: Iterable[_T], n: int, key: Callable[[_T], _U] | None = ...
  587. ) -> Iterator[_T]: ...
  588. def duplicates_everseen(
  589. iterable: Iterable[_T], key: Callable[[_T], _U] | None = ...
  590. ) -> Iterator[_T]: ...
  591. def duplicates_justseen(
  592. iterable: Iterable[_T], key: Callable[[_T], _U] | None = ...
  593. ) -> Iterator[_T]: ...
  594. def classify_unique(
  595. iterable: Iterable[_T], key: Callable[[_T], _U] | None = ...
  596. ) -> Iterator[tuple[_T, bool, bool]]: ...
  597. class _SupportsLessThan(Protocol):
  598. def __lt__(self, __other: Any) -> bool: ...
  599. _SupportsLessThanT = TypeVar("_SupportsLessThanT", bound=_SupportsLessThan)
  600. @overload
  601. def minmax(
  602. iterable_or_value: Iterable[_SupportsLessThanT], *, key: None = None
  603. ) -> tuple[_SupportsLessThanT, _SupportsLessThanT]: ...
  604. @overload
  605. def minmax(
  606. iterable_or_value: Iterable[_T], *, key: Callable[[_T], _SupportsLessThan]
  607. ) -> tuple[_T, _T]: ...
  608. @overload
  609. def minmax(
  610. iterable_or_value: Iterable[_SupportsLessThanT],
  611. *,
  612. key: None = None,
  613. default: _U,
  614. ) -> _U | tuple[_SupportsLessThanT, _SupportsLessThanT]: ...
  615. @overload
  616. def minmax(
  617. iterable_or_value: Iterable[_T],
  618. *,
  619. key: Callable[[_T], _SupportsLessThan],
  620. default: _U,
  621. ) -> _U | tuple[_T, _T]: ...
  622. @overload
  623. def minmax(
  624. iterable_or_value: _SupportsLessThanT,
  625. __other: _SupportsLessThanT,
  626. *others: _SupportsLessThanT,
  627. ) -> tuple[_SupportsLessThanT, _SupportsLessThanT]: ...
  628. @overload
  629. def minmax(
  630. iterable_or_value: _T,
  631. __other: _T,
  632. *others: _T,
  633. key: Callable[[_T], _SupportsLessThan],
  634. ) -> tuple[_T, _T]: ...
  635. def longest_common_prefix(
  636. iterables: Iterable[Iterable[_T]],
  637. ) -> Iterator[_T]: ...
  638. def iequals(*iterables: Iterable[Any]) -> bool: ...
  639. def constrained_batches(
  640. iterable: Iterable[_T],
  641. max_size: int,
  642. max_count: int | None = ...,
  643. get_len: Callable[[_T], object] = ...,
  644. strict: bool = ...,
  645. ) -> Iterator[tuple[_T]]: ...
  646. def gray_product(*iterables: Iterable[_T]) -> Iterator[tuple[_T, ...]]: ...
  647. def partial_product(*iterables: Iterable[_T]) -> Iterator[tuple[_T, ...]]: ...
  648. def takewhile_inclusive(
  649. predicate: Callable[[_T], bool], iterable: Iterable[_T]
  650. ) -> Iterator[_T]: ...
  651. def outer_product(
  652. func: Callable[[_T, _U], _V],
  653. xs: Iterable[_T],
  654. ys: Iterable[_U],
  655. *args: Any,
  656. **kwargs: Any,
  657. ) -> Iterator[tuple[_V, ...]]: ...
  658. def iter_suppress(
  659. iterable: Iterable[_T],
  660. *exceptions: Type[BaseException],
  661. ) -> Iterator[_T]: ...
  662. def filter_map(
  663. func: Callable[[_T], _V | None],
  664. iterable: Iterable[_T],
  665. ) -> Iterator[_V]: ...