# WARNING: Please don't edit this file. It was generated by Python/WinRT v3.0.0

import datetime
import sys
import types
import typing
import uuid as _uuid
from builtins import property as _property
from abc import abstractmethod

import winrt._winrt
import winrt.system
import winrt.windows.foundation as windows_foundation

from winrt.windows.foundation.collections import CollectionChange
from winrt.windows.foundation.collections import MapChangedEventHandler, VectorChangedEventHandler

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

@typing.final
class PropertySet(winrt.system.Object, IPropertySet, IObservableMap[str, winrt.system.Object], winrt._winrt.MutableMapping[str, winrt.system.Object]):
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[str]: ...
    def __contains__(self, key: object) -> bool: ...
    def __getitem__(self, key: str) -> winrt.system.Object: ...
    def __setitem__(self, key: str, value: winrt.system.Object) -> None: ...
    def __delitem__(self, key: str) -> None: ...
    def __new__(cls: typing.Type[Self]) -> Self: ...
    # System.Void Windows.Foundation.Collections.PropertySet::Clear()
    def clear(self) -> None: ...
    # Windows.Foundation.Collections.IIterator`1<Windows.Foundation.Collections.IKeyValuePair`2<System.String,System.Object>> Windows.Foundation.Collections.PropertySet::First()
    def first(self) -> IIterator[IKeyValuePair[str, winrt.system.Object]]: ...
    # Windows.Foundation.Collections.IMapView`2<System.String,System.Object> Windows.Foundation.Collections.PropertySet::GetView()
    def get_view(self) -> typing.Mapping[str, winrt.system.Object]: ...
    # System.Boolean Windows.Foundation.Collections.PropertySet::HasKey(System.String)
    def has_key(self, key: str, /) -> bool: ...
    # System.Boolean Windows.Foundation.Collections.PropertySet::Insert(System.String,System.Object)
    def insert(self, key: str, value: winrt.system.Object, /) -> bool: ...
    # System.Object Windows.Foundation.Collections.PropertySet::Lookup(System.String)
    def lookup(self, key: str, /) -> winrt.system.Object: ...
    # System.Void Windows.Foundation.Collections.PropertySet::Remove(System.String)
    def remove(self, key: str, /) -> None: ...
    # Windows.Foundation.EventRegistrationToken Windows.Foundation.Collections.PropertySet::add_MapChanged(Windows.Foundation.Collections.MapChangedEventHandler`2<System.String,System.Object>)
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, winrt.system.Object], /) -> windows_foundation.EventRegistrationToken: ...
    # System.Void Windows.Foundation.Collections.PropertySet::remove_MapChanged(Windows.Foundation.EventRegistrationToken)
    def remove_map_changed(self, token: typing.Union[windows_foundation.EventRegistrationToken, typing.Tuple[winrt.system.Int64]], /) -> None: ...
    # System.UInt32 Windows.Foundation.Collections.PropertySet::get_Size()
    @_property
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class StringMap(winrt.system.Object, IObservableMap[str, str], winrt._winrt.MutableMapping[str, str]):
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[str]: ...
    def __contains__(self, key: object) -> bool: ...
    def __getitem__(self, key: str) -> str: ...
    def __setitem__(self, key: str, value: str) -> None: ...
    def __delitem__(self, key: str) -> None: ...
    def __new__(cls: typing.Type[Self]) -> Self: ...
    # System.Void Windows.Foundation.Collections.StringMap::Clear()
    def clear(self) -> None: ...
    # Windows.Foundation.Collections.IIterator`1<Windows.Foundation.Collections.IKeyValuePair`2<System.String,System.String>> Windows.Foundation.Collections.StringMap::First()
    def first(self) -> IIterator[IKeyValuePair[str, str]]: ...
    # Windows.Foundation.Collections.IMapView`2<System.String,System.String> Windows.Foundation.Collections.StringMap::GetView()
    def get_view(self) -> typing.Mapping[str, str]: ...
    # System.Boolean Windows.Foundation.Collections.StringMap::HasKey(System.String)
    def has_key(self, key: str, /) -> bool: ...
    # System.Boolean Windows.Foundation.Collections.StringMap::Insert(System.String,System.String)
    def insert(self, key: str, value: str, /) -> bool: ...
    # System.String Windows.Foundation.Collections.StringMap::Lookup(System.String)
    def lookup(self, key: str, /) -> str: ...
    # System.Void Windows.Foundation.Collections.StringMap::Remove(System.String)
    def remove(self, key: str, /) -> None: ...
    # Windows.Foundation.EventRegistrationToken Windows.Foundation.Collections.StringMap::add_MapChanged(Windows.Foundation.Collections.MapChangedEventHandler`2<System.String,System.String>)
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, str], /) -> windows_foundation.EventRegistrationToken: ...
    # System.Void Windows.Foundation.Collections.StringMap::remove_MapChanged(Windows.Foundation.EventRegistrationToken)
    def remove_map_changed(self, token: typing.Union[windows_foundation.EventRegistrationToken, typing.Tuple[winrt.system.Int64]], /) -> None: ...
    # System.UInt32 Windows.Foundation.Collections.StringMap::get_Size()
    @_property
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class ValueSet(winrt.system.Object, IPropertySet, IObservableMap[str, winrt.system.Object], winrt._winrt.MutableMapping[str, winrt.system.Object]):
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[str]: ...
    def __contains__(self, key: object) -> bool: ...
    def __getitem__(self, key: str) -> winrt.system.Object: ...
    def __setitem__(self, key: str, value: winrt.system.Object) -> None: ...
    def __delitem__(self, key: str) -> None: ...
    def __new__(cls: typing.Type[Self]) -> Self: ...
    # System.Void Windows.Foundation.Collections.ValueSet::Clear()
    def clear(self) -> None: ...
    # Windows.Foundation.Collections.IIterator`1<Windows.Foundation.Collections.IKeyValuePair`2<System.String,System.Object>> Windows.Foundation.Collections.ValueSet::First()
    def first(self) -> IIterator[IKeyValuePair[str, winrt.system.Object]]: ...
    # Windows.Foundation.Collections.IMapView`2<System.String,System.Object> Windows.Foundation.Collections.ValueSet::GetView()
    def get_view(self) -> typing.Mapping[str, winrt.system.Object]: ...
    # System.Boolean Windows.Foundation.Collections.ValueSet::HasKey(System.String)
    def has_key(self, key: str, /) -> bool: ...
    # System.Boolean Windows.Foundation.Collections.ValueSet::Insert(System.String,System.Object)
    def insert(self, key: str, value: winrt.system.Object, /) -> bool: ...
    # System.Object Windows.Foundation.Collections.ValueSet::Lookup(System.String)
    def lookup(self, key: str, /) -> winrt.system.Object: ...
    # System.Void Windows.Foundation.Collections.ValueSet::Remove(System.String)
    def remove(self, key: str, /) -> None: ...
    # Windows.Foundation.EventRegistrationToken Windows.Foundation.Collections.ValueSet::add_MapChanged(Windows.Foundation.Collections.MapChangedEventHandler`2<System.String,System.Object>)
    def add_map_changed(self, vhnd: MapChangedEventHandler[str, winrt.system.Object], /) -> windows_foundation.EventRegistrationToken: ...
    # System.Void Windows.Foundation.Collections.ValueSet::remove_MapChanged(Windows.Foundation.EventRegistrationToken)
    def remove_map_changed(self, token: typing.Union[windows_foundation.EventRegistrationToken, typing.Tuple[winrt.system.Int64]], /) -> None: ...
    # System.UInt32 Windows.Foundation.Collections.ValueSet::get_Size()
    @_property
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class _IIterable: ...

