#
# Autogenerated by Thrift for thrift/compiler/test/fixtures/constants/src/module.thrift
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#  @generated
#

import enum as _python_std_enum
import folly.iobuf as _fbthrift_iobuf
import thrift.py3.types
import thrift.python.types
import thrift.py3.exceptions
import typing as _typing

import sys
import itertools


class EmptyEnum(thrift.python.types.Enum):
    def _to_python(self) -> "module.thrift_types.EmptyEnum": ...   # type: ignore
    def _to_py3(self) -> EmptyEnum: ...
    def _to_py_deprecated(self) -> int: ...
    def __int__(self) -> int: ...
    def __index__(self) -> int: ...


class City(thrift.python.types.Enum):
    NYC: City = ...
    MPK: City = ...
    SEA: City = ...
    LON: City = ...
    def _to_python(self) -> "module.thrift_types.City": ...   # type: ignore
    def _to_py3(self) -> City: ...
    def _to_py_deprecated(self) -> int: ...
    def __int__(self) -> int: ...
    def __index__(self) -> int: ...


class Company(thrift.python.types.Enum):
    FACEBOOK: Company = ...
    WHATSAPP: Company = ...
    OCULUS: Company = ...
    INSTAGRAM: Company = ...
    def _to_python(self) -> "module.thrift_types.Company": ...   # type: ignore
    def _to_py3(self) -> Company: ...
    def _to_py_deprecated(self) -> int: ...
    def __int__(self) -> int: ...
    def __index__(self) -> int: ...


class Internship(thrift.py3.types.Struct, _typing.Hashable):
    class __fbthrift_IsSet:
        weeks: bool
        title: bool
        employer: bool
        compensation: bool
        school: bool
        pass

    weeks: _typing.Final[int] = ...
    title: _typing.Final[str] = ...
    employer: _typing.Final[_typing.Optional[Company]] = ...
    compensation: _typing.Final[_typing.Optional[float]] = ...
    school: _typing.Final[_typing.Optional[str]] = ...

    def __init__(
        self, *,
        weeks: _typing.Optional[int]=None,
        title: _typing.Optional[str]=None,
        employer: _typing.Optional[Company]=None,
        compensation: _typing.Optional[float]=None,
        school: _typing.Optional[str]=None
    ) -> None: ...

    def __call__(
        self, *,
        weeks: _typing.Union[int, None]=None,
        title: _typing.Union[str, None]=None,
        employer: _typing.Union[Company, None]=None,
        compensation: _typing.Union[float, None]=None,
        school: _typing.Union[str, None]=None
    ) -> Internship: ...

    def __reduce__(self) -> _typing.Tuple[_typing.Callable, _typing.Tuple[_typing.Type['Internship'], bytes]]: ...
    def __hash__(self) -> int: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __lt__(self, other: 'Internship') -> bool: ...
    def __gt__(self, other: 'Internship') -> bool: ...
    def __le__(self, other: 'Internship') -> bool: ...
    def __ge__(self, other: 'Internship') -> bool: ...

    def _to_python(self) -> "module.thrift_types.Internship": ...   # type: ignore
    def _to_py3(self) -> Internship: ...
    def _to_py_deprecated(self) -> "module.ttypes.Internship": ...   # type: ignore

class Range(thrift.py3.types.Struct, _typing.Hashable):
    class __fbthrift_IsSet:
        min: bool
        max: bool
        pass

    min: _typing.Final[int] = ...
    max: _typing.Final[int] = ...

    def __init__(
        self, *,
        min: _typing.Optional[int]=None,
        max: _typing.Optional[int]=None
    ) -> None: ...

    def __call__(
        self, *,
        min: _typing.Union[int, None]=None,
        max: _typing.Union[int, None]=None
    ) -> Range: ...

    def __reduce__(self) -> _typing.Tuple[_typing.Callable, _typing.Tuple[_typing.Type['Range'], bytes]]: ...
    def __hash__(self) -> int: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __lt__(self, other: 'Range') -> bool: ...
    def __gt__(self, other: 'Range') -> bool: ...
    def __le__(self, other: 'Range') -> bool: ...
    def __ge__(self, other: 'Range') -> bool: ...

    def _to_python(self) -> "module.thrift_types.Range": ...   # type: ignore
    def _to_py3(self) -> Range: ...
    def _to_py_deprecated(self) -> "module.ttypes.Range": ...   # type: ignore

