Python · Metrics

Metrics

import usearchfrom usearch import DenseIndex 3.0.0-rc.1 · 4c3e5023

API

Types

DenseMetricHow a dense index scores two vectors.
__init__.py:1652 ↗
class DenseMetric(IntEnum)

Values

INNER1Sum of elementwise products, unnormalized; the one metric the linear-algebra verbs accept.
ANGULAR2Cosine distance in [0, 2], zero for identical directions and blind to magnitude.
EUCLIDEAN3L2 distance, non-negative and zero only for identical vectors.
HAMMING4Count of differing bits, ranging up to the dimensionality.
JACCARD5Differing bits over union bits in [0, 1], ignoring the zeros both vectors share.
ClassDenseIndexVector search over equidimensional dense embeddings; its verbs run on the calling thread.40
lib.pyi:1903 ↗
class DenseIndex
init_ramStarts an empty, mutable graph in host memory.
lib.pyi:1908 ↗
@classmethod
def init_ram(
    dimensions: int,
    metric: DenseMetric = ...,
    quantization: Scalar = ...,
    *,
    connectivity: int = 0,
    values_per_key: int = 0,
    memory_domains: Sequence[int] | None = None,
    cpu_class: CPUClass | None = None,
) -> DenseIndex
init_vramStarts an empty, mutable graph on CUDA devices.
lib.pyi:1923 ↗
@classmethod
def init_vram(
    dimensions: int,
    metric: DenseMetric = ...,
    quantization: Scalar = ...,
    *,
    connectivity: int = 0,
    values_per_key: int = 0,
    devices: Sequence[int] | None = None,
    gpu_class: GPUClass | None = None,
) -> DenseIndex
load_ramCopies a checkpoint into a new, mutable index in host memory.
lib.pyi:1938 ↗
@classmethod
def load_ram(
    path: _PathLike,
    /,
    *,
    memory_domains: Sequence[int] | None = None,
    executor: Executor | None = None,
    values_per_key: int = 0,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    cpu_class: CPUClass | None = None,
) -> DenseIndex
load_ram_bufferCopies a monolith out of a buffer into host memory.
lib.pyi:1954 ↗
@classmethod
def load_ram_buffer(
    buffer: Buffer,
    /,
    *,
    memory_domains: Sequence[int] | None = None,
    executor: Executor | None = None,
    values_per_key: int = 0,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    cpu_class: CPUClass | None = None,
) -> DenseIndex
load_vramCopies a checkpoint into a new, mutable index on CUDA devices.
lib.pyi:1970 ↗
@classmethod
def load_vram(
    path: _PathLike,
    /,
    *,
    devices: Sequence[int] | None = None,
    executor: Executor | None = None,
    values_per_key: int = 0,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    gpu_class: GPUClass | None = None,
) -> DenseIndex
load_vram_bufferCopies a monolith out of a buffer onto CUDA devices.
lib.pyi:1986 ↗
@classmethod
def load_vram_buffer(
    buffer: Buffer,
    /,
    *,
    devices: Sequence[int] | None = None,
    executor: Executor | None = None,
    values_per_key: int = 0,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    gpu_class: GPUClass | None = None,
) -> DenseIndex
view_ramServes a checkpoint in place through a memory mapping, read-only.
lib.pyi:2002 ↗
@classmethod
def view_ram(path: _PathLike, /) -> DenseIndex
view_nvmeServes a checkpoint in place from NVMe drives, read-only.
lib.pyi:2007 ↗
@classmethod
def view_nvme(
    path: _PathLike,
    /,
    *,
    paths: Sequence[_PathLike] | None = None,
    executor: Executor | None = None,
    cpu_class: CPUClass | None = None,
) -> DenseIndex
metadata_readReads a checkpoint's geometry without loading it.
lib.pyi:2020 ↗
@staticmethod
def metadata_read(
    path: _PathLike,
    /,
    *,
    executor: Executor | None = None,
) -> DenseMetadata
metadata_read_bufferReads a monolith's geometry.
lib.pyi:2025 ↗
@staticmethod
def metadata_read_buffer(
    buffer: Buffer,
    /,
    *,
    executor: Executor | None = None,
) -> DenseMetadata
onA receiver whose verbs block on executor.
lib.pyi:2030 ↗
def on(executor: Executor, /) -> On[DenseIndex]

Python-only.

deferredA receiver whose verbs submit to executor, each answering a Deferred.
lib.pyi:2034 ↗
def deferred(executor: Executor, /) -> DeferredOn[DenseIndex]

Python-only.

