from typing import ( Any, Generic, TypeVar, overload, ) import numpy as np import numpy.typing as npt from pandas._typing import ( IntervalClosedType, Timedelta, Timestamp, ) VALID_CLOSED: frozenset[str] _OrderableScalarT = TypeVar("_OrderableScalarT", int, float) _OrderableTimesT = TypeVar("_OrderableTimesT", Timestamp, Timedelta) _OrderableT = TypeVar("_OrderableT", int, float, Timestamp, Timedelta) class _LengthDescriptor: @overload def __get__( self, instance: Interval[_OrderableScalarT], owner: Any ) -> _OrderableScalarT: ... @overload def __get__( self, instance: Interval[_OrderableTimesT], owner: Any ) -> Timedelta: ... class _MidDescriptor: @overload def __get__(self, instance: Interval[_OrderableScalarT], owner: Any) -> float: ... @overload def __get__( self, instance: Interval[_OrderableTimesT], owner: Any ) -> _OrderableTimesT: ... class IntervalMixin: @property def closed_left(self) -> bool: ... @property def closed_right(self) -> bool: ... @property def open_left(self) -> bool: ... @property def open_right(self) -> bool: ... @property def is_empty(self) -> bool: ... def _check_closed_matches(self, other: IntervalMixin, name: str = ...) -> None: ... class Interval(IntervalMixin, Generic[_OrderableT]): @property def left(self: Interval[_OrderableT]) -> _OrderableT: ... @property def right(self: Interval[_OrderableT]) -> _OrderableT: ... @property def closed(self) -> IntervalClosedType: ... mid: _MidDescriptor length: _LengthDescriptor def __init__( self, left: _OrderableT, right: _OrderableT, closed: IntervalClosedType = ..., ) -> None: ... def __hash__(self) -> int: ... @overload def __contains__( self: Interval[Timedelta], key: Timedelta | Interval[Timedelta] ) -> bool: ... @overload def __contains__( self: Interval[Timestamp], key: Timestamp | Interval[Timestamp] ) -> bool: ... @overload def __contains__( self: Interval[_OrderableScalarT], key: _OrderableScalarT | Interval[_OrderableScalarT], ) -> bool: ... @overload def __add__( self: Interval[_OrderableTimesT], y: Timedelta ) -> Interval[_OrderableTimesT]: ... @overload def __add__( self: Interval[int], y: _OrderableScalarT ) -> Interval[_OrderableScalarT]: ... @overload def __add__(self: Interval[float], y: float) -> Interval[float]: ... @overload def __radd__( self: Interval[_OrderableTimesT], y: Timedelta ) -> Interval[_OrderableTimesT]: ... @overload def __radd__( self: Interval[int], y: _OrderableScalarT ) -> Interval[_OrderableScalarT]: ... @overload def __radd__(self: Interval[float], y: float) -> Interval[float]: ... @overload def __sub__( self: Interval[_OrderableTimesT], y: Timedelta ) -> Interval[_OrderableTimesT]: ... @overload def __sub__( self: Interval[int], y: _OrderableScalarT ) -> Interval[_OrderableScalarT]: ... @overload def __sub__(self: Interval[float], y: float) -> Interval[float]: ... @overload def __rsub__( self: Interval[_OrderableTimesT], y: Timedelta ) -> Interval[_OrderableTimesT]: ... @overload def __rsub__( self: Interval[int], y: _OrderableScalarT ) -> Interval[_OrderableScalarT]: ... @overload def __rsub__(self: Interval[float], y: float) -> Interval[float]: ... @overload def __mul__( self: Interval[int], y: _OrderableScalarT ) -> Interval[_OrderableScalarT]: ... @overload def __mul__(self: Interval[float], y: float) -> Interval[float]: ... @overload def __rmul__( self: Interval[int], y: _OrderableScalarT ) -> Interval[_OrderableScalarT]: ... @overload def __rmul__(self: Interval[float], y: float) -> Interval[float]: ... @overload def __truediv__( self: Interval[int], y: _OrderableScalarT ) -> Interval[_OrderableScalarT]: ... @overload def __truediv__(self: Interval[float], y: float) -> Interval[float]: ... @overload def __floordiv__( self: Interval[int], y: _OrderableScalarT ) -> Interval[_OrderableScalarT]: ... @overload def __floordiv__(self: Interval[float], y: float) -> Interval[float]: ... def overlaps(self: Interval[_OrderableT], other: Interval[_OrderableT]) -> bool: ... def intervals_to_interval_bounds( intervals: np.ndarray, validate_closed: bool = ... ) -> tuple[np.ndarray, np.ndarray, IntervalClosedType]: ... class IntervalTree(IntervalMixin): def __init__( self, left: np.ndarray, right: np.ndarray, closed: IntervalClosedType = ..., leaf_size: int = ..., ) -> None: ... @property def mid(self) -> np.ndarray: ... @property def length(self) -> np.ndarray: ... def get_indexer(self, target) -> npt.NDArray[np.intp]: ... def get_indexer_non_unique( self, target ) -> tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]]: ... _na_count: int @property def is_overlapping(self) -> bool: ... @property def is_monotonic_increasing(self) -> bool: ... def clear_mapping(self) -> None: ...