class struct1(thrift.py3.types.Struct, _typing.Hashable):
    class __fbthrift_IsSet:
        a: bool
        b: bool
        pass

    a: _typing.Final[int] = ...
    b: _typing.Final[str] = ...

    def __init__(
        self, *,
        a: _typing.Optional[int]=None,
        b: _typing.Optional[str]=None
    ) -> None: ...

    def __call__(
        self, *,
        a: _typing.Union[int, None]=None,
        b: _typing.Union[str, None]=None
    ) -> struct1: ...

    def __reduce__(self) -> _typing.Tuple[_typing.Callable, _typing.Tuple[_typing.Type['struct1'], bytes]]: ...
    def __hash__(self) -> int: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __lt__(self, other: 'struct1') -> bool: ...
    def __gt__(self, other: 'struct1') -> bool: ...
    def __le__(self, other: 'struct1') -> bool: ...
    def __ge__(self, other: 'struct1') -> bool: ...

    def _to_python(self) -> "module.thrift_types.struct1": ...   # type: ignore
    def _to_py3(self) -> struct1: ...
    def _to_py_deprecated(self) -> "module.ttypes.struct1": ...   # type: ignore

class struct2(thrift.py3.types.Struct, _typing.Hashable):
    class __fbthrift_IsSet:
        a: bool
        b: bool
        c: bool
        d: bool
        pass

    a: _typing.Final[int] = ...
    b: _typing.Final[str] = ...
    c: _typing.Final[struct1] = ...
    d: _typing.Final[_typing.Sequence[int]] = ...

    def __init__(
        self, *,
        a: _typing.Optional[int]=None,
        b: _typing.Optional[str]=None,
        c: _typing.Optional[struct1]=None,
        d: _typing.Optional[_typing.Sequence[int]]=None
    ) -> None: ...

    def __call__(
        self, *,
        a: _typing.Union[int, None]=None,
        b: _typing.Union[str, None]=None,
        c: _typing.Union[struct1, None]=None,
        d: _typing.Union[_typing.Sequence[int], None]=None
    ) -> struct2: ...

    def __reduce__(self) -> _typing.Tuple[_typing.Callable, _typing.Tuple[_typing.Type['struct2'], bytes]]: ...
    def __hash__(self) -> int: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __lt__(self, other: 'struct2') -> bool: ...
    def __gt__(self, other: 'struct2') -> bool: ...
    def __le__(self, other: 'struct2') -> bool: ...
    def __ge__(self, other: 'struct2') -> bool: ...

    def _to_python(self) -> "module.thrift_types.struct2": ...   # type: ignore
    def _to_py3(self) -> struct2: ...
    def _to_py_deprecated(self) -> "module.ttypes.struct2": ...   # type: ignore

class struct3(thrift.py3.types.Struct, _typing.Hashable):
    class __fbthrift_IsSet:
        a: bool
        b: bool
        c: bool
        pass

    a: _typing.Final[str] = ...
    b: _typing.Final[int] = ...
    c: _typing.Final[struct2] = ...

    def __init__(
        self, *,
        a: _typing.Optional[str]=None,
        b: _typing.Optional[int]=None,
        c: _typing.Optional[struct2]=None
    ) -> None: ...

    def __call__(
        self, *,
        a: _typing.Union[str, None]=None,
        b: _typing.Union[int, None]=None,
        c: _typing.Union[struct2, None]=None
    ) -> struct3: ...

    def __reduce__(self) -> _typing.Tuple[_typing.Callable, _typing.Tuple[_typing.Type['struct3'], bytes]]: ...
    def __hash__(self) -> int: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __lt__(self, other: 'struct3') -> bool: ...
    def __gt__(self, other: 'struct3') -> bool: ...
    def __le__(self, other: 'struct3') -> bool: ...
    def __ge__(self, other: 'struct3') -> bool: ...

    def _to_python(self) -> "module.thrift_types.struct3": ...   # type: ignore
    def _to_py3(self) -> struct3: ...
    def _to_py_deprecated(self) -> "module.ttypes.struct3": ...   # type: ignore

