From 42f37c0f04f1bb7d3a6c8f9aeeee6b2abe266f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 15:17:39 +0100 Subject: [PATCH 01/10] 5-ary izip --- stdlib/2/itertools.pyi | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index da69d3dfe51b..b35361b8c690 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -71,7 +71,12 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], @overload def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, - _T3, _T4]]: ... # TODO more than four iterables + _T3, _T4]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4], iter5: Iterable[_T5]) + -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... # TODO more than five iterables + def izip_longest(*p: Iterable[Any], fillvalue: Any = ...) -> Iterator[Any]: ... From 536d192897c4b1bac23a06816813069a5106b098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 16:56:55 +0100 Subject: [PATCH 02/10] Update itertools.pyi --- stdlib/2/itertools.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index b35361b8c690..0c602089fb67 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -74,8 +74,8 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], _T3, _T4]]: ... @overload def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], - iter4: Iterable[_T4], iter5: Iterable[_T5]) - -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... # TODO more than five iterables + iter4: Iterable[_T4], iter5: Iterable[_T5]) -> + Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... # TODO more than five iterables def izip_longest(*p: Iterable[Any], fillvalue: Any = ...) -> Iterator[Any]: ... From 8e0d38fd777f88cfe1d69575e6c38ade7feccc88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 17:16:26 +0100 Subject: [PATCH 03/10] Update itertools.pyi --- stdlib/2/itertools.pyi | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index 0c602089fb67..af7a01977257 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -74,8 +74,9 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], _T3, _T4]]: ... @overload def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], - iter4: Iterable[_T4], iter5: Iterable[_T5]) -> - Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... # TODO more than five iterables + iter4: Iterable[_T4], iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, + _T3, _T4, _T5]]: ... +# TODO more than five iterables def izip_longest(*p: Iterable[Any], fillvalue: Any = ...) -> Iterator[Any]: ... From 014a23ae06e45a92ec42f14bb0387c7519b6e77c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 17:29:39 +0100 Subject: [PATCH 04/10] Define _T5 --- stdlib/2/itertools.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index af7a01977257..9d53e890300d 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -47,6 +47,7 @@ _T1 = TypeVar('_T1') _T2 = TypeVar('_T2') _T3 = TypeVar('_T3') _T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') @overload def imap(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> Iterator[_S]: ... From 62efd0520103cf581e99d63720c5366a6268d008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 20:36:50 +0100 Subject: [PATCH 05/10] Add support for 6-ary izip and generic n-ary case Using izip with up to 6 arguments will retain the arguments' type information, using izip with 7 and more arguments will discard type information about the generated tuple items. --- stdlib/2/itertools.pyi | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index 9d53e890300d..3ba389fbb188 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -48,6 +48,7 @@ _T2 = TypeVar('_T2') _T3 = TypeVar('_T3') _T4 = TypeVar('_T4') _T5 = TypeVar('_T5') +_T6 = TypeVar('_T6') @overload def imap(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> Iterator[_S]: ... @@ -74,10 +75,18 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... @overload -def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], - iter4: Iterable[_T4], iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, - _T3, _T4, _T5]]: ... -# TODO more than five iterables +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3], iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, + _T3, _T4, _T5]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3], iter4: Iterable[_T4], + iter5: Iterable[_T5], iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, + _T4, _T5, _T6]]: ... +@overload +def izip(*iter: Iterable) -> Iterator[tuple] +# TODO izip loses type information for 6 arguments and more def izip_longest(*p: Iterable[Any], fillvalue: Any = ...) -> Iterator[Any]: ... From cd949ba2847a39ddf80652875e739b741e6a2f1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 20:45:34 +0100 Subject: [PATCH 06/10] Fix fallback. --- stdlib/2/itertools.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index 3ba389fbb188..1f1a7d050773 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -85,7 +85,7 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter5: Iterable[_T5], iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... @overload -def izip(*iter: Iterable) -> Iterator[tuple] +def izip(*iter: Iterable[Any]) -> Iterator[tuple]: ... # TODO izip loses type information for 6 arguments and more def izip_longest(*p: Iterable[Any], From 4152283115664bad74bdf2483adc7b1fbac7bcf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 21:02:08 +0100 Subject: [PATCH 07/10] Update itertools.pyi --- stdlib/2/itertools.pyi | 1 - 1 file changed, 1 deletion(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index 1f1a7d050773..1e24decf07e9 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -84,7 +84,6 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4], iter5: Iterable[_T5], iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... -@overload def izip(*iter: Iterable[Any]) -> Iterator[tuple]: ... # TODO izip loses type information for 6 arguments and more From 4e62b05e7d9e5d2bfa2d9d73ce547f6f808e6e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 21:12:02 +0100 Subject: [PATCH 08/10] Update itertools.pyi --- stdlib/2/itertools.pyi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index 1e24decf07e9..e2afa4595cb1 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -84,7 +84,8 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4], iter5: Iterable[_T5], iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... -def izip(*iter: Iterable[Any]) -> Iterator[tuple]: ... +@overload +def izip(*iter: Iterable) -> Iterator[tuple]: ... # TODO izip loses type information for 6 arguments and more def izip_longest(*p: Iterable[Any], From 4149a2637bc7eb1aae8d1834c9c8d83d87778867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 21:30:33 +0100 Subject: [PATCH 09/10] Update itertools.pyi --- stdlib/2/itertools.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index e2afa4595cb1..1f1a7d050773 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -85,7 +85,7 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter5: Iterable[_T5], iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... @overload -def izip(*iter: Iterable) -> Iterator[tuple]: ... +def izip(*iter: Iterable[Any]) -> Iterator[tuple]: ... # TODO izip loses type information for 6 arguments and more def izip_longest(*p: Iterable[Any], From b621b2f5ffb1da88b39317c79544eee97bfcc81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Noack?= Date: Mon, 20 Mar 2017 21:38:16 +0100 Subject: [PATCH 10/10] Remove fallback again --- stdlib/2/itertools.pyi | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/stdlib/2/itertools.pyi b/stdlib/2/itertools.pyi index 1f1a7d050773..41d5d4c5ed99 100644 --- a/stdlib/2/itertools.pyi +++ b/stdlib/2/itertools.pyi @@ -84,9 +84,8 @@ def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4], iter5: Iterable[_T5], iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... -@overload -def izip(*iter: Iterable[Any]) -> Iterator[tuple]: ... -# TODO izip loses type information for 6 arguments and more +# TODO more than 6 iterables +# TODO should have a fallback for the n-ary variant def izip_longest(*p: Iterable[Any], fillvalue: Any = ...) -> Iterator[Any]: ...