python-iterutils 0.1.1__py3-none-any.whl → 0.1.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- iterutils/__init__.py +55 -7
- {python_iterutils-0.1.1.dist-info → python_iterutils-0.1.2.1.dist-info}/METADATA +1 -1
- python_iterutils-0.1.2.1.dist-info/RECORD +7 -0
- python_iterutils-0.1.1.dist-info/RECORD +0 -7
- {python_iterutils-0.1.1.dist-info → python_iterutils-0.1.2.1.dist-info}/LICENSE +0 -0
- {python_iterutils-0.1.1.dist-info → python_iterutils-0.1.2.1.dist-info}/WHEEL +0 -0
iterutils/__init__.py
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
# encoding: utf-8
|
|
3
3
|
|
|
4
4
|
__author__ = "ChenyangGao <https://chenyanggao.github.io>"
|
|
5
|
-
__version__ = (0, 1,
|
|
5
|
+
__version__ = (0, 1, 2)
|
|
6
6
|
__all__ = [
|
|
7
7
|
"Return", "Yield", "YieldFrom", "iterable", "async_iterable", "foreach", "async_foreach",
|
|
8
|
-
"through", "async_through", "flatten", "async_flatten", "
|
|
9
|
-
"
|
|
8
|
+
"through", "async_through", "flatten", "async_flatten", "iter_unique", "async_iter_unique",
|
|
9
|
+
"chunked", "wrap_iter", "wrap_aiter", "acc_step", "cut_iter", "run_gen_step",
|
|
10
|
+
"run_gen_step_iter", "bfs_gen",
|
|
10
11
|
]
|
|
11
12
|
|
|
12
13
|
|
|
@@ -15,7 +16,7 @@ from asyncio import to_thread
|
|
|
15
16
|
from collections import deque
|
|
16
17
|
from collections.abc import (
|
|
17
18
|
AsyncIterable, AsyncIterator, Buffer, Callable, Generator,
|
|
18
|
-
Iterable, Iterator, Sequence,
|
|
19
|
+
Iterable, Iterator, MutableSet, Sequence,
|
|
19
20
|
)
|
|
20
21
|
from dataclasses import dataclass
|
|
21
22
|
from itertools import batched, pairwise
|
|
@@ -136,20 +137,20 @@ def flatten(
|
|
|
136
137
|
iterable: Iterable,
|
|
137
138
|
/,
|
|
138
139
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
139
|
-
) ->
|
|
140
|
+
) -> Iterator:
|
|
140
141
|
...
|
|
141
142
|
@overload
|
|
142
143
|
def flatten(
|
|
143
144
|
iterable: AsyncIterable,
|
|
144
145
|
/,
|
|
145
146
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
146
|
-
) ->
|
|
147
|
+
) -> AsyncIterator:
|
|
147
148
|
...
|
|
148
149
|
def flatten(
|
|
149
150
|
iterable: Iterable | AsyncIterable,
|
|
150
151
|
/,
|
|
151
152
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
152
|
-
) ->
|
|
153
|
+
) -> Iterator | AsyncIterator:
|
|
153
154
|
if not isinstance(iterable, Iterable):
|
|
154
155
|
return async_flatten(iterable, exclude_types)
|
|
155
156
|
def gen(iterable):
|
|
@@ -175,6 +176,53 @@ async def async_flatten(
|
|
|
175
176
|
yield e
|
|
176
177
|
|
|
177
178
|
|
|
179
|
+
@overload
|
|
180
|
+
def iter_unique[T](
|
|
181
|
+
iterable: Iterable[T],
|
|
182
|
+
/,
|
|
183
|
+
seen: None | MutableSet = None,
|
|
184
|
+
) -> Iterator[T]:
|
|
185
|
+
...
|
|
186
|
+
@overload
|
|
187
|
+
def iter_unique[T](
|
|
188
|
+
iterable: AsyncIterable[T],
|
|
189
|
+
/,
|
|
190
|
+
seen: None | MutableSet = None,
|
|
191
|
+
) -> AsyncIterator[T]:
|
|
192
|
+
...
|
|
193
|
+
def iter_unique[T](
|
|
194
|
+
iterable: Iterable[T] | AsyncIterable[T],
|
|
195
|
+
/,
|
|
196
|
+
seen: None | MutableSet = None,
|
|
197
|
+
) -> Iterator[T] | AsyncIterator[T]:
|
|
198
|
+
if not isinstance(iterable, Iterable):
|
|
199
|
+
return async_iter_unique(iterable, seen)
|
|
200
|
+
if seen is None:
|
|
201
|
+
seen = set()
|
|
202
|
+
def gen(iterable):
|
|
203
|
+
add = seen.add
|
|
204
|
+
for e in iterable:
|
|
205
|
+
if e not in seen:
|
|
206
|
+
yield e
|
|
207
|
+
add(e)
|
|
208
|
+
return gen(iterable)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
async def async_iter_unique[T](
|
|
212
|
+
iterable: Iterable[T] | AsyncIterable[T],
|
|
213
|
+
/,
|
|
214
|
+
seen: None | MutableSet = None,
|
|
215
|
+
threaded: bool = False,
|
|
216
|
+
) -> AsyncIterator[T]:
|
|
217
|
+
if seen is None:
|
|
218
|
+
seen = set()
|
|
219
|
+
add = seen.add
|
|
220
|
+
async for e in ensure_aiter(iterable, threaded=threaded):
|
|
221
|
+
if e not in seen:
|
|
222
|
+
yield e
|
|
223
|
+
add(e)
|
|
224
|
+
|
|
225
|
+
|
|
178
226
|
@overload
|
|
179
227
|
def chunked[T](
|
|
180
228
|
iterable: Iterable[T],
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
2
|
+
iterutils/__init__.py,sha256=IXbHP7Gsl2kFxzJ__wFihqulcFuAec6nRe1yQrZynMQ,19786
|
|
3
|
+
iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
python_iterutils-0.1.2.1.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
5
|
+
python_iterutils-0.1.2.1.dist-info/METADATA,sha256=elEGJWssbe3O36Ecb0Vo9MqtN4bxKl08pL7mNCQuxXM,1343
|
|
6
|
+
python_iterutils-0.1.2.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
7
|
+
python_iterutils-0.1.2.1.dist-info/RECORD,,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
2
|
-
iterutils/__init__.py,sha256=Wrlg5UDuOta7ixKS3Mh5FT9EZkqKT7sBRXNeujoanDE,18639
|
|
3
|
-
iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
python_iterutils-0.1.1.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
5
|
-
python_iterutils-0.1.1.dist-info/METADATA,sha256=DjSEacOQgDGD7CZDcm-uzPLfWz-Gayb5agE0pkZjRUM,1341
|
|
6
|
-
python_iterutils-0.1.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
7
|
-
python_iterutils-0.1.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|