python-iterutils 0.2.9__py3-none-any.whl → 0.2.10.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 +152 -23
- {python_iterutils-0.2.9.dist-info → python_iterutils-0.2.10.1.dist-info}/METADATA +1 -1
- python_iterutils-0.2.10.1.dist-info/RECORD +7 -0
- python_iterutils-0.2.9.dist-info/RECORD +0 -7
- {python_iterutils-0.2.9.dist-info → python_iterutils-0.2.10.1.dist-info}/LICENSE +0 -0
- {python_iterutils-0.2.9.dist-info → python_iterutils-0.2.10.1.dist-info}/WHEEL +0 -0
iterutils/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# encoding: utf-8
|
|
3
3
|
|
|
4
4
|
__author__ = "ChenyangGao <https://chenyanggao.github.io>"
|
|
5
|
-
__version__ = (0, 2,
|
|
5
|
+
__version__ = (0, 2, 10)
|
|
6
6
|
__all__ = [
|
|
7
7
|
"Yield", "YieldFrom", "GenStep", "GenStepIter", "iterable",
|
|
8
8
|
"async_iterable", "run_gen_step", "run_gen_step_iter",
|
|
@@ -11,8 +11,8 @@ __all__ = [
|
|
|
11
11
|
"chunked", "foreach", "async_foreach", "through", "async_through",
|
|
12
12
|
"flatten", "async_flatten", "collect", "async_collect",
|
|
13
13
|
"group_collect", "async_group_collect", "iter_unique",
|
|
14
|
-
"async_iter_unique", "wrap_iter", "wrap_aiter", "
|
|
15
|
-
"cut_iter", "bfs_gen", "context", "backgroud_loop",
|
|
14
|
+
"async_iter_unique", "wrap_iter", "wrap_aiter", "peek_iter", "peek_aiter",
|
|
15
|
+
"acc_step", "cut_iter", "bfs_gen", "context", "backgroud_loop",
|
|
16
16
|
]
|
|
17
17
|
|
|
18
18
|
from asyncio import create_task, sleep as async_sleep
|
|
@@ -588,22 +588,30 @@ def chain[T](
|
|
|
588
588
|
iterable: Iterable[T],
|
|
589
589
|
/,
|
|
590
590
|
*iterables: Iterable[T],
|
|
591
|
-
threaded:
|
|
591
|
+
threaded: Literal[False] = False,
|
|
592
592
|
) -> Iterator[T]:
|
|
593
593
|
...
|
|
594
594
|
@overload
|
|
595
|
+
def chain[T](
|
|
596
|
+
iterable: Iterable[T],
|
|
597
|
+
/,
|
|
598
|
+
*iterables: Iterable[T] | AsyncIterable[T],
|
|
599
|
+
threaded: Literal[True],
|
|
600
|
+
) -> AsyncIterator[T]:
|
|
601
|
+
...
|
|
602
|
+
@overload
|
|
595
603
|
def chain[T](
|
|
596
604
|
iterable: AsyncIterable[T],
|
|
597
605
|
/,
|
|
598
606
|
*iterables: Iterable[T] | AsyncIterable[T],
|
|
599
|
-
threaded:
|
|
607
|
+
threaded: Literal[False, True] = False,
|
|
600
608
|
) -> AsyncIterator[T]:
|
|
601
609
|
...
|
|
602
610
|
def chain[T](
|
|
603
611
|
iterable: Iterable[T] | AsyncIterable[T],
|
|
604
612
|
/,
|
|
605
613
|
*iterables: Iterable[T] | AsyncIterable[T],
|
|
606
|
-
threaded:
|
|
614
|
+
threaded: Literal[False, True] = False,
|
|
607
615
|
) -> Iterator[T] | AsyncIterator[T]:
|
|
608
616
|
if (not threaded and
|
|
609
617
|
isinstance(iterable, Iterable) and
|
|
@@ -616,7 +624,7 @@ def chain[T](
|
|
|
616
624
|
@overload
|
|
617
625
|
def chain_from_iterable[T](
|
|
618
626
|
iterables: Iterable[Iterable[T]],
|
|
619
|
-
threaded:
|
|
627
|
+
threaded: bool = False,
|
|
620
628
|
*,
|
|
621
629
|
async_: Literal[False] = False,
|
|
622
630
|
) -> Iterator[T]:
|
|
@@ -635,7 +643,7 @@ def chain_from_iterable[T](
|
|
|
635
643
|
*,
|
|
636
644
|
async_: Literal[False, True] = False,
|
|
637
645
|
) -> Iterator[T] | AsyncIterator[T]:
|
|
638
|
-
if async_ or
|
|
646
|
+
if async_ or not isinstance(iterables, Iterable):
|
|
639
647
|
if isinstance(iterables, Iterable):
|
|
640
648
|
return async_chain.from_iterable(iterables, threaded=threaded)
|
|
641
649
|
else:
|
|
@@ -650,7 +658,17 @@ def chunked[T](
|
|
|
650
658
|
iterable: Iterable[T],
|
|
651
659
|
n: int = 1,
|
|
652
660
|
/,
|
|
653
|
-
|
|
661
|
+
*,
|
|
662
|
+
threaded: Literal[False] = False,
|
|
663
|
+
) -> Iterator[Sequence[T]]:
|
|
664
|
+
...
|
|
665
|
+
@overload
|
|
666
|
+
def chunked[T](
|
|
667
|
+
iterable: Iterable[T],
|
|
668
|
+
n: int = 1,
|
|
669
|
+
/,
|
|
670
|
+
*,
|
|
671
|
+
threaded: Literal[True],
|
|
654
672
|
) -> Iterator[Sequence[T]]:
|
|
655
673
|
...
|
|
656
674
|
@overload
|
|
@@ -658,14 +676,16 @@ def chunked[T](
|
|
|
658
676
|
iterable: AsyncIterable[T],
|
|
659
677
|
n: int = 1,
|
|
660
678
|
/,
|
|
661
|
-
|
|
679
|
+
*,
|
|
680
|
+
threaded: Literal[False, True] = False,
|
|
662
681
|
) -> AsyncIterator[Sequence[T]]:
|
|
663
682
|
...
|
|
664
683
|
def chunked[T](
|
|
665
684
|
iterable: Iterable[T] | AsyncIterable[T],
|
|
666
685
|
n: int = 1,
|
|
667
686
|
/,
|
|
668
|
-
|
|
687
|
+
*,
|
|
688
|
+
threaded: Literal[False, True] = False,
|
|
669
689
|
) -> Iterator[Sequence[T]] | AsyncIterator[Sequence[T]]:
|
|
670
690
|
"""
|
|
671
691
|
"""
|
|
@@ -768,7 +788,17 @@ def flatten(
|
|
|
768
788
|
iterable: Iterable,
|
|
769
789
|
/,
|
|
770
790
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
771
|
-
|
|
791
|
+
*,
|
|
792
|
+
threaded: Literal[False] = False,
|
|
793
|
+
) -> Iterator:
|
|
794
|
+
...
|
|
795
|
+
@overload
|
|
796
|
+
def flatten(
|
|
797
|
+
iterable: Iterable,
|
|
798
|
+
/,
|
|
799
|
+
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
800
|
+
*,
|
|
801
|
+
threaded: Literal[True],
|
|
772
802
|
) -> Iterator:
|
|
773
803
|
...
|
|
774
804
|
@overload
|
|
@@ -776,14 +806,15 @@ def flatten(
|
|
|
776
806
|
iterable: AsyncIterable,
|
|
777
807
|
/,
|
|
778
808
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
779
|
-
|
|
809
|
+
*,
|
|
810
|
+
threaded: Literal[False, True] = False,
|
|
780
811
|
) -> AsyncIterator:
|
|
781
812
|
...
|
|
782
813
|
def flatten(
|
|
783
814
|
iterable: Iterable | AsyncIterable,
|
|
784
815
|
/,
|
|
785
816
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
786
|
-
threaded:
|
|
817
|
+
threaded: Literal[False, True] = False,
|
|
787
818
|
) -> Iterator | AsyncIterator:
|
|
788
819
|
"""
|
|
789
820
|
"""
|
|
@@ -819,7 +850,8 @@ def collect[K, V](
|
|
|
819
850
|
iterable: Iterable[tuple[K, V]] | Mapping[K, V],
|
|
820
851
|
/,
|
|
821
852
|
rettype: Callable[[Iterable[tuple[K, V]]], MutableMapping[K, V]],
|
|
822
|
-
|
|
853
|
+
*,
|
|
854
|
+
threaded: Literal[False] = False,
|
|
823
855
|
) -> MutableMapping[K, V]:
|
|
824
856
|
...
|
|
825
857
|
@overload
|
|
@@ -827,15 +859,35 @@ def collect[T](
|
|
|
827
859
|
iterable: Iterable[T],
|
|
828
860
|
/,
|
|
829
861
|
rettype: Callable[[Iterable[T]], Collection[T]] = list,
|
|
830
|
-
|
|
862
|
+
*,
|
|
863
|
+
threaded: Literal[False] = False,
|
|
831
864
|
) -> Collection[T]:
|
|
832
865
|
...
|
|
833
866
|
@overload
|
|
867
|
+
def collect[K, V](
|
|
868
|
+
iterable: Iterable[tuple[K, V]] | Mapping[K, V],
|
|
869
|
+
/,
|
|
870
|
+
rettype: Callable[[Iterable[tuple[K, V]]], MutableMapping[K, V]],
|
|
871
|
+
*,
|
|
872
|
+
threaded: Literal[True],
|
|
873
|
+
) -> Coroutine[Any, Any, MutableMapping[K, V]]:
|
|
874
|
+
...
|
|
875
|
+
@overload
|
|
876
|
+
def collect[T](
|
|
877
|
+
iterable: Iterable[T],
|
|
878
|
+
/,
|
|
879
|
+
rettype: Callable[[Iterable[T]], Collection[T]] = list,
|
|
880
|
+
*,
|
|
881
|
+
threaded: Literal[True],
|
|
882
|
+
) -> Coroutine[Any, Any, Collection[T]]:
|
|
883
|
+
...
|
|
884
|
+
@overload
|
|
834
885
|
def collect[K, V](
|
|
835
886
|
iterable: AsyncIterable[tuple[K, V]],
|
|
836
887
|
/,
|
|
837
888
|
rettype: Callable[[Iterable[tuple[K, V]]], MutableMapping[K, V]],
|
|
838
|
-
|
|
889
|
+
*,
|
|
890
|
+
threaded: Literal[False, True] = False,
|
|
839
891
|
) -> Coroutine[Any, Any, MutableMapping[K, V]]:
|
|
840
892
|
...
|
|
841
893
|
@overload
|
|
@@ -843,14 +895,16 @@ def collect[T](
|
|
|
843
895
|
iterable: AsyncIterable[T],
|
|
844
896
|
/,
|
|
845
897
|
rettype: Callable[[Iterable[T]], Collection[T]] = list,
|
|
846
|
-
|
|
898
|
+
*,
|
|
899
|
+
threaded: Literal[False, True] = False,
|
|
847
900
|
) -> Coroutine[Any, Any, Collection[T]]:
|
|
848
901
|
...
|
|
849
902
|
def collect(
|
|
850
903
|
iterable: Iterable | AsyncIterable | Mapping,
|
|
851
904
|
/,
|
|
852
905
|
rettype: Callable[[Iterable], Collection] = list,
|
|
853
|
-
|
|
906
|
+
*,
|
|
907
|
+
threaded: Literal[False, True] = False,
|
|
854
908
|
) -> Collection | Coroutine[Any, Any, Collection]:
|
|
855
909
|
"""
|
|
856
910
|
"""
|
|
@@ -997,22 +1051,33 @@ def iter_unique[T](
|
|
|
997
1051
|
iterable: Iterable[T],
|
|
998
1052
|
/,
|
|
999
1053
|
seen: None | MutableSet = None,
|
|
1000
|
-
|
|
1054
|
+
*,
|
|
1055
|
+
threaded: Literal[False] = False,
|
|
1001
1056
|
) -> Iterator[T]:
|
|
1002
1057
|
...
|
|
1003
1058
|
@overload
|
|
1059
|
+
def iter_unique[T](
|
|
1060
|
+
iterable: Iterable[T],
|
|
1061
|
+
/,
|
|
1062
|
+
seen: None | MutableSet = None,
|
|
1063
|
+
*,
|
|
1064
|
+
threaded: Literal[True],
|
|
1065
|
+
) -> AsyncIterator[T]:
|
|
1066
|
+
...
|
|
1067
|
+
@overload
|
|
1004
1068
|
def iter_unique[T](
|
|
1005
1069
|
iterable: AsyncIterable[T],
|
|
1006
1070
|
/,
|
|
1007
1071
|
seen: None | MutableSet = None,
|
|
1008
|
-
|
|
1072
|
+
*,
|
|
1073
|
+
threaded: Literal[False, True] = False,
|
|
1009
1074
|
) -> AsyncIterator[T]:
|
|
1010
1075
|
...
|
|
1011
1076
|
def iter_unique[T](
|
|
1012
1077
|
iterable: Iterable[T] | AsyncIterable[T],
|
|
1013
1078
|
/,
|
|
1014
1079
|
seen: None | MutableSet = None,
|
|
1015
|
-
threaded:
|
|
1080
|
+
threaded: Literal[False, True] = False,
|
|
1016
1081
|
) -> Iterator[T] | AsyncIterator[T]:
|
|
1017
1082
|
"""
|
|
1018
1083
|
"""
|
|
@@ -1052,14 +1117,27 @@ def wrap_iter[T](
|
|
|
1052
1117
|
/,
|
|
1053
1118
|
callprev: None | Callable[[T], Any] = None,
|
|
1054
1119
|
callnext: None | Callable[[T], Any] = None,
|
|
1120
|
+
*,
|
|
1121
|
+
threaded: Literal[False] = False,
|
|
1055
1122
|
) -> Iterator[T]:
|
|
1056
1123
|
...
|
|
1057
1124
|
@overload
|
|
1125
|
+
def wrap_iter[T](
|
|
1126
|
+
iterable: Iterable[T],
|
|
1127
|
+
/,
|
|
1128
|
+
callprev: None | Callable[[T], Any] = None,
|
|
1129
|
+
callnext: None | Callable[[T], Any] = None,
|
|
1130
|
+
*,
|
|
1131
|
+
threaded: Literal[True],
|
|
1132
|
+
) -> AsyncIterator[T]:
|
|
1133
|
+
...
|
|
1134
|
+
@overload
|
|
1058
1135
|
def wrap_iter[T](
|
|
1059
1136
|
iterable: AsyncIterable[T],
|
|
1060
1137
|
/,
|
|
1061
1138
|
callprev: None | Callable[[T], Any] = None,
|
|
1062
1139
|
callnext: None | Callable[[T], Any] = None,
|
|
1140
|
+
threaded: Literal[False, True] = False,
|
|
1063
1141
|
) -> AsyncIterator[T]:
|
|
1064
1142
|
...
|
|
1065
1143
|
def wrap_iter[T](
|
|
@@ -1067,14 +1145,16 @@ def wrap_iter[T](
|
|
|
1067
1145
|
/,
|
|
1068
1146
|
callprev: None | Callable[[T], Any] = None,
|
|
1069
1147
|
callnext: None | Callable[[T], Any] = None,
|
|
1148
|
+
threaded: bool = False,
|
|
1070
1149
|
) -> Iterator[T] | AsyncIterator[T]:
|
|
1071
1150
|
"""
|
|
1072
1151
|
"""
|
|
1073
|
-
if not isinstance(iterable, Iterable):
|
|
1152
|
+
if threaded or not isinstance(iterable, Iterable):
|
|
1074
1153
|
return wrap_aiter(
|
|
1075
1154
|
iterable,
|
|
1076
1155
|
callprev=callprev,
|
|
1077
1156
|
callnext=callnext,
|
|
1157
|
+
threaded=threaded,
|
|
1078
1158
|
)
|
|
1079
1159
|
if not callable(callprev):
|
|
1080
1160
|
callprev = None
|
|
@@ -1105,6 +1185,55 @@ async def wrap_aiter[T](
|
|
|
1105
1185
|
callnext and await callnext(e)
|
|
1106
1186
|
|
|
1107
1187
|
|
|
1188
|
+
@overload
|
|
1189
|
+
def peek_iter[T](
|
|
1190
|
+
iterable: Iterable[T],
|
|
1191
|
+
/,
|
|
1192
|
+
threaded: Literal[False] = False,
|
|
1193
|
+
) -> None | Iterator[T]:
|
|
1194
|
+
...
|
|
1195
|
+
@overload
|
|
1196
|
+
def peek_iter[T](
|
|
1197
|
+
iterable: Iterable[T],
|
|
1198
|
+
/,
|
|
1199
|
+
threaded: Literal[True],
|
|
1200
|
+
) -> Coroutine[Any, Any, None | AsyncIterator[T]]:
|
|
1201
|
+
...
|
|
1202
|
+
@overload
|
|
1203
|
+
def peek_iter[T](
|
|
1204
|
+
iterable: AsyncIterable[T],
|
|
1205
|
+
/,
|
|
1206
|
+
threaded: Literal[False, True] = False,
|
|
1207
|
+
) -> Coroutine[Any, Any, None | AsyncIterator[T]]:
|
|
1208
|
+
...
|
|
1209
|
+
def peek_iter[T](
|
|
1210
|
+
iterable: Iterable[T] | AsyncIterable[T],
|
|
1211
|
+
/,
|
|
1212
|
+
threaded: Literal[False, True] = False,
|
|
1213
|
+
) -> None | Iterator[T] | Coroutine[Any, Any, None | AsyncIterator[T]]:
|
|
1214
|
+
if threaded or isinstance(iterable, AsyncIterable):
|
|
1215
|
+
return peek_aiter(iterable, threaded=threaded)
|
|
1216
|
+
try:
|
|
1217
|
+
it = iter(iterable)
|
|
1218
|
+
first = next(it)
|
|
1219
|
+
return chain((first,), it)
|
|
1220
|
+
except StopIteration:
|
|
1221
|
+
return None
|
|
1222
|
+
|
|
1223
|
+
|
|
1224
|
+
async def peek_aiter[T](
|
|
1225
|
+
iterable: Iterable[T] | AsyncIterable[T],
|
|
1226
|
+
/,
|
|
1227
|
+
threaded: Literal[False, True] = False,
|
|
1228
|
+
) -> None | AsyncIterator[T]:
|
|
1229
|
+
try:
|
|
1230
|
+
it = ensure_aiter(iterable, threaded=threaded)
|
|
1231
|
+
first = await anext(it)
|
|
1232
|
+
return async_chain((first,), it)
|
|
1233
|
+
except StopAsyncIteration:
|
|
1234
|
+
return None
|
|
1235
|
+
|
|
1236
|
+
|
|
1108
1237
|
def acc_step(
|
|
1109
1238
|
start: int,
|
|
1110
1239
|
stop: None | int = None,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
2
|
+
iterutils/__init__.py,sha256=CGdQ5mMpLgsNZeG0b8LiHVAbrNiPGSSG5Z3FEJ5cAEg,40919
|
|
3
|
+
iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
python_iterutils-0.2.10.1.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
5
|
+
python_iterutils-0.2.10.1.dist-info/METADATA,sha256=cdqcFnwCGVdc0akHvHmy0d69NCsVpN98QexSbdU_ypI,1400
|
|
6
|
+
python_iterutils-0.2.10.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
7
|
+
python_iterutils-0.2.10.1.dist-info/RECORD,,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
2
|
-
iterutils/__init__.py,sha256=F0fRpVVj0JNuyY8FPI_awl9hDrp7QO_8RDwuZcBn68g,37793
|
|
3
|
-
iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
python_iterutils-0.2.9.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
5
|
-
python_iterutils-0.2.9.dist-info/METADATA,sha256=tgRvO1JFf1iLI-mEN_8lU4duXJmlcd5DNe-C5zluLNk,1397
|
|
6
|
-
python_iterutils-0.2.9.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
7
|
-
python_iterutils-0.2.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|