Skip to content
Prev Previous commit
Next Next commit
Use Concatenate
  • Loading branch information
srittau committed Apr 8, 2026
commit 8d46a8598a6c5ea2456ccf5bfbc49ffc4911701e
56 changes: 43 additions & 13 deletions stdlib/functools.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ from _typeshed import SupportsAllComparisons, SupportsItems
from collections.abc import Callable, Hashable, Iterable, Sized
from types import GenericAlias
from typing import Any, Final, Generic, Literal, NamedTuple, TypedDict, TypeVar, final, overload, type_check_only
from typing_extensions import ParamSpec, Self, TypeAlias, disjoint_base
from typing_extensions import Concatenate, ParamSpec, Self, TypeAlias, disjoint_base

__all__ = [
"update_wrapper",
Expand Down Expand Up @@ -197,37 +197,67 @@ else:

@type_check_only
class _SingleDispatchCallable(Generic[_P, _T]):
registry: types.MappingProxyType[Any, Callable[_P, _T]]
def dispatch(self, cls: Any) -> Callable[_P, _T]: ...
# First argument pf the callables in the registry is the type to dispatch on.
registry: types.MappingProxyType[Any, Callable[Concatenate[Any, _P], _T]]
def dispatch(self, cls: type[_S]) -> Callable[Concatenate[_S, _P], _T]: ...
if sys.version_info >= (3, 11):
# @fun.register(complex | str)
# def _(arg, verbose=False): ...
@overload
def register(
self, cls: types.UnionType, func: None = None
) -> Callable[[Callable[Concatenate[_S, _P], _T]], Callable[Concatenate[_S, _P], _T]]: ...
# @fun.register(complex)
# def _(arg, verbose=False): ...
@overload
def register(self, cls: _RegType, func: None = None) -> Callable[[Callable[_P, _T]], Callable[_P, _T]]: ...
def register(
self, cls: type[_S], func: None = None
) -> Callable[[Callable[Concatenate[_S, _P], _T]], Callable[Concatenate[_S, _P], _T]]: ...
# @fun.register
# def _(arg: int, verbose=False):
@overload
def register(self, cls: Callable[_P, _T], func: None = None) -> Callable[_P, _T]: ...
def register(self, cls: Callable[Concatenate[_S, _P], _T], func: None = None) -> Callable[Concatenate[_S, _P], _T]: ...
if sys.version_info >= (3, 11):
# fun.register(int, lambda x: x)
@overload
def register(
self, cls: types.UnionType, func: Callable[Concatenate[_S, _P], _T]
) -> Callable[Concatenate[_S, _P], _T]: ...
# fun.register(int, lambda x: x)
@overload
def register(self, cls: _RegType, func: Callable[_P, _T]) -> Callable[_P, _T]: ...
def register(self, cls: _RegType, func: Callable[Concatenate[_S, _P], _T]) -> Callable[Concatenate[_S, _P], _T]: ...
def _clear_cache(self) -> None: ...
def __call__(self, /, *args: _P.args, **kwargs: _P.kwargs) -> _T: ...
def __call__(self, arg: object, /, *args: _P.args, **kwargs: _P.kwargs) -> _T: ...

def singledispatch(func: Callable[_P, _T]) -> _SingleDispatchCallable[_P, _T]: ...
def singledispatch(func: Callable[Concatenate[object, _P], _T]) -> _SingleDispatchCallable[_P, _T]: ...

class singledispatchmethod(Generic[_P, _T]):
dispatcher: _SingleDispatchCallable[_P, _T]
func: Callable[_P, _T]
def __init__(self, func: Callable[_P, _T]) -> None: ...
def __init__(self, func: Callable[Concatenate[object, _P], _T]) -> None: ...
@property
def __isabstractmethod__(self) -> bool: ...
if sys.version_info >= (3, 11):
@overload
def register(
self, cls: types.UnionType, method: None = None
) -> Callable[[Callable[Concatenate[_S, _P], _T]], Callable[Concatenate[_S, _P], _T]]: ...

@overload
def register(self, cls: _RegType, method: None = None) -> Callable[[Callable[_P, _T]], Callable[_P, _T]]: ...
def register(
self, cls: type[_S], method: None = None
) -> Callable[[Callable[Concatenate[_S, _P], _T]], Callable[Concatenate[_S, _P], _T]]: ...
@overload
def register(self, cls: Callable[_P, _T], method: None = None) -> Callable[_P, _T]: ...
def register(self, cls: Callable[Concatenate[_S, _P], _T], method: None = None) -> Callable[Concatenate[_S, _P], _T]: ...
if sys.version_info >= (3, 11):
@overload
def register(
self, cls: types.UnionType, method: Callable[Concatenate[_S, _P], _T]
) -> Callable[Concatenate[_S, _P], _T]: ...

@overload
def register(self, cls: _RegType, method: Callable[_P, _T]) -> Callable[_P, _T]: ...
def __get__(self, obj: _S, cls: type[_S] | None = None) -> Callable[_P, _T]: ...
def register(self, cls: type[_S], method: Callable[Concatenate[_S, _P], _T]) -> Callable[Concatenate[_S, _P], _T]: ...
def __get__(self, obj: _S, cls: type[_S] | None = None) -> Callable[Concatenate[_S, _P], _T]: ...

class cached_property(Generic[_T_co]):
func: Callable[[Any], _T_co]
Expand Down
Loading