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

import enum
import datetime
import sys
import types
import typing

import winsdk.system
import winsdk.windows.foundation

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

Self = typing.TypeVar('Self')
K = typing.TypeVar('K')
T = typing.TypeVar('T')
V = typing.TypeVar('V')

class PropertySet(winsdk.system.Object, typing.MutableMapping[str, winsdk.system.Object]):
    size: winsdk.system.UInt32
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[str]: ...
    def __contains__(self, key: object) -> bool:...
    def __setitem__(self, key: str, value: winsdk.system.Object) -> None: ...
    def __getitem__(self, key: str) -> winsdk.system.Object: ...
    def __delitem__(self, key: str) -> None: ...
    @staticmethod
    def _from(obj: winsdk.system.Object) -> PropertySet: ...
    def __new__(cls: typing.Type[PropertySet]) -> PropertySet:...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[IIterator[IKeyValuePair[str, winsdk.system.Object]]]: ...
    def get_view(self) -> typing.Optional[IMapView[str, winsdk.system.Object]]: ...
    def has_key(self, key: str) -> winsdk.system.Boolean: ...
    def insert(self, key: str, value: typing.Optional[winsdk.system.Object]) -> winsdk.system.Boolean: ...
    def lookup(self, key: str) -> typing.Optional[winsdk.system.Object]: ...
    def remove(self, key: str) -> None: ...
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, winsdk.system.Object]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class StringMap(winsdk.system.Object, typing.MutableMapping[str, str]):
    size: winsdk.system.UInt32
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[str]: ...
    def __contains__(self, key: object) -> bool:...
    def __setitem__(self, key: str, value: str) -> None: ...
    def __getitem__(self, key: str) -> str: ...
    def __delitem__(self, key: str) -> None: ...
    @staticmethod
    def _from(obj: winsdk.system.Object) -> StringMap: ...
    def __new__(cls: typing.Type[StringMap]) -> StringMap:...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[IIterator[IKeyValuePair[str, str]]]: ...
    def get_view(self) -> typing.Optional[IMapView[str, str]]: ...
    def has_key(self, key: str) -> winsdk.system.Boolean: ...
    def insert(self, key: str, value: str) -> winsdk.system.Boolean: ...
    def lookup(self, key: str) -> str: ...
    def remove(self, key: str) -> None: ...
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, str]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class ValueSet(winsdk.system.Object, typing.MutableMapping[str, winsdk.system.Object]):
    size: winsdk.system.UInt32
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[str]: ...
    def __contains__(self, key: object) -> bool:...
    def __setitem__(self, key: str, value: winsdk.system.Object) -> None: ...
    def __getitem__(self, key: str) -> winsdk.system.Object: ...
    def __delitem__(self, key: str) -> None: ...
    @staticmethod
    def _from(obj: winsdk.system.Object) -> ValueSet: ...
    def __new__(cls: typing.Type[ValueSet]) -> ValueSet:...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[IIterator[IKeyValuePair[str, winsdk.system.Object]]]: ...
    def get_view(self) -> typing.Optional[IMapView[str, winsdk.system.Object]]: ...
    def has_key(self, key: str) -> winsdk.system.Boolean: ...
    def insert(self, key: str, value: typing.Optional[winsdk.system.Object]) -> winsdk.system.Boolean: ...
    def lookup(self, key: str) -> typing.Optional[winsdk.system.Object]: ...
    def remove(self, key: str) -> None: ...
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, winsdk.system.Object]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

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

class IIterator(winsdk.system.Object, typing.Generic[T]):
    current: typing.Optional[T]
    has_current: winsdk.system.Boolean
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __iter__(self: Self) -> Self: ...
    def __next__(self) -> T: ...
    def get_many(self, items: winsdk.system.Array[T]) -> winsdk.system.UInt32: ...
    def move_next(self) -> winsdk.system.Boolean: ...

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

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

class IMapView(winsdk.system.Object, typing.Mapping[K, V], typing.Generic[K, V]):
    size: winsdk.system.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[K]: ...
    def __contains__(self, key: object) -> bool:...
    def __getitem__(self, key: K) -> V: ...
    def first(self) -> typing.Optional[IIterator[IKeyValuePair[K, V]]]: ...
    def has_key(self, key: typing.Optional[K]) -> winsdk.system.Boolean: ...
    def lookup(self, key: typing.Optional[K]) -> typing.Optional[V]: ...
    def split(self) -> typing.Tuple[typing.Optional[IMapView[K, V]], typing.Optional[IMapView[K, V]]]: ...

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

