Skip to main content

Smaller & Faster Single-File Vector Search Engine from Unum

Project description

USearch

Smaller & Faster Single-File
Similarity Search Engine for Vectors & 🔜 Texts


Discord     LinkedIn     Twitter     Blog     GitHub

Spatial • Binary • Probabilistic • User-Defined Metrics
C++ 11Python 3JavaScriptJavaRustC 99Objective-CSwiftC#GoLangWolfram
Linux • MacOS • Windows • iOS • WebAssembly • SQLite3


Technical Insights and related articles:

Comparison with FAISS

FAISS is a widely recognized standard for high-performance vector search engines. USearch and FAISS both employ the same HNSW algorithm, but they differ significantly in their design principles. USearch is compact and broadly compatible without sacrificing performance, primarily focusing on user-defined metrics and fewer dependencies.

FAISS USearch Improvement
Indexing time ⁰
100 Million 96d f32, f16, i8 vectors 2.6 · 2.6 · 2.6 h 0.3 · 0.2 · 0.2 h 9.6 · 10.4 · 10.7 x
100 Million 1536d f32, f16, i8 vectors 5.0 · 4.1 · 3.8 h 2.1 · 1.1 · 0.8 h 2.3 · 3.6 · 4.4 x
Codebase length ¹ 84 K SLOC 3 K SLOC maintainable
Supported metrics ² 9 fixed metrics any metric extendible
Supported languages ³ C++, Python 10 languages portable
Supported ID types ⁴ 32-bit, 64-bit 32-bit, 40-bit, 64-bit efficient
Required dependencies ⁵ BLAS, OpenMP - light-weight
Bindings ⁶ SWIG Native low-latency
Python binding size ⁷ ~ 10 MB < 1 MB deployable

Tested on Intel Sapphire Rapids, with the simplest inner-product distance, equivalent recall, and memory consumption while also providing far superior search speed. ¹ A shorter codebase of usearch/ over faiss/ makes the project easier to maintain and audit. ² User-defined metrics allow you to customize your search for various applications, from GIS to creating custom metrics for composite embeddings from multiple AI models or hybrid full-text and semantic search. ³ With USearch, you can reuse the same preconstructed index in various programming languages. ⁴ The 40-bit integer allows you to store 4B+ vectors without allocating 8 bytes for every neighbor reference in the proximity graph. ⁵ Lack of obligatory dependencies makes USearch much more portable. ⁶ Native bindings introduce lower call latencies than more straightforward approaches. ⁷ Lighter bindings make downloads and deployments faster.

Base functionality is identical to FAISS, and the interface must be familiar if you have ever investigated Approximate Nearest Neighbors search:

$ pip install numpy usearch

import numpy as np
from usearch.index import Index

index = Index(ndim=3)

vector = np.array([0.2, 0.6, 0.4])
index.add(42, vector)

matches = index.search(vector, 10)

assert matches[0].key == 42
assert matches[0].distance <= 0.001
assert np.allclose(index[42], vector, atol=0.1) # Ensure high tolerance in mixed-precision comparisons

More settings are always available, and the API is designed to be as flexible as possible.

index = Index(
    ndim=3, # Define the number of dimensions in input vectors
    metric='cos', # Choose 'l2sq', 'haversine' or other metric, default = 'ip'
    dtype='f32', # Quantize to 'f16' or 'i8' if needed, default = 'f32'
    connectivity=16, # Optional: Limit number of neighbors per graph node
    expansion_add=128, # Optional: Control the recall of indexing
    expansion_search=64, # Optional: Control the quality of the search
    multi=False, # Optional: Allow multiple vectors per key, default = False
)

Serialization & Serving Index from Disk

USearch supports multiple forms of serialization:

  • Into a file defined with a path.
  • Into a stream defined with a callback, serializing or reconstructing incrementally.
  • Into a buffer of fixed length or a memory-mapped file that supports random access.

