distance.pyi 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. import sys
  2. from typing import (overload, Optional, Any, Union, Tuple, SupportsFloat,
  3. Literal, Protocol, SupportsIndex)
  4. import numpy as np
  5. from numpy.typing import ArrayLike, NDArray
  6. # Anything that can be parsed by `np.float64.__init__` and is thus
  7. # compatible with `ndarray.__setitem__` (for a float64 array)
  8. _FloatValue = Union[None, str, bytes, SupportsFloat, SupportsIndex]
  9. class _MetricCallback1(Protocol):
  10. def __call__(
  11. self, __XA: NDArray[Any], __XB: NDArray[Any]
  12. ) -> _FloatValue: ...
  13. class _MetricCallback2(Protocol):
  14. def __call__(
  15. self, __XA: NDArray[Any], __XB: NDArray[Any], **kwargs: Any
  16. ) -> _FloatValue: ...
  17. # TODO: Use a single protocol with a parameter specification variable
  18. # once available (PEP 612)
  19. _MetricCallback = Union[_MetricCallback1, _MetricCallback2]
  20. _MetricKind = Literal[
  21. 'braycurtis',
  22. 'canberra',
  23. 'chebychev', 'chebyshev', 'cheby', 'cheb', 'ch',
  24. 'cityblock', 'cblock', 'cb', 'c',
  25. 'correlation', 'co',
  26. 'cosine', 'cos',
  27. 'dice',
  28. 'euclidean', 'euclid', 'eu', 'e',
  29. 'hamming', 'hamm', 'ha', 'h',
  30. 'minkowski', 'mi', 'm', 'pnorm',
  31. 'jaccard', 'jacc', 'ja', 'j',
  32. 'jensenshannon', 'js',
  33. 'kulsinski', 'kulczynski1',
  34. 'mahalanobis', 'mahal', 'mah',
  35. 'rogerstanimoto',
  36. 'russellrao',
  37. 'seuclidean', 'se', 's',
  38. 'sokalmichener',
  39. 'sokalsneath',
  40. 'sqeuclidean', 'sqe', 'sqeuclid',
  41. 'yule',
  42. ]
  43. # Function annotations
  44. def braycurtis(
  45. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  46. ) -> np.float64: ...
  47. def canberra(
  48. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  49. ) -> np.float64: ...
  50. # TODO: Add `metric`-specific overloads
  51. # Returns a float64 or float128 array, depending on the input dtype
  52. @overload
  53. def cdist(
  54. XA: ArrayLike,
  55. XB: ArrayLike,
  56. metric: _MetricKind = ...,
  57. *,
  58. out: None | NDArray[np.floating[Any]] = ...,
  59. p: float = ...,
  60. w: Optional[ArrayLike] = ...,
  61. V: Optional[ArrayLike] = ...,
  62. VI: Optional[ArrayLike] = ...,
  63. ) -> NDArray[np.floating[Any]]: ...
  64. @overload
  65. def cdist(
  66. XA: ArrayLike,
  67. XB: ArrayLike,
  68. metric: _MetricCallback,
  69. *,
  70. out: None | NDArray[np.floating[Any]] = ...,
  71. **kwargs: Any,
  72. ) -> NDArray[np.floating[Any]]: ...
  73. # TODO: Wait for dtype support; the return type is
  74. # dependent on the input arrays dtype
  75. def chebyshev(
  76. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  77. ) -> Any: ...
  78. # TODO: Wait for dtype support; the return type is
  79. # dependent on the input arrays dtype
  80. def cityblock(
  81. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  82. ) -> Any: ...
  83. def correlation(
  84. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ..., centered: bool = ...
  85. ) -> np.float64: ...
  86. def cosine(
  87. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  88. ) -> np.float64: ...
  89. def dice(
  90. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  91. ) -> float: ...
  92. def directed_hausdorff(
  93. u: ArrayLike, v: ArrayLike, seed: Optional[int] = ...
  94. ) -> Tuple[float, int, int]: ...
  95. def euclidean(
  96. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  97. ) -> float: ...
  98. def hamming(
  99. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  100. ) -> np.float64: ...
  101. def is_valid_dm(
  102. D: ArrayLike,
  103. tol: float = ...,
  104. throw: bool = ...,
  105. name: Optional[str] = ...,
  106. warning: bool = ...,
  107. ) -> bool: ...
  108. def is_valid_y(
  109. y: ArrayLike,
  110. warning: bool = ...,
  111. throw: bool = ...,
  112. name: Optional[str] = ...,
  113. ) -> bool: ...
  114. def jaccard(
  115. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  116. ) -> np.float64: ...
  117. def jensenshannon(
  118. p: ArrayLike, q: ArrayLike, base: Optional[float] = ...
  119. ) -> np.float64: ...
  120. def kulsinski(
  121. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  122. ) -> np.float64: ...
  123. def kulczynski1(
  124. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  125. ) -> np.float64: ...
  126. def mahalanobis(
  127. u: ArrayLike, v: ArrayLike, VI: ArrayLike
  128. ) -> np.float64: ...
  129. def minkowski(
  130. u: ArrayLike, v: ArrayLike, p: float = ..., w: Optional[ArrayLike] = ...
  131. ) -> float: ...
  132. def num_obs_dm(d: ArrayLike) -> int: ...
  133. def num_obs_y(Y: ArrayLike) -> int: ...
  134. # TODO: Add `metric`-specific overloads
  135. @overload
  136. def pdist(
  137. X: ArrayLike,
  138. metric: _MetricKind = ...,
  139. *,
  140. out: None | NDArray[np.floating[Any]] = ...,
  141. p: float = ...,
  142. w: Optional[ArrayLike] = ...,
  143. V: Optional[ArrayLike] = ...,
  144. VI: Optional[ArrayLike] = ...,
  145. ) -> NDArray[np.floating[Any]]: ...
  146. @overload
  147. def pdist(
  148. X: ArrayLike,
  149. metric: _MetricCallback,
  150. *,
  151. out: None | NDArray[np.floating[Any]] = ...,
  152. **kwargs: Any,
  153. ) -> NDArray[np.floating[Any]]: ...
  154. def seuclidean(
  155. u: ArrayLike, v: ArrayLike, V: ArrayLike
  156. ) -> float: ...
  157. def sokalmichener(
  158. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  159. ) -> float: ...
  160. def sokalsneath(
  161. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  162. ) -> np.float64: ...
  163. def sqeuclidean(
  164. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  165. ) -> np.float64: ...
  166. def squareform(
  167. X: ArrayLike,
  168. force: Literal["no", "tomatrix", "tovector"] = ...,
  169. checks: bool = ...,
  170. ) -> NDArray[Any]: ...
  171. def rogerstanimoto(
  172. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  173. ) -> float: ...
  174. def russellrao(
  175. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  176. ) -> float: ...
  177. def yule(
  178. u: ArrayLike, v: ArrayLike, w: Optional[ArrayLike] = ...
  179. ) -> float: ...