# WARNING: Please don't edit this file. It was generated by Python/WinRT v1.0.0-beta.2

import enum
import sys
import types
import typing
import uuid

import winsdk._winrt as _winrt

try:
    import winsdk.windows.foundation
except Exception:
    pass

class CollectionChange(enum.IntEnum):
    RESET = 0
    ITEM_INSERTED = 1
    ITEM_REMOVED = 2
    ITEM_CHANGED = 3

class PropertySet(IPropertySet, IObservableMap[str, _winrt.Object], IMap[str, _winrt.Object], IIterable[IKeyValuePair[str, _winrt.Object]], _winrt.Object):
    size: _winrt.UInt32
    @staticmethod
    def _from(obj: _winrt.Object) -> PropertySet: ...
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def clear(self) -> None: ...
    @typing.overload
    def first(self) -> IIterator[IKeyValuePair[str, _winrt.Object]]: ...
    @typing.overload
    def get_view(self) -> IMapView[str, _winrt.Object]: ...
    @typing.overload
    def has_key(self, key: str) -> _winrt.Boolean: ...
    @typing.overload
    def insert(self, key: str, value: _winrt.Object) -> _winrt.Boolean: ...
    @typing.overload
    def lookup(self, key: str) -> _winrt.Object: ...
    @typing.overload
    def remove(self, key: str) -> None: ...
    @typing.overload
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, _winrt.Object]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    @typing.overload
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class StringMap(IMap[str, str], IIterable[IKeyValuePair[str, str]], IObservableMap[str, str], _winrt.Object):
    size: _winrt.UInt32
    @staticmethod
    def _from(obj: _winrt.Object) -> StringMap: ...
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def clear(self) -> None: ...
    @typing.overload
    def first(self) -> IIterator[IKeyValuePair[str, str]]: ...
    @typing.overload
    def get_view(self) -> IMapView[str, str]: ...
    @typing.overload
    def has_key(self, key: str) -> _winrt.Boolean: ...
    @typing.overload
    def insert(self, key: str, value: str) -> _winrt.Boolean: ...
    @typing.overload
    def lookup(self, key: str) -> str: ...
    @typing.overload
    def remove(self, key: str) -> None: ...
    @typing.overload
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, str]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    @typing.overload
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class ValueSet(IPropertySet, IObservableMap[str, _winrt.Object], IMap[str, _winrt.Object], IIterable[IKeyValuePair[str, _winrt.Object]], _winrt.Object):
    size: _winrt.UInt32
    @staticmethod
    def _from(obj: _winrt.Object) -> ValueSet: ...
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def clear(self) -> None: ...
    @typing.overload
    def first(self) -> IIterator[IKeyValuePair[str, _winrt.Object]]: ...
    @typing.overload
    def get_view(self) -> IMapView[str, _winrt.Object]: ...
    @typing.overload
    def has_key(self, key: str) -> _winrt.Boolean: ...
    @typing.overload
    def insert(self, key: str, value: _winrt.Object) -> _winrt.Boolean: ...
    @typing.overload
    def lookup(self, key: str) -> _winrt.Object: ...
    @typing.overload
    def remove(self, key: str) -> None: ...
    @typing.overload
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, _winrt.Object]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    @typing.overload
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

T = typing.TypeVar('T')

class IIterable(typing.Generic[T], _winrt.Object):
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __iter__(self) -> typing.Iterator[T]: ...
    @typing.overload
    def first(self) -> IIterator[T]: ...

T = typing.TypeVar('T')

class IIterator(typing.Generic[T], _winrt.Object):
    current: T
    has_current: _winrt.Boolean
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __iter__(self) -> typing.Iterator[T]: ...
    def __next__(self) -> T: ...
    @typing.overload
    def get_many(self, items_size: _winrt.UInt32) -> typing.Tuple[_winrt.UInt32, typing.List[T]]: ...
    @typing.overload
    def move_next(self) -> _winrt.Boolean: ...