class IObservableMap(winsdk.system.Object, typing.MutableMapping[K, V], typing.Generic[K, V]):
    size: winsdk.system.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[K]: ...
    def __contains__(self, key: object) -> bool:...
    def __setitem__(self, key: K, value: V) -> None: ...
    def __getitem__(self, key: K) -> V: ...
    def __delitem__(self, key: K) -> None: ...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[IIterator[IKeyValuePair[K, V]]]: ...
    def get_view(self) -> typing.Optional[IMapView[K, V]]: ...
    def has_key(self, key: typing.Optional[K]) -> winsdk.system.Boolean: ...
    def insert(self, key: typing.Optional[K], value: typing.Optional[V]) -> winsdk.system.Boolean: ...
    def lookup(self, key: typing.Optional[K]) -> typing.Optional[V]: ...
    def remove(self, key: typing.Optional[K]) -> None: ...
    def add_map_changed(self, vhnd: MapChangedEventHandler[K, V]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class IObservableVector(winsdk.system.Object, typing.MutableSequence[T], typing.Generic[T]):
    size: winsdk.system.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __len__(self) -> int: ...
    @typing.overload
    def __getitem__(self, index: int) -> T: ...
    @typing.overload
    def __getitem__(self, index: slice) -> winsdk.system.Array[T]: ...
    def insert(self, index: int, value: T) -> None: ...
    @typing.overload
    def __delitem__(self, index: int) -> None: ...
    @typing.overload
    def __delitem__(self, index: slice) -> None: ...
    @typing.overload
    def __setitem__(self, index: int, value: T) -> None: ...
    @typing.overload
    def __setitem__(self, index: slice, value: typing.Iterable[T]) -> None: ...
    def append(self, value: typing.Optional[T]) -> None: ...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[IIterator[T]]: ...
    def get_at(self, index: winsdk.system.UInt32) -> typing.Optional[T]: ...
    def get_many(self, start_index: winsdk.system.UInt32, items: winsdk.system.Array[T]) -> winsdk.system.UInt32: ...
    def get_view(self) -> typing.Optional[IVectorView[T]]: ...
    def index_of(self, value: typing.Optional[T]) -> typing.Tuple[winsdk.system.Boolean, winsdk.system.UInt32]: ...
    def insert_at(self, index: winsdk.system.UInt32, value: typing.Optional[T]) -> None: ...
    def remove_at(self, index: winsdk.system.UInt32) -> None: ...
    def remove_at_end(self) -> None: ...
    def replace_all(self, items: winsdk.system.Array[T]) -> None: ...
    def set_at(self, index: winsdk.system.UInt32, value: typing.Optional[T]) -> None: ...
    def add_vector_changed(self, vhnd: VectorChangedEventHandler[T]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    def remove_vector_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class IPropertySet(winsdk.system.Object, typing.MutableMapping[str, winsdk.system.Object]):
    size: winsdk.system.UInt32
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[str]: ...
    def __contains__(self, key: object) -> bool:...
    def __setitem__(self, key: str, value: winsdk.system.Object) -> None: ...
    def __getitem__(self, key: str) -> winsdk.system.Object: ...
    def __delitem__(self, key: str) -> None: ...
    @staticmethod
    def _from(obj: winsdk.system.Object) -> IPropertySet: ...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[IIterator[IKeyValuePair[str, winsdk.system.Object]]]: ...
    def get_view(self) -> typing.Optional[IMapView[str, winsdk.system.Object]]: ...
    def has_key(self, key: typing.Optional[str]) -> winsdk.system.Boolean: ...
    def insert(self, key: typing.Optional[str], value: typing.Optional[winsdk.system.Object]) -> winsdk.system.Boolean: ...
    def lookup(self, key: typing.Optional[str]) -> typing.Optional[winsdk.system.Object]: ...
    def remove(self, key: typing.Optional[str]) -> None: ...
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, winsdk.system.Object]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    def remove_map_changed(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

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

class IVectorView(winsdk.system.Object, typing.Sequence[T], typing.Generic[T]):
    size: winsdk.system.UInt32
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, key: typing.Any) -> types.GenericAlias: ...
    def __len__(self) -> int: ...
    @typing.overload
    def __getitem__(self, index: int) -> T: ...
    @typing.overload
    def __getitem__(self, index: slice) -> winsdk.system.Array[T]: ...
    def first(self) -> typing.Optional[IIterator[T]]: ...
    def get_at(self, index: winsdk.system.UInt32) -> typing.Optional[T]: ...
    def get_many(self, start_index: winsdk.system.UInt32, items: winsdk.system.Array[T]) -> winsdk.system.UInt32: ...
    def index_of(self, value: typing.Optional[T]) -> typing.Tuple[winsdk.system.Boolean, winsdk.system.UInt32]: ...

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

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

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

