Skip to content

Commit

Permalink
Make overloads in the Python 2 builtins with a 'None' fallback come f…
Browse files Browse the repository at this point in the history
…irst (python#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 python/mypy#5246
  • Loading branch information
Michael0x2a authored and Jiri Suchan committed Jan 23, 2019
1 parent bc79368 commit 93d1516
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 50 deletions.
50 changes: 25 additions & 25 deletions stdlib/2/__builtin__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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: ...
Expand All @@ -756,71 +756,71 @@ 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]: ...
def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ...
@overload
def map(func: Callable[[_T1, _T2], _S],
def map(func: None,
iter1: Iterable[_T1],
iter2: Iterable[_T2]) -> List[_S]: ...
iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ...
@overload
def map(func: Callable[[_T1, _T2, _T3], _S],
def map(func: None,
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3]) -> List[_S]: ...
iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ...
@overload
def map(func: Callable[[_T1, _T2, _T3, _T4], _S],
def map(func: None,
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3],
iter4: Iterable[_T4]) -> List[_S]: ...
iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ...
@overload
def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S],
def map(func: None,
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3],
iter4: Iterable[_T4],
iter5: Iterable[_T5]) -> List[_S]: ...
iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ...
@overload
def map(func: Callable[..., _S],
def map(func: None,
iter1: Iterable[Any],
iter2: Iterable[Any],
iter3: Iterable[Any],
iter4: Iterable[Any],
iter5: Iterable[Any],
iter6: Iterable[Any],
*iterables: Iterable[Any]) -> List[_S]: ...
*iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ...
@overload
def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ...
def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ...
@overload
def map(func: None,
def map(func: Callable[[_T1, _T2], _S],
iter1: Iterable[_T1],
iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ...
iter2: Iterable[_T2]) -> List[_S]: ...
@overload
def map(func: None,
def map(func: Callable[[_T1, _T2, _T3], _S],
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ...
iter3: Iterable[_T3]) -> List[_S]: ...
@overload
def map(func: None,
def map(func: Callable[[_T1, _T2, _T3, _T4], _S],
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3],
iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ...
iter4: Iterable[_T4]) -> List[_S]: ...
@overload
def map(func: None,
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[Tuple[_T1, _T2, _T3, _T4, _T5]]: ...
iter5: Iterable[_T5]) -> List[_S]: ...
@overload
def map(func: None,
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[Tuple[Any, ...]]: ...
*iterables: Iterable[Any]) -> List[_S]: ...
@overload
def max(arg1: _T, arg2: _T, *args: _T, key: Callable[[_T], Any] = ...) -> _T: ...
@overload
Expand Down
50 changes: 25 additions & 25 deletions stdlib/2/builtins.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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: ...
Expand All @@ -756,71 +756,71 @@ 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]: ...
def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ...
@overload
def map(func: Callable[[_T1, _T2], _S],
def map(func: None,
iter1: Iterable[_T1],
iter2: Iterable[_T2]) -> List[_S]: ...
iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ...
@overload
def map(func: Callable[[_T1, _T2, _T3], _S],
def map(func: None,
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3]) -> List[_S]: ...
iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ...
@overload
def map(func: Callable[[_T1, _T2, _T3, _T4], _S],
def map(func: None,
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3],
iter4: Iterable[_T4]) -> List[_S]: ...
iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ...
@overload
def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S],
def map(func: None,
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3],
iter4: Iterable[_T4],
iter5: Iterable[_T5]) -> List[_S]: ...
iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ...
@overload
def map(func: Callable[..., _S],
def map(func: None,
iter1: Iterable[Any],
iter2: Iterable[Any],
iter3: Iterable[Any],
iter4: Iterable[Any],
iter5: Iterable[Any],
iter6: Iterable[Any],
*iterables: Iterable[Any]) -> List[_S]: ...
*iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ...
@overload
def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ...
def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ...
@overload
def map(func: None,
def map(func: Callable[[_T1, _T2], _S],
iter1: Iterable[_T1],
iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ...
iter2: Iterable[_T2]) -> List[_S]: ...
@overload
def map(func: None,
def map(func: Callable[[_T1, _T2, _T3], _S],
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ...
iter3: Iterable[_T3]) -> List[_S]: ...
@overload
def map(func: None,
def map(func: Callable[[_T1, _T2, _T3, _T4], _S],
iter1: Iterable[_T1],
iter2: Iterable[_T2],
iter3: Iterable[_T3],
iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ...
iter4: Iterable[_T4]) -> List[_S]: ...
@overload
def map(func: None,
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[Tuple[_T1, _T2, _T3, _T4, _T5]]: ...
iter5: Iterable[_T5]) -> List[_S]: ...
@overload
def map(func: None,
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[Tuple[Any, ...]]: ...
*iterables: Iterable[Any]) -> List[_S]: ...
@overload
def max(arg1: _T, arg2: _T, *args: _T, key: Callable[[_T], Any] = ...) -> _T: ...
@overload
Expand Down

0 comments on commit 93d1516

Please sign in to comment.