The latter allows you to serve indexes from external memory, enabling you to optimize your server choices for indexing speed and serving costs. This can result in 20x cost reduction on AWS and other public clouds.

index.save("index.usearch")

loaded_copy = index.load("index.usearch")
view = Index.restore("index.usearch", view=True)

other_view = Index(ndim=..., metric=...)
other_view.view("index.usearch")

Exact vs. Approximate Search

Approximate search methods, such as HNSW, are predominantly used when an exact brute-force search becomes too resource-intensive. This typically occurs when you have millions of entries in a collection. For smaller collections, we offer a more direct approach with the search method.

from usearch.index import search, MetricKind, Matches, BatchMatches
import numpy as np

# Generate 10'000 random vectors with 1024 dimensions
vectors = np.random.rand(10_000, 1024).astype(np.float32)
vector = np.random.rand(1024).astype(np.float32)

one_in_many: Matches = search(vectors, vector, 50, MetricKind.L2sq, exact=True)
many_in_many: BatchMatches = search(vectors, vectors, 50, MetricKind.L2sq, exact=True)

If you pass the exact=True argument, the system bypasses indexing altogether and performs a brute-force search through the entire dataset using SIMD-optimized similarity metrics from SimSIMD. When compared to FAISS's IndexFlatL2 in Google Colab, USearch may offer up to a 20x performance improvement:

  • faiss.IndexFlatL2: 55.3 ms.
  • usearch.index.search: 2.54 ms.

Indexes for Multi-Index Lookups

For larger workloads targeting billions or even trillions of vectors, parallel multi-index lookups become invaluable. Instead of constructing one extensive index, you can build multiple smaller ones and view them together.

from usearch.index import Indexes

multi_index = Indexes(
    indexes: Iterable[usearch.index.Index] = [...],
    paths: Iterable[os.PathLike] = [...],
    view: bool = False,
    threads: int = 0,
)
multi_index.search(...)

Clustering

Once the index is constructed, USearch can perform K-Nearest Neighbors Clustering much faster than standalone clustering libraries, like SciPy, UMap, and tSNE. Same for dimensionality reduction with PCA. Essentially, the Index itself can be seen as a clustering, allowing iterative deepening.

clustering = index.cluster(
    min_count=10, # Optional
    max_count=15, # Optional
    threads=..., # Optional
)

# Get the clusters and their sizes
centroid_keys, sizes = clustering.centroids_popularity

# Use Matplotlib to draw a histogram
clustering.plot_centroids_popularity()

# Export a NetworkX graph of the clusters
g = clustering.network

# Get members of a specific cluster
first_members = clustering.members_of(centroid_keys[0])

# Deepen into that cluster, splitting it into more parts, all the same arguments supported
sub_clustering = clustering.subcluster(min_count=..., max_count=...)

The resulting clustering isn't identical to K-Means or other conventional approaches but serves the same purpose. Alternatively, using Scikit-Learn on a 1 Million point dataset, one may expect queries to take anywhere from minutes to hours, depending on the number of clusters you want to highlight. For 50'000 clusters, the performance difference between USearch and conventional clustering methods may easily reach 100x.

Joins, One-to-One, One-to-Many, and Many-to-Many Mappings

One of the big questions these days is how AI will change the world of databases and data management. Most databases are still struggling to implement high-quality fuzzy search, and the only kind of joins they know are deterministic. A join differs from searching for every entry, requiring a one-to-one mapping banning collisions among separate search results.

Exact Search Fuzzy Search Semantic Search ?
Exact Join Fuzzy Join ? Semantic Join ??

Using USearch, one can implement sub-quadratic complexity approximate, fuzzy, and semantic joins. This can be useful in any fuzzy-matching tasks common to Database Management Software.

men = Index(...)
women = Index(...)
pairs: dict = men.join(women, max_proposals=0, exact=False)

Read more in the post: Combinatorial Stable Marriages for Semantic Search 💍

User-Defined Functions