describeThe frozen metadata and current counters.
lib.pyi:2038 ↗
def describe() -> DenseIndexDescription
reserveGrows the index to host at least capacity entries, a hint, since insertions grow it on demand.
lib.pyi:2042 ↗
def reserve(capacity: int, /) -> None
clearDrops every entry, keeping the capacity and geometry.
lib.pyi:2048 ↗
def clear() -> None
insertInserts a batch of vectors under their keys, all or nothing.
lib.pyi:2052 ↗
def insert(
    keys: Sequence[_KeyLike] | _Tensor,
    vectors: _Tensor,
    /,
    *,
    expansion_factor: int = 0,
    dtype: Scalar | None = None,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    stats: DenseTraversalStats | None = None,
) -> None
refineRe-selects every entry's neighbors, reporting what changed.
lib.pyi:2067 ↗
def refine(
    *,
    expansion_factor: int = 0,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    stats: DenseTraversalStats | None = None,
) -> RefineReport
healthAudits how much of the graph a search reaches.
lib.pyi:2078 ↗
def health() -> DenseReachability
countHow many entries share key.
lib.pyi:2100 ↗
def count(key: _KeyLike, /) -> int
getEvery vector stored under key, empty when it is absent.
lib.pyi:2104 ↗
def get(
    key: _KeyLike,
    arena: Arena,
    /,
    *,
    outputs_dtype: Scalar = ...,
) -> DenseVectors
multiplyEvery pair the walk scored, an approximate sparse product.
lib.pyi:2108 ↗
def multiply(
    rows: _Tensor,
    wanted: int,
    arena: Arena,
    /,
    *,
    expansion_factor: int = 0,
    dtype: Scalar | None = None,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    stats: DenseTraversalStats | None = None,
) -> DenseProducts
attendSoftmax attention folded into the walk, refused on VRAM with DeviceError.
lib.pyi:2124 ↗
def attend(
    queries: _Tensor,
    values: _Tensor,
    row_of: Callable[[Key], int | None],
    arena: Arena,
    /,
    *,
    head_count: int = 1,
    expansion_factor: int = 0,
    score_scale: float = 0.0,
    dtype: Scalar | None = None,
    values_dtype: Scalar | None = None,
    outputs_dtype: Scalar | None = None,
    carry: _Tensor | None = None,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    stats: DenseTraversalStats | None = None,
) -> DenseVectors
maxsimLate interaction over multi-row queries.
lib.pyi:2146 ↗
def maxsim(
    queries: _Tensor,
    rows_per_query: int,
    wanted: int,
    arena: Arena,
    /,
    *,
    expansion_factor: int = 0,
    traversal: Traversal = ...,
    dtype: Scalar | None = None,
    predicate: Callable[[Key], bool] | None = None,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    stats: DenseTraversalStats | None = None,
) -> DenseProducts
absorbAbsorbs and consumes every donor, one after another.
lib.pyi:2165 ↗
def absorb(
    *donors: DenseIndex = (),
    progress: _Progress | None = None,
    progress_steps: int = 0,
) -> RefineReport
splitSplits the entries into the empty receivers, leaving this index empty.
lib.pyi:2169 ↗
def split(
    *receivers: DenseIndex = (),
    expansion_factor: int = 0,
    seed: int = 0,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    stats: DenseTraversalStats | None = None,
) -> RefineReport
sampleDraws keys around focus, placed beside the shown keys.
lib.pyi:2181 ↗
def sample(
    wanted: int,
    arena: Arena,
    /,
    *,
    shown: Sequence[_KeyLike] | _Tensor | None = None,
    shown_coordinates: _Tensor | None = None,
    focus: Sequence[_KeyLike] | _Tensor | None = None,
    seed: int = 0,
    expansion_factor: int = 0,
    progress: _Progress | None = None,
    progress_steps: int = 0,
    stats: DenseTraversalStats | None = None,
) -> Sample
saveWrites a checkpoint in the layout the extension picks.
lib.pyi:2199 ↗
def save(
    path: _PathLike,
    /,
    *,
    progress: _Progress | None = None,
    progress_steps: int = 0,
) -> None
save_bufferSerializes one monolith into an arena.
lib.pyi:2203 ↗
def save_buffer(
    arena: Arena,
    /,
    *,
    progress: _Progress | None = None,
    progress_steps: int = 0,
) -> Monolith
cursorA walk DenseCursor.next pulls in batches, from starts when given.
lib.pyi:2207 ↗
def cursor(
    starts: Sequence[_KeyLike] | _Tensor | None = None,
) -> DenseCursor
search_streamA resumable stream of matches for one query.
lib.pyi:2211 ↗
def search_stream(
    query: _Tensor,
    /,
    *,
    expansion_factor: int = 0,
    dtype: Scalar | None = None,
) -> DenseSearchStream
__len__Stored entries.
lib.pyi:2252 ↗
def __len__() -> int

Python-only.

__contains__Whether any entry holds key.
lib.pyi:2256 ↗
def __contains__(key: _KeyLike, /) -> bool

Python-only.

capacityEntries hosted without growing again.
lib.pyi:2218 ↗
capacity: int
dimensionsScalars per vector.
lib.pyi:2223 ↗
dimensions: int
connectivityConnections per node.
lib.pyi:2228 ↗
connectivity: int
memory_usageBytes the handle holds.
lib.pyi:2233 ↗
memory_usage: int
cpu_classThe CPUClass dispatch picked on this machine, or None.
lib.pyi:2238 ↗
cpu_class: CPUClass | None
gpu_classThe GPUClass dispatch picked on the index's devices, or None.
lib.pyi:2243 ↗
gpu_class: GPUClass | None
shards_countLive shards.
lib.pyi:2248 ↗
shards_count: int