from types import ModuleType
from typing import Any, Callable, Sequence, Tuple

from _typeshed import Incomplete

class AUTO_TOPIC: ...

UserListener = Callable[..., Any]

def getModule(obj: Any) -> ModuleType: ...
def getID(callable_obj: UserListener) -> Tuple[str, ModuleType]: ...
def getRawFunction(callable_obj: UserListener) -> Tuple[Callable[..., Any]]: ...

class ListenerMismatchError(ValueError):
    args: Incomplete
    msg: Incomplete
    module: Incomplete
    idStr: Incomplete
    def __init__(self, msg: str, listener: UserListener, *args: Any) -> None: ...

class CallArgsInfo:
    autoTopicArgName: Incomplete
    acceptsAllKwargs: bool
    requiredArgs: Incomplete
    optionalArgs: Incomplete
    allParams: Incomplete
    def __init__(self, func: UserListener, ignoreArgs: Sequence[str] = ...) -> None: ...
    def getAllArgs(self) -> Tuple[str]: ...
    def getOptionalArgs(self) -> Tuple[str]: ...
    def getRequiredArgs(self) -> Tuple[str]: ...

def getArgs(
    callable_obj: UserListener, ignoreArgs: Sequence[str] = ...
) -> CallArgsInfo: ...