class IIterable(typing.Generic[T], winrt._winrt.IInspectable):
    # Windows.Foundation.Collections.IIterator`1<T> Windows.Foundation.Collections.IIterable`1::First()
    @abstractmethod
    def first(self) -> IIterator[T]: ...

@typing.final
class _IIterator: ...

class IIterator(typing.Generic[T], winrt._winrt.IInspectable):
    # System.UInt32 Windows.Foundation.Collections.IIterator`1::GetMany(T[])
    @abstractmethod
    def get_many(self, items: typing.Union[winrt.system.Array[T], winrt.system.WriteableBuffer], /) -> winrt.system.UInt32: ...
    # System.Boolean Windows.Foundation.Collections.IIterator`1::MoveNext()
    @abstractmethod
    def move_next(self) -> bool: ...
    # T Windows.Foundation.Collections.IIterator`1::get_Current()
    @_property
    @abstractmethod
    def current(self) -> T: ...
    # System.Boolean Windows.Foundation.Collections.IIterator`1::get_HasCurrent()
    @_property
    @abstractmethod
    def has_current(self) -> bool: ...

@typing.final
class _IKeyValuePair: ...

class IKeyValuePair(typing.Generic[K, V], winrt._winrt.IInspectable):
    # K Windows.Foundation.Collections.IKeyValuePair`2::get_Key()
    @_property
    @abstractmethod
    def key(self) -> K: ...
    # V Windows.Foundation.Collections.IKeyValuePair`2::get_Value()
    @_property
    @abstractmethod
    def value(self) -> V: ...

