from _typeshed import Incomplete
from enum import IntEnum
from win32com.client import VARIANT

def is_iterable(obj): ...
def flatten_generic(nested_iterable): ...

class VT(IntEnum):
    BOOL = ...
    FLOAT = ...
    DOUBLE = ...
    LONG = ...
    INT = ...
    SHORT = ...
    STRING = ...
    OBJECT = ...
    VARIANT = ...
    EMPTY = ...
    NULL = ...
    ARRAY = ...
    ARRAY_BOOL = BOOL | ARRAY
    ARRAY_FLOAT = FLOAT | ARRAY
    ARRAY_DOUBLE = DOUBLE | ARRAY
    ARRAY_LONG = LONG | ARRAY
    ARRAY_INT = INT | ARRAY
    ARRAY_SHORT = SHORT | ARRAY
    ARRAY_STRING = STRING | ARRAY
    ARRAY_OBJECT = OBJECT | ARRAY
    ARRAY_VARIANT = VARIANT | ARRAY

class Variant:
    VT_TYPE_MAP: Incomplete
    def __init__(self, value, force_vt_type: VT = None) -> None: ...
    @property
    def value(self): ...
    @property
    def variant(self): ...
    @property
    def varianttype(self) -> VT: ...
    @property
    def valuetype(self) -> type: ...
    def set_iterable(self, is_iterable: bool = True): ...
    def __iter__(self): ...
    def __getitem__(self, key): ...
    def __setitem__(self, key, value) -> None: ...
    def __len__(self) -> int: ...
    def to_variant(self, force_vt_type: VT = None): ...
    def __call__(self, force_vt_type=None): ...

vObjectEmpty: Incomplete

class vObject(Variant):
    def __init__(self, obj) -> None: ...

class vDouble(Variant):
    def __init__(self, double) -> None: ...

class vLong(Variant):
    def __init__(self, long) -> None: ...

class vInteger(Variant):
    def __init__(self, integer) -> None: ...

class vShort(Variant):
    def __init__(self, boolean) -> None: ...

class vBool(Variant):
    def __init__(self, boolean) -> None: ...

class vString(Variant):
    def __init__(self, string) -> None: ...

class vArray(Variant):
    def __init__(self, *args, data_type: VT, check_count, set_default) -> None: ...

class vObjectArray(vArray):
    def __init__(self, *args, check_count=None, set_default=None) -> None: ...

class vVariantArray(vArray):
    def __init__(self, *args, check_count=None, set_default=None) -> None: ...

class vDoubleArray(vArray):
    def __init__(self, *args, check_count=None, set_default=None) -> None: ...

class vLongArray(vArray):
    def __init__(self, *args, check_count=None, set_default=None) -> None: ...

class vStringArray(vArray):
    def __init__(self, *args, check_count=None, set_default=None) -> None: ...

class vIntegerArray(vArray):
    def __init__(self, *args, check_count=None, set_default=None) -> None: ...

class vBoolArray(vArray):
    def __init__(self, *args, check_count=None, set_default=None) -> None: ...

class vShortArray(vArray):
    def __init__(self, *args, check_count=None, set_default=None) -> None: ...