While most vector search packages concentrate on just a few metrics - "Inner Product distance" and "Euclidean distance," USearch extends this list to include any user-defined metrics. This flexibility allows you to customize your search for various applications, from computing geospatial coordinates with the rare Haversine distance to creating custom metrics for composite embeddings from multiple AI models.

USearch: Vector Search Approaches

Unlike older approaches indexing high-dimensional spaces, like KD-Trees and Locality Sensitive Hashing, HNSW doesn't require vectors to be identical in length. They only have to be comparable. So you can apply it in obscure applications, like searching for similar sets or fuzzy text matching, using GZip as a distance function.

Read more about JIT and UDF in USearch Python SDK.

Memory Efficiency, Downcasting, and Quantization

Training a quantization model and dimension-reduction is a common approach to accelerate vector search. Those, however, are only sometimes reliable, can significantly affect the statistical properties of your data, and require regular adjustments if your distribution shifts. Instead, we have focused on high-precision arithmetic over low-precision downcasted vectors. The same index, and add and search operations will automatically down-cast or up-cast between f64_t, f32_t, f16_t, i8_t, and single-bit representations. You can use the following command to check, if hardware acceleration is enabled:

$ python -c 'from usearch.index import Index; print(Index(ndim=768, metric="cos", dtype="f16").hardware_acceleration)'
> avx512+f16
$ python -c 'from usearch.index import Index; print(Index(ndim=166, metric="tanimoto").hardware_acceleration)'
> avx512+popcnt

Using smaller numeric types will save you RAM needed to store the vectors, but you can also compress the neighbors lists forming our proximity graphs. By default, 32-bit uint32_t is used to enumerate those, which is not enough if you need to address over 4 Billion entries. For such cases we provide a custom uint40_t type, that will still be 37.5% more space-efficient than the commonly used 8-byte integers, and will scale up to 1 Trillion entries.

USearch uint40_t support

Functionality

By now, the core functionality is supported across all bindings. Broader functionality is ported per request. In some cases, like Batch operations, feature parity is meaningless, as the host language has full multi-threading capabilities and the USearch index structure is concurrent by design, so the users can implement batching/scheduling/load-balancing in the most optimal way for their applications.

C++ 11 Python 3 C 99 Java JavaScript Rust GoLang Swift
Add, search, remove
Save, load, view
User-defined metrics
Batch operations
Joins
Variable-length vectors
4B+ capacities

Application Examples

USearch + AI = Multi-Modal Semantic Search

USearch Semantic Image Search

AI has a growing number of applications, but one of the coolest classic ideas is to use it for Semantic Search. One can take an encoder model, like the multi-modal UForm, and a web-programming framework, like UCall, and build a text-to-image search platform in just 20 lines of Python.

import ucall
import uform
import usearch

import numpy as np
import PIL as pil

server = ucall.Server()
model = uform.get_model('unum-cloud/uform-vl-multilingual')
index = usearch.index.Index(ndim=256)

@server
def add(key: int, photo: pil.Image.Image):
    image = model.preprocess_image(photo)
    vector = model.encode_image(image).detach().numpy()
    index.add(key, vector.flatten(), copy=True)

@server
def search(query: str) -> np.ndarray:
    tokens = model.preprocess_text(query)
    vector = model.encode_text(tokens).detach().numpy()
    matches = index.search(vector.flatten(), 3)
    return matches.keys

server.run()

A more complete demo with Streamlit is available on GitHub. We have pre-processed some commonly used datasets, cleaned the images, produced the vectors, and pre-built the index.

Dataset Modalities Images Download
Unsplash Images & Descriptions 25 K HuggingFace / Unum
Conceptual Captions Images & Descriptions 3 M HuggingFace / Unum
Arxiv Titles & Abstracts 2 M HuggingFace / Unum

USearch + RDKit = Molecular Search