@typing.final
class _IMapChangedEventArgs: ...

class IMapChangedEventArgs(typing.Generic[K], winrt._winrt.IInspectable):
    # Windows.Foundation.Collections.CollectionChange Windows.Foundation.Collections.IMapChangedEventArgs`1::get_CollectionChange()
    @_property
    @abstractmethod
    def collection_change(self) -> CollectionChange: ...
    # K Windows.Foundation.Collections.IMapChangedEventArgs`1::get_Key()
    @_property
    @abstractmethod
    def key(self) -> K: ...

@typing.final
class _IMapView: ...

class IMapView(IIterable[IKeyValuePair[K, V]], winrt._winrt.Mapping[K, V], winrt._winrt.IInspectable):
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[K]: ...
    def __contains__(self, key: object) -> bool: ...
    def __getitem__(self, key: K) -> V: ...
    # System.Boolean Windows.Foundation.Collections.IMapView`2::HasKey(K)
    @abstractmethod
    def has_key(self, key: K, /) -> bool: ...
    # V Windows.Foundation.Collections.IMapView`2::Lookup(K)
    @abstractmethod
    def lookup(self, key: K, /) -> V: ...
    # System.Void Windows.Foundation.Collections.IMapView`2::Split(Windows.Foundation.Collections.IMapView`2<K,V>&,Windows.Foundation.Collections.IMapView`2<K,V>&)
    @abstractmethod
    def split(self) -> typing.Tuple[typing.Mapping[K, V], typing.Mapping[K, V]]: ...
    # System.UInt32 Windows.Foundation.Collections.IMapView`2::get_Size()
    @_property
    @abstractmethod
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class _IMap: ...

