from types import ModuleType
from typing import Any, Optional

__module__ = __name__

def try_import(module: Any, default: Optional[Any] = ...): ...

class Proxy:
    def __init__(self, local: Any, args: Optional[Any] = ..., kwargs: Optional[Any] = ..., name: Optional[Any] = ..., __doc__: Optional[Any] = ...) -> None: ...
    def __name__(self): ...
    def __qualname__(self): ...
    def __module__(self): ...
    def __doc__(self): ...
    @property
    def __class__(self): ...
    @property
    def __dict__(self): ...
    def __bool__(self): ...
    __nonzero__: Any = ...
    def __dir__(self): ...
    def __getattr__(self, name: Any): ...
    def __setitem__(self, key: Any, value: Any) -> None: ...
    def __delitem__(self, key: Any) -> None: ...
    def __setslice__(self, i: Any, j: Any, seq: Any) -> None: ...
    def __delslice__(self, i: Any, j: Any) -> None: ...
    def __setattr__(self, name: Any, value: Any) -> None: ...
    def __delattr__(self, name: Any) -> None: ...
    def __lt__(self, other: Any) -> Any: ...
    def __le__(self, other: Any) -> Any: ...
    def __eq__(self, other: Any) -> Any: ...
    def __ne__(self, other: Any) -> Any: ...
    def __gt__(self, other: Any) -> Any: ...
    def __ge__(self, other: Any) -> Any: ...
    def __hash__(self) -> Any: ...
    def __call__(self, *a: Any, **kw: Any): ...
    def __len__(self): ...
    def __getitem__(self, i: Any): ...
    def __iter__(self) -> Any: ...
    def __contains__(self, i: Any): ...
    def __getslice__(self, i: Any, j: Any): ...
    def __add__(self, other: Any): ...
    def __sub__(self, other: Any): ...
    def __mul__(self, other: Any): ...
    def __floordiv__(self, other: Any): ...
    def __mod__(self, other: Any): ...
    def __divmod__(self, other: Any): ...
    def __pow__(self, other: Any): ...
    def __lshift__(self, other: Any): ...
    def __rshift__(self, other: Any): ...
    def __and__(self, other: Any): ...
    def __xor__(self, other: Any): ...
    def __or__(self, other: Any): ...
    def __div__(self, other: Any): ...
    def __truediv__(self, other: Any): ...
    def __neg__(self): ...
    def __pos__(self): ...
    def __abs__(self): ...
    def __invert__(self): ...
    def __complex__(self): ...
    def __int__(self): ...
    def __float__(self): ...
    def __oct__(self): ...
    def __hex__(self): ...
    def __index__(self): ...
    def __coerce__(self, other: Any): ...
    def __enter__(self): ...
    def __exit__(self, *a: Any, **kw: Any): ...
    def __reduce__(self): ...

class PromiseProxy(Proxy):
    def __then__(self, fun: Any, *args: Any, **kwargs: Any): ...
    def __evaluated__(self): ...
    def __maybe_evaluate__(self): ...
    def __evaluate__(self, _clean: Any = ...): ...

def maybe_evaluate(obj: Any): ...

class class_property:
    __doc__: Any = ...
    __name__: Any = ...
    __module__: Any = ...
    def __init__(self, getter: Optional[Any] = ..., setter: Optional[Any] = ...) -> None: ...
    def __get__(self, obj: Any, type: Optional[Any] = ...): ...
    def __set__(self, obj: Any, value: Any): ...
    def setter(self, setter: Any): ...

class LazyModule(ModuleType):
    def __getattr__(self, name: Any): ...
    def __dir__(self): ...
    def __reduce__(self): ...