K = typing.TypeVar('K')

V = typing.TypeVar('V')

class IKeyValuePair(typing.Generic[K, V], _winrt.Object):
    key: K
    value: V
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...

K = typing.TypeVar('K')

class IMapChangedEventArgs(typing.Generic[K], _winrt.Object):
    collection_change: CollectionChange
    key: K
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...

K = typing.TypeVar('K')

V = typing.TypeVar('V')

class IMapView(IIterable[IKeyValuePair[K, V]], _winrt.Object):
    size: _winrt.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __contains__(self, key: K) -> bool:...
    def __len__(self) -> int: ...
    def __getitem__(self, key: K) -> V: ...
    @typing.overload
    def has_key(self, key: K) -> _winrt.Boolean: ...
    @typing.overload
    def lookup(self, key: K) -> V: ...
    @typing.overload
    def split(self, ) -> typing.Tuple[IMapView[K, V], IMapView[K, V]]: ...
    @typing.overload
    def first(self) -> IIterator[IKeyValuePair[K, V]]: ...

K = typing.TypeVar('K')

V = typing.TypeVar('V')

class IMap(IIterable[IKeyValuePair[K, V]], _winrt.Object):
    size: _winrt.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __contains__(self, key: K) -> bool:...
    def __len__(self) -> int: ...
    def __getitem__(self, key: K) -> V: ...
    def __setitem__(self, key: K, value: V) -> None: ...
    def __delitem__(self, key: K) -> None: ...
    @typing.overload
    def clear(self) -> None: ...
    @typing.overload
    def get_view(self) -> IMapView[K, V]: ...
    @typing.overload
    def has_key(self, key: K) -> _winrt.Boolean: ...
    @typing.overload
    def insert(self, key: K, value: V) -> _winrt.Boolean: ...
    @typing.overload
    def lookup(self, key: K) -> V: ...
    @typing.overload
    def remove(self, key: K) -> None: ...
    @typing.overload
    def first(self) -> IIterator[IKeyValuePair[K, V]]: ...

K = typing.TypeVar('K')

V = typing.TypeVar('V')

