more.pyi 21 KB

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