# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/00_type.ipynb.

# %% auto 0
__all__ = ['T', 'P', 'Types', 'TypeLike', 'Guard', 'GuardFunc', 'StrFactory', 'StrBool']

# %% ../nbs/00_type.ipynb 6
import os, inspect
from functools import wraps

# %% ../nbs/00_type.ipynb 8
from typing import (Tuple, Union, Callable, Type, TypeVar, TypeAlias, TypeGuard,  ParamSpec,)

# %% ../nbs/00_type.ipynb 10
#| export


# %% ../nbs/00_type.ipynb 12
#| export


# %% ../nbs/00_type.ipynb 14
#| export


# %% ../nbs/00_type.ipynb 16
T = TypeVar('T')
P = ParamSpec('P')

Types: TypeAlias = Tuple[Type, ...]
'''`*args` type''';

TypeLike: TypeAlias = Union[type, Type, Type[T], TypeAlias]
'''type, Type, type of type, TypeAlias, or `*args` type''';

Guard: TypeAlias = TypeGuard[TypeLike]
'''Generic TypeGuard''';

GuardFunc: TypeAlias = Callable[P, Guard]
'''Generic TypeGuard function''';

StrFactory: TypeAlias = Callable[[Types], str]
'''Generic string factory that takes any number of types and returns a string describing it''';

StrBool: TypeAlias = Union[str, bool]
