--- /dev/null
+import sys\r
+import types\r
+from typing import (\r
+ TypeVar, Generic, Any, Callable, overload, Mapping, Iterator, Tuple,\r
+ Iterable, Optional, Type, MutableMapping, Union, List, Dict\r
+)\r
+\r
+from _weakref import (\r
+ getweakrefcount as getweakrefcount,\r
+ getweakrefs as getweakrefs,\r
+ ref as ref,\r
+ proxy as proxy,\r
+ CallableProxyType as CallableProxyType,\r
+ ProxyType as ProxyType,\r
+ ReferenceType as ReferenceType)\r
+from _weakrefset import WeakSet as WeakSet\r
+\r
+if sys.version_info < (3, 0):\r
+ from exceptions import ReferenceError as ReferenceError\r
+\r
+_S = TypeVar('_S')\r
+_T = TypeVar('_T')\r
+_KT = TypeVar('_KT')\r
+_VT = TypeVar('_VT')\r
+\r
+ProxyTypes: Tuple[Type[Any], ...]\r
+\r
+if sys.version_info >= (3, 4):\r
+ class WeakMethod(ref[types.MethodType]):\r
+ def __new__(cls, meth: types.MethodType, callback: Optional[Callable[[types.MethodType], Any]] = ...) -> WeakMethod: ...\r
+ def __call__(self) -> Optional[types.MethodType]: ...\r
+\r
+class WeakValueDictionary(MutableMapping[_KT, _VT]):\r
+ @overload\r
+ def __init__(self) -> None: ...\r
+ @overload\r
+ def __init__(self, __map: Union[Mapping[_KT, _VT], Iterable[Tuple[_KT, _VT]]], **kwargs: _VT) -> None: ...\r
+\r
+ def __len__(self) -> int: ...\r
+ def __getitem__(self, k: _KT) -> _VT: ...\r
+ def __setitem__(self, k: _KT, v: _VT) -> None: ...\r
+ def __delitem__(self, v: _KT) -> None: ...\r
+ if sys.version_info < (3, 0):\r
+ def has_key(self, key: object) -> bool: ...\r
+ def __contains__(self, o: object) -> bool: ...\r
+ def __iter__(self) -> Iterator[_KT]: ...\r
+ def __str__(self) -> str: ...\r
+\r
+ def copy(self) -> WeakValueDictionary[_KT, _VT]: ...\r
+\r
+ if sys.version_info < (3, 0):\r
+ def keys(self) -> List[_KT]: ...\r
+ def values(self) -> List[_VT]: ...\r
+ def items(self) -> List[Tuple[_KT, _VT]]: ...\r
+ def iterkeys(self) -> Iterator[_KT]: ...\r
+ def itervalues(self) -> Iterator[_VT]: ...\r
+ def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ...\r
+ else:\r
+ # These are incompatible with Mapping\r
+ def keys(self) -> Iterator[_KT]: ... # type: ignore\r
+ def values(self) -> Iterator[_VT]: ... # type: ignore\r
+ def items(self) -> Iterator[Tuple[_KT, _VT]]: ... # type: ignore\r
+ def itervaluerefs(self) -> Iterator[KeyedRef[_KT, _VT]]: ...\r
+ def valuerefs(self) -> List[KeyedRef[_KT, _VT]]: ...\r
+\r
+class KeyedRef(ref[_T], Generic[_KT, _T]):\r
+ key: _KT\r
+ def __init__(self, ob: _T, callback: Callable[[_T], Any], key: _KT) -> None: ...\r
+\r
+class WeakKeyDictionary(MutableMapping[_KT, _VT]):\r
+ @overload\r
+ def __init__(self) -> None: ...\r
+ @overload\r
+ def __init__(self, __map: Union[Mapping[_KT, _VT], Iterable[Tuple[_KT, _VT]]], **kwargs: _VT) -> None: ...\r
+\r
+ def __len__(self) -> int: ...\r
+ def __getitem__(self, k: _KT) -> _VT: ...\r
+ def __setitem__(self, k: _KT, v: _VT) -> None: ...\r
+ def __delitem__(self, v: _KT) -> None: ...\r
+ if sys.version_info < (3, 0):\r
+ def has_key(self, key: object) -> bool: ...\r
+ def __contains__(self, o: object) -> bool: ...\r
+ def __iter__(self) -> Iterator[_KT]: ...\r
+ def __str__(self) -> str: ...\r
+\r
+ def copy(self) -> WeakKeyDictionary[_KT, _VT]: ...\r
+\r
+ if sys.version_info < (3, 0):\r
+ def keys(self) -> List[_KT]: ...\r
+ def values(self) -> List[_VT]: ...\r
+ def items(self) -> List[Tuple[_KT, _VT]]: ...\r
+ def iterkeys(self) -> Iterator[_KT]: ...\r
+ def itervalues(self) -> Iterator[_VT]: ...\r
+ def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ...\r
+ def iterkeyrefs(self) -> Iterator[ref[_KT]]: ...\r
+ else:\r
+ # These are incompatible with Mapping\r
+ def keys(self) -> Iterator[_KT]: ... # type: ignore\r
+ def values(self) -> Iterator[_VT]: ... # type: ignore\r
+ def items(self) -> Iterator[Tuple[_KT, _VT]]: ... # type: ignore\r
+ def keyrefs(self) -> List[ref[_KT]]: ...\r
+\r
+if sys.version_info >= (3, 4):\r
+ class finalize:\r
+ def __init__(self, obj: _S, func: Callable[..., _T], *args: Any, **kwargs: Any) -> None: ...\r
+ def __call__(self, _: Any = ...) -> Optional[_T]: ...\r
+ def detach(self) -> Optional[Tuple[_S, _T, Tuple[Any, ...], Dict[str, Any]]]: ...\r
+ def peek(self) -> Optional[Tuple[_S, _T, Tuple[Any, ...], Dict[str, Any]]]: ...\r
+ alive: bool\r
+ atexit: bool\r