import typing, clr, abc
from System.Collections.Generic import IReadOnlyList_1, IList_1, IEnumerator_1, IEnumerable_1, List_1, IReadOnlyDictionary_2, IDictionary_2, KeyValuePair_2, IReadOnlyCollection_1, ICollection_1
from System.Collections import IList, IDictionary, ICollection
from System import Array_1
from System.ComponentModel import INotifyPropertyChanged
from System.Collections.Specialized import INotifyCollectionChanged

class Collection_GenericClasses(abc.ABCMeta):
    Generic_Collection_GenericClasses_Collection_1_T = typing.TypeVar('Generic_Collection_GenericClasses_Collection_1_T')
    def __getitem__(self, types : typing.Type[Generic_Collection_GenericClasses_Collection_1_T]) -> typing.Type[Collection_1[Generic_Collection_GenericClasses_Collection_1_T]]: ...

Collection : Collection_GenericClasses

Collection_1_T = typing.TypeVar('Collection_1_T')
class Collection_1(typing.Generic[Collection_1_T], IReadOnlyList_1[Collection_1_T], IList_1[Collection_1_T], IList):
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, list: IList_1[Collection_1_T]) -> None: ...
    @property
    def Count(self) -> int: ...
    @property
    def Item(self) -> Collection_1_T: ...
    @Item.setter
    def Item(self, value: Collection_1_T) -> Collection_1_T: ...
    def Add(self, item: Collection_1_T) -> None: ...
    def Clear(self) -> None: ...
    def Contains(self, item: Collection_1_T) -> bool: ...
    def CopyTo(self, array: Array_1[Collection_1_T], index: int) -> None: ...
    def GetEnumerator(self) -> IEnumerator_1[Collection_1_T]: ...
    def IndexOf(self, item: Collection_1_T) -> int: ...
    def Insert(self, index: int, item: Collection_1_T) -> None: ...
    def Remove(self, item: Collection_1_T) -> bool: ...
    def RemoveAt(self, index: int) -> None: ...


class ObservableCollection_GenericClasses(abc.ABCMeta):
    Generic_ObservableCollection_GenericClasses_ObservableCollection_1_T = typing.TypeVar('Generic_ObservableCollection_GenericClasses_ObservableCollection_1_T')
    def __getitem__(self, types : typing.Type[Generic_ObservableCollection_GenericClasses_ObservableCollection_1_T]) -> typing.Type[ObservableCollection_1[Generic_ObservableCollection_GenericClasses_ObservableCollection_1_T]]: ...

ObservableCollection : ObservableCollection_GenericClasses

ObservableCollection_1_T = typing.TypeVar('ObservableCollection_1_T')
class ObservableCollection_1(typing.Generic[ObservableCollection_1_T], Collection_1[ObservableCollection_1_T], INotifyPropertyChanged, INotifyCollectionChanged):
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, collection: IEnumerable_1[ObservableCollection_1_T]) -> None: ...
    @typing.overload
    def __init__(self, list: List_1[ObservableCollection_1_T]) -> None: ...
    @property
    def Count(self) -> int: ...
    @property
    def Item(self) -> ObservableCollection_1_T: ...
    @Item.setter
    def Item(self, value: ObservableCollection_1_T) -> ObservableCollection_1_T: ...
    def Move(self, oldIndex: int, newIndex: int) -> None: ...


class ReadOnlyCollection_GenericClasses(abc.ABCMeta):
    Generic_ReadOnlyCollection_GenericClasses_ReadOnlyCollection_1_T = typing.TypeVar('Generic_ReadOnlyCollection_GenericClasses_ReadOnlyCollection_1_T')
    def __getitem__(self, types : typing.Type[Generic_ReadOnlyCollection_GenericClasses_ReadOnlyCollection_1_T]) -> typing.Type[ReadOnlyCollection_1[Generic_ReadOnlyCollection_GenericClasses_ReadOnlyCollection_1_T]]: ...

ReadOnlyCollection : ReadOnlyCollection_GenericClasses

ReadOnlyCollection_1_T = typing.TypeVar('ReadOnlyCollection_1_T')
class ReadOnlyCollection_1(typing.Generic[ReadOnlyCollection_1_T], IReadOnlyList_1[ReadOnlyCollection_1_T], IList_1[ReadOnlyCollection_1_T], IList):
    def __init__(self, list: IList_1[ReadOnlyCollection_1_T]) -> None: ...
    @property
    def Count(self) -> int: ...
    @classmethod
    @property
    def Empty(cls) -> ReadOnlyCollection_1[ReadOnlyCollection_1_T]: ...
    @property
    def Item(self) -> ReadOnlyCollection_1_T: ...
    def Contains(self, value: ReadOnlyCollection_1_T) -> bool: ...
    def CopyTo(self, array: Array_1[ReadOnlyCollection_1_T], index: int) -> None: ...
    def GetEnumerator(self) -> IEnumerator_1[ReadOnlyCollection_1_T]: ...
    def IndexOf(self, value: ReadOnlyCollection_1_T) -> int: ...


