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


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 h, 2.6 h, 2.6 h 0.3 h, 0.2 h, 0.2 h 9.6x, 10.4x, 10.7x
100 Million 1536d f32, f16, i8 vectors 5.0 h, 4.1 h, 3.8 h 2.1 h, 1.1 h, 0.8 h 2.3x 3.6x, 4.4x
Codebase length ¹ 84 K SLOC in faiss/ 3 K SLOC in usearch/ maintainable
Supported metrics ² 9 fixed metrics any user-defined metrics 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

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 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.

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
)

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=CompiledMetric(...))
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, it can cluster entries much faster than using a separate clustering algorithm implementation. 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)

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.8.10},
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.8.10-cp311-cp311-win_amd64.whl (259.8 kB view details)

Uploaded CPython 3.11 Windows x86-64

usearch-2.8.10-cp311-cp311-manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-2.8.10-cp311-cp311-manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-2.8.10-cp311-cp311-macosx_11_0_arm64.whl (391.9 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-2.8.10-cp311-cp311-macosx_10_9_x86_64.whl (402.4 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-2.8.10-cp311-cp311-macosx_10_9_universal2.whl (761.9 kB view details)

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

usearch-2.8.10-cp310-cp310-win_amd64.whl (258.5 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-2.8.10-cp310-cp310-manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-2.8.10-cp310-cp310-manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-2.8.10-cp310-cp310-macosx_11_0_arm64.whl (390.8 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-2.8.10-cp310-cp310-macosx_10_9_x86_64.whl (401.6 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-2.8.10-cp310-cp310-macosx_10_9_universal2.whl (760.5 kB view details)

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

usearch-2.8.10-cp39-cp39-win_amd64.whl (254.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-2.8.10-cp39-cp39-manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-2.8.10-cp39-cp39-manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-2.8.10-cp39-cp39-macosx_11_0_arm64.whl (390.9 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-2.8.10-cp39-cp39-macosx_10_9_x86_64.whl (401.6 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-2.8.10-cp39-cp39-macosx_10_9_universal2.whl (760.7 kB view details)

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

usearch-2.8.10-cp38-cp38-win_amd64.whl (258.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-2.8.10-cp38-cp38-manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-2.8.10-cp38-cp38-manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-2.8.10-cp38-cp38-macosx_11_0_arm64.whl (390.8 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-2.8.10-cp38-cp38-macosx_10_9_x86_64.whl (401.4 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-2.8.10-cp38-cp38-macosx_10_9_universal2.whl (760.3 kB view details)

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

usearch-2.8.10-cp37-cp37m-win_amd64.whl (259.4 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-2.8.10-cp37-cp37m-manylinux_2_28_x86_64.whl (1.4 MB view details)

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

usearch-2.8.10-cp37-cp37m-manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-2.8.10-cp37-cp37m-macosx_10_9_x86_64.whl (397.2 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for usearch-2.8.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 aa6db3fd80bdb8a308aac8253e159ffe7475776f5bb7dd289cd77c0ff6e690e9
MD5 963e28bd0eb363d5079852713c41116f
BLAKE2b-256 3c14757d3c0e5be1d3d0a7821cc1cee0667e4a7ef9117d8ebee43e77c12e4a45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a97a0ede0b71b194baa3fd56951777bdc6a9a020e3677fa3bfd02957fe2d0302
MD5 26e302cc29a7aada6d926fcabd3cb94b
BLAKE2b-256 14a38bb62716cd5a89615fac69628fded72623886ec741abf63a68d4d9fb6378

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 85905784e1d0ed37d7146f8b06922b511c3b87e75ad47593f7c89886782a9b5a
MD5 6255db5a16953c016d0980a912720591
BLAKE2b-256 ea1fb3e96c89bacc088a0d3b0081107bf5137399f25e7498bfb5eb768d221a93

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 532f2da06c5d276f0139c140dfdfd22d152b4e524215f69fe2040f0b1185c788
MD5 5b26694795a42918ebe1e05d9624f63f
BLAKE2b-256 0a48fce240644a54076e7ba6c6d6618341c2310185dc2d1fa47e3e8818d5f5ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 72090284ecb395eff580afd6b8f95cb4ff7be17f36b67af0c0eb6396c279a1ad
MD5 0746c7d39bed1926d13178b63b9c9825
BLAKE2b-256 92a3b6e898a0e0f4d1ad72f0b67e5839fb937ff4ab45b5c10975763f3809194f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b0dded41166e16626921ab8e9cb683746f5d4bd1597c07aaa3e31879bf34c972
MD5 9bf96ed1ded0fafc563de34f9542b927
BLAKE2b-256 e349f57ef9a6aff9434beec184670c63cf2c42aa2108ca22bc253198797978e0

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-2.8.10-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9cb295870885110c5d9b4c687400dc7c347ec226da0f1285606731c53e960d0d
MD5 b71f4aec3d536ece243993a48cd8b8b8
BLAKE2b-256 08a4a805a9920da6eb4c97fdad0bc4ba0787e626c197ebf02eb904784b8c2ed9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 59d105e53a7a314892baa42d14b456190e44a0fe3909c252b4e4c6b7bb7917bc
MD5 f6863a3b7c0ad64e88fa04e86f3be257
BLAKE2b-256 6f3a38c18998e6e9a8fc2c241e3bb04d888f73578be1612beaa1447d34d9abf6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2d5d6b9c18afe55734a01e7f44b294dfcadc54cc2f5a2218ad8dd1cbf0abc0fe
MD5 caf709979e7347358ba4a025e0f4592e
BLAKE2b-256 39ea6487b9f6356e1085621a0a241b5f98f94a4307992b257e0ab882e54fbba7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 41500be591f61a0c3e691e16c280475b12eed1256ffcb5dee64e208c87dd767e
MD5 8220882f03ee3910ea6c2040232e3eba
BLAKE2b-256 3057fab24b74e483f12c6869ed1937d77498df3682db9321f7937f7bd3faf030

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1c54683c80885325912d2e5a15623638285051a831d81d5991f783035114c25a
MD5 4a7f5b8c2199be2f9f3b0259e788b548
BLAKE2b-256 07867a68a374b7536946d21181f58ebfa4de781e42758be6c22eb36381ab233b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7d924399d3184b0e09c2ef2092d8c9b12cc13bf09b4e1b42e1472d88992886a6
MD5 8488c01340f74f08917d9115b7280acf
BLAKE2b-256 e795a7af87b2e38463960128420249439da63c39c00cb657db51fe08917239c7

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-2.8.10-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a1095034dfe0a2b350ce7e66536f608f7f77bc1bd1c2e73abc85ee85856fe9f3
MD5 8dbf896ea691d5ded527e4f884ee174c
BLAKE2b-256 6910c7d55fb722773465aea27f5c131ef465ad41399c9dde217e9c5c82639250

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6ebd75383eb4caa2fa6da0147d33e3ddc1cb4651c324116739c83ef41342608d
MD5 319cf8e11cf6c53b340572016c6448e0
BLAKE2b-256 69a9b54ba4e7fe97aec1e6ab37afd3aa3c02628039433a818d098163b1ce5122

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e6c42781bcb334a80a140a8b667b3d826e0f0202585a4ec024e91785a70e5072
MD5 ade114bc6f628737821bda4432ed0645
BLAKE2b-256 b0ea7f6cc3c09371cfa891d06c9ce58f21507e0b68f42ff636bbd0f61fa4e581

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 61722063be13caea4af0387365f49335fe88734c75c5be17d02a60df34d9749e
MD5 d039704030e324f747b15e580ac4cd30
BLAKE2b-256 07eb2fcc0b25388347db043be3ac9977123905063d521d11b3767ad051f25bbf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f2aa19b5f04f96abdb25e712502f9d0a4e47370da0e23680eb63df5f7b097ac9
MD5 0adc777ea9ed8e0afe82ccecd4643e8f
BLAKE2b-256 704fc6e3e9bcc0ea9c7b13d15669137e143f304c3ac8056fc8d3d3b2b4a8e5f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 82531d7b8c4d1a9e2f647097dd8bb0c71dad82f5735dea6d7d42fa19c853e2c1
MD5 42c8628be3a49d660d780ac7fcc40998
BLAKE2b-256 b7c4841761971b2cab1fd23b5ffaea7b70c5c1d0cb4d6e2e5da70877d67123b3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-2.8.10-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 1a2391aebe65a766777d6110bdaf2892f6c086bafe650e1e42ab40eacdecdb7c
MD5 2ba6ad230ebb7849d080a911e2d63e23
BLAKE2b-256 eb6945b1499f16260945c99bb9804200cfab249dcbb02dcd53b8073511948c2c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8a6411b5d22ecd50d8a61b596345a3a8c6ccbe7cf6af9ad263357e2bf2e7923e
MD5 07ca9dd7abed430caa62f33f14203596
BLAKE2b-256 8c8bef9cdf32f25c28f5894717c94fa031276e45c3f58dacf0f2f97f4eb4117f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dda9d4a12ba3b345bade361e3e4523fb7083d2c716e5fb6684730fea6636597e
MD5 830e3e1f71f49f60d317ce2a40804063
BLAKE2b-256 c0ae7dd398be2623a39527719a24d57e22de57a43f97043b3a4157e577ccfcfd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 78ed45efe2fcbe9c6c302fddd43185fa768457e7b7e089706a817c8e77fc849f
MD5 6c61b502f0760a1587cf84bd653d3c75
BLAKE2b-256 481f7653fcddd9e91759520aa0d3ad08365c300a7ab29a48cdc30fe153349aa3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ccf2e90ab3b294d491c042c3883b80b04dd5fefbad071da863e60ce0cbe552ca
MD5 4d840ca5ec0856f4fec19e67e1f89f42
BLAKE2b-256 8203f45279786788cfca1c261fd02bf410380cb579d626e57a05c5149500f265

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4a92c0f9cdd1a43163601483507f4a3034fae061ed6df26908661760f4896f64
MD5 0ef49e0d37e5486bd4ef0166795921e9
BLAKE2b-256 a1ffe0628057de9442613b31886a8f9a30ca1988c9dbbc45893e4a4811da116c

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-2.8.10-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c39ac761cb7cc30da0ee7aae027894ba20ae2da3f911b34d9f373d1f9835ddff
MD5 63bc9d6baaea7e01060cf6ae44fd1dac
BLAKE2b-256 b34f27e3ff7df0c5c3e5d93e0b27ca8ddcd85d6e7531d01f11cfe3c648c97e30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 311d79a0c386db2831fcf469d7465aa702849a9c5eeea7db76cbeb5ac1877bcf
MD5 242bffef2434f997a23f877d9a888f61
BLAKE2b-256 6bfe9b9b42bdd8589d72cd34f9bfea8d309b0da8764ceeddab5426a7526cc2e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 21bfca1d5bc66c6b5a6cfc7b4edece2b35d14c2f4dbcbc20eceb42d9f0f03eba
MD5 f800def6cf34660f6f423feeef519ef9
BLAKE2b-256 d771eac37ced4ff699dd442c7c08513211d2cd8b40abbb775f30421f3c7c704c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.10-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8da913dcc1af45de13b524621e082bd7e46f78f771e56b73ad3a9b3ca974b555
MD5 6aedf00e5aafa71452db6602a2365719
BLAKE2b-256 bac44b5c70d98e4d71521e7856a6b0da650e6e3a4f30aaf8a7676b81db594c45

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