class IObservableMap(IMap[K, V], _winrt.Object):
    size: _winrt.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    @typing.overload
    def clear(self) -> None: ...
    @typing.overload
    def get_view(self) -> IMapView[K, V]: ...
    @typing.overload
    def has_key(self, key: K) -> _winrt.Boolean: ...
    @typing.overload
    def insert(self, key: K, value: V) -> _winrt.Boolean: ...
    @typing.overload
    def lookup(self, key: K) -> V: ...
    @typing.overload
    def remove(self, key: K) -> None: ...
    @typing.overload
    def first(self) -> IIterator[IKeyValuePair[K, V]]: ...
    @typing.overload
    def add_map_changed(self, vhnd: MapChangedEventHandler[K, V]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    @typing.overload
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

T = typing.TypeVar('T')

class IObservableVector(IVector[T], _winrt.Object):
    size: _winrt.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    @typing.overload
    def append(self, value: T) -> None: ...
    @typing.overload
    def clear(self) -> None: ...
    @typing.overload
    def get_at(self, index: _winrt.UInt32) -> T: ...
    @typing.overload
    def get_many(self, start_index: _winrt.UInt32, items_size: _winrt.UInt32) -> typing.Tuple[_winrt.UInt32, typing.List[T]]: ...
    @typing.overload
    def get_view(self) -> IVectorView[T]: ...
    @typing.overload
    def index_of(self, value: T) -> typing.Tuple[_winrt.Boolean, _winrt.UInt32]: ...
    @typing.overload
    def insert_at(self, index: _winrt.UInt32, value: T) -> None: ...
    @typing.overload
    def remove_at(self, index: _winrt.UInt32) -> None: ...
    @typing.overload
    def remove_at_end(self) -> None: ...
    @typing.overload
    def replace_all(self, items: typing.Sequence[T]) -> None: ...
    @typing.overload
    def set_at(self, index: _winrt.UInt32, value: T) -> None: ...
    @typing.overload
    def first(self) -> IIterator[T]: ...
    @typing.overload
    def add_vector_changed(self, vhnd: VectorChangedEventHandler[T]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    @typing.overload
    def remove_vector_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class IPropertySet(IObservableMap[str, _winrt.Object], IMap[str, _winrt.Object], IIterable[IKeyValuePair[str, _winrt.Object]], _winrt.Object):
    size: _winrt.UInt32
    @staticmethod
    def _from(obj: _winrt.Object) -> IPropertySet: ...
    @typing.overload
    def clear(self) -> None: ...
    @typing.overload
    def get_view(self) -> IMapView[str, _winrt.Object]: ...
    @typing.overload
    def has_key(self, key: str) -> _winrt.Boolean: ...
    @typing.overload
    def insert(self, key: str, value: _winrt.Object) -> _winrt.Boolean: ...
    @typing.overload
    def lookup(self, key: str) -> _winrt.Object: ...
    @typing.overload
    def remove(self, key: str) -> None: ...
    @typing.overload
    def first(self) -> IIterator[IKeyValuePair[str, _winrt.Object]]: ...
    @typing.overload
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, _winrt.Object]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    @typing.overload
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class IVectorChangedEventArgs(_winrt.Object):
    collection_change: CollectionChange
    index: _winrt.UInt32
    @staticmethod
    def _from(obj: _winrt.Object) -> IVectorChangedEventArgs: ...

T = typing.TypeVar('T')

class IVectorView(IIterable[T], _winrt.Object):
    size: _winrt.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __len__(self) -> int: ...
    def __getitem__(self, index: int) -> T: ...
    @typing.overload
    def get_at(self, index: _winrt.UInt32) -> T: ...
    @typing.overload
    def get_many(self, start_index: _winrt.UInt32, items_size: _winrt.UInt32) -> typing.Tuple[_winrt.UInt32, typing.List[T]]: ...
    @typing.overload
    def index_of(self, value: T) -> typing.Tuple[_winrt.Boolean, _winrt.UInt32]: ...
    @typing.overload
    def first(self) -> IIterator[T]: ...

T = typing.TypeVar('T')

class IVector(IIterable[T], _winrt.Object):
    size: _winrt.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __len__(self) -> int: ...
    def __getitem__(self, index: int) -> T: ...
    def __setitem__(self, index: int, value: T) -> None: ...
    def __delitem__(self, index: int) -> None: ...
    @typing.overload
    def append(self, value: T) -> None: ...
    @typing.overload
    def clear(self) -> None: ...
    @typing.overload
    def get_at(self, index: _winrt.UInt32) -> T: ...
    @typing.overload
    def get_many(self, start_index: _winrt.UInt32, items_size: _winrt.UInt32) -> typing.Tuple[_winrt.UInt32, typing.List[T]]: ...
    @typing.overload
    def get_view(self) -> IVectorView[T]: ...
    @typing.overload
    def index_of(self, value: T) -> typing.Tuple[_winrt.Boolean, _winrt.UInt32]: ...
    @typing.overload
    def insert_at(self, index: _winrt.UInt32, value: T) -> None: ...
    @typing.overload
    def remove_at(self, index: _winrt.UInt32) -> None: ...
    @typing.overload
    def remove_at_end(self) -> None: ...
    @typing.overload
    def replace_all(self, items: typing.Sequence[T]) -> None: ...
    @typing.overload
    def set_at(self, index: _winrt.UInt32, value: T) -> None: ...
    @typing.overload
    def first(self) -> IIterator[T]: ...

K = typing.TypeVar('K')

V = typing.TypeVar('V')

MapChangedEventHandler = typing.Callable[[IObservableMap[K, V], IMapChangedEventArgs[K]], None]

T = typing.TypeVar('T')

VectorChangedEventHandler = typing.Callable[[IObservableVector[T], IVectorChangedEventArgs], None]