class struct4(thrift.py3.types.Struct, _typing.Hashable):
    class __fbthrift_IsSet:
        a: bool
        b: bool
        c: bool
        pass

    a: _typing.Final[int] = ...
    b: _typing.Final[_typing.Optional[float]] = ...
    c: _typing.Final[_typing.Optional[int]] = ...

    def __init__(
        self, *,
        a: _typing.Optional[int]=None,
        b: _typing.Optional[float]=None,
        c: _typing.Optional[int]=None
    ) -> None: ...

    def __call__(
        self, *,
        a: _typing.Union[int, None]=None,
        b: _typing.Union[float, None]=None,
        c: _typing.Union[int, None]=None
    ) -> struct4: ...

    def __reduce__(self) -> _typing.Tuple[_typing.Callable, _typing.Tuple[_typing.Type['struct4'], bytes]]: ...
    def __hash__(self) -> int: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __lt__(self, other: 'struct4') -> bool: ...
    def __gt__(self, other: 'struct4') -> bool: ...
    def __le__(self, other: 'struct4') -> bool: ...
    def __ge__(self, other: 'struct4') -> bool: ...

    def _to_python(self) -> "module.thrift_types.struct4": ...   # type: ignore
    def _to_py3(self) -> struct4: ...
    def _to_py_deprecated(self) -> "module.ttypes.struct4": ...   # type: ignore

_union1ValueType = _typing.Union[None, int, float]

class union1(thrift.py3.types.Union, _typing.Hashable):
    class __fbthrift_IsSet:
        i: bool
        d: bool
        pass

    i: _typing.Final[int] = ...
    d: _typing.Final[float] = ...

    def __init__(
        self, *,
        i: _typing.Optional[int]=None,
        d: _typing.Optional[float]=None
    ) -> None: ...

    def __hash__(self) -> int: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __lt__(self, other: 'union1') -> bool: ...
    def __gt__(self, other: 'union1') -> bool: ...
    def __le__(self, other: 'union1') -> bool: ...
    def __ge__(self, other: 'union1') -> bool: ...

    class Type(_python_std_enum.Enum):
        EMPTY: union1.Type = ...
        i: union1.Type = ...
        d: union1.Type = ...

    @staticmethod
    def fromValue(value: _union1ValueType) -> union1: ...
    type: _typing.Final[union1.Type]
    value: _typing.Final[_union1ValueType]
    def get_type(self) -> union1.Type: ...

    def _to_python(self) -> "module.thrift_types.union1": ...   # type: ignore
    def _to_py3(self) -> union1: ...
    def _to_py_deprecated(self) -> "module.ttypes.union1": ...   # type: ignore

_union2ValueType = _typing.Union[None, int, float, struct1, union1]

class union2(thrift.py3.types.Union, _typing.Hashable):
    class __fbthrift_IsSet:
        i: bool
        d: bool
        s: bool
        u: bool
        pass

    i: _typing.Final[int] = ...
    d: _typing.Final[float] = ...
    s: _typing.Final[struct1] = ...
    u: _typing.Final[union1] = ...

    def __init__(
        self, *,
        i: _typing.Optional[int]=None,
        d: _typing.Optional[float]=None,
        s: _typing.Optional[struct1]=None,
        u: _typing.Optional[union1]=None
    ) -> None: ...

    def __hash__(self) -> int: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __lt__(self, other: 'union2') -> bool: ...
    def __gt__(self, other: 'union2') -> bool: ...
    def __le__(self, other: 'union2') -> bool: ...
    def __ge__(self, other: 'union2') -> bool: ...

    class Type(_python_std_enum.Enum):
        EMPTY: union2.Type = ...
        i: union2.Type = ...
        d: union2.Type = ...
        s: union2.Type = ...
        u: union2.Type = ...

    @staticmethod
    def fromValue(value: _union2ValueType) -> union2: ...
    type: _typing.Final[union2.Type]
    value: _typing.Final[_union2ValueType]
    def get_type(self) -> union2.Type: ...

    def _to_python(self) -> "module.thrift_types.union2": ...   # type: ignore
    def _to_py3(self) -> union2: ...
    def _to_py_deprecated(self) -> "module.ttypes.union2": ...   # type: ignore

_List__i32T = _typing.TypeVar('_List__i32T', bound=_typing.Sequence[int])


