From 1350e710cc981a45e9319bd06cefd645dba68064 Mon Sep 17 00:00:00 2001 From: Luciano Ramalho Date: Fri, 19 Jun 2020 07:37:43 -0300 Subject: [PATCH] max, min overloads with Protocol: fix #4051 (#4227) --- stdlib/2/__builtin__.pyi | 24 ++++++++++++++++++------ stdlib/2and3/builtins.pyi | 24 ++++++++++++++++++------ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/stdlib/2/__builtin__.pyi b/stdlib/2/__builtin__.pyi index 5c203e1ec..490c15b14 100644 --- a/stdlib/2/__builtin__.pyi +++ b/stdlib/2/__builtin__.pyi @@ -1356,11 +1356,17 @@ else: *iterables: Iterable[Any]) -> List[_S]: ... if sys.version_info >= (3,): @overload - def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + def max(__arg1: _LT, __arg2: _LT, *_args: _LT, key: None = ...) -> _LT: ... @overload - def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _LT]) -> _T: ... @overload - def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... + def max(__iterable: Iterable[_LT], *, key: None = ...) -> _LT: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], _LT]) -> _T: ... + @overload + def max(__iterable: Iterable[_LT], *, key: None = ..., default: _T) -> Union[_LT, _T]: ... + @overload + def max(__iterable: Iterable[_T1], *, key: Callable[[_T1], _LT], default: _T2) -> Union[_T1, _T2]: ... else: @overload def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... @@ -1368,11 +1374,17 @@ else: def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... if sys.version_info >= (3,): @overload - def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + def min(__arg1: _LT, __arg2: _LT, *_args: _LT, key: None = ...) -> _LT: ... @overload - def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _LT]) -> _T: ... @overload - def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... + def min(__iterable: Iterable[_LT], *, key: None = ...) -> _LT: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], _LT]) -> _T: ... + @overload + def min(__iterable: Iterable[_LT], *, key: None = ..., default: _T) -> Union[_LT, _T]: ... + @overload + def min(__iterable: Iterable[_T1], *, key: Callable[[_T1], _LT], default: _T2) -> Union[_T1, _T2]: ... else: @overload def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... diff --git a/stdlib/2and3/builtins.pyi b/stdlib/2and3/builtins.pyi index 5c203e1ec..490c15b14 100644 --- a/stdlib/2and3/builtins.pyi +++ b/stdlib/2and3/builtins.pyi @@ -1356,11 +1356,17 @@ else: *iterables: Iterable[Any]) -> List[_S]: ... if sys.version_info >= (3,): @overload - def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + def max(__arg1: _LT, __arg2: _LT, *_args: _LT, key: None = ...) -> _LT: ... @overload - def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _LT]) -> _T: ... @overload - def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... + def max(__iterable: Iterable[_LT], *, key: None = ...) -> _LT: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], _LT]) -> _T: ... + @overload + def max(__iterable: Iterable[_LT], *, key: None = ..., default: _T) -> Union[_LT, _T]: ... + @overload + def max(__iterable: Iterable[_T1], *, key: Callable[[_T1], _LT], default: _T2) -> Union[_T1, _T2]: ... else: @overload def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... @@ -1368,11 +1374,17 @@ else: def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... if sys.version_info >= (3,): @overload - def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + def min(__arg1: _LT, __arg2: _LT, *_args: _LT, key: None = ...) -> _LT: ... @overload - def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _LT]) -> _T: ... @overload - def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... + def min(__iterable: Iterable[_LT], *, key: None = ...) -> _LT: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], _LT]) -> _T: ... + @overload + def min(__iterable: Iterable[_LT], *, key: None = ..., default: _T) -> Union[_LT, _T]: ... + @overload + def min(__iterable: Iterable[_T1], *, key: Callable[[_T1], _LT], default: _T2) -> Union[_T1, _T2]: ... else: @overload def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ...