--- /dev/null
+from _typeshed import SupportsLenAndGetItem
+from typing import overload
+from typing_extensions import Literal
+
+_Vector = SupportsLenAndGetItem[float]
+
+class AnnoyIndex:
+ f: int
+ def __init__(self, f: int, metric: Literal["angular", "euclidean", "manhattan", "hamming", "dot"]) -> None: ...
+ def load(self, fn: str, prefault: bool = ...) -> Literal[True]: ...
+ def save(self, fn: str, prefault: bool = ...) -> Literal[True]: ...
+ @overload
+ def get_nns_by_item(self, i: int, n: int, search_k: int = ..., include_distances: Literal[False] = ...) -> list[int]: ...
+ @overload
+ def get_nns_by_item(
+ self, i: int, n: int, search_k: int, include_distances: Literal[True]
+ ) -> tuple[list[int], list[float]]: ...
+ @overload
+ def get_nns_by_item(
+ self, i: int, n: int, search_k: int = ..., *, include_distances: Literal[True]
+ ) -> tuple[list[int], list[float]]: ...
+ @overload
+ def get_nns_by_vector(
+ self, vector: _Vector, n: int, search_k: int = ..., include_distances: Literal[False] = ...
+ ) -> list[int]: ...
+ @overload
+ def get_nns_by_vector(
+ self, vector: _Vector, n: int, search_k: int, include_distances: Literal[True]
+ ) -> tuple[list[int], list[float]]: ...
+ @overload
+ def get_nns_by_vector(
+ self, vector: _Vector, n: int, search_k: int = ..., *, include_distances: Literal[True]
+ ) -> tuple[list[int], list[float]]: ...
+ def get_item_vector(self, __i: int) -> list[float]: ...
+ def add_item(self, i: int, vector: _Vector) -> None: ...
+ def on_disk_build(self, fn: str) -> Literal[True]: ...
+ def build(self, n_trees: int, n_jobs: int = ...) -> Literal[True]: ...
+ def unbuild(self) -> Literal[True]: ...
+ def unload(self) -> Literal[True]: ...
+ def get_distance(self, __i: int, __j: int) -> float: ...
+ def get_n_items(self) -> int: ...
+ def get_n_trees(self) -> int: ...
+ def verbose(self, __v: bool) -> Literal[True]: ...
+ def set_seed(self, __s: int) -> None: ...