Comparing molecule graphs and searching for similar structures is expensive and slow. It can be seen as a special case of the NP-Complete Subgraph Isomorphism problem. Luckily, domain-specific approximate methods exist. The one commonly used in Chemistry is to generate structures from SMILES and later hash them into binary fingerprints. The latter are searchable with binary similarity metrics, like the Tanimoto coefficient. Below is an example using the RDKit package.

from usearch.index import Index, MetricKind
from rdkit import Chem
from rdkit.Chem import AllChem

import numpy as np

molecules = [Chem.MolFromSmiles('CCOC'), Chem.MolFromSmiles('CCO')]
encoder = AllChem.GetRDKitFPGenerator()

fingerprints = np.vstack([encoder.GetFingerprint(x) for x in molecules])
fingerprints = np.packbits(fingerprints, axis=1)

index = Index(ndim=2048, metric=MetricKind.Tanimoto)
keys = np.arange(len(molecules))

index.add(keys, fingerprints)
matches = index.search(fingerprints, 10)

That method was used to build the "USearch Molecules", one of the largest Chem-Informatics datasets, containing 7 billion small molecules and 28 billion fingerprints.

USearch + POI Coordinates = GIS Applications... on iOS?

USearch Maps with SwiftUI

With Objective-C and Swift iOS bindings, USearch can be easily used in mobile applications. The SwiftVectorSearch project illustrates how to build a dynamic, real-time search system on iOS. In this example, we use 2-dimensional vectors—encoded as latitude and longitude—to find the closest Points of Interest (POIs) on a map. The search is based on the Haversine distance metric but can easily be extended to support high-dimensional vectors.

Integrations

Citations

