from typing import Callable

from _typeshed import Incomplete

from ._type_def import DT as DT
from .utils._function_builder import FunctionBuilder as FunctionBuilder
from .utils._typing_compat import is_union as is_union

def process_patterned_date_time(func: Callable) -> Callable: ...
def _type_id(t) -> str: ...
def _generic_sig_str(name, args) -> str: ...
def _union_args(x): ...
def _flatten_union_args(args): ...
def _canonical_union_args(args): ...
def setup_recursive_safe_function(func: Callable = ..., *, fn_name: str | None = ..., is_generic: bool = ..., add_cls: bool = ..., prefix: str = ..., per_class_cache: bool = ...) -> Callable: ...
def setup_recursive_safe_function_for_generic(func: Callable = ..., prefix: str = ..., per_class_cache: bool = ...) -> Callable: ...

class cached_class_property:
    __func__: Callable
    __attr_name__: str
    def __init__(self, func) -> None: ...
    def __get__(self, instance, cls: Incomplete | None = ...): ...

class cached_property:
    __func__: Callable
    __attr_name__: str
    def __init__(self, func) -> None: ...
    def __get__(self, instance, cls: Incomplete | None = ...): ...