class List__i32(_typing.Sequence[int], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Sequence[int]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Sequence[int]: ...
    @_typing.overload
    def __getitem__(self, i: int) -> int: ...
    @_typing.overload
    def __getitem__(self, s: slice) -> _typing.Sequence[int]: ...
    def __add__(self, other: _typing.Sequence[int]) -> 'List__i32': ...
    def __radd__(self, other: _List__i32T) -> _List__i32T: ...
    def __reversed__(self) -> _typing.Iterator[int]: ...
    def __iter__(self) -> _typing.Iterator[int]: ...


class Map__string_i32(_typing.Mapping[str, int], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Mapping[str, int]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Mapping[str, int]: ...
    def __getitem__(self, key: str) -> int: ...
    def __iter__(self) -> _typing.Iterator[str]: ...


_List__Map__string_i32T = _typing.TypeVar('_List__Map__string_i32T', bound=_typing.Sequence[_typing.Mapping[str, int]])


class List__Map__string_i32(_typing.Sequence[_typing.Mapping[str, int]], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Sequence[_typing.Mapping[str, int]]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Sequence[_typing.Mapping[str, int]]: ...
    @_typing.overload
    def __getitem__(self, i: int) -> _typing.Mapping[str, int]: ...
    @_typing.overload
    def __getitem__(self, s: slice) -> _typing.Sequence[_typing.Mapping[str, int]]: ...
    def __add__(self, other: _typing.Sequence[_typing.Mapping[str, int]]) -> 'List__Map__string_i32': ...
    def __radd__(self, other: _List__Map__string_i32T) -> _List__Map__string_i32T: ...
    def __reversed__(self) -> _typing.Iterator[_typing.Mapping[str, int]]: ...
    def __iter__(self) -> _typing.Iterator[_typing.Mapping[str, int]]: ...


class Map__string_string(_typing.Mapping[str, str], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Mapping[str, str]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Mapping[str, str]: ...
    def __getitem__(self, key: str) -> str: ...
    def __iter__(self) -> _typing.Iterator[str]: ...


_List__RangeT = _typing.TypeVar('_List__RangeT', bound=_typing.Sequence[Range])


class List__Range(_typing.Sequence[Range], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Sequence[Range]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Sequence[Range]: ...
    @_typing.overload
    def __getitem__(self, i: int) -> Range: ...
    @_typing.overload
    def __getitem__(self, s: slice) -> _typing.Sequence[Range]: ...
    def __add__(self, other: _typing.Sequence[Range]) -> 'List__Range': ...
    def __radd__(self, other: _List__RangeT) -> _List__RangeT: ...
    def __reversed__(self) -> _typing.Iterator[Range]: ...
    def __iter__(self) -> _typing.Iterator[Range]: ...


_List__InternshipT = _typing.TypeVar('_List__InternshipT', bound=_typing.Sequence[Internship])


class List__Internship(_typing.Sequence[Internship], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Sequence[Internship]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Sequence[Internship]: ...
    @_typing.overload
    def __getitem__(self, i: int) -> Internship: ...
    @_typing.overload
    def __getitem__(self, s: slice) -> _typing.Sequence[Internship]: ...
    def __add__(self, other: _typing.Sequence[Internship]) -> 'List__Internship': ...
    def __radd__(self, other: _List__InternshipT) -> _List__InternshipT: ...
    def __reversed__(self) -> _typing.Iterator[Internship]: ...
    def __iter__(self) -> _typing.Iterator[Internship]: ...


_List__stringT = _typing.TypeVar('_List__stringT', bound=_typing.Sequence[str])


class List__string(_typing.Sequence[str], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Sequence[str]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Sequence[str]: ...
    @_typing.overload
    def __getitem__(self, i: int) -> str: ...
    @_typing.overload
    def __getitem__(self, s: slice) -> _typing.Sequence[str]: ...
    def __add__(self, other: _typing.Sequence[str]) -> 'List__string': ...
    def __radd__(self, other: _List__stringT) -> _List__stringT: ...
    def __reversed__(self) -> _typing.Iterator[str]: ...
    def __iter__(self) -> _typing.Iterator[str]: ...


class Set__i32(_typing.AbstractSet[int], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.AbstractSet[int]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.AbstractSet[int]: ...
    def __contains__(self, x: object) -> bool: ...
    def union(self, other: _typing.AbstractSet[int]) -> 'Set__i32': ...
    def intersection(self, other: _typing.AbstractSet[int]) -> 'Set__i32': ...
    def difference(self, other: _typing.AbstractSet[int]) -> 'Set__i32': ...
    def symmetric_difference(self, other: _typing.AbstractSet[int]) -> 'Set__i32': ...
    def issubset(self, other: _typing.AbstractSet[int]) -> bool: ...
    def issuperset(self, other: _typing.AbstractSet[int]) -> bool: ...
    def __iter__(self) -> _typing.Iterator[int]: ...


class Set__string(_typing.AbstractSet[str], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.AbstractSet[str]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.AbstractSet[str]: ...
    def __contains__(self, x: object) -> bool: ...
    def union(self, other: _typing.AbstractSet[str]) -> 'Set__string': ...
    def intersection(self, other: _typing.AbstractSet[str]) -> 'Set__string': ...
    def difference(self, other: _typing.AbstractSet[str]) -> 'Set__string': ...
    def symmetric_difference(self, other: _typing.AbstractSet[str]) -> 'Set__string': ...
    def issubset(self, other: _typing.AbstractSet[str]) -> bool: ...
    def issuperset(self, other: _typing.AbstractSet[str]) -> bool: ...
    def __iter__(self) -> _typing.Iterator[str]: ...


class Map__i32_i32(_typing.Mapping[int, int], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Mapping[int, int]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Mapping[int, int]: ...
    def __getitem__(self, key: int) -> int: ...
    def __iter__(self) -> _typing.Iterator[int]: ...


class Map__i32_string(_typing.Mapping[int, str], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Mapping[int, str]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Mapping[int, str]: ...
    def __getitem__(self, key: int) -> str: ...
    def __iter__(self) -> _typing.Iterator[int]: ...


class Map__i32_bool(_typing.Mapping[int, bool], _typing.Hashable):
    def __init__(self, items: _typing.Optional[_typing.Mapping[int, bool]]=None) -> None: ...
    def __len__(self) -> int: ...
    def __hash__(self) -> int: ...
    def __copy__(self) -> _typing.Mapping[int, bool]: ...
    def __getitem__(self, key: int) -> bool: ...
    def __iter__(self) -> _typing.Iterator[int]: ...


myInt: int = ...
name: str = ...
multi_line_string: str = ...
states: List__Map__string_i32 = ...
x: float = ...
y: float = ...
z: float = ...
zeroDoubleValue: float = ...
longDoubleValue: float = ...
bin: bytes = ...
my_company: Company = ...
foo: str = ...
bar: int = ...
mymap: Map__string_string = ...
instagram: Internship = ...
partial_const: Internship = ...
kRanges: List__Range = ...
internList: List__Internship = ...
pod_0: struct1 = ...
pod_s_0: struct1 = ...
pod_1: struct1 = ...
pod_s_1: struct1 = ...
pod_2: struct2 = ...
pod_trailing_commas: struct2 = ...
pod_s_2: struct2 = ...
pod_3: struct3 = ...
pod_s_3: struct3 = ...
pod_4: struct4 = ...
u_1_1: union1 = ...
u_1_2: union1 = ...
u_1_3: union1 = ...
u_2_1: union2 = ...
u_2_2: union2 = ...
u_2_3: union2 = ...
u_2_4: union2 = ...
u_2_5: union2 = ...
u_2_6: union2 = ...
apostrophe: str = ...
tripleApostrophe: str = ...
quotationMark: str = ...
backslash: str = ...
escaped_a: str = ...
char2ascii: Map__string_i32 = ...
escaped_strings: List__string = ...
false_c: bool = ...
true_c: bool = ...
zero_byte: int = ...
zero16: int = ...
zero32: int = ...
zero64: int = ...
zero_dot_zero: float = ...
empty_string: str = ...
empty_int_list: List__i32 = ...
empty_string_list: List__string = ...
empty_int_set: Set__i32 = ...
empty_string_set: Set__string = ...
empty_int_int_map: Map__i32_i32 = ...
empty_int_string_map: Map__i32_string = ...
empty_string_int_map: Map__string_i32 = ...
empty_string_string_map: Map__string_string = ...
maxIntDec: int = ...
maxIntOct: int = ...
maxIntHex: int = ...
maxIntBin: int = ...
maxDub: float = ...
minDub: float = ...
minSDub: float = ...
maxPIntDec: int = ...
maxPIntOct: int = ...
maxPIntHex: int = ...
maxPIntBin: int = ...
maxPDub: float = ...
minPDub: float = ...
minPSDub: float = ...
minIntDec: int = ...
minIntOct: int = ...
minIntHex: int = ...
minIntBin: int = ...
maxNDub: float = ...
minNDub: float = ...
minNSDub: float = ...
I2B: Map__i32_bool = ...
I2B_REF: Map__i32_bool = ...
MyCompany = Company
MyStringIdentifier = str
MyIntIdentifier = int
MyMapIdentifier = Map__string_string
