RealNumber: TypeAlias = int | float
Number: TypeAlias = RealNumber | complex
SingleVar = TypeVar('SingleVar', bound=Number)
ArrayVar = TypeVar('ArrayVar', bound=Iterable[Number])
Var: TypeAlias = SingleVar | ArrayVar
OneSingleVarFunc: TypeAlias = Callable[[SingleVar], SingleVar]
OneArrayFunc: TypeAlias = Callable[[ArrayVar], ArrayVar]
OneVarFunc: TypeAlias = OneSingleVarFunc | OneArrayFunc
TwoSingleVarsFunc: TypeAlias = Callable[[SingleVar, SingleVar], SingleVar]
TwoArraysFunc: TypeAlias = Callable[[ArrayVar, ArrayVar], ArrayVar]
TwoVarsFunc: TypeAlias = TwoSingleVarsFunc | TwoArraysFunc
ThreeSingleVarsFunc: TypeAlias = Callable[[SingleVar, SingleVar, SingleVar], SingleVar]
ThreeArraysFunc: TypeAlias = Callable[[ArrayVar, ArrayVar, ArrayVar], ArrayVar]
ThreeVarsFunc: TypeAlias = ThreeSingleVarsFunc | ThreeArraysFunc
MultiSingleVarsFunc: TypeAlias = Callable[..., SingleVar]
MultiArraysFunc: TypeAlias = Callable[..., ArrayVar]
MultiVarsFunc: TypeAlias = MultiSingleVarsFunc | MultiArraysFunc