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 · 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.8.14},
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.14-cp311-cp311-win_amd64.whl (260.0 kB view details)

Uploaded CPython 3.11 Windows x86-64

usearch-2.8.14-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.14-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.14-cp311-cp311-macosx_11_0_arm64.whl (395.2 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-2.8.14-cp311-cp311-macosx_10_9_x86_64.whl (406.3 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-2.8.14-cp311-cp311-macosx_10_9_universal2.whl (767.4 kB view details)

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

usearch-2.8.14-cp310-cp310-win_amd64.whl (258.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-2.8.14-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.14-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.14-cp310-cp310-macosx_11_0_arm64.whl (393.7 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-2.8.14-cp310-cp310-macosx_10_9_x86_64.whl (404.5 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-2.8.14-cp310-cp310-macosx_10_9_universal2.whl (765.0 kB view details)

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

usearch-2.8.14-cp39-cp39-win_amd64.whl (254.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-2.8.14-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.14-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.14-cp39-cp39-macosx_11_0_arm64.whl (394.0 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-2.8.14-cp39-cp39-macosx_10_9_x86_64.whl (404.7 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-2.8.14-cp39-cp39-macosx_10_9_universal2.whl (765.3 kB view details)

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

usearch-2.8.14-cp38-cp38-win_amd64.whl (258.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-2.8.14-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.14-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.14-cp38-cp38-macosx_11_0_arm64.whl (393.7 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-2.8.14-cp38-cp38-macosx_10_9_x86_64.whl (404.4 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-2.8.14-cp38-cp38-macosx_10_9_universal2.whl (765.0 kB view details)

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

usearch-2.8.14-cp37-cp37m-win_amd64.whl (259.5 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-2.8.14-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.14-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.14-cp37-cp37m-macosx_10_9_x86_64.whl (400.2 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-2.8.14-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 260.0 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.14-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 445647bbb1da706e67fd884649297133ab224648d897b4924edd5fba149d1a45
MD5 d849037e108ef9a1940f6ecade4d81db
BLAKE2b-256 95e8b6cd5616b1ec60ab8b5f0e0a97fa55c27090b31f1906735523e2e9327a7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4c0cdca4fa58bdfc9fa969d568f86b5e9e4a5766f38b94732c4117500cb3a9fa
MD5 5e68e349e854b77963ec372576724cbd
BLAKE2b-256 42416b9685afbd221c183b36c9c4879edd5e7b599b080207058b7c85addb7bf0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3a326bd63fd7380e3ee06aa6ab9bc148de7d8bd6d2782157c60d04ae1522d308
MD5 577b0bb1bc51b9696d4e0fddd00911bc
BLAKE2b-256 0cf483f2c09c66d17252db89965b55563e7c657cc64152a7819c6a3040fc94af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f26cfd549b16e494df880836fc3d26fc1be618c4eba6fd48e03a55cf71d62fc7
MD5 dfa4e0285b0dc496cecf416f828f426a
BLAKE2b-256 d65d53c1e2793ab9598c139db56d7cf695931ceca9a9aa0a9a418ee3020e06a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 beed2f02c0c8245d6363aa1268cd6ec104d860a158801ca4f15588da7f2b5bca
MD5 6c27f5b6db330af377110ca9eecc828f
BLAKE2b-256 e7b08f652cb17d5b662fa8925065aad2e375992c7d28acef77f65dc150a34d08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 39100d18020453b2908e6249fceaea015af01d420ee4b73790b0e32535972b98
MD5 2d58dce3e9e116ab61582786915fe8d1
BLAKE2b-256 096dc43947a44d705b3e66ff278ad8d80d247253e5f4515413e56324b53428cb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.14-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 258.7 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.14-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 87a699d81a1acf32dbc4b3ef8662a4d6a3c33336d47ab2c48c5e16bc8cc8e3fa
MD5 651eb60cf0b6cff440f6b4cb90be35d9
BLAKE2b-256 cfccf4d11d6cf76fc61e82b486a502239b76d952225e6794faefa794d75c64a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c68348e4cfb047cbd9fbbc41ec0b9f14c7489375ebf4444779cd6532a8f4b964
MD5 6749fa7e484c4ed7227aa5b9c6df1ea6
BLAKE2b-256 306fe0981c043a74ca6a58fb8d2e821d3d9b665a7ec7b0640fd5505978e9d131

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d8d50684f545ccc5a68d2de6253d8d066f6309767cc19c82daada307fcca53e0
MD5 2fb1a283ce61fefa2d7865ca47780a83
BLAKE2b-256 78e0e713a84c8db50b70584b42e412ffa0393111343b0f8f88ca997b9b051891

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0501b353657411718c8e97f3429f2f7d2e3852995ffe7b4f867024cb08478951
MD5 4ee01eeba72451eaaef5a7b462aacf62
BLAKE2b-256 a3d0e4936d96219ed669e5842c3d10d8a1ea04df225b64a25a3bdf94ee552ead

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9e3432c662ece2281da2211ca37d5576589473a01d9db86b24427ebdc2bc3885
MD5 b6db9343d05235b7da15792359c2f178
BLAKE2b-256 9426fba27e2a1bf23bd7083a03ae58c5bd4b893f1655fbe75b53492c8a0cb85f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 cba21f36e3e6c4a5346fc895a29268fb4c6b8c96f627bc1615a30610472848a6
MD5 b9148783f4f316abd8b5fbd974be920d
BLAKE2b-256 3b654fb3a8351ca14da066edded139ec9a9d5a795cb7016e4708c2dd69efc302

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.14-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 254.6 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.14-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 16fb54491e2580778713142ef946eb59de74d7865bc60255b2913a4230d43de5
MD5 c5dec58a5b3b380c5005ff6ed4451ec6
BLAKE2b-256 80d0ac2faa24181151cf1fcfc6533a17354692f11715f376905a635cc04de831

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c7f6b24d159171ef03cc75d030f6fd495439f902e161301f6dcd6369320ea128
MD5 7b5eeac5c6113eeca16aa63413667838
BLAKE2b-256 8dbc8e6ef2177de255611be69d68df587a4490c2b36330b3f3ee62ebb082dd85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5f20b4933a99750156645dcccfa196c1e20a21f769b5c5a0e3f46ae3a5194afc
MD5 a4626539277b8a571317703cffe5779f
BLAKE2b-256 d525dbeaffcd109fec81ec08248fb4588c1426d645cb485ea4a2f77bf8178d06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f1bdc1872e7fbd352d6766cc2d64c9649f8c8e644b694f7e1ee5814573bc353
MD5 7a562e7298d97574186bba79ef250ec0
BLAKE2b-256 8985a68778addf632f071e00a3a6b9de40f5b12aa5459a4511cbe1ad980b2450

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2292eeff089d63d7caeceace58ec0be2e15653fd4997373caa30463ed2ccabb2
MD5 4a4b70b22d5271f76e0b9910f6128ae8
BLAKE2b-256 ebda05aedc604ae7c1f6ad4f8d8edd3033fef18f11724f97db8ea4ca5a12fd45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d28c0c0131351ec72e46e701011f4831ab17656f000df684db592eab18ee0dc3
MD5 32e736619cb465c3b9d49519e7dcef93
BLAKE2b-256 b1f4644477c850bdb974fbb4bf4d594ae115a45441efb104336aab72a238f06c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.14-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 258.9 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.14-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d4eed7ee3b21b7422494adaeb31bdefe8feb3dfbb64aa7cf3eae263869015b23
MD5 166fa1bc67f7e50c03289b793e6fe94a
BLAKE2b-256 448771207b6e3c44a08924055fdb96bb62a93fead82e8b2b699befaab70d6b48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 21f9f5acb5d6de7d8e39dfc82075bec16dce192705cbb1a7bd8c769566b56158
MD5 6d07c1623aaeca7a0ea3a577bd3acacd
BLAKE2b-256 baf424124f65ea3e940e54af29d55204ddfbeafa86d6b94b63c2e99baff2f7d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1010880868cb0d28bdab7298d5a82f62c942c2e755bd6ab50631de618c179052
MD5 72f95db6fed18968db5eba5546292149
BLAKE2b-256 575a139074ebb805103645092045dcd2823cefb4abcc4ad4696a29e2681c7579

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab813ff5fa9ef476658b62b302de1246d9ce6e9e7ec9720302fa51c2ed125286
MD5 bbe874bbc76cb3f26517fa8ffe0bacf5
BLAKE2b-256 64c94d1d132127cdef62668613213be4c86de181406217577702a939cba77985

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 10f7f998cdfdf2e5878ec3e4e02335a406789f679425312980e591044162a21c
MD5 d9563f335a8a38eb68161e1f6fa192e4
BLAKE2b-256 2c6c5e90bf5ba33c4b115e5d9c009161d299a030394c789be9f573a56ca73f5c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 9dfa198ae06a5c40912159f6339679dae74bbf5aa24ffbbbbb568e2c55e626ec
MD5 6116f7078e072ba7be3071ce5483be53
BLAKE2b-256 26896f2149430bf2504c415ca58067f34b95224ef0cffb3827bc3559277129a7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.14-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 259.5 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.14-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d17a01ece748792c52464966c8fcb4619999cc615616ef5707f21eff3823ad5c
MD5 d1db6d07977c2d49ff82a07567f5a44e
BLAKE2b-256 7478835af54eb735cdd5dc00372697fac3d49b5866e7621c601e782ada07732d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2ff048f479f89fbe941ae14f15770b085f974219369260897ff7ab334bc2ac0e
MD5 b376aedae9a0d7e24e93aa641db75109
BLAKE2b-256 86e8edfbf625c8567bd3c51029fca28bf4687d5fabbec16e4c0fe0da67cb8b7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp37-cp37m-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d762b5d2f4c55463945961ee530a2d8742ebbef4213c6315a9ffe5fe2e143cc6
MD5 75c96201c5af431b5dbdabc8184d30c7
BLAKE2b-256 d228ee644ec759162809dbad772363b3c2f87b3158c7a3427e684ead332aff13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.14-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9095acdd214b7b213f642c5086a020dafcb54fc7e2153a3076975255b446b8cb
MD5 4f934ee14869f628ce61f2aa27437b94
BLAKE2b-256 a85b774b65afc08a35681de477d1dda9a1736f189f122420e30705a83c1c670c

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