from typing import Protocol
import types

class _AnyCallable[ReturnT](Protocol):
	def __call__(self, *args: object, **kwargs: object) -> ReturnT: ...

type Signature = _AnyCallable[object]
type SignatureInfo = dict[str, list[Signature]]

cytoolz_info: dict[str, SignatureInfo]
module_info: dict[types.ModuleType | str, SignatureInfo]

def create_signature_registry(module_info: dict[types.ModuleType | str, SignatureInfo]) -> None: ...

def update_signature_registry() -> None: ...

def _is_arity(func: Signature, n: int) -> bool: ...

def _has_varargs(func: Signature) -> bool: ...

def _has_keywords(func: Signature) -> bool: ...

def _num_required_args(func: Signature) -> int: ...

def _is_partial_args(func: Signature, args: tuple[object, ...], kwargs: dict[str, object]) -> bool: ...

def _is_valid_args(func: Signature, args: tuple[object, ...], kwargs: dict[str, object]) -> bool: ...
