3RNN/Lib/site-packages/scipy/spatial/distance.pyi
2024-05-26 19:49:15 +02:00

212 lines
5.1 KiB
Python

from __future__ import annotations
from typing import (overload, Any, SupportsFloat, Literal, Protocol, SupportsIndex)
import numpy as np
from numpy.typing import ArrayLike, NDArray
# Anything that can be parsed by `np.float64.__init__` and is thus
# compatible with `ndarray.__setitem__` (for a float64 array)
_FloatValue = None | str | bytes | SupportsFloat | SupportsIndex
class _MetricCallback1(Protocol):
def __call__(
self, __XA: NDArray[Any], __XB: NDArray[Any]
) -> _FloatValue: ...
class _MetricCallback2(Protocol):
def __call__(
self, __XA: NDArray[Any], __XB: NDArray[Any], **kwargs: Any
) -> _FloatValue: ...
# TODO: Use a single protocol with a parameter specification variable
# once available (PEP 612)
_MetricCallback = _MetricCallback1 | _MetricCallback2
_MetricKind = Literal[
'braycurtis',
'canberra',
'chebychev', 'chebyshev', 'cheby', 'cheb', 'ch',
'cityblock', 'cblock', 'cb', 'c',
'correlation', 'co',
'cosine', 'cos',
'dice',
'euclidean', 'euclid', 'eu', 'e',
'hamming', 'hamm', 'ha', 'h',
'minkowski', 'mi', 'm', 'pnorm',
'jaccard', 'jacc', 'ja', 'j',
'jensenshannon', 'js',
'kulczynski1',
'mahalanobis', 'mahal', 'mah',
'rogerstanimoto',
'russellrao',
'seuclidean', 'se', 's',
'sokalmichener',
'sokalsneath',
'sqeuclidean', 'sqe', 'sqeuclid',
'yule',
]
# Function annotations
def braycurtis(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> np.float64: ...
def canberra(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> np.float64: ...
# TODO: Add `metric`-specific overloads
# Returns a float64 or float128 array, depending on the input dtype
@overload
def cdist(
XA: ArrayLike,
XB: ArrayLike,
metric: _MetricKind = ...,
*,
out: None | NDArray[np.floating[Any]] = ...,
p: float = ...,
w: ArrayLike | None = ...,
V: ArrayLike | None = ...,
VI: ArrayLike | None = ...,
) -> NDArray[np.floating[Any]]: ...
@overload
def cdist(
XA: ArrayLike,
XB: ArrayLike,
metric: _MetricCallback,
*,
out: None | NDArray[np.floating[Any]] = ...,
**kwargs: Any,
) -> NDArray[np.floating[Any]]: ...
# TODO: Wait for dtype support; the return type is
# dependent on the input arrays dtype
def chebyshev(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> Any: ...
# TODO: Wait for dtype support; the return type is
# dependent on the input arrays dtype
def cityblock(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> Any: ...
def correlation(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ..., centered: bool = ...
) -> np.float64: ...
def cosine(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> np.float64: ...
def dice(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> float: ...
def directed_hausdorff(
u: ArrayLike, v: ArrayLike, seed: int | None = ...
) -> tuple[float, int, int]: ...
def euclidean(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> float: ...
def hamming(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> np.float64: ...
def is_valid_dm(
D: ArrayLike,
tol: float = ...,
throw: bool = ...,
name: str | None = ...,
warning: bool = ...,
) -> bool: ...
def is_valid_y(
y: ArrayLike,
warning: bool = ...,
throw: bool = ...,
name: str | None = ...,
) -> bool: ...
def jaccard(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> np.float64: ...
def jensenshannon(
p: ArrayLike, q: ArrayLike, base: float | None = ...
) -> np.float64: ...
def kulczynski1(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> np.float64: ...
def mahalanobis(
u: ArrayLike, v: ArrayLike, VI: ArrayLike
) -> np.float64: ...
def minkowski(
u: ArrayLike, v: ArrayLike, p: float = ..., w: ArrayLike | None = ...
) -> float: ...
def num_obs_dm(d: ArrayLike) -> int: ...
def num_obs_y(Y: ArrayLike) -> int: ...
# TODO: Add `metric`-specific overloads
@overload
def pdist(
X: ArrayLike,
metric: _MetricKind = ...,
*,
out: None | NDArray[np.floating[Any]] = ...,
p: float = ...,
w: ArrayLike | None = ...,
V: ArrayLike | None = ...,
VI: ArrayLike | None = ...,
) -> NDArray[np.floating[Any]]: ...
@overload
def pdist(
X: ArrayLike,
metric: _MetricCallback,
*,
out: None | NDArray[np.floating[Any]] = ...,
**kwargs: Any,
) -> NDArray[np.floating[Any]]: ...
def seuclidean(
u: ArrayLike, v: ArrayLike, V: ArrayLike
) -> float: ...
def sokalmichener(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> float: ...
def sokalsneath(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> np.float64: ...
def sqeuclidean(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> np.float64: ...
def squareform(
X: ArrayLike,
force: Literal["no", "tomatrix", "tovector"] = ...,
checks: bool = ...,
) -> NDArray[Any]: ...
def rogerstanimoto(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> float: ...
def russellrao(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> float: ...
def yule(
u: ArrayLike, v: ArrayLike, w: ArrayLike | None = ...
) -> float: ...