@software{Vardanian_USearch_2023,
doi = {10.5281/zenodo.7949416},
author = {Vardanian, Ash},
title = {{USearch by Unum Cloud}},
url = {https://github.com/unum-cloud/usearch},
version = {2.9.2},
year = {2023},
month = oct,
}

Project details


Release history Release notifications | RSS feed

This version

2.9.2

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

usearch-2.9.2-cp312-cp312-win_amd64.whl (263.3 kB view details)

Uploaded CPython 3.12 Windows x86-64

usearch-2.9.2-cp312-cp312-manylinux_2_28_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.28+ x86-64

usearch-2.9.2-cp312-cp312-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.28+ ARM64

usearch-2.9.2-cp312-cp312-macosx_11_0_arm64.whl (432.8 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

usearch-2.9.2-cp312-cp312-macosx_10_9_x86_64.whl (445.2 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

usearch-2.9.2-cp312-cp312-macosx_10_9_universal2.whl (841.6 kB view details)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

usearch-2.9.2-cp311-cp311-win_amd64.whl (263.2 kB view details)

Uploaded CPython 3.11 Windows x86-64

usearch-2.9.2-cp311-cp311-manylinux_2_28_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-2.9.2-cp311-cp311-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-2.9.2-cp311-cp311-macosx_11_0_arm64.whl (433.2 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-2.9.2-cp311-cp311-macosx_10_9_x86_64.whl (443.2 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-2.9.2-cp311-cp311-macosx_10_9_universal2.whl (840.1 kB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

usearch-2.9.2-cp310-cp310-win_amd64.whl (261.8 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-2.9.2-cp310-cp310-manylinux_2_28_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-2.9.2-cp310-cp310-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-2.9.2-cp310-cp310-macosx_11_0_arm64.whl (432.0 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-2.9.2-cp310-cp310-macosx_10_9_x86_64.whl (441.9 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-2.9.2-cp310-cp310-macosx_10_9_universal2.whl (837.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

usearch-2.9.2-cp39-cp39-win_amd64.whl (257.9 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-2.9.2-cp39-cp39-manylinux_2_28_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-2.9.2-cp39-cp39-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-2.9.2-cp39-cp39-macosx_11_0_arm64.whl (432.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-2.9.2-cp39-cp39-macosx_10_9_x86_64.whl (442.0 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-2.9.2-cp39-cp39-macosx_10_9_universal2.whl (838.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

usearch-2.9.2-cp38-cp38-win_amd64.whl (261.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-2.9.2-cp38-cp38-manylinux_2_28_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-2.9.2-cp38-cp38-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-2.9.2-cp38-cp38-macosx_11_0_arm64.whl (431.9 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-2.9.2-cp38-cp38-macosx_10_9_x86_64.whl (441.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-2.9.2-cp38-cp38-macosx_10_9_universal2.whl (837.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

usearch-2.9.2-cp37-cp37m-win_amd64.whl (262.6 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-2.9.2-cp37-cp37m-manylinux_2_28_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ x86-64

usearch-2.9.2-cp37-cp37m-manylinux_2_28_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-2.9.2-cp37-cp37m-macosx_10_9_x86_64.whl (437.5 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file usearch-2.9.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: usearch-2.9.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 263.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for usearch-2.9.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2bac2644ba89e1020125934d40ebae5cd51174bf63c07a1585b2c5d7f4122173
MD5 55f9e2faa803631a3b99c2af12d2ceae
BLAKE2b-256 8eec251d424f378bdae1501a8b06e6aab0d0ba90b202494c4d86e75006680c3f

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2f5b772717bd35af31864152cc80142148b3960075fecce08121ae71103d107b
MD5 0f2417b2c7662884a2a617396fa30c76
BLAKE2b-256 519b799bb17068ec1a58b8f52c1af48519c2b14c87914512a673e735b3dd2898

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 99dae59ce7229feee019cb0ace60d2d92fc4e32403f11ba7fe6d9fd2caf077a0
MD5 e9f91543b93200ea57f23a2316ade858
BLAKE2b-256 2104c69fdba0d0fd0413ac18d213d93e9446b71fdd76956954a62cc61e35c5b9

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ef8a67a0ca2d419bd8c0a9b074f0c827d7be8b9ea82b732c4db16bb5f67cd762
MD5 588580a705b5e4eaef28854c85690aa3
BLAKE2b-256 6459f3e32404dbe9731dec1ce252b356478902646aaf9aaf2cb4e02ccb2900b0

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 83ee57b98e7f126f9effd92a9a03b389ba33cdaeec8e0648ab7d0029e238c596
MD5 ee9e32036c8b2191bebbe70035fa056e
BLAKE2b-256 fd2e5c47071f9088b1b2eb89799d2cd512978f5a1234ffbc494c365a5a6851a7

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4af7406ffc1e4933783eb1b2adebbe0b8e38778c6ef6d4e66417f6740eda66ee
MD5 1a37446b54097afea410399e22ea49a3
BLAKE2b-256 e5354b53c2843e4d48ad64022451b16377433435052166af234eb83feff442d3

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: usearch-2.9.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 263.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for usearch-2.9.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 497dcf883f63d1d7d971b2f1c14da3a09ed3841a28816a1d6a78846eed435f0a
MD5 c63003dc2703e95930c6c14d15db4530
BLAKE2b-256 37965924ffd531521fa250da178adafc09e49231d36c9455decb8a27ac0611aa

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7462fe07e130b25055dd954323a5ae70835b170b08d5c1df77f7053ecf2e80fb
MD5 6345c125b8ea36ef41946d70a1b696ef
BLAKE2b-256 1caca54a4b667b3e9fe5026ee0e3b3a95b8d4ccc0f5ade6be3955f2167b41dc7

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 289275482b4cb9ea6a73aa6912694bb7aef691b8bb8ea30c039a40e3a6a4454c
MD5 4b44f4a59b1d867a0e4016103687987c
BLAKE2b-256 861d06c4e93c0b9f4d1ef5aaddee3b33bb17413f9d236d875708d2e41b485d6c

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b221a129179e9924d6061e0d87c890e1393b2c34ed31f3da0e3aa8d6ba5b70df
MD5 c19ee8b3371e431bf2e829767d5b847b
BLAKE2b-256 634a8965bd4ad8e4743de5cc8c7116521565145cc20cc64af43067b3ec14ed1b

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 65d15ef33273fe319b9d268d5cffe2861c47a1decc2a03fa1e3b885510978482
MD5 3a2e27afc221c908ad25167245d137f6
BLAKE2b-256 4a8994bd4363e3885f838bd25fb7de1da70c2a57b74a9f909eb92df78ae7e22b

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 78a4586dd626ea422025d7e27ed9d38dc1e532ea55f1f907758c09b172c15757
MD5 b6253a2bb8c091ba0b9f9ec0144719de
BLAKE2b-256 68726d717f47f79da9ef253c1e9040d1e4387566cfc777f8da670b6039c4e6e0

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: usearch-2.9.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 261.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for usearch-2.9.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c1c984b2811c155e2e8c224f804e85502bbdd4206d5effa0ea385737d49deb73
MD5 74cf1861e27a8c72d022e98f6e1cd598
BLAKE2b-256 3bf7ce52ed6b24d98d1cd4a0057913cdb14855e9a874b0c1272840915b2892bd

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c5d8054f745a1e68fadcd36a31543c63bdfad2b7eb1e554b23c0ce287086c004
MD5 b43ff7955eb55151d1274732d6117a9f
BLAKE2b-256 9d821191aa9eda46d34e01343b7b1d5fb750f49bf631f4ff9477986cd78436ff

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3fc8423272fa5db79dd1372ca4ffe40cb94065e407cdd2f40764fa17dee56351
MD5 bed36e0148748a4abf06c8aba0e0b3c7
BLAKE2b-256 788ca2310e5cded89adb02fcc20939dcb3431cc1060f5cb96e747cd6f68a8b03

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e75fab72179330fc7aa7d9d29d7b24cda240cd153a1f78073c07854925d23ae1
MD5 2716ec2143bd7008b7109dfbdbc7874d
BLAKE2b-256 9efaa0e04331b57ec501b680d43912fa65dcbfd123fecd577072a25a443134c5

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8fd982f9ec0ed6bf6628247234546f93b1ec73a59d0d86b23cfd4ef442f90595
MD5 d80fe7a42df06a770a562c3b06edee12
BLAKE2b-256 222dbfb16ad24c976ec376c249421deac02d744e9aa6f01cddd57328b9400dd8

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 eec5e2b570ef0c471d4628319f85c4a7ca6e439b95face0551130efa1d3ab9e3
MD5 04c4e9356ce6b77591271fc25152e238
BLAKE2b-256 56b59ebc5ac5d5aef79bae69ddca6e167de479ca2f80a60f05856c3b7074fa07

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: usearch-2.9.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 257.9 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for usearch-2.9.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 305dad01f489b87fdddd25d0619a4e8f01049c4cfa26b523dd203faafe9569b6
MD5 7c2fe1718b92360a72c47a3270b3f570
BLAKE2b-256 d635835356907691f8adc22f60e729aeeaeaef9b81bf07a96079c9ed33a94b4b

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0ca944e199d64f7bacca9fd2bae99a17a57934cdc7f53f13e9d0475793538b26
MD5 291b1bbc7acaa0fbac0ca43197766ce0
BLAKE2b-256 73e49f8f3eaa531fc704c1816d593a26dec1fbe8f70a4fe69da92257fae25143

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 39dc8274ea713bef6a3161f85edd547c4836d4e6fb0ee7aa72964293523d94f8
MD5 68f86231e54bda540ba048853addd9d5
BLAKE2b-256 b11d07ca68c26708dc73712d4574eff7392c3b2b7863ccb3a327e650e4cdc78c

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9459d8baca98c49d079e3f96c53f298100594ead7ad015a7a8480a77a51a4bfd
MD5 d7e5f67c2093357e5691965dce3a7a25
BLAKE2b-256 2c97b8873ee93dba2e26d078e010a8b43a6c45b4c1ac959df63b43959218fa71

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a373c0267bb98a93d6d56f14820a1d8b5b054cf7a3b12d8d344c0804d00d2144
MD5 18ae00c6e1aa0989cd3e81b42f31a227
BLAKE2b-256 76fba5cb7292ae8bb038bdbaa40cdfeb302f3f860d5c2c07306425d32ca293bb

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2905688537354c8a795a46aa245bce22661c36fcb6c34021a676db46fa366c78
MD5 af5312af5f01cb1ab39cab3220faaa3a
BLAKE2b-256 26a79714e811b228762297b22bf8d32684c8ea25026453d4b4046791e0f1b171

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: usearch-2.9.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 261.9 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for usearch-2.9.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 9bc0d6793fc02b5b0dba8190612e2c436a539dc36db89574165649c60bc4d64a
MD5 a6d0b267385669d158711233945a0b89
BLAKE2b-256 cd552f690fbbfc7e6639ef7ace481c647013862db86b77d1983b174bc39966fd

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dd61c5dd6d2864d9a1d13c1661845a7ea42e835109f3e69003035839abc14d72
MD5 96372ffae4aca6e74ab80c5e9d511007
BLAKE2b-256 fbed655fa36a0685837dbb7a25e9fab2be3856024834c8f7bc33580ce471c250

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0a287f4c9eb452b312ad2bcff54b1dcf12c6407c62e8f0d9befb37832cbf3f9c
MD5 f2b8be10e99ea0a91cb7107a736a73f4
BLAKE2b-256 eeb9d5d719765e80db3d04af25dc260fa9bb8e187fb2048c403d939ae23f3eb0

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 58f8d6f22ab82c228ca4bc1b0c6ed3c6bbabc2ef18f98ad69a899a4f4ac5ea04
MD5 85a5b7d8b63e160a1959a459a1dd5d60
BLAKE2b-256 ba685c4b3f4e3c3f0af3caaf384988dce90c94b8868cbcaf1f95499c39e2c375

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5786d4c7ccb89001ec3c2c1d9575831b8fec7b5738957c86a1daf63798f59597
MD5 aabf8eeda718eb9a67ed201680b49574
BLAKE2b-256 4206f354cd6ec2898bd19649ff6113aa89b089dd9d11e493c1092a16388ba9c1

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp38-cp38-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c4bd48741eca691f9e8e3dc992c500e1e05b87faaac6bf32b7267209a57567ec
MD5 23bb1617d0f61e12a187740499024d0d
BLAKE2b-256 f3ae7a10796545309d5e4200e0b8197bf23f4c0d68c00aca00a7b7379aca892b

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: usearch-2.9.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 262.6 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for usearch-2.9.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 919d47efddce7995a871f9bb106f2d0a506e2c9193c3fba38fcc9694d5edaeb8
MD5 8e6764f705c46752fd8c8d6017f17e74
BLAKE2b-256 d53391bbec5af51d269388237a2a9cf3760b19c198ed86626cfeb656cffc3834

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp37-cp37m-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0ba6008a07569fa8e3152c76ca74379c16c90048d57836934f49afe0f708a1d5
MD5 b4f047b02d3dca7e47d0d4e17b6df016
BLAKE2b-256 b0abef307beee2d860603e34b0017e0a7592d044a2ccb2cfa4c094c2c32a4236

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp37-cp37m-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 970821d80da00bb302f0861321971c803441212e43956865c283bb4bb89333ed
MD5 c9b420c778fd1ef0f9bd218327d2c9e4
BLAKE2b-256 4e65040f50dfcdcbe572ff7dc0e10b85da370de644a92cbc72bfbdf09561185c

See more details on using hashes here.

File details

Details for the file usearch-2.9.2-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for usearch-2.9.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 49c3c8ab546881ad3d8445f9818a6a806103a6163b653aa029e95d2ed6c992f4
MD5 b4316de1d690d6919d86b21fca02b968
BLAKE2b-256 1b12036428d241607d8e11d3f5500e302ea5d093ef43d4912994a68809b58687

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page