class ReadOnlyDictionary_GenericClasses(abc.ABCMeta):
    Generic_ReadOnlyDictionary_GenericClasses_ReadOnlyDictionary_2_TKey = typing.TypeVar('Generic_ReadOnlyDictionary_GenericClasses_ReadOnlyDictionary_2_TKey')
    Generic_ReadOnlyDictionary_GenericClasses_ReadOnlyDictionary_2_TValue = typing.TypeVar('Generic_ReadOnlyDictionary_GenericClasses_ReadOnlyDictionary_2_TValue')
    def __getitem__(self, types : typing.Tuple[typing.Type[Generic_ReadOnlyDictionary_GenericClasses_ReadOnlyDictionary_2_TKey], typing.Type[Generic_ReadOnlyDictionary_GenericClasses_ReadOnlyDictionary_2_TValue]]) -> typing.Type[ReadOnlyDictionary_2[Generic_ReadOnlyDictionary_GenericClasses_ReadOnlyDictionary_2_TKey, Generic_ReadOnlyDictionary_GenericClasses_ReadOnlyDictionary_2_TValue]]: ...

ReadOnlyDictionary : ReadOnlyDictionary_GenericClasses

ReadOnlyDictionary_2_TKey = typing.TypeVar('ReadOnlyDictionary_2_TKey')
ReadOnlyDictionary_2_TValue = typing.TypeVar('ReadOnlyDictionary_2_TValue')
class ReadOnlyDictionary_2(typing.Generic[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue], IReadOnlyDictionary_2[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue], IDictionary_2[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue], IDictionary):
    def __init__(self, dictionary: IDictionary_2[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue]) -> None: ...
    @property
    def Count(self) -> int: ...
    @classmethod
    @property
    def Empty(cls) -> ReadOnlyDictionary_2[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue]: ...
    @property
    def Item(self) -> ReadOnlyDictionary_2_TValue: ...
    @property
    def Keys(self) -> ReadOnlyDictionary_2.KeyCollection_2[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue]: ...
    @property
    def Values(self) -> ReadOnlyDictionary_2.ValueCollection_2[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue]: ...
    def ContainsKey(self, key: ReadOnlyDictionary_2_TKey) -> bool: ...
    def GetEnumerator(self) -> IEnumerator_1[KeyValuePair_2[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue]]: ...
    def TryGetValue(self, key: ReadOnlyDictionary_2_TKey, value: clr.Reference[ReadOnlyDictionary_2_TValue]) -> bool: ...

    KeyCollection_GenericClasses_ReadOnlyDictionary_2_TKey = typing.TypeVar('KeyCollection_GenericClasses_ReadOnlyDictionary_2_TKey')
    KeyCollection_GenericClasses_ReadOnlyDictionary_2_TValue = typing.TypeVar('KeyCollection_GenericClasses_ReadOnlyDictionary_2_TValue')
    class KeyCollection_GenericClasses(typing.Generic[KeyCollection_GenericClasses_ReadOnlyDictionary_2_TKey, KeyCollection_GenericClasses_ReadOnlyDictionary_2_TValue], abc.ABCMeta):
        KeyCollection_GenericClasses_ReadOnlyDictionary_2_TKey = ReadOnlyDictionary_2.KeyCollection_GenericClasses_ReadOnlyDictionary_2_TKey
        KeyCollection_GenericClasses_ReadOnlyDictionary_2_TValue = ReadOnlyDictionary_2.KeyCollection_GenericClasses_ReadOnlyDictionary_2_TValue
        def __call__(self) -> ReadOnlyDictionary_2.KeyCollection_2[KeyCollection_GenericClasses_ReadOnlyDictionary_2_TKey, KeyCollection_GenericClasses_ReadOnlyDictionary_2_TValue]: ...

    KeyCollection : KeyCollection_GenericClasses[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue]

    KeyCollection_2_TKey = typing.TypeVar('KeyCollection_2_TKey')
    KeyCollection_2_TValue = typing.TypeVar('KeyCollection_2_TValue')
    class KeyCollection_2(typing.Generic[KeyCollection_2_TKey, KeyCollection_2_TValue], IReadOnlyCollection_1[KeyCollection_2_TKey], ICollection_1[KeyCollection_2_TKey], ICollection):
        KeyCollection_2_TKey = ReadOnlyDictionary_2.KeyCollection_2_TKey
        KeyCollection_2_TValue = ReadOnlyDictionary_2.KeyCollection_2_TValue
        @property
        def Count(self) -> int: ...
        def Contains(self, item: KeyCollection_2_TKey) -> bool: ...
        def CopyTo(self, array: Array_1[KeyCollection_2_TKey], arrayIndex: int) -> None: ...
        def GetEnumerator(self) -> IEnumerator_1[KeyCollection_2_TKey]: ...


    ValueCollection_GenericClasses_ReadOnlyDictionary_2_TKey = typing.TypeVar('ValueCollection_GenericClasses_ReadOnlyDictionary_2_TKey')
    ValueCollection_GenericClasses_ReadOnlyDictionary_2_TValue = typing.TypeVar('ValueCollection_GenericClasses_ReadOnlyDictionary_2_TValue')
    class ValueCollection_GenericClasses(typing.Generic[ValueCollection_GenericClasses_ReadOnlyDictionary_2_TKey, ValueCollection_GenericClasses_ReadOnlyDictionary_2_TValue], abc.ABCMeta):
        ValueCollection_GenericClasses_ReadOnlyDictionary_2_TKey = ReadOnlyDictionary_2.ValueCollection_GenericClasses_ReadOnlyDictionary_2_TKey
        ValueCollection_GenericClasses_ReadOnlyDictionary_2_TValue = ReadOnlyDictionary_2.ValueCollection_GenericClasses_ReadOnlyDictionary_2_TValue
        def __call__(self) -> ReadOnlyDictionary_2.ValueCollection_2[ValueCollection_GenericClasses_ReadOnlyDictionary_2_TKey, ValueCollection_GenericClasses_ReadOnlyDictionary_2_TValue]: ...

    ValueCollection : ValueCollection_GenericClasses[ReadOnlyDictionary_2_TKey, ReadOnlyDictionary_2_TValue]

    ValueCollection_2_TKey = typing.TypeVar('ValueCollection_2_TKey')
    ValueCollection_2_TValue = typing.TypeVar('ValueCollection_2_TValue')
    class ValueCollection_2(typing.Generic[ValueCollection_2_TKey, ValueCollection_2_TValue], IReadOnlyCollection_1[ValueCollection_2_TValue], ICollection_1[ValueCollection_2_TValue], ICollection):
        ValueCollection_2_TKey = ReadOnlyDictionary_2.ValueCollection_2_TKey
        ValueCollection_2_TValue = ReadOnlyDictionary_2.ValueCollection_2_TValue
        @property
        def Count(self) -> int: ...
        def CopyTo(self, array: Array_1[ValueCollection_2_TValue], arrayIndex: int) -> None: ...
        def GetEnumerator(self) -> IEnumerator_1[ValueCollection_2_TValue]: ...



