|
@@ -0,0 +1,177 @@
|
|
|
+# stub for SortedList. This is an exact copy of
|
|
|
+# https://github.com/grantjenks/python-sortedcontainers/blob/a419ffbd2b1c935b09f11f0971696e537fd0c510/sortedcontainers/sortedlist.pyi
|
|
|
+# (from https://github.com/grantjenks/python-sortedcontainers/pull/107)
|
|
|
+
|
|
|
+from typing import (
|
|
|
+ Any,
|
|
|
+ Callable,
|
|
|
+ Generic,
|
|
|
+ Iterable,
|
|
|
+ Iterator,
|
|
|
+ List,
|
|
|
+ MutableSequence,
|
|
|
+ Optional,
|
|
|
+ Sequence,
|
|
|
+ Tuple,
|
|
|
+ Type,
|
|
|
+ TypeVar,
|
|
|
+ Union,
|
|
|
+ overload,
|
|
|
+)
|
|
|
+
|
|
|
+_T = TypeVar("_T")
|
|
|
+_SL = TypeVar("_SL", bound=SortedList)
|
|
|
+_SKL = TypeVar("_SKL", bound=SortedKeyList)
|
|
|
+_Key = Callable[[_T], Any]
|
|
|
+_Repr = Callable[[], str]
|
|
|
+
|
|
|
+def recursive_repr(fillvalue: str = ...) -> Callable[[_Repr], _Repr]: ...
|
|
|
+
|
|
|
+class SortedList(MutableSequence[_T]):
|
|
|
+
|
|
|
+ DEFAULT_LOAD_FACTOR: int = ...
|
|
|
+ def __init__(
|
|
|
+ self, iterable: Optional[Iterable[_T]] = ..., key: Optional[_Key[_T]] = ...,
|
|
|
+ ): ...
|
|
|
+ # NB: currently mypy does not honour return type, see mypy #3307
|
|
|
+ @overload
|
|
|
+ def __new__(cls: Type[_SL], iterable: None, key: None) -> _SL: ...
|
|
|
+ @overload
|
|
|
+ def __new__(cls: Type[_SL], iterable: None, key: _Key[_T]) -> SortedKeyList[_T]: ...
|
|
|
+ @overload
|
|
|
+ def __new__(cls: Type[_SL], iterable: Iterable[_T], key: None) -> _SL: ...
|
|
|
+ @overload
|
|
|
+ def __new__(cls, iterable: Iterable[_T], key: _Key[_T]) -> SortedKeyList[_T]: ...
|
|
|
+ @property
|
|
|
+ def key(self) -> Optional[Callable[[_T], Any]]: ...
|
|
|
+ def _reset(self, load: int) -> None: ...
|
|
|
+ def clear(self) -> None: ...
|
|
|
+ def _clear(self) -> None: ...
|
|
|
+ def add(self, value: _T) -> None: ...
|
|
|
+ def _expand(self, pos: int) -> None: ...
|
|
|
+ def update(self, iterable: Iterable[_T]) -> None: ...
|
|
|
+ def _update(self, iterable: Iterable[_T]) -> None: ...
|
|
|
+ def discard(self, value: _T) -> None: ...
|
|
|
+ def remove(self, value: _T) -> None: ...
|
|
|
+ def _delete(self, pos: int, idx: int) -> None: ...
|
|
|
+ def _loc(self, pos: int, idx: int) -> int: ...
|
|
|
+ def _pos(self, idx: int) -> int: ...
|
|
|
+ def _build_index(self) -> None: ...
|
|
|
+ def __contains__(self, value: Any) -> bool: ...
|
|
|
+ def __delitem__(self, index: Union[int, slice]) -> None: ...
|
|
|
+ @overload
|
|
|
+ def __getitem__(self, index: int) -> _T: ...
|
|
|
+ @overload
|
|
|
+ def __getitem__(self, index: slice) -> List[_T]: ...
|
|
|
+ @overload
|
|
|
+ def _getitem(self, index: int) -> _T: ...
|
|
|
+ @overload
|
|
|
+ def _getitem(self, index: slice) -> List[_T]: ...
|
|
|
+ @overload
|
|
|
+ def __setitem__(self, index: int, value: _T) -> None: ...
|
|
|
+ @overload
|
|
|
+ def __setitem__(self, index: slice, value: Iterable[_T]) -> None: ...
|
|
|
+ def __iter__(self) -> Iterator[_T]: ...
|
|
|
+ def __reversed__(self) -> Iterator[_T]: ...
|
|
|
+ def __len__(self) -> int: ...
|
|
|
+ def reverse(self) -> None: ...
|
|
|
+ def islice(
|
|
|
+ self, start: Optional[int] = ..., stop: Optional[int] = ..., reverse=bool,
|
|
|
+ ) -> Iterator[_T]: ...
|
|
|
+ def _islice(
|
|
|
+ self, min_pos: int, min_idx: int, max_pos: int, max_idx: int, reverse: bool,
|
|
|
+ ) -> Iterator[_T]: ...
|
|
|
+ def irange(
|
|
|
+ self,
|
|
|
+ minimum: Optional[int] = ...,
|
|
|
+ maximum: Optional[int] = ...,
|
|
|
+ inclusive: Tuple[bool, bool] = ...,
|
|
|
+ reverse: bool = ...,
|
|
|
+ ) -> Iterator[_T]: ...
|
|
|
+ def bisect_left(self, value: _T) -> int: ...
|
|
|
+ def bisect_right(self, value: _T) -> int: ...
|
|
|
+ def bisect(self, value: _T) -> int: ...
|
|
|
+ def _bisect_right(self, value: _T) -> int: ...
|
|
|
+ def count(self, value: _T) -> int: ...
|
|
|
+ def copy(self: _SL) -> _SL: ...
|
|
|
+ def __copy__(self: _SL) -> _SL: ...
|
|
|
+ def append(self, value: _T) -> None: ...
|
|
|
+ def extend(self, values: Iterable[_T]) -> None: ...
|
|
|
+ def insert(self, index: int, value: _T) -> None: ...
|
|
|
+ def pop(self, index: int = ...) -> _T: ...
|
|
|
+ def index(
|
|
|
+ self, value: _T, start: Optional[int] = ..., stop: Optional[int] = ...
|
|
|
+ ) -> int: ...
|
|
|
+ def __add__(self: _SL, other: Iterable[_T]) -> _SL: ...
|
|
|
+ def __radd__(self: _SL, other: Iterable[_T]) -> _SL: ...
|
|
|
+ def __iadd__(self: _SL, other: Iterable[_T]) -> _SL: ...
|
|
|
+ def __mul__(self: _SL, num: int) -> _SL: ...
|
|
|
+ def __rmul__(self: _SL, num: int) -> _SL: ...
|
|
|
+ def __imul__(self: _SL, num: int) -> _SL: ...
|
|
|
+ def __eq__(self, other: Any) -> bool: ...
|
|
|
+ def __ne__(self, other: Any) -> bool: ...
|
|
|
+ def __lt__(self, other: Sequence[_T]) -> bool: ...
|
|
|
+ def __gt__(self, other: Sequence[_T]) -> bool: ...
|
|
|
+ def __le__(self, other: Sequence[_T]) -> bool: ...
|
|
|
+ def __ge__(self, other: Sequence[_T]) -> bool: ...
|
|
|
+ def __repr__(self) -> str: ...
|
|
|
+ def _check(self) -> None: ...
|
|
|
+
|
|
|
+class SortedKeyList(SortedList[_T]):
|
|
|
+ def __init__(
|
|
|
+ self, iterable: Optional[Iterable[_T]] = ..., key: _Key[_T] = ...
|
|
|
+ ) -> None: ...
|
|
|
+ def __new__(
|
|
|
+ cls, iterable: Optional[Iterable[_T]] = ..., key: _Key[_T] = ...
|
|
|
+ ) -> SortedKeyList[_T]: ...
|
|
|
+ @property
|
|
|
+ def key(self) -> Callable[[_T], Any]: ...
|
|
|
+ def clear(self) -> None: ...
|
|
|
+ def _clear(self) -> None: ...
|
|
|
+ def add(self, value: _T) -> None: ...
|
|
|
+ def _expand(self, pos: int) -> None: ...
|
|
|
+ def update(self, iterable: Iterable[_T]) -> None: ...
|
|
|
+ def _update(self, iterable: Iterable[_T]) -> None: ...
|
|
|
+ # NB: Must be T to be safely passed to self.func, yet base class imposes Any
|
|
|
+ def __contains__(self, value: _T) -> bool: ... # type: ignore
|
|
|
+ def discard(self, value: _T) -> None: ...
|
|
|
+ def remove(self, value: _T) -> None: ...
|
|
|
+ def _delete(self, pos: int, idx: int) -> None: ...
|
|
|
+ def irange(
|
|
|
+ self,
|
|
|
+ minimum: Optional[int] = ...,
|
|
|
+ maximum: Optional[int] = ...,
|
|
|
+ inclusive: Tuple[bool, bool] = ...,
|
|
|
+ reverse: bool = ...,
|
|
|
+ ): ...
|
|
|
+ def irange_key(
|
|
|
+ self,
|
|
|
+ min_key: Optional[Any] = ...,
|
|
|
+ max_key: Optional[Any] = ...,
|
|
|
+ inclusive: Tuple[bool, bool] = ...,
|
|
|
+ reserve: bool = ...,
|
|
|
+ ): ...
|
|
|
+ def bisect_left(self, value: _T) -> int: ...
|
|
|
+ def bisect_right(self, value: _T) -> int: ...
|
|
|
+ def bisect(self, value: _T) -> int: ...
|
|
|
+ def bisect_key_left(self, key: Any) -> int: ...
|
|
|
+ def _bisect_key_left(self, key: Any) -> int: ...
|
|
|
+ def bisect_key_right(self, key: Any) -> int: ...
|
|
|
+ def _bisect_key_right(self, key: Any) -> int: ...
|
|
|
+ def bisect_key(self, key: Any) -> int: ...
|
|
|
+ def count(self, value: _T) -> int: ...
|
|
|
+ def copy(self: _SKL) -> _SKL: ...
|
|
|
+ def __copy__(self: _SKL) -> _SKL: ...
|
|
|
+ def index(
|
|
|
+ self, value: _T, start: Optional[int] = ..., stop: Optional[int] = ...
|
|
|
+ ) -> int: ...
|
|
|
+ def __add__(self: _SKL, other: Iterable[_T]) -> _SKL: ...
|
|
|
+ def __radd__(self: _SKL, other: Iterable[_T]) -> _SKL: ...
|
|
|
+ def __iadd__(self: _SKL, other: Iterable[_T]) -> _SKL: ...
|
|
|
+ def __mul__(self: _SKL, num: int) -> _SKL: ...
|
|
|
+ def __rmul__(self: _SKL, num: int) -> _SKL: ...
|
|
|
+ def __imul__(self: _SKL, num: int) -> _SKL: ...
|
|
|
+ def __repr__(self) -> str: ...
|
|
|
+ def _check(self) -> None: ...
|
|
|
+
|
|
|
+SortedListWithKey = SortedKeyList
|