Skip to content

Commit e857ad6

Browse files
authored
zip: add some overloads for heterogeneous tuples (#3830)
Technically this is a lie, since we return a heterogeneous iterator, not a tuple. But since we don't have a way of typing heterogeneous iterators, this is the best we can do. Fixes python/mypy#8454
1 parent 3dfc606 commit e857ad6

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

stdlib/2/__builtin__.pyi

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,6 +1444,16 @@ if sys.version_info < (3,):
14441444
def unichr(__i: int) -> unicode: ...
14451445
def vars(__object: Any = ...) -> Dict[str, Any]: ...
14461446
if sys.version_info >= (3,):
1447+
# Some overloads to better support zipping heterogeneous tuples
1448+
@overload
1449+
def zip(*iterables: Tuple[_T1, _T2]) -> Tuple[Tuple[_T1, ...], Tuple[_T2, ...]]: ... # type: ignore
1450+
@overload
1451+
def zip(*iterables: Tuple[_T1, _T2, _T3]) -> Tuple[Tuple[_T1, ...], Tuple[_T2, ...], Tuple[_T3, ...]]: ... # type: ignore
1452+
@overload
1453+
def zip(*iterables: Tuple[_T1, _T2, _T3, _T4]) -> Tuple[Tuple[_T1, ...], Tuple[_T2, ...], Tuple[_T3, ...], Tuple[_T4, ...]]: ... # type: ignore
1454+
@overload
1455+
def zip(*iterables: Tuple[_T1, _T2, _T3, _T4, _T5]) -> Tuple[Tuple[_T1, ...], Tuple[_T2, ...], Tuple[_T3, ...], Tuple[_T4, ...], Tuple[_T5, ...]]: ... # type: ignore
1456+
14471457
@overload
14481458
def zip(__iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ...
14491459
@overload

stdlib/2and3/builtins.pyi

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,6 +1444,16 @@ if sys.version_info < (3,):
14441444
def unichr(__i: int) -> unicode: ...
14451445
def vars(__object: Any = ...) -> Dict[str, Any]: ...
14461446
if sys.version_info >= (3,):
1447+
# Some overloads to better support zipping heterogeneous tuples
1448+
@overload
1449+
def zip(*iterables: Tuple[_T1, _T2]) -> Tuple[Tuple[_T1, ...], Tuple[_T2, ...]]: ... # type: ignore
1450+
@overload
1451+
def zip(*iterables: Tuple[_T1, _T2, _T3]) -> Tuple[Tuple[_T1, ...], Tuple[_T2, ...], Tuple[_T3, ...]]: ... # type: ignore
1452+
@overload
1453+
def zip(*iterables: Tuple[_T1, _T2, _T3, _T4]) -> Tuple[Tuple[_T1, ...], Tuple[_T2, ...], Tuple[_T3, ...], Tuple[_T4, ...]]: ... # type: ignore
1454+
@overload
1455+
def zip(*iterables: Tuple[_T1, _T2, _T3, _T4, _T5]) -> Tuple[Tuple[_T1, ...], Tuple[_T2, ...], Tuple[_T3, ...], Tuple[_T4, ...], Tuple[_T5, ...]]: ... # type: ignore
1456+
14471457
@overload
14481458
def zip(__iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ...
14491459
@overload

0 commit comments

Comments
 (0)