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#GoLangWolframSQLite3
Linux • MacOS • Windows • iOS • WebAssembly


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)

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.1},
year = {2023},
month = oct,
}

Project details


Release history Release notifications | RSS feed

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.1-cp312-cp312-win_amd64.whl (263.1 kB view details)

Uploaded CPython 3.12 Windows x86-64

usearch-2.9.1-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.1-cp312-cp312-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.28+ ARM64

usearch-2.9.1-cp312-cp312-macosx_11_0_arm64.whl (433.2 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

usearch-2.9.1-cp312-cp312-macosx_10_9_x86_64.whl (443.8 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

usearch-2.9.1-cp312-cp312-macosx_10_9_universal2.whl (840.9 kB view details)

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

usearch-2.9.1-cp311-cp311-win_amd64.whl (263.0 kB view details)

Uploaded CPython 3.11 Windows x86-64

usearch-2.9.1-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.1-cp311-cp311-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-2.9.1-cp311-cp311-macosx_11_0_arm64.whl (433.7 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-2.9.1-cp311-cp311-macosx_10_9_x86_64.whl (441.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-2.9.1-cp311-cp311-macosx_10_9_universal2.whl (839.2 kB view details)

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

usearch-2.9.1-cp310-cp310-win_amd64.whl (261.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-2.9.1-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.1-cp310-cp310-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-2.9.1-cp310-cp310-macosx_11_0_arm64.whl (432.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-2.9.1-cp310-cp310-macosx_10_9_x86_64.whl (440.4 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-2.9.1-cp310-cp310-macosx_10_9_universal2.whl (836.6 kB view details)

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

usearch-2.9.1-cp39-cp39-win_amd64.whl (257.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-2.9.1-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.1-cp39-cp39-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-2.9.1-cp39-cp39-macosx_11_0_arm64.whl (432.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-2.9.1-cp39-cp39-macosx_10_9_x86_64.whl (440.5 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-2.9.1-cp39-cp39-macosx_10_9_universal2.whl (836.8 kB view details)

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

usearch-2.9.1-cp38-cp38-win_amd64.whl (261.7 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-2.9.1-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.1-cp38-cp38-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-2.9.1-cp38-cp38-macosx_11_0_arm64.whl (432.4 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-2.9.1-cp38-cp38-macosx_10_9_x86_64.whl (440.3 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-2.9.1-cp38-cp38-macosx_10_9_universal2.whl (836.5 kB view details)

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

usearch-2.9.1-cp37-cp37m-win_amd64.whl (262.4 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-2.9.1-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.1-cp37-cp37m-manylinux_2_28_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-2.9.1-cp37-cp37m-macosx_10_9_x86_64.whl (435.5 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-2.9.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 263.1 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bc842008b8ff35cc46e250e829937bbf3609ce1328a2dbe2642a556e079fec8b
MD5 4115d6cf8a3649f329cc44e30a001a28
BLAKE2b-256 e5a43b9587894a920e1d80fe4501b9a7a6c6396b74cd162aa4ab795acb864f70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 29f260eea9a4fef15b4d89de2736a5cef692307550840eec1838e20ae6f9714b
MD5 53a4999fd5fc697c41525b3267592876
BLAKE2b-256 c11c1d7faad8899844c0a22035c5e01cff04910561df3433641b43ca20b2a98a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ee95a4eb752a1e2b613743ef6fac41a1aed267254fa35217cdf1c846d57e4552
MD5 a7a8b0ebba40f9f3bb78a1ee16bae404
BLAKE2b-256 3e0f507ca38e00ca08f98dbc2ff825b6702c17f355382ddcaaa2005b435c5b19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 632c56d4d0814848cf780da11ace6f83832a9d3cad7a28332163e86eded9fd81
MD5 e797a26fadba37dbc57dda502ead79cb
BLAKE2b-256 79505a14098392d02685be56a7a66fba3531ed9be25f0e60d3e1867eecc34de4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cc03e23a777415e1924cba6d9dec935b7b541eec7a33fed4ad4f766d048faabe
MD5 5aac435e97f0235c9953b5391bf11cc5
BLAKE2b-256 9c891f16a554d71b1420fe84d7268f4c52fdb00de52e3c527fca9da1dc882ccd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a1a2d885ae99175d1acc4a1490951d82575d8313504942ec444467bab8d550f5
MD5 dc4ec3684e888aa47abd76cc68b4a33a
BLAKE2b-256 fca9ef0dbf54f358960480e8ba1484f36aa77e2a42c770978bff967afada3e61

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.9.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 263.0 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c40671bc4e7c3d5a15fa2a442349c7c4cfee58a74fa8e00db49aa9a22f199f5c
MD5 8b107858fef0b0ef2809a130f982167e
BLAKE2b-256 33f43f992c99788a6369d707dfe45286ac9bdf32b2b0f3e31c9fa4dfd50e35f7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 216d7175fe0b24dbdde34a6855107178ab83a998408c79e41ed923d03585bbb2
MD5 430a879fafc31ddc1dabd2c042842af1
BLAKE2b-256 cb08cc648c083580a27fc04535ee82f1df1f39c929c40ed2d81872483ff380a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 25443889407abc3dce126905e67b32cf0113c1d79f4715fb7fbe0f4835abad3e
MD5 80726a60c81a5e2c01f43d7c6c85bead
BLAKE2b-256 c57b641b41a00b780cc2f4fcc9ba354c38436839b79ea5b4dca2204303430692

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 640cac6512f05ef52c353316996238d13ccae64e94b9d1c91f2f7f1e38b279e1
MD5 115628347fcbb8ac1fffe5121491f8bb
BLAKE2b-256 12773d5723291c1f4816239ff7445f19d3a0e089c9a3fc4cd6bb99fe2b131bbe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 96fb647b25ca53570a1322352075a9a0b412e9d7e66b65361a72802becf94466
MD5 7ba8e2fe8a01f08124dc006b7cac8d5d
BLAKE2b-256 ce755b89c0025c7ee6ade0981d492f4863de4ed9e49c1622063e8648f46a38a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6be78c723a8b8ff2d3393b9886a417130b291a0dc95c53b8c09be610f0040740
MD5 6a8f7eb135f379476cc6d4817c6837e4
BLAKE2b-256 0835eb824441f63b023e9259d398d45974f4fa5a3d659d04025dc54b62d8ca9a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.9.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 261.6 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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a142e61dcde0c35992b966fee6ed56e76f813a0bc4654f2285632901e8ff3854
MD5 764ce484303747e847505e29e8b27fdf
BLAKE2b-256 9b5aebe2db7e7f74dd80957b7e67d41f25ef619c106b028b2f8fd17c04697a17

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7d6216df761d5fc3d8b56ddf36aa5bb615b24c80b50ef9e3df03dde2aa028198
MD5 6dad92b3044fe6eb0a480363d57f5ef2
BLAKE2b-256 7ea0c3873d130a669a439a8e5391635c06bb1805cf5e4901eedd7491fc931d97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e551740ac51190344d610405339079ba7ecf59e08d006d937690c048894a2976
MD5 07ddb4b34efebc9851393dd4ba1bda12
BLAKE2b-256 e662fcb1fa13a78263986e8241d9929be75fc16380956f58e86d8281faadeb1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dafbba13a25d84e216f11cbb6f0d3673c95abb46fd12fbc0eab8cb33576f896b
MD5 58d43fc85d0947e9554d41d2c1d44dbd
BLAKE2b-256 f84b1680f97d17ad269a115d8d778488932cff4b652204c50d4ba34cde4a841d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4a890b33e7294b94b3c031e9575a3e35b72911ffefb57c996c02aa403d83ded3
MD5 d29dcf61ad138b568ec0b31461cbcce9
BLAKE2b-256 de3cc59e9e9e065995c204e3626d9e4e6edb2dca2cf7d8920847e1eed1d5c1e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 5bfea7c1ab4822cf2fa342c666c92cd111dd9987701592e58cb821d204fb8995
MD5 cee76a7e4ffafaa892ab0b36440dc17f
BLAKE2b-256 a72d2b3149b0f0893aacb6eb62f93054dfe91f1a0452406c433acb7b95ed51c3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.9.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 257.6 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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7b80bfda0cf1af74325678073483e7a8292a45779e3e2ac7e23d86afa3596f17
MD5 5f70f5dc644e109a9d1dde5f2f73e468
BLAKE2b-256 8b43c2558bc9415bc56b51c565ab35e885b8daff8ba0b8e920a001aa71f9fa44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a741335fc6ef2011d59be554dedab87e3a6a1e7c4b3fd7f925f2ffeda8398e4
MD5 f2a133455823ed8ac490033fd0953cb0
BLAKE2b-256 cc169c3dc2f06fea9aca2511e90719e1d42e768ab5481d120a9ab9b5222b64ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e1bb03f6023bc5920ec23118046d202a915993cc7e6d996050c487184e348eb7
MD5 08e1a6a66e855a0ad9a2f57445301d60
BLAKE2b-256 6d95d145d9f9019856b629fd048b5b0c610ebe008b0e7423535d8d41b9d0113b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d891b232fad01ab975bfc64c197966e2d034d1744fa83f8f80e17ce1600a708b
MD5 d4bdedc60d13cef476c8a50fa0506816
BLAKE2b-256 0f40fea3dbf1b3406f2f163e70229d2eb670c59587ed5c9f12461ea10017c56a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 770ab7e10a32bd47c01459ab2e1edb84d08147eea97fcc3aebd55a154d3bdc0f
MD5 2cf86a835fa445de5ae26434da577fd6
BLAKE2b-256 9b308b1903583560eef752dd8af7fc731dce887caf6a745c4088d63423ead97e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 acf2b23f4d94a3e7ab7ce85601d0cc449636e175894bcce9506eacdcf85d4d5e
MD5 26633a5e69235669fa62e42b950f293b
BLAKE2b-256 69cd1fda09cdd870b12f6138fa2d7ecb1c7d34d50679a39ea7ec0ddd02bbd05c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.9.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 261.7 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.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 319fa5d2a5e7c289c9716d48ffe2876891527033eb08b9c6de03cfff2601e7de
MD5 f3b2d554b245c58fb1d28d5169ff805e
BLAKE2b-256 d654735aaa78e7bddab5098cec2845a9df306cfce82d70fd1492dab90f073d06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dd7bbdcbc15c0ff47494a3591d3fa16b22e1ae55c1fd151fce951ac68848b426
MD5 f063c0d7dd57cbe09b607d16c45899f7
BLAKE2b-256 af58796ddc893a4f726532cc366bab2a3844f6e99889b4168d9b109c57a233b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d770753fd12a0d022cc31ce818039751ca8f01654bf0d5068f59790acbd98331
MD5 8f3b6a0aafce3c2ffa0901e1fda01f45
BLAKE2b-256 938be57d1f1e390865b89859f96598fd3fa9309f4200ee9954c7ecd69c5051f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 21aedf810f2264516bc544c72df170818a017bb9efbb0ad342a48e7c6b458f33
MD5 6e47a39ef5bc17740ee37bfc825e0f09
BLAKE2b-256 307d466257fe62910cffd50db0b377c807758c80483b92d44a9242be93e2e2fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f27a2288b49248e7f1553b82947d608d87856a9be4f0946cad7dc33437df99bf
MD5 e516638631d1484dfbf3b27fc28d374d
BLAKE2b-256 feae41db91a572576a67529333dc996ee971d295ca21298ca485d399524dbcf6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 298e6d446a3114489b761741d270adc09515f4e9bdba1d1989248d5b02e73b1f
MD5 4ce38860e268edb06857bc916c4d1b7c
BLAKE2b-256 d5f77ce9fc09e3da6f9d63743adc7e721f850d6c7ead3d0eb795ef8a11cbb0ab

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.9.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 262.4 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.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 74e1f1168b2d27c2599bf2aaaa36200e0f5f9d24f5b670067e60576c98bd5056
MD5 fb0b92b36c7941631fa31c9ad5ccd2f6
BLAKE2b-256 517efc78ca74f3aaa983871708a128f6c32b055c5841ceed0b59c5ab85104344

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 92c3829f5dbf4b63b9dc1f51b8115e48ed9b3e8e36fa9fd87420a8c17e7084ab
MD5 e1b098eccf3dcd5edc2a17007d1f2007
BLAKE2b-256 63a00d544c6990a2b0073f3163607c17155157055449ffe8527ba3d752bdfcae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 358048437d5fa02dcf328ec417278d90fa494e21fc046a575a63ac96593f9831
MD5 ce1f6317e7e691c134a7cc7761c75c63
BLAKE2b-256 9aed52a46d9b595ab630a777cf302744dd22d8dc65251d4e652b7ae31c709bf1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.9.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 db9e128e41ee7cd3dcbc3e5925c024644f9a7db7428786516ab75c534b1da4ee
MD5 540d2ac69494d80dee750f3794d73114
BLAKE2b-256 624b973a602f73e7bd90c2e285ebfe270c071122683223427d97036601bae83d

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