From fb92ee84c5deccb48bde1af0d8b5d0a6fa3767e6 Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Wed, 20 Jun 2018 08:26:06 -0700 Subject: [PATCH] Make overloads in the Python 2 builtins with a 'None' fallback come first (#2261) In short, this change makes sure calls like `map(None, a, b)` behave as expected when using `--no-strict-optional` is enabled. For additional context, see https://github.com/python/mypy/issues/5246 --- stdlib/2/__builtin__.pyi | 72 ++++++++++++++++++++-------------------- stdlib/2/builtins.pyi | 72 ++++++++++++++++++++-------------------- 2 files changed, 72 insertions(+), 72 deletions(-) diff --git a/stdlib/2/__builtin__.pyi b/stdlib/2/__builtin__.pyi index ca6f15c84..ffb8f14b8 100644 --- a/stdlib/2/__builtin__.pyi +++ b/stdlib/2/__builtin__.pyi @@ -735,11 +735,11 @@ def divmod(a: int, b: int) -> Tuple[int, int]: ... def divmod(a: float, b: float) -> Tuple[float, float]: ... def exit(code: Any = ...) -> NoReturn: ... @overload -def filter(function: Callable[[_T], Any], - iterable: Iterable[_T]) -> List[_T]: ... -@overload def filter(function: None, iterable: Iterable[Optional[_T]]) -> List[_T]: ... +@overload +def filter(function: Callable[[_T], Any], + iterable: Iterable[_T]) -> List[_T]: ... def format(o: object, format_spec: str = ...) -> str: ... # TODO unicode def getattr(o: Any, name: unicode, default: Optional[Any] = ...) -> Any: ... def hasattr(o: Any, name: unicode) -> bool: ... @@ -756,39 +756,6 @@ def isinstance(o: object, t: Union[type, Tuple[Union[type, Tuple], ...]]) -> boo def issubclass(cls: type, classinfo: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... def len(o: Sized) -> int: ... @overload -def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ... -@overload -def map(func: Callable[[_T1, _T2], _S], - iter1: Iterable[_T1], - iter2: Iterable[_T2]) -> List[_S]: ... -@overload -def map(func: Callable[[_T1, _T2, _T3], _S], - iter1: Iterable[_T1], - iter2: Iterable[_T2], - iter3: Iterable[_T3]) -> List[_S]: ... -@overload -def map(func: Callable[[_T1, _T2, _T3, _T4], _S], - iter1: Iterable[_T1], - iter2: Iterable[_T2], - iter3: Iterable[_T3], - iter4: Iterable[_T4]) -> List[_S]: ... -@overload -def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], - iter1: Iterable[_T1], - iter2: Iterable[_T2], - iter3: Iterable[_T3], - iter4: Iterable[_T4], - iter5: Iterable[_T5]) -> List[_S]: ... -@overload -def map(func: Callable[..., _S], - iter1: Iterable[Any], - iter2: Iterable[Any], - iter3: Iterable[Any], - iter4: Iterable[Any], - iter5: Iterable[Any], - iter6: Iterable[Any], - *iterables: Iterable[Any]) -> List[_S]: ... -@overload def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ... @overload def map(func: None, @@ -822,6 +789,39 @@ def map(func: None, iter6: Iterable[Any], *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... @overload +def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ... +@overload +def map(func: Callable[[_T1, _T2], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> List[_S]: ... +@overload +def map(func: Callable[[_T1, _T2, _T3], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> List[_S]: ... +@overload +def map(func: Callable[[_T1, _T2, _T3, _T4], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> List[_S]: ... +@overload +def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> List[_S]: ... +@overload +def map(func: Callable[..., _S], + iter1: Iterable[Any], + iter2: Iterable[Any], + iter3: Iterable[Any], + iter4: Iterable[Any], + iter5: Iterable[Any], + iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[_S]: ... +@overload def max(arg1: _T, arg2: _T, *args: _T, key: Callable[[_T], Any] = ...) -> _T: ... @overload def max(iterable: Iterable[_T], key: Callable[[_T], Any] = ...) -> _T: ... diff --git a/stdlib/2/builtins.pyi b/stdlib/2/builtins.pyi index ca6f15c84..ffb8f14b8 100644 --- a/stdlib/2/builtins.pyi +++ b/stdlib/2/builtins.pyi @@ -735,11 +735,11 @@ def divmod(a: int, b: int) -> Tuple[int, int]: ... def divmod(a: float, b: float) -> Tuple[float, float]: ... def exit(code: Any = ...) -> NoReturn: ... @overload -def filter(function: Callable[[_T], Any], - iterable: Iterable[_T]) -> List[_T]: ... -@overload def filter(function: None, iterable: Iterable[Optional[_T]]) -> List[_T]: ... +@overload +def filter(function: Callable[[_T], Any], + iterable: Iterable[_T]) -> List[_T]: ... def format(o: object, format_spec: str = ...) -> str: ... # TODO unicode def getattr(o: Any, name: unicode, default: Optional[Any] = ...) -> Any: ... def hasattr(o: Any, name: unicode) -> bool: ... @@ -756,39 +756,6 @@ def isinstance(o: object, t: Union[type, Tuple[Union[type, Tuple], ...]]) -> boo def issubclass(cls: type, classinfo: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... def len(o: Sized) -> int: ... @overload -def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ... -@overload -def map(func: Callable[[_T1, _T2], _S], - iter1: Iterable[_T1], - iter2: Iterable[_T2]) -> List[_S]: ... -@overload -def map(func: Callable[[_T1, _T2, _T3], _S], - iter1: Iterable[_T1], - iter2: Iterable[_T2], - iter3: Iterable[_T3]) -> List[_S]: ... -@overload -def map(func: Callable[[_T1, _T2, _T3, _T4], _S], - iter1: Iterable[_T1], - iter2: Iterable[_T2], - iter3: Iterable[_T3], - iter4: Iterable[_T4]) -> List[_S]: ... -@overload -def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], - iter1: Iterable[_T1], - iter2: Iterable[_T2], - iter3: Iterable[_T3], - iter4: Iterable[_T4], - iter5: Iterable[_T5]) -> List[_S]: ... -@overload -def map(func: Callable[..., _S], - iter1: Iterable[Any], - iter2: Iterable[Any], - iter3: Iterable[Any], - iter4: Iterable[Any], - iter5: Iterable[Any], - iter6: Iterable[Any], - *iterables: Iterable[Any]) -> List[_S]: ... -@overload def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ... @overload def map(func: None, @@ -822,6 +789,39 @@ def map(func: None, iter6: Iterable[Any], *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... @overload +def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ... +@overload +def map(func: Callable[[_T1, _T2], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> List[_S]: ... +@overload +def map(func: Callable[[_T1, _T2, _T3], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> List[_S]: ... +@overload +def map(func: Callable[[_T1, _T2, _T3, _T4], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> List[_S]: ... +@overload +def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> List[_S]: ... +@overload +def map(func: Callable[..., _S], + iter1: Iterable[Any], + iter2: Iterable[Any], + iter3: Iterable[Any], + iter4: Iterable[Any], + iter5: Iterable[Any], + iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[_S]: ... +@overload def max(arg1: _T, arg2: _T, *args: _T, key: Callable[[_T], Any] = ...) -> _T: ... @overload def max(iterable: Iterable[_T], key: Callable[[_T], Any] = ...) -> _T: ...