from typing import Any, Callable, Iterable, Literal, Sequence, overload class EnumType(type): def __init__( self, name: str, bases: tuple[type, ...], attrs: dict[str, Any], items: Iterable[tuple[str, Any, str | None, bool]], ) -> None: ... def _create( self, name: str, value: int, doc: str | None = None, by_value_only: bool = False ) -> None: ... def __len__(self) -> None: ... def __iter__(self) -> None: ... def __getitem__(self, key: str | int | EnumType) -> None: ... def _get(self, value: int, create: bool = False) -> None: ... def _get_multi_flags(self, value: int) -> None: ... def get( self, key: str | int | EnumType, default: int | None = None, create: bool = False, ) -> int | None: ... class EnumItem: name: str value: int def __int__(self) -> int: ... def __hash__(self) -> int: ... def __reduce__( self, ) -> tuple[Callable[[str, str, str], EnumItem], tuple[str, str, str]]: ... def __eq__(self, other: object) -> bool: ... def __ne__(self, other: object) -> bool: ... class EnumFlag(EnumItem): flags: tuple[EnumFlag] def __and__(self, other: object) -> EnumFlag: ... def __or__(self, other: object) -> EnumFlag: ... def __xor__(self, other: object) -> EnumFlag: ... def __invert__(self) -> bool: ... def __nonzero__(self) -> bool: ... @overload def define_enum( name: str, module: str, items: Sequence[tuple[str, int] | None], is_flags: Literal[True], ) -> EnumFlag: ... @overload def define_enum( name: str, module: str, items: Sequence[tuple[str, int] | None], is_flags: Literal[False], ) -> EnumItem: ... @overload def define_enum( name: str, module: str, items: Sequence[tuple[str, int] | None], is_flags: bool = False, ) -> EnumItem | EnumFlag: ...