python-iterutils 0.2.8__py3-none-any.whl → 0.2.10__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 +153 -23
- {python_iterutils-0.2.8.dist-info → python_iterutils-0.2.10.dist-info}/METADATA +1 -1
- python_iterutils-0.2.10.dist-info/RECORD +7 -0
- python_iterutils-0.2.8.dist-info/RECORD +0 -7
- {python_iterutils-0.2.8.dist-info → python_iterutils-0.2.10.dist-info}/LICENSE +0 -0
- {python_iterutils-0.2.8.dist-info → python_iterutils-0.2.10.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
|
|
@@ -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
|
"""
|
|
@@ -700,7 +720,8 @@ def foreach(
|
|
|
700
720
|
else:
|
|
701
721
|
for arg in iterable:
|
|
702
722
|
value(arg)
|
|
703
|
-
|
|
723
|
+
else:
|
|
724
|
+
return async_foreach(value, iterable, *iterables, threaded=threaded)
|
|
704
725
|
|
|
705
726
|
|
|
706
727
|
async def async_foreach(
|
|
@@ -731,7 +752,7 @@ def through(
|
|
|
731
752
|
"""
|
|
732
753
|
if threaded or not isinstance(iterable, Iterable):
|
|
733
754
|
return async_through(iterable, take_while, threaded=threaded)
|
|
734
|
-
|
|
755
|
+
elif take_while is None:
|
|
735
756
|
for _ in iterable:
|
|
736
757
|
pass
|
|
737
758
|
else:
|
|
@@ -767,7 +788,17 @@ def flatten(
|
|
|
767
788
|
iterable: Iterable,
|
|
768
789
|
/,
|
|
769
790
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
770
|
-
|
|
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],
|
|
771
802
|
) -> Iterator:
|
|
772
803
|
...
|
|
773
804
|
@overload
|
|
@@ -775,14 +806,15 @@ def flatten(
|
|
|
775
806
|
iterable: AsyncIterable,
|
|
776
807
|
/,
|
|
777
808
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
778
|
-
|
|
809
|
+
*,
|
|
810
|
+
threaded: Literal[False, True] = False,
|
|
779
811
|
) -> AsyncIterator:
|
|
780
812
|
...
|
|
781
813
|
def flatten(
|
|
782
814
|
iterable: Iterable | AsyncIterable,
|
|
783
815
|
/,
|
|
784
816
|
exclude_types: type | tuple[type, ...] = (Buffer, str),
|
|
785
|
-
threaded:
|
|
817
|
+
threaded: Literal[False, True] = False,
|
|
786
818
|
) -> Iterator | AsyncIterator:
|
|
787
819
|
"""
|
|
788
820
|
"""
|
|
@@ -818,7 +850,8 @@ def collect[K, V](
|
|
|
818
850
|
iterable: Iterable[tuple[K, V]] | Mapping[K, V],
|
|
819
851
|
/,
|
|
820
852
|
rettype: Callable[[Iterable[tuple[K, V]]], MutableMapping[K, V]],
|
|
821
|
-
|
|
853
|
+
*,
|
|
854
|
+
threaded: Literal[False] = False,
|
|
822
855
|
) -> MutableMapping[K, V]:
|
|
823
856
|
...
|
|
824
857
|
@overload
|
|
@@ -826,15 +859,35 @@ def collect[T](
|
|
|
826
859
|
iterable: Iterable[T],
|
|
827
860
|
/,
|
|
828
861
|
rettype: Callable[[Iterable[T]], Collection[T]] = list,
|
|
829
|
-
|
|
862
|
+
*,
|
|
863
|
+
threaded: Literal[False] = False,
|
|
830
864
|
) -> Collection[T]:
|
|
831
865
|
...
|
|
832
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
|
|
833
885
|
def collect[K, V](
|
|
834
886
|
iterable: AsyncIterable[tuple[K, V]],
|
|
835
887
|
/,
|
|
836
888
|
rettype: Callable[[Iterable[tuple[K, V]]], MutableMapping[K, V]],
|
|
837
|
-
|
|
889
|
+
*,
|
|
890
|
+
threaded: Literal[False, True] = False,
|
|
838
891
|
) -> Coroutine[Any, Any, MutableMapping[K, V]]:
|
|
839
892
|
...
|
|
840
893
|
@overload
|
|
@@ -842,14 +895,16 @@ def collect[T](
|
|
|
842
895
|
iterable: AsyncIterable[T],
|
|
843
896
|
/,
|
|
844
897
|
rettype: Callable[[Iterable[T]], Collection[T]] = list,
|
|
845
|
-
|
|
898
|
+
*,
|
|
899
|
+
threaded: Literal[False, True] = False,
|
|
846
900
|
) -> Coroutine[Any, Any, Collection[T]]:
|
|
847
901
|
...
|
|
848
902
|
def collect(
|
|
849
903
|
iterable: Iterable | AsyncIterable | Mapping,
|
|
850
904
|
/,
|
|
851
905
|
rettype: Callable[[Iterable], Collection] = list,
|
|
852
|
-
|
|
906
|
+
*,
|
|
907
|
+
threaded: Literal[False, True] = False,
|
|
853
908
|
) -> Collection | Coroutine[Any, Any, Collection]:
|
|
854
909
|
"""
|
|
855
910
|
"""
|
|
@@ -996,22 +1051,33 @@ def iter_unique[T](
|
|
|
996
1051
|
iterable: Iterable[T],
|
|
997
1052
|
/,
|
|
998
1053
|
seen: None | MutableSet = None,
|
|
999
|
-
|
|
1054
|
+
*,
|
|
1055
|
+
threaded: Literal[False] = False,
|
|
1000
1056
|
) -> Iterator[T]:
|
|
1001
1057
|
...
|
|
1002
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
|
|
1003
1068
|
def iter_unique[T](
|
|
1004
1069
|
iterable: AsyncIterable[T],
|
|
1005
1070
|
/,
|
|
1006
1071
|
seen: None | MutableSet = None,
|
|
1007
|
-
|
|
1072
|
+
*,
|
|
1073
|
+
threaded: Literal[False, True] = False,
|
|
1008
1074
|
) -> AsyncIterator[T]:
|
|
1009
1075
|
...
|
|
1010
1076
|
def iter_unique[T](
|
|
1011
1077
|
iterable: Iterable[T] | AsyncIterable[T],
|
|
1012
1078
|
/,
|
|
1013
1079
|
seen: None | MutableSet = None,
|
|
1014
|
-
threaded:
|
|
1080
|
+
threaded: Literal[False, True] = False,
|
|
1015
1081
|
) -> Iterator[T] | AsyncIterator[T]:
|
|
1016
1082
|
"""
|
|
1017
1083
|
"""
|
|
@@ -1051,14 +1117,27 @@ def wrap_iter[T](
|
|
|
1051
1117
|
/,
|
|
1052
1118
|
callprev: None | Callable[[T], Any] = None,
|
|
1053
1119
|
callnext: None | Callable[[T], Any] = None,
|
|
1120
|
+
*,
|
|
1121
|
+
threaded: Literal[False] = False,
|
|
1054
1122
|
) -> Iterator[T]:
|
|
1055
1123
|
...
|
|
1056
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
|
|
1057
1135
|
def wrap_iter[T](
|
|
1058
1136
|
iterable: AsyncIterable[T],
|
|
1059
1137
|
/,
|
|
1060
1138
|
callprev: None | Callable[[T], Any] = None,
|
|
1061
1139
|
callnext: None | Callable[[T], Any] = None,
|
|
1140
|
+
threaded: Literal[False, True] = False,
|
|
1062
1141
|
) -> AsyncIterator[T]:
|
|
1063
1142
|
...
|
|
1064
1143
|
def wrap_iter[T](
|
|
@@ -1066,14 +1145,16 @@ def wrap_iter[T](
|
|
|
1066
1145
|
/,
|
|
1067
1146
|
callprev: None | Callable[[T], Any] = None,
|
|
1068
1147
|
callnext: None | Callable[[T], Any] = None,
|
|
1148
|
+
threaded: bool = False,
|
|
1069
1149
|
) -> Iterator[T] | AsyncIterator[T]:
|
|
1070
1150
|
"""
|
|
1071
1151
|
"""
|
|
1072
|
-
if not isinstance(iterable, Iterable):
|
|
1152
|
+
if threaded or not isinstance(iterable, Iterable):
|
|
1073
1153
|
return wrap_aiter(
|
|
1074
1154
|
iterable,
|
|
1075
1155
|
callprev=callprev,
|
|
1076
1156
|
callnext=callnext,
|
|
1157
|
+
threaded=threaded,
|
|
1077
1158
|
)
|
|
1078
1159
|
if not callable(callprev):
|
|
1079
1160
|
callprev = None
|
|
@@ -1104,6 +1185,55 @@ async def wrap_aiter[T](
|
|
|
1104
1185
|
callnext and await callnext(e)
|
|
1105
1186
|
|
|
1106
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
|
+
|
|
1107
1237
|
def acc_step(
|
|
1108
1238
|
start: int,
|
|
1109
1239
|
stop: None | int = None,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
2
|
+
iterutils/__init__.py,sha256=7bUS_NH2raU-_Cw-pDM224pC7je1kP1K0dnRmO4kHYU,40941
|
|
3
|
+
iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
python_iterutils-0.2.10.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
5
|
+
python_iterutils-0.2.10.dist-info/METADATA,sha256=yA2qW_0Ae5UtLUJp7u1OQzGup4hVpkKYxS4meiD-c8E,1398
|
|
6
|
+
python_iterutils-0.2.10.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
7
|
+
python_iterutils-0.2.10.dist-info/RECORD,,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
2
|
-
iterutils/__init__.py,sha256=8EH6wqHA7ogI_VxHRBb68ZeheD0WOTdYOIbWLtrdqBc,37777
|
|
3
|
-
iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
python_iterutils-0.2.8.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
5
|
-
python_iterutils-0.2.8.dist-info/METADATA,sha256=DF5tmR35s_jxzz46D6P9wmAKOp_GuTJoAAhX8slWSKo,1397
|
|
6
|
-
python_iterutils-0.2.8.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
7
|
-
python_iterutils-0.2.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|