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

Uploaded CPython 3.11 Windows x86-64

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

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-2.8.15-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.15-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.15-cp310-cp310-win_amd64.whl (258.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

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

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-2.8.15-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.15-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.15-cp39-cp39-win_amd64.whl (254.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

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

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-2.8.15-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.15-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.15-cp38-cp38-win_amd64.whl (258.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

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

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-2.8.15-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.15-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.15-cp37-cp37m-win_amd64.whl (259.5 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-2.8.15-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.15-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.15-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.15-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: usearch-2.8.15-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.7

File hashes

Hashes for usearch-2.8.15-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0971c8aca247e1f013abbe62b3615cf6928f0803562e4b91d0d927c0da643021
MD5 a84dc95cc890f6cec13d77dd2eec5009
BLAKE2b-256 a2de343799cfd92cd101266e09ba3757e02d9d7807adc4aa3b2c89c2262a3a50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f27f97d26a3b124991ab455ec07af0b2e44173b3f3f723cbbdd9f1caf2599d85
MD5 2dcea195b9223befa862f7986b7747b4
BLAKE2b-256 59727daf76b374f6a53deaa1536d69333c1a1280dbe88892d68fb07df21a4879

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 08c0751ffdc106700122db139b529c3f3a2efdde6c890f50d301f93c8e6530c8
MD5 04096808dae52f94e5f2a5b2c911f27b
BLAKE2b-256 9937dffc07cbc7940fe92757a37bc94546494a748168302cc511263bd7b924a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 54d65fd1d897fba8b564dd1c89f755dc9f741d9ec91dc01c989f45275e61ac0e
MD5 57e92f642d9b4375b39732c073b57d38
BLAKE2b-256 7dab76192540894eb4057057245c86f1767b70431263999bab611bbc5650411c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a8980ef54a8287f25c076feb1aeb251b772ca349be386d2daa681e3dd09aa5e1
MD5 3bfc57e8e8e7dd0afd59438f47edb323
BLAKE2b-256 8af294816e50881901e84be4cb8935cd29325563e3c358941db95ae610c55bb3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 8eb9687b0ebd3dd31eb037f9abe1ee721814c259e5fce4ced65f3db8426df6ba
MD5 2d0bb7af39f124600440d6555c7c3eb8
BLAKE2b-256 19fde4ffaa3387f6135f9a09b5aac915b61cadbc19611f99a86a6b66bbbb93e5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.15-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.7

File hashes

Hashes for usearch-2.8.15-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9f02c356213beaa01b90ac0bd569de71cfb2259f2c5026bacc1571dad66b0796
MD5 907d97c00a22f09471d1e7614bb20b37
BLAKE2b-256 d63aab5863f470704d7e753b073cf503a1418cd9dfa840d2f53a1c0f5bea4273

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 11de13566cb475b8c4705c21d4208352e183b5f0733186e765aebd74635b202e
MD5 290bf90c0d0963f0095820af6afeadd6
BLAKE2b-256 43a8bdb7ffd33f49926b474b659b8c3985ffe9030ad3cc261ac9056dba93a03f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6eb4bfdac3a30e53e3990c8720afb5d500d41232c5831b3549f2de65a2589263
MD5 0d3a1731ba9a1fd05eecb079a5fd2eb2
BLAKE2b-256 1d7710bcb910e1040ba84d87e32376347e00211077ace44eb77cfc3b7efa8a10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 57337bb742136be8be66c2aad83a6fd2cb4e17f7c0877834bce4bc3c66ef438f
MD5 c34458d17fba388939fe2545533f0f61
BLAKE2b-256 5616f2d34b0601a22ad3bd8d627dd475d96a42e23f31f9699e90577c62368a93

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b79476cc383b169be8a17c538b19fcd0e754fb144529a107ae66e2d372466196
MD5 78d3a607f1c1c27e0da4c2e36686b20f
BLAKE2b-256 42c9d22ef7475b59dcb72553445edc8c7a48ed60cd513b95126f0634d814d275

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 570cecc4699f8888a0e73b477874c65628c0d18780683917aeb0a5e6ed269305
MD5 02bfd125b54cad084b38755d790b7c80
BLAKE2b-256 78f8cd5c0709de959ae6a07233a5f05bcf16056650c74cebe35c056033e0b0e4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.15-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.7

File hashes

Hashes for usearch-2.8.15-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c443f76999e6c0a625b5b6234b329ea27bac78c08344179211e2839c2379b311
MD5 691b65a022224119ea370eaecddeca7d
BLAKE2b-256 ba31db4c06d6ce1b4c4a5744cdd26e6731f41b785f54d1afb95baf406974e1e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 283f35b4d080b4e8e6534e81b442eb93cdd538992be93525d674cbfa98618dff
MD5 0ef3f811107df16c78841a31398789e8
BLAKE2b-256 6036f37cb63d0c24d225f6f163ad3a3df8a927cc0c222854e9c65cf7adac2fc4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4940d4ef5690b9668ac31a10b01542b832a0b717da8cc754fc961abb9c7f2e2a
MD5 f0b7d2bc3e0d52be39609b109fa99365
BLAKE2b-256 a382f22479234eb04bd8c4e7d45bceaf50b27758dae36a4c2b39022c292db185

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f63a4cd84f79ccd1f4fd64da067a72a92e0e2a72d82823635b0dcdbd717894b3
MD5 9d9b4eb11c871656d3e899b16a01a200
BLAKE2b-256 6f84241d29b6b0cd05abe04cdc1980a59279dff6f3a37132426a642515d3b625

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 948c8885df53efcfe7f920d3d034a988f349b780d3bcf8b8548df3b09bf05c74
MD5 b609a5fce0851a2e589e09eb8a4c63da
BLAKE2b-256 1dffc229956a9340955ba6b8d9fe15153146db11e54447b432353eec578031a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 8cd8104fd1fd7fecc282b377db93be08aeae5323996fbbab58d317033085b4f6
MD5 05a467f4bde12cb23b003d38a8846048
BLAKE2b-256 82b7f76b1f15bfe2c51058d990a38dd0758e1d5c53df2c93da8683f301e63cad

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.15-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.7

File hashes

Hashes for usearch-2.8.15-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 deb5e01e4f9a3a4120e9373ff69b8399603148c95ef9e86b676398c383d2b587
MD5 100141c3a6dca95e8112a29c3447acd2
BLAKE2b-256 83ef8e5929f09ba2ace6aca0c35744f152a4bf7f11ebd32fce2feb22b18a164c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 64ba6b24c7fa1765252245459215902f4954ace64e404ce1c6090a52512c5fa3
MD5 7780c60d9f08ab16404e6cf7c28020be
BLAKE2b-256 bd99bee83c4da14ea0f4ce4c0f851c95afa8de4c4b23d8ad9922c244fe9aa544

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 53dd03b674174256247f6e85b1832b296e13098c5da148828273c92f8c56af71
MD5 18d16ff092f5783c3532394964e93370
BLAKE2b-256 a8e420b660b32a7aac4db253133b1738c0ffa4340f59281fd9b8bb3b19f62697

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9150ed967f474609c81e50eb2b5ab4fbb9eaa3cd1c2ef82f3a71098e46ab8a98
MD5 7f6d4aad86ad138fd310313156dc3943
BLAKE2b-256 d587a2c011762ea397d2ee555d224ac8a6dcd222c516a4db57d70b3c4dbe1f36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 550bbf997ad038869a43ac36cc2b54019c271a51f4879235e6fec7766a90d41e
MD5 b6ffb1bf977d257f0102ca15afd47310
BLAKE2b-256 bcb17a49b91daea0a5dcca2c38ca01cd717f0559fa0e72b7d5aa7c742ca395e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 edcf90aab5a50b28916bf0bf9c349eba49a4428f65db0b9eddcd3e242e03ca25
MD5 5cb2e288913186ca6e865a658fdf9a83
BLAKE2b-256 16f5a97ab61a15c19f7b7e471e0b065fc301e2130afa633630d0a7e3e0498320

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-2.8.15-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.7

File hashes

Hashes for usearch-2.8.15-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 02415e9556ce160d78a76c294c4d221daf37bff7b0ec01339afd54e439491377
MD5 163d391e582f8893dfc0259335fc23c8
BLAKE2b-256 51b31947249a2d1db0acb826904c657528f2a81224d0e4724244f33f1e8ce779

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a563a3986cb1c5edf1d1da812030b1d07df0654ab299c18d88388f94c0b43651
MD5 22865d4293eeaa32478e7ad1cc884db9
BLAKE2b-256 72ce7b68802bae27982eb8c78f03cc23f974799b69b0df41d5a7c4bbff1c3b92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp37-cp37m-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 eef56805cd6091720a451050a71785fb1b2d32dd66efca86c1abd0edbd0b0134
MD5 bae2ee781ffa21b5e27f8168989a40ab
BLAKE2b-256 06b49dd1cd1f890d69d632f376a9b3acb725813f7f25cbc13b9bfb07d360a9a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.8.15-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2568252ebb14705c6a7041961b488d8d94cbe3162b123bb8db225b0f9d133451
MD5 c42e35090197c77dbe00659e04261e00
BLAKE2b-256 d9e6b364612c563b6ff21511c124c0319d0bd5b8aab9521abe1341af4bf4e6b0

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