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

Uploaded CPython 3.11 Windows x86-64

usearch-2.8.12-cp311-cp311-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-2.8.12-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

usearch-2.8.12-cp311-cp311-macosx_11_0_arm64.whl (392.2 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-2.8.12-cp311-cp311-macosx_10_9_x86_64.whl (402.9 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-2.8.12-cp311-cp311-macosx_10_9_universal2.whl (762.3 kB view details)

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

usearch-2.8.12-cp310-cp310-win_amd64.whl (258.4 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-2.8.12-cp310-cp310-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-2.8.12-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

usearch-2.8.12-cp310-cp310-macosx_11_0_arm64.whl (391.0 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-2.8.12-cp310-cp310-macosx_10_9_x86_64.whl (401.8 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-2.8.12-cp310-cp310-macosx_10_9_universal2.whl (760.9 kB view details)

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

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

Uploaded CPython 3.9 Windows x86-64

usearch-2.8.12-cp39-cp39-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-2.8.12-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

usearch-2.8.12-cp39-cp39-macosx_11_0_arm64.whl (391.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-2.8.12-cp39-cp39-macosx_10_9_x86_64.whl (401.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-2.8.12-cp39-cp39-macosx_10_9_universal2.whl (761.1 kB view details)

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

usearch-2.8.12-cp38-cp38-win_amd64.whl (258.7 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-2.8.12-cp38-cp38-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-2.8.12-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

usearch-2.8.12-cp38-cp38-macosx_11_0_arm64.whl (390.9 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-2.8.12-cp38-cp38-macosx_10_9_x86_64.whl (401.6 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-2.8.12-cp38-cp38-macosx_10_9_universal2.whl (760.5 kB view details)

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

usearch-2.8.12-cp37-cp37m-win_amd64.whl (259.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-2.8.12-cp37-cp37m-manylinux_2_28_x86_64.whl (1.5 MB view details)

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

usearch-2.8.12-cp37-cp37m-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

usearch-2.8.12-cp37-cp37m-macosx_10_9_x86_64.whl (397.6 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-2.8.12-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 259.7 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.12-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 30ab58e67631207824db971e309f7e53997daa4a047aae5c4282384ad4b066d1
MD5 413e28d35b1eadc131430db564d5a66e
BLAKE2b-256 cd4058c331af1fa809ee711dbeadfb34b43558a24abe19fe2159852e018fd44f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 242e74d7cab8cf41eddf298e850e797a5c76f0ea7946ada98b373b153f7c094a
MD5 743d2cfc80ff6c8d9ddc923a9980a21d
BLAKE2b-256 5abd1802744636ec1542ec451f7e82bd7a7795be94c95ec2ffdf32a28f198fcf

See more details on using hashes here.

File details

Details for the file usearch-2.8.12-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.8.12-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 80b084e023caf3d1669da5a056cb963ae488021bbe1ce541ad8bcb9bba81eb39
MD5 68a3479daefbb3f67fac38e691b97d34
BLAKE2b-256 ba644733710e38bda254f624d12efbf159bd4ac9669ed9fc71a811005ffd5456

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5d818e36bac1673fa7e5c01662d17aa091d0fa9e6ac9a0e62452e9ea94b5fdd
MD5 d36a6d43649be9f925730635bc688f2c
BLAKE2b-256 9d6bd4e45348eacdf54091ff47762ba3b55b24ec961ffc4369af66cd198f2177

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 80c4ca4c1399083116d3dad9ee682420bcf336935c991ebbefd5767fa3419dea
MD5 b5f44838864ecd874e3a0d24b9d63793
BLAKE2b-256 200b6436b2bb891ac393a90d18f22a6789e26257e09c2ec7033be8651e2a3067

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e90dcd5e1c47d234ed065e4ce4effdf09064402a944be8ac8a6bb36bb30bda33
MD5 c06166e89d9b29209c283a88ab166f97
BLAKE2b-256 582425c7009501ba22bba61bd5d4f75cd25565ef2f2ff932ca2e6485ae2aefc0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.12-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 258.4 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.12-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ba9940b7249a8b70269e3d8104bc23ff4ae13836b8ca9c7cfe27e1c553dc2d88
MD5 77e6eee747251288e935841fd942edf1
BLAKE2b-256 c030e0cdb0b6163e85b0eafa3eca85591f781da9deccff9dad15d135336f58e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b518d69a3a9d0ecb494d9316215f0743e1e3f5b38884c423b1001b6ac01a6c13
MD5 51b724e84c39a4ad0d880675ad4ebc89
BLAKE2b-256 6924c8c3d6eaace353a1e9bb94e3616901ed11d3bb62e196ddc32faf40ec2a86

See more details on using hashes here.

File details

Details for the file usearch-2.8.12-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.8.12-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0e39bf1cfbcc1435d828202d447684caadd944493a45ed524d33c6dd6ac37966
MD5 e6ca6892bab633cd0993680b0614b7e6
BLAKE2b-256 62765ce59ee4a6bb9ef9d5172c468cdeaa4f5e6af4503fe6847fbf2e4a866a66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 caa58b08f72453517717999d898c5dc9cb251dbb4a149b017f0857433b5baac3
MD5 aa9db2c4669c32fb2773f0cabf2e29ca
BLAKE2b-256 1f85b1dcdea05cafc554c6ef29c0b2df00a4999d98f15df6c2108925b142acb9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6893b3d6b50300ca51288cfd9d95e181221a19ab568705580d339bc7a1cd50cd
MD5 d5b493b36f8df9ec73cb71de2f737a69
BLAKE2b-256 4fc0ed19ff4ffdcf53fe267f47b18c54fe4b7faa90d90276c813268204bf099d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 489b8b2ce8a12885d760710a368040eafb4c39201ff4b75996520e49c9312a07
MD5 6cc40b78f660e950365d68ce404d38bc
BLAKE2b-256 5e5bbde3cbcad47e119dcdf485564a4939666b5e7a60ea836789b92fb5c52e62

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.12-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.12-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 54cb8133bd5841a8e866459fa455c1516502dad301c8562952531962eb4e2a0d
MD5 24fd6e88c5033fd7001b33f8405ea6a9
BLAKE2b-256 d99053d99181fb0a172ad094741ffd156404350ea578d5c815b4eb68aa7366a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 58ad33497044dc23e8782d2ae6200b952ba58480348ed2fdf64a13b19f63c3ef
MD5 e94b4846ea6b71eab83108bc2417760f
BLAKE2b-256 7cc20b7593861aabd9a33200ffbd67618b498bd53243157f5a488b76b1f4d4cf

See more details on using hashes here.

File details

Details for the file usearch-2.8.12-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.8.12-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8ca7078e285f49fea68711a762a261c24b95dd4462b2d9fbdc7a2525b8d83a5a
MD5 40fc49e6e8ec09341439d667f355bee2
BLAKE2b-256 67207b89f6a7aa6d089a0338018ded4bb8f8634745c92f9f3bd62ccb944fe75d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e8cfd1d318bb81bbf7cda493515b8a60c325e48fd8f373bc494188c4c6a61e5a
MD5 6889ab39f6f3b5bcc61a477e73f99cbf
BLAKE2b-256 574ddd03152e9471a91c883ad6c01921a5137501ce60f9db448e066c6d58bbb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b581fb7c7c37cb1de3f40871b9b6b40e7383100f5406897bc52e973db4f322bc
MD5 7080b89ee1ea37b4becc05e730a3743f
BLAKE2b-256 4df5c4cf1f2df61d23d86bfe13421dc920ed67574e1435aea7bc6c582b12a010

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 9f2204b30e3032b4b0c6effdc6a79ce8768e680b56370c1e832f39146ef5cf3d
MD5 19ed387747c16538500e4f7afdf70980
BLAKE2b-256 9612350158839e5586610db1377316999b2291d492571b0c968d25ce1b321fa5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.12-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 258.7 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.12-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 938a5ee467bc924953687ab0dd1e0f5345723e6d03bd9619eb09b5209dc1503b
MD5 3753a511d7a82d226d761cace393a82d
BLAKE2b-256 84f57b99280a5548ef58c58eca954c86e458dfe9e8d4efc4dcf4464ba2436d48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4401c17c488037a1667b29ba800e88a47392f491ed377dff70749a78aaeac88b
MD5 5b7938ad50e70c4dac05550daf174354
BLAKE2b-256 0152cd7134cdb190b3e0d80752dddbdfe7d21d5736004eab5dd3f741b9919ae2

See more details on using hashes here.

File details

Details for the file usearch-2.8.12-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.8.12-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c1efd85b3714709d59952892789d34e6dd2b0d399b943fd95092752ee2f8f319
MD5 fd2a2dbd5d60ade7267ac20e18487a3b
BLAKE2b-256 78c9cc12b9acc84c060b1ca8ad982ce55d2e5bfcf72e3982b749a7cad45c9347

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c89a0bbc900c1ee635b8641de653d7387950646cd774dfb3b44609556dac4b9
MD5 0a3434c749efb236c594e0261329d07e
BLAKE2b-256 0ac29b1e7e74b6069dd9572e62b7caf2973490e6c5f1aa372d2507fbde90def5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 542bfe865bceb0f9d97b633bbd177210816ccf523717e8adec299c7d16815b6b
MD5 a4f9585b84688183a3681c1d2cb8cce0
BLAKE2b-256 6fae6dca0c38238197c29803b94757648ec33589c1c03876b9baac79f2c60abc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7390fe1719b908cc3bfc60048cd82757e85b696820d3445b7f0e1079866e96e1
MD5 c1c7f5be5a303631e59bb59b0e6b5793
BLAKE2b-256 1e596b68be42a9a9394a8096cf09ed71976604ccb94af711a365d9fdc132259b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.12-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 259.3 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.12-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 aad48180acfa8236578dd4039d72e64fe1251f434001c766a72e7cedbaeb3deb
MD5 fdebfd029516e39e5fc4077c995a0c46
BLAKE2b-256 55161c2061e592b54226c372e4ee006fa25ddbcfbe40bbbc44bdb72686d66d31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fd735a434d5fe77477704056e3853d5744af96e7bd3e8ffb8c59157bf2feec0d
MD5 aa8acd62c9974d3f2e069e2904402bb6
BLAKE2b-256 d7055f6440f1a2a0715e181f921e8a6053ccba235bcde77258844ec3902641d9

See more details on using hashes here.

File details

Details for the file usearch-2.8.12-cp37-cp37m-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-2.8.12-cp37-cp37m-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d631902787f1ab04adb91f043f0fc6f404bd9b0f4693856b8b73d69cc550df5c
MD5 d983ba50a55c1ea08aa11492bcfd134a
BLAKE2b-256 9ff6fc82df12de9065e5b2989065285981de4dc888991e17e48298045eb4fba0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.12-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4b14e0ff8b400c30a33e94fa397a53d66ca7b0c6e750e1e0769b599ce26334f9
MD5 0b0f54f638b089a803921a1a272f0c4b
BLAKE2b-256 3821b2ed6ebe95fcc07195d17b49bd42f73ae37ba8b7bd76a102d1d1e8e7f4dc

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