from collections.abc import Callable
from types import coroutine as coroutine
from typing import TypeVar

_T = TypeVar("_T", bound=type)

# All these function actually mutate the given type:
def delegate_to_executor(*attrs: str) -> Callable[[_T], _T]: ...
def proxy_method_directly(*attrs: str) -> Callable[[_T], _T]: ...
def proxy_property_directly(*attrs: str) -> Callable[[_T], _T]: ...
def cond_delegate_to_executor(*attrs: str) -> Callable[[_T], _T]: ...
