recipes.pyi 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. """Stubs for more_itertools.recipes"""
  2. from __future__ import annotations
  3. from typing import (
  4. Any,
  5. Callable,
  6. Iterable,
  7. Iterator,
  8. overload,
  9. Sequence,
  10. Type,
  11. TypeVar,
  12. )
  13. # Type and type variable definitions
  14. _T = TypeVar('_T')
  15. _T1 = TypeVar('_T1')
  16. _T2 = TypeVar('_T2')
  17. _U = TypeVar('_U')
  18. def take(n: int, iterable: Iterable[_T]) -> list[_T]: ...
  19. def tabulate(
  20. function: Callable[[int], _T], start: int = ...
  21. ) -> Iterator[_T]: ...
  22. def tail(n: int, iterable: Iterable[_T]) -> Iterator[_T]: ...
  23. def consume(iterator: Iterable[_T], n: int | None = ...) -> None: ...
  24. @overload
  25. def nth(iterable: Iterable[_T], n: int) -> _T | None: ...
  26. @overload
  27. def nth(iterable: Iterable[_T], n: int, default: _U) -> _T | _U: ...
  28. def all_equal(iterable: Iterable[_T]) -> bool: ...
  29. def quantify(
  30. iterable: Iterable[_T], pred: Callable[[_T], bool] = ...
  31. ) -> int: ...
  32. def pad_none(iterable: Iterable[_T]) -> Iterator[_T | None]: ...
  33. def padnone(iterable: Iterable[_T]) -> Iterator[_T | None]: ...
  34. def ncycles(iterable: Iterable[_T], n: int) -> Iterator[_T]: ...
  35. def dotproduct(vec1: Iterable[_T1], vec2: Iterable[_T2]) -> Any: ...
  36. def flatten(listOfLists: Iterable[Iterable[_T]]) -> Iterator[_T]: ...
  37. def repeatfunc(
  38. func: Callable[..., _U], times: int | None = ..., *args: Any
  39. ) -> Iterator[_U]: ...
  40. def pairwise(iterable: Iterable[_T]) -> Iterator[tuple[_T, _T]]: ...
  41. def grouper(
  42. iterable: Iterable[_T],
  43. n: int,
  44. incomplete: str = ...,
  45. fillvalue: _U = ...,
  46. ) -> Iterator[tuple[_T | _U, ...]]: ...
  47. def roundrobin(*iterables: Iterable[_T]) -> Iterator[_T]: ...
  48. def partition(
  49. pred: Callable[[_T], object] | None, iterable: Iterable[_T]
  50. ) -> tuple[Iterator[_T], Iterator[_T]]: ...
  51. def powerset(iterable: Iterable[_T]) -> Iterator[tuple[_T, ...]]: ...
  52. def unique_everseen(
  53. iterable: Iterable[_T], key: Callable[[_T], _U] | None = ...
  54. ) -> Iterator[_T]: ...
  55. def unique_justseen(
  56. iterable: Iterable[_T], key: Callable[[_T], object] | None = ...
  57. ) -> Iterator[_T]: ...
  58. @overload
  59. def iter_except(
  60. func: Callable[[], _T],
  61. exception: Type[BaseException] | tuple[Type[BaseException], ...],
  62. first: None = ...,
  63. ) -> Iterator[_T]: ...
  64. @overload
  65. def iter_except(
  66. func: Callable[[], _T],
  67. exception: Type[BaseException] | tuple[Type[BaseException], ...],
  68. first: Callable[[], _U],
  69. ) -> Iterator[_T | _U]: ...
  70. @overload
  71. def first_true(
  72. iterable: Iterable[_T], *, pred: Callable[[_T], object] | None = ...
  73. ) -> _T | None: ...
  74. @overload
  75. def first_true(
  76. iterable: Iterable[_T],
  77. default: _U,
  78. pred: Callable[[_T], object] | None = ...,
  79. ) -> _T | _U: ...
  80. def random_product(
  81. *args: Iterable[_T], repeat: int = ...
  82. ) -> tuple[_T, ...]: ...
  83. def random_permutation(
  84. iterable: Iterable[_T], r: int | None = ...
  85. ) -> tuple[_T, ...]: ...
  86. def random_combination(iterable: Iterable[_T], r: int) -> tuple[_T, ...]: ...
  87. def random_combination_with_replacement(
  88. iterable: Iterable[_T], r: int
  89. ) -> tuple[_T, ...]: ...
  90. def nth_combination(
  91. iterable: Iterable[_T], r: int, index: int
  92. ) -> tuple[_T, ...]: ...
  93. def prepend(value: _T, iterator: Iterable[_U]) -> Iterator[_T | _U]: ...
  94. def convolve(signal: Iterable[_T], kernel: Iterable[_T]) -> Iterator[_T]: ...
  95. def before_and_after(
  96. predicate: Callable[[_T], bool], it: Iterable[_T]
  97. ) -> tuple[Iterator[_T], Iterator[_T]]: ...
  98. def triplewise(iterable: Iterable[_T]) -> Iterator[tuple[_T, _T, _T]]: ...
  99. def sliding_window(
  100. iterable: Iterable[_T], n: int
  101. ) -> Iterator[tuple[_T, ...]]: ...
  102. def subslices(iterable: Iterable[_T]) -> Iterator[list[_T]]: ...
  103. def polynomial_from_roots(roots: Sequence[_T]) -> list[_T]: ...
  104. def iter_index(
  105. iterable: Iterable[_T],
  106. value: Any,
  107. start: int | None = ...,
  108. stop: int | None = ...,
  109. ) -> Iterator[int]: ...
  110. def sieve(n: int) -> Iterator[int]: ...
  111. def batched(
  112. iterable: Iterable[_T], n: int, *, strict: bool = False
  113. ) -> Iterator[tuple[_T]]: ...
  114. def transpose(
  115. it: Iterable[Iterable[_T]],
  116. ) -> Iterator[tuple[_T, ...]]: ...
  117. def reshape(
  118. matrix: Iterable[Iterable[_T]], cols: int
  119. ) -> Iterator[tuple[_T, ...]]: ...
  120. def matmul(m1: Sequence[_T], m2: Sequence[_T]) -> Iterator[tuple[_T]]: ...
  121. def factor(n: int) -> Iterator[int]: ...
  122. def polynomial_eval(coefficients: Sequence[_T], x: _U) -> _U: ...
  123. def sum_of_squares(it: Iterable[_T]) -> _T: ...
  124. def polynomial_derivative(coefficients: Sequence[_T]) -> list[_T]: ...
  125. def totient(n: int) -> int: ...