class ReadOnlyObservableCollection_GenericClasses(abc.ABCMeta):
    Generic_ReadOnlyObservableCollection_GenericClasses_ReadOnlyObservableCollection_1_T = typing.TypeVar('Generic_ReadOnlyObservableCollection_GenericClasses_ReadOnlyObservableCollection_1_T')
    def __getitem__(self, types : typing.Type[Generic_ReadOnlyObservableCollection_GenericClasses_ReadOnlyObservableCollection_1_T]) -> typing.Type[ReadOnlyObservableCollection_1[Generic_ReadOnlyObservableCollection_GenericClasses_ReadOnlyObservableCollection_1_T]]: ...

ReadOnlyObservableCollection : ReadOnlyObservableCollection_GenericClasses

ReadOnlyObservableCollection_1_T = typing.TypeVar('ReadOnlyObservableCollection_1_T')
class ReadOnlyObservableCollection_1(typing.Generic[ReadOnlyObservableCollection_1_T], ReadOnlyCollection_1[ReadOnlyObservableCollection_1_T], INotifyPropertyChanged, INotifyCollectionChanged):
    def __init__(self, list: ObservableCollection_1[ReadOnlyObservableCollection_1_T]) -> None: ...
    @property
    def Count(self) -> int: ...
    @classmethod
    @property
    def Empty(cls) -> ReadOnlyObservableCollection_1[ReadOnlyObservableCollection_1_T]: ...
    @property
    def Item(self) -> ReadOnlyObservableCollection_1_T: ...

