From ed956686383cd547bf9033087d87518f7b84e226 Mon Sep 17 00:00:00 2001 From: Shantanu Date: Fri, 24 Jan 2020 00:20:46 -0800 Subject: [PATCH] builtins.pow: improve annotation (#3647) --- stdlib/2/__builtin__.pyi | 22 ++++++++++++++-------- stdlib/2and3/builtins.pyi | 22 ++++++++++++++-------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/stdlib/2/__builtin__.pyi b/stdlib/2/__builtin__.pyi index 7254b719c6bc..63b3b04d1a77 100644 --- a/stdlib/2/__builtin__.pyi +++ b/stdlib/2/__builtin__.pyi @@ -1370,14 +1370,20 @@ else: # This is only available after from __future__ import print_function. def print(*values: object, sep: Optional[Text] = ..., end: Optional[Text] = ..., file: Optional[_Writer] = ...) -> None: ... -@overload -def pow(__x: int, __y: int) -> Any: ... # The return type can be int or float, depending on y -@overload -def pow(__x: int, __y: int, __z: int) -> Any: ... -@overload -def pow(__x: float, __y: float) -> float: ... -@overload -def pow(__x: float, __y: float, __z: float) -> float: ... +if sys.version_info >= (3, 8): + @overload + def pow(base: int, exp: int, mod: None = ...) -> Any: ... # returns int or float depending on whether exp is non-negative + @overload + def pow(base: int, exp: int, mod: int) -> int: ... + @overload + def pow(base: float, exp: float, mod: None = ...) -> float: ... +else: + @overload + def pow(__base: int, __exp: int, __mod: None = ...) -> Any: ... # returns int or float depending on whether exp is non-negative + @overload + def pow(__base: int, __exp: int, __mod: int) -> int: ... + @overload + def pow(__base: float, __exp: float, __mod: None = ...) -> float: ... def quit(code: object = ...) -> NoReturn: ... if sys.version_info < (3,): def range(__x: int, __y: int = ..., __step: int = ...) -> List[int]: ... diff --git a/stdlib/2and3/builtins.pyi b/stdlib/2and3/builtins.pyi index 7254b719c6bc..63b3b04d1a77 100644 --- a/stdlib/2and3/builtins.pyi +++ b/stdlib/2and3/builtins.pyi @@ -1370,14 +1370,20 @@ else: # This is only available after from __future__ import print_function. def print(*values: object, sep: Optional[Text] = ..., end: Optional[Text] = ..., file: Optional[_Writer] = ...) -> None: ... -@overload -def pow(__x: int, __y: int) -> Any: ... # The return type can be int or float, depending on y -@overload -def pow(__x: int, __y: int, __z: int) -> Any: ... -@overload -def pow(__x: float, __y: float) -> float: ... -@overload -def pow(__x: float, __y: float, __z: float) -> float: ... +if sys.version_info >= (3, 8): + @overload + def pow(base: int, exp: int, mod: None = ...) -> Any: ... # returns int or float depending on whether exp is non-negative + @overload + def pow(base: int, exp: int, mod: int) -> int: ... + @overload + def pow(base: float, exp: float, mod: None = ...) -> float: ... +else: + @overload + def pow(__base: int, __exp: int, __mod: None = ...) -> Any: ... # returns int or float depending on whether exp is non-negative + @overload + def pow(__base: int, __exp: int, __mod: int) -> int: ... + @overload + def pow(__base: float, __exp: float, __mod: None = ...) -> float: ... def quit(code: object = ...) -> NoReturn: ... if sys.version_info < (3,): def range(__x: int, __y: int = ..., __step: int = ...) -> List[int]: ...