class IMap(IIterable[IKeyValuePair[K, V]], winrt._winrt.MutableMapping[K, V], winrt._winrt.IInspectable):
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[K]: ...
    def __contains__(self, key: object) -> bool: ...
    def __getitem__(self, key: K) -> V: ...
    def __setitem__(self, key: K, value: V) -> None: ...
    def __delitem__(self, key: K) -> None: ...
    # System.Void Windows.Foundation.Collections.IMap`2::Clear()
    @abstractmethod
    def clear(self) -> None: ...
    # Windows.Foundation.Collections.IMapView`2<K,V> Windows.Foundation.Collections.IMap`2::GetView()
    @abstractmethod
    def get_view(self) -> typing.Mapping[K, V]: ...
    # System.Boolean Windows.Foundation.Collections.IMap`2::HasKey(K)
    @abstractmethod
    def has_key(self, key: K, /) -> bool: ...
    # System.Boolean Windows.Foundation.Collections.IMap`2::Insert(K,V)
    @abstractmethod
    def insert(self, key: K, value: V, /) -> bool: ...
    # V Windows.Foundation.Collections.IMap`2::Lookup(K)
    @abstractmethod
    def lookup(self, key: K, /) -> V: ...
    # System.Void Windows.Foundation.Collections.IMap`2::Remove(K)
    @abstractmethod
    def remove(self, key: K, /) -> None: ...
    # System.UInt32 Windows.Foundation.Collections.IMap`2::get_Size()
    @_property
    @abstractmethod
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class _IObservableMap: ...

class IObservableMap(IMap[K, V], winrt._winrt.IInspectable):
    # Windows.Foundation.EventRegistrationToken Windows.Foundation.Collections.IObservableMap`2::add_MapChanged(Windows.Foundation.Collections.MapChangedEventHandler`2<K,V>)
    @abstractmethod
    def add_map_changed(self, vhnd: MapChangedEventHandler[K, V], /) -> windows_foundation.EventRegistrationToken: ...
    # System.Void Windows.Foundation.Collections.IObservableMap`2::remove_MapChanged(Windows.Foundation.EventRegistrationToken)
    @abstractmethod
    def remove_map_changed(self, token: typing.Union[windows_foundation.EventRegistrationToken, typing.Tuple[winrt.system.Int64]], /) -> None: ...

@typing.final
class _IObservableVector: ...

class IObservableVector(IVector[T], winrt._winrt.IInspectable):
    # Windows.Foundation.EventRegistrationToken Windows.Foundation.Collections.IObservableVector`1::add_VectorChanged(Windows.Foundation.Collections.VectorChangedEventHandler`1<T>)
    @abstractmethod
    def add_vector_changed(self, vhnd: VectorChangedEventHandler[T], /) -> windows_foundation.EventRegistrationToken: ...
    # System.Void Windows.Foundation.Collections.IObservableVector`1::remove_VectorChanged(Windows.Foundation.EventRegistrationToken)
    @abstractmethod
    def remove_vector_changed(self, token: typing.Union[windows_foundation.EventRegistrationToken, typing.Tuple[winrt.system.Int64]], /) -> None: ...

@typing.final
class _IPropertySet: ...

class IPropertySet(IObservableMap[str, winrt.system.Object], IMap[str, winrt.system.Object], IIterable[IKeyValuePair[str, winrt.system.Object]], winrt._winrt.IInspectable):  # type: ignore[misc]
    pass

@typing.final
class _IVectorChangedEventArgs: ...

class IVectorChangedEventArgs(winrt._winrt.IInspectable):
    # Windows.Foundation.Collections.CollectionChange Windows.Foundation.Collections.IVectorChangedEventArgs::get_CollectionChange()
    @_property
    @abstractmethod
    def collection_change(self) -> CollectionChange: ...
    # System.UInt32 Windows.Foundation.Collections.IVectorChangedEventArgs::get_Index()
    @_property
    @abstractmethod
    def index(self) -> winrt.system.UInt32: ...

@typing.final
class _IVectorView: ...

