"""
This type stub file was generated by pyright.
"""

import numpy as np
from typing import Any
from pandas._typing import npt

class Infinity:
    """
    Provide a positive Infinity comparison method for ranking.
    """
    def __eq__(self, other) -> bool:
        ...
    
    def __ne__(self, other) -> bool:
        ...
    
    def __lt__(self, other) -> bool:
        ...
    
    def __le__(self, other) -> bool:
        ...
    
    def __gt__(self, other) -> bool:
        ...
    
    def __ge__(self, other) -> bool:
        ...
    


class NegInfinity:
    """
    Provide a negative Infinity comparison method for ranking.
    """
    def __eq__(self, other) -> bool:
        ...
    
    def __ne__(self, other) -> bool:
        ...
    
    def __lt__(self, other) -> bool:
        ...
    
    def __le__(self, other) -> bool:
        ...
    
    def __gt__(self, other) -> bool:
        ...
    
    def __ge__(self, other) -> bool:
        ...
    


def unique_deltas(arr: np.ndarray) -> np.ndarray:
    ...

def is_lexsorted(list_of_arrays: list[npt.NDArray[np.int64]]) -> bool:
    ...

def groupsort_indexer(index: np.ndarray, ngroups: int) -> tuple[np.ndarray, np.ndarray,]:
    ...

def kth_smallest(arr: np.ndarray, k: int) -> Any:
    ...

def nancorr(mat: npt.NDArray[np.float64], cov: bool = ..., minp: int | None = ...) -> npt.NDArray[np.float64]:
    ...

def nancorr_spearman(mat: npt.NDArray[np.float64], minp: int = ...) -> npt.NDArray[np.float64]:
    ...

def validate_limit(nobs: int | None, limit=...) -> int:
    ...

def pad(old: np.ndarray, new: np.ndarray, limit=...) -> npt.NDArray[np.intp]:
    ...

def pad_inplace(values: np.ndarray, mask: np.ndarray, limit=...) -> None:
    ...

def pad_2d_inplace(values: np.ndarray, mask: np.ndarray, limit=...) -> None:
    ...

def backfill(old: np.ndarray, new: np.ndarray, limit=...) -> npt.NDArray[np.intp]:
    ...

def backfill_inplace(values: np.ndarray, mask: np.ndarray, limit=...) -> None:
    ...

def backfill_2d_inplace(values: np.ndarray, mask: np.ndarray, limit=...) -> None:
    ...

def is_monotonic(arr: np.ndarray, timelike: bool) -> tuple[bool, bool, bool]:
    ...

def rank_1d(values: np.ndarray, labels: np.ndarray | None = ..., is_datetimelike: bool = ..., ties_method=..., ascending: bool = ..., pct: bool = ..., na_option=..., mask: npt.NDArray[np.bool_] | None = ...) -> np.ndarray:
    ...

def rank_2d(in_arr: np.ndarray, axis: int = ..., is_datetimelike: bool = ..., ties_method=..., ascending: bool = ..., na_option=..., pct: bool = ...) -> np.ndarray:
    ...

def diff_2d(arr: np.ndarray, out: np.ndarray, periods: int, axis: int, datetimelike: bool = ...) -> None:
    ...

def ensure_platform_int(arr: object) -> npt.NDArray[np.intp]:
    ...

def ensure_object(arr: object) -> npt.NDArray[np.object_]:
    ...

def ensure_float64(arr: object, copy=...) -> npt.NDArray[np.float64]:
    ...

def ensure_int8(arr: object, copy=...) -> npt.NDArray[np.int8]:
    ...

def ensure_int16(arr: object, copy=...) -> npt.NDArray[np.int16]:
    ...

def ensure_int32(arr: object, copy=...) -> npt.NDArray[np.int32]:
    ...

def ensure_int64(arr: object, copy=...) -> npt.NDArray[np.int64]:
    ...

def ensure_uint64(arr: object, copy=...) -> npt.NDArray[np.uint64]:
    ...

def take_1d_int8_int8(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int8_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int8_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int8_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int16_int16(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int16_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int16_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int16_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int32_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int32_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int32_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int64_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_int64_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_float32_float32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_float32_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_float64_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_object_object(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_bool_bool(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_1d_bool_object(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int8_int8(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int8_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int8_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int8_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int16_int16(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int16_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int16_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int16_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int32_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int32_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int32_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int64_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_int64_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_float32_float32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_float32_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_float64_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_object_object(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_bool_bool(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis0_bool_object(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int8_int8(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int8_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int8_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int8_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int16_int16(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int16_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int16_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int16_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int32_int32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int32_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int32_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int64_int64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_int64_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_float32_float32(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_float32_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_float64_float64(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_object_object(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_bool_bool(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_axis1_bool_object(values: np.ndarray, indexer: npt.NDArray[np.intp], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int8_int8(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int8_int32(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int8_int64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int8_float64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int16_int16(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int16_int32(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int16_int64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int16_float64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int32_int32(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int32_int64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int32_float64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int64_float64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_float32_float32(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_float32_float64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_float64_float64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_object_object(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_bool_bool(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_bool_object(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

def take_2d_multi_int64_int64(values: np.ndarray, indexer: tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]], out: np.ndarray, fill_value=...) -> None:
    ...

