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

Uploaded CPython 3.11 Windows x86-64

usearch-2.8.13-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.13-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.13-cp311-cp311-macosx_11_0_arm64.whl (393.2 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-2.8.13-cp311-cp311-macosx_10_9_x86_64.whl (404.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-2.8.13-cp311-cp311-macosx_10_9_universal2.whl (764.7 kB view details)

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

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

Uploaded CPython 3.10 Windows x86-64

usearch-2.8.13-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.13-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.13-cp310-cp310-macosx_11_0_arm64.whl (392.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-2.8.13-cp310-cp310-macosx_10_9_x86_64.whl (403.1 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-2.8.13-cp310-cp310-macosx_10_9_universal2.whl (762.4 kB view details)

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

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

Uploaded CPython 3.9 Windows x86-64

usearch-2.8.13-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.13-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.13-cp39-cp39-macosx_11_0_arm64.whl (392.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-2.8.13-cp39-cp39-macosx_10_9_x86_64.whl (403.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-2.8.13-cp39-cp39-macosx_10_9_universal2.whl (762.5 kB view details)

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

usearch-2.8.13-cp38-cp38-win_amd64.whl (258.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-2.8.13-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.13-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.13-cp38-cp38-macosx_11_0_arm64.whl (392.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-2.8.13-cp38-cp38-macosx_10_9_x86_64.whl (402.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-2.8.13-cp38-cp38-macosx_10_9_universal2.whl (762.2 kB view details)

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

usearch-2.8.13-cp37-cp37m-win_amd64.whl (259.2 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-2.8.13-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.13-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.13-cp37-cp37m-macosx_10_9_x86_64.whl (398.8 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-2.8.13-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.13-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 00e31163ae7ec2c19eee912c9a0c9ddbe127b05230f6db3a11e7e86e18cfa130
MD5 9323846f7bf067a6ed204130b7facd2c
BLAKE2b-256 780b478b9158e6c17b4dcd8f8d52277d567d753de72f53963548518aed1f687f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 87fdc9daaf1bf3096e093956b17a043f07a181aa24834f82d0ae7b6e16978788
MD5 58476702bc2e31f943f409b1effef438
BLAKE2b-256 584e506ea70cc68b56d715a648205d526b82062e6b3d32c78590f5b135ea6a57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 10526f852c0cdadfdbf349cd35bab48cbdd3d0a6ae12149c957ed4f5d1eef7ab
MD5 b0b958c90ec597d58e745459b466cf46
BLAKE2b-256 48b67da37657b1f2114570c80e17af997141410615d8273915224a03698e9d4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c1bf5f0985a98fa8fdf38ab595e79c9e310c798a96235aaf8719adce150eab8
MD5 b011aed8723a3f8cba805a1b3c97618f
BLAKE2b-256 60ffd6ac7e342a4c3d7780167b6d2f073df1a7bab5c65cfb5ca58da5caa34ddb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 964df474a8d617a2d040bf0331af491962736b3d25fc02b35e82aac89d921170
MD5 8175f9dc115fcf3a12907d1e93ac875f
BLAKE2b-256 f06cc844934a9cbc9faa61293674bc3052b371eb90733ee734eea4409bc3f5c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e488186e5994c3c7bff78ba9e8393add8f39343a46b30c899a6e99e04397efcb
MD5 39656fc6076d70d795b03e29d079b98d
BLAKE2b-256 7e7427a9baa77343f9164d0c20e859373556a11b50dffbeac03c1ca90a712eac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.13-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.13-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 259b0516d865c8b513405168dfa907b670862213dbfad28f71fec3f579946fc2
MD5 379d96901f9a1c08e01cafdf0370b378
BLAKE2b-256 91cd48dfff76aa6a2e520796403cf13f805bc694a2c3dcb630076ab133942bc8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fcd1bd2ae04beb585945d0e166264e0625960acf6f2a6ce37f8e8fedb4990bde
MD5 5f37872fb8929823de556e1148931eb5
BLAKE2b-256 e60b73fdd098b78777a0790480344738808d6393d0a3a2867f55fe1f083dc7d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f3fe11b01d801cc1e5ceeebc285c54321d2c8bfe725501c1ef489184b4f9132f
MD5 efbc00caf8399c3da9664806094e7331
BLAKE2b-256 1cbb2f931b0d149f14512604bd5b979314ac0c883b3f4b63e45a91cea4620651

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a8e7117ba5ae5624e5ea0182f5a830cdae0e11f6468cd98fd54a9265fe6f5b1d
MD5 0ca029b8b7daab30e060c5f4fa939170
BLAKE2b-256 f7795b0f04675a80c3b17c8580a9593939df91e85fc4e2c5b12a3f453ff4680e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 890c08e8d613842ec60d96a622a3a88aee0345ad27d1eef93ba5d68cf35f2cc1
MD5 12d1fd1259c3e2473e62f397492a82e9
BLAKE2b-256 5f78f5625fe658ccab0ee3d482087fc1a0e7bd848987dcd28028c2c00bcc0144

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 898d77f262a058e565278c2f57342a928022eb77e3c974de0b3dbca6314969a4
MD5 7072d0de4253ad402cfa5e9dc349f5f7
BLAKE2b-256 fe31326fdcbe1c9320b2f891b39ec237a66220c8b3bc0583d1a497724552aa69

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.13-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.13-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 371e77f54ac99886d0644a3827e77f6fa979e3b5bcc8ca9ab981b0d75ea2580d
MD5 af07ac83e95d6dbd34fcdf49463c4bbd
BLAKE2b-256 698c3974297ef81ca72c40df7ecb29e56bf163c6f370ca3f14957dc0d6b35cb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2a5fcc4555bb3b0f1394b7317f8cba5aebdb8336931a4d79ced4efe283789dc1
MD5 26bfd0939e4de98f6a4aa71547117ef2
BLAKE2b-256 d18073ec4f6a55b1d7b58e63a6ad4fd7f946ca071d579eaa899b9f81694cd72f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a2f5ceb3c749e7ac42b120e61a6d13cd5ea9641b3d4b7732aabd5b61fae32809
MD5 0b6a035566654873543601765a09ee7f
BLAKE2b-256 cfbe61e69730963f24694c07828ac9c279ea48878dce97600f38f37d2eb11ff2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bc49510874a62c4e677eab7a7bc512b6b4b4fe3ec42b5a283f8ced3917201f07
MD5 38bfaaae3bbcfda5766ac39c500a43a2
BLAKE2b-256 3f4c7c4e6ceb20b7d298222ba4318182564f3821feafb52d9a4add49013ad3c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 11da2351043e062f112ff1677a4005626329588afb1c0ff9cded09922ee0e91d
MD5 7d38bc536270e2615e6b42fc1be2e909
BLAKE2b-256 f73ec5988d785cba132a2de30bee40b73d185dbd60551b81aa82972da0a24670

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 262c9f2a1ff6964ea9ac218654c214bfd2314efa51a0757a3e607ee31974ddd8
MD5 39b0d3ae56562e32fbc5fbd69938ce2e
BLAKE2b-256 620e52a0919a06b93a97a0023aa3dcd19be730298ea212bf948e8d650507b60e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.13-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 258.6 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.13-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 b9ad469324f9b0bbef97598b1de074a4c0dc5e7284ed8b54b02ded6d6145ae4b
MD5 0790ccb90c3d8d6001402ac22e4ca089
BLAKE2b-256 318a1401af5bf281ee7dcc8b44702f7ed24dac93a56691649dc2f88e5bee17d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4ef9ed5c5f6011ab5f5668f423e9c4fce48a8dfefacae3a365922d05ab42c948
MD5 3e2904cf6ae6e9f528c748068b6de896
BLAKE2b-256 23d24f7bb3745421b8fd49083a7920a8202765b895fc09952209feafb7acb79d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b67b3738e84afe1e545f19ebede4beff1032ceb09aea85d653bc8e49b45f12ba
MD5 64efc34fae93d3937f3984fc30bf5f9d
BLAKE2b-256 08f97895c50e62004c9b5c25d39529ecc32f30c54b0b16d88c5801864ea23bcf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2151aedd095ac7f041a8baed3f97729b3668c7b179ee996313bd6501c8805207
MD5 844ad4bef2d02ad6943dada6ad7c3daf
BLAKE2b-256 f6d8c53456fbf3c68ea20df7afaa59dc7f718503d27986b42421ba124d680c56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d405b7266ac35336d4a44d302617033b736e03f7a602d9aba6cf240a662f8427
MD5 831c4a2188e3ec92df4b303995461921
BLAKE2b-256 b009c7d0569e387a66f9da8349353a00146d63646c7e578e80a6bc6bfe4813e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4acdfeb4ffd244bcc59576f58dcd5a59ef65bfa040ffefbc25fa81bf4376a02c
MD5 d0ef9e204c0b62bd75c3021fb5f07fda
BLAKE2b-256 850fb942f92ad27ef8c5f664002f4da6a792eedda7ac1f564a7c10810c29c653

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.13-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 259.2 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.13-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d3ec5e444cdda1caec7b6d5f46eb586c2dc1a20e663be776471e5250d53a67b0
MD5 ef904fdac741dbede90038eec69a2794
BLAKE2b-256 1511338e52b6bb83eb58ae4cbc015ef92bf3e987c4e74b33016c7d11a5a901d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fa7936a22bcef72fd732ea53b0062693b4c25b4bac6e38da20afc0674ea74adc
MD5 0dbbef3ddb1705da03dbd107b773a709
BLAKE2b-256 ced92e881db84f378c8294201f313dcce5eff6faa1fcdac29a85dea6a25539b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp37-cp37m-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e7a9d553eeb7e0f8a717b7a8b690b08072f46b3bdd55a33f5a67079800d0dbe1
MD5 d5b8b30c122864c271ceae88b8812af1
BLAKE2b-256 de8389032e7294b9277cc50f6b2532ffe2138dcd572aa6582c8fb75fb444cd13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.13-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4249610372b43ede29f9a4380c51135868d35c3a9140ed221da45e99762af43
MD5 a1bd6f0253fe91017f7edf269a1af91f
BLAKE2b-256 4ad49911aa41d1851004268b548ad4a6a7facb8dd922b06d8ca3ebd3001b1325

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