Use conditional overloads to simplify several stdlib functions (#7540)

This commit is contained in:
Alex Waygood
2022-03-25 08:47:03 +01:00
committed by GitHub
parent b69d64df60
commit b63c963077
4 changed files with 21 additions and 36 deletions

View File

@@ -1477,16 +1477,14 @@ def sorted(
) -> list[SupportsRichComparisonT]: ...
@overload
def sorted(__iterable: Iterable[_T], *, key: Callable[[_T], SupportsRichComparison], reverse: bool = ...) -> list[_T]: ...
@overload
def sum(__iterable: Iterable[_T]) -> _T | Literal[0]: ...
if sys.version_info >= (3, 8):
@overload
def sum(__iterable: Iterable[_T]) -> _T | Literal[0]: ...
@overload
def sum(__iterable: Iterable[_T], start: _S) -> _T | _S: ...
else:
@overload
def sum(__iterable: Iterable[_T]) -> _T | Literal[0]: ...
@overload
def sum(__iterable: Iterable[_T], __start: _S) -> _T | _S: ...

View File

@@ -65,11 +65,20 @@ def astuple(obj: Any) -> tuple[Any, ...]: ...
@overload
def astuple(obj: Any, *, tuple_factory: Callable[[list[Any]], _T]) -> _T: ...
if sys.version_info >= (3, 10):
if sys.version_info >= (3, 8):
# cls argument is now positional-only
@overload
def dataclass(__cls: type[_T]) -> type[_T]: ...
@overload
def dataclass(__cls: None) -> Callable[[type[_T]], type[_T]]: ...
else:
@overload
def dataclass(_cls: type[_T]) -> type[_T]: ...
@overload
def dataclass(_cls: None) -> Callable[[type[_T]], type[_T]]: ...
if sys.version_info >= (3, 10):
@overload
def dataclass(
*,
@@ -84,22 +93,7 @@ if sys.version_info >= (3, 10):
slots: bool = ...,
) -> Callable[[type[_T]], type[_T]]: ...
elif sys.version_info >= (3, 8):
# cls argument is now positional-only
@overload
def dataclass(__cls: type[_T]) -> type[_T]: ...
@overload
def dataclass(__cls: None) -> Callable[[type[_T]], type[_T]]: ...
@overload
def dataclass(
*, init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., unsafe_hash: bool = ..., frozen: bool = ...
) -> Callable[[type[_T]], type[_T]]: ...
else:
@overload
def dataclass(_cls: type[_T]) -> type[_T]: ...
@overload
def dataclass(_cls: None) -> Callable[[type[_T]], type[_T]]: ...
@overload
def dataclass(
*, init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., unsafe_hash: bool = ..., frozen: bool = ...

View File

@@ -95,11 +95,11 @@ class EnumMeta(ABCMeta):
def __members__(self: type[_EnumMemberT]) -> types.MappingProxyType[str, _EnumMemberT]: ...
def __len__(self) -> int: ...
def __bool__(self) -> Literal[True]: ...
# Simple value lookup
@overload # type: ignore[override]
def __call__(cls: type[_EnumMemberT], value: Any, names: None = ...) -> _EnumMemberT: ...
# Functional Enum API
if sys.version_info >= (3, 11):
# Simple value lookup
@overload # type: ignore[override]
def __call__(cls: type[_EnumMemberT], value: Any, names: None = ...) -> _EnumMemberT: ...
# Functional Enum API
@overload
def __call__(
cls,
@@ -113,8 +113,6 @@ class EnumMeta(ABCMeta):
boundary: FlagBoundary | None = ...,
) -> type[Enum]: ...
else:
@overload # type: ignore[override]
def __call__(cls: type[_EnumMemberT], value: Any, names: None = ...) -> _EnumMemberT: ...
@overload
def __call__(
cls,

View File

@@ -732,20 +732,15 @@ class _ScandirIterator(Iterator[DirEntry[AnyStr]], AbstractContextManager[_Scand
def __exit__(self, *args: object) -> None: ...
def close(self) -> None: ...
@overload
def scandir(path: None = ...) -> _ScandirIterator[str]: ...
if sys.version_info >= (3, 7):
@overload
def scandir(path: None = ...) -> _ScandirIterator[str]: ...
@overload
def scandir(path: int) -> _ScandirIterator[str]: ...
@overload
def scandir(path: AnyStr | PathLike[AnyStr]) -> _ScandirIterator[AnyStr]: ...
else:
@overload
def scandir(path: None = ...) -> _ScandirIterator[str]: ...
@overload
def scandir(path: AnyStr | PathLike[AnyStr]) -> _ScandirIterator[AnyStr]: ...
@overload
def scandir(path: AnyStr | PathLike[AnyStr]) -> _ScandirIterator[AnyStr]: ...
def stat(path: _FdOrAnyPath, *, dir_fd: int | None = ..., follow_symlinks: bool = ...) -> stat_result: ...
if sys.version_info < (3, 7):