class IVectorView(IIterable[T], winrt._winrt.Sequence[T], winrt._winrt.IInspectable):
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[T]: ...
    @typing.overload
    def __getitem__(self, index: typing.SupportsIndex) -> T: ...
    @typing.overload
    def __getitem__(self, index: slice) -> winrt.system.Array[T]: ...
    # T Windows.Foundation.Collections.IVectorView`1::GetAt(System.UInt32)
    @abstractmethod
    def get_at(self, index: winrt.system.UInt32, /) -> T: ...
    # System.UInt32 Windows.Foundation.Collections.IVectorView`1::GetMany(System.UInt32,T[])
    @abstractmethod
    def get_many(self, start_index: winrt.system.UInt32, items: typing.Union[winrt.system.Array[T], winrt.system.WriteableBuffer], /) -> winrt.system.UInt32: ...
    # System.Boolean Windows.Foundation.Collections.IVectorView`1::IndexOf(T,System.UInt32&)
    @abstractmethod
    def index_of(self, value: T, /) -> typing.Tuple[bool, winrt.system.UInt32]: ...
    # System.UInt32 Windows.Foundation.Collections.IVectorView`1::get_Size()
    @_property
    @abstractmethod
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class _IVector: ...

class IVector(IIterable[T], winrt._winrt.MutableSequence[T], winrt._winrt.IInspectable):
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[T]: ...
    @typing.overload
    def __getitem__(self, index: typing.SupportsIndex) -> T: ...
    @typing.overload
    def __getitem__(self, index: slice) -> winrt.system.Array[T]: ...
    @typing.overload
    def __delitem__(self, index: typing.SupportsIndex) -> None: ...
    @typing.overload
    def __delitem__(self, index: slice) -> None: ...
    @typing.overload
    def __setitem__(self, index: typing.SupportsIndex, value: T) -> None: ...
    @typing.overload
    def __setitem__(self, index: slice, value: typing.Iterable[T]) -> None: ...
    # System.Void Windows.Foundation.Collections.IVector`1::Append(T)
    @abstractmethod
    def append(self, value: T, /) -> None: ...
    # System.Void Windows.Foundation.Collections.IVector`1::Clear()
    @abstractmethod
    def clear(self) -> None: ...
    # T Windows.Foundation.Collections.IVector`1::GetAt(System.UInt32)
    @abstractmethod
    def get_at(self, index: winrt.system.UInt32, /) -> T: ...
    # System.UInt32 Windows.Foundation.Collections.IVector`1::GetMany(System.UInt32,T[])
    @abstractmethod
    def get_many(self, start_index: winrt.system.UInt32, items: typing.Union[winrt.system.Array[T], winrt.system.WriteableBuffer], /) -> winrt.system.UInt32: ...
    # Windows.Foundation.Collections.IVectorView`1<T> Windows.Foundation.Collections.IVector`1::GetView()
    @abstractmethod
    def get_view(self) -> typing.Sequence[T]: ...
    # System.Boolean Windows.Foundation.Collections.IVector`1::IndexOf(T,System.UInt32&)
    @abstractmethod
    def index_of(self, value: T, /) -> typing.Tuple[bool, winrt.system.UInt32]: ...
    # System.Void Windows.Foundation.Collections.IVector`1::InsertAt(System.UInt32,T)
    @abstractmethod
    def insert_at(self, index: winrt.system.UInt32, value: T, /) -> None: ...
    # System.Void Windows.Foundation.Collections.IVector`1::RemoveAt(System.UInt32)
    @abstractmethod
    def remove_at(self, index: winrt.system.UInt32, /) -> None: ...
    # System.Void Windows.Foundation.Collections.IVector`1::RemoveAtEnd()
    @abstractmethod
    def remove_at_end(self) -> None: ...
    # System.Void Windows.Foundation.Collections.IVector`1::ReplaceAll(T[])
    @abstractmethod
    def replace_all(self, items: typing.Union[winrt.system.Array[T], winrt.system.ReadableBuffer], /) -> None: ...
    # System.Void Windows.Foundation.Collections.IVector`1::SetAt(System.UInt32,T)
    @abstractmethod
    def set_at(self, index: winrt.system.UInt32, value: T, /) -> None: ...
    # System.UInt32 Windows.Foundation.Collections.IVector`1::get_Size()
    @_property
    @abstractmethod
    def size(self) -> winrt.system.UInt32: ...

