Skip to main content

Smaller & Faster Single-File Vector Search Engine from Unum

Project description

USearch

Faster & Smaller Single-File
Search Engine for Vectors & Texts


Discord     LinkedIn     Twitter     Blog     GitHub

Euclidean • Angular • Bitwise • Haversine • User-Defined Metrics
C++ 11Python 3JavaScriptJavaRustC 99Objective-CSwiftC#GoLangWolfram
Linux • MacOS • Windows • iOS • Docker • WebAssembly


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, with a primary focus on user-defined metrics and fewer dependencies.

FAISS USearch
Implementation 84 K SLOC in faiss/ 3 K SLOC in usearch/
Supported metrics 9 fixed metrics Any User-Defined metrics
Supported languages C++, Python 10 languages
Supported ID types uint32_t, uint64_t uint32_t, uint40_t, uint64_t
Dependencies BLAS, OpenMP None
Bindings SWIG Native
Acceleration Learned Quantization Downcasting

Base functionality is identical to FAISS, and the interface must be familiar if you have ever investigated Approximate Nearest Neighbors search:

$ pip install usearch

import numpy as np
from usearch.index import Index

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: How frequent should the connections in the graph be
    expansion_add=128, # Optional: Control the recall of indexing
    expansion_search=64, # Optional: Control the quality of search
)

vector = np.array([0.2, 0.6, 0.4])
index.add(42, vector)
matches: Matches = index.search(vector, 10)

assert len(index) == 1
assert len(matches) == 1
assert matches[0].key == 42
assert matches[0].distance <= 0.001
assert np.allclose(index[42], vector)

Comparing the performance of FAISS against USearch on 1 Million 96-dimensional vectors from the famous Deep1B dataset, once can expect the following numbers on modern AWS c7g.metal instances.

FAISS, f32 USearch, f32 USearch, f16 USearch, i8
Batch Insert 16 K/s 73 K/s 100 K/s 104 K/s +550%
Batch Search 82 K/s 103 K/s 113 K/s 134 K/s +63%
Bulk Insert 76 K/s 105 K/s 115 K/s 202 K/s +165%
Bulk Search 118 K/s 174 K/s 173 K/s 304 K/s +157%
Recall @ 10 99% 99.2% 99.1% 99.2%

HNSW was configured with identical hyper-parameters: connectivity M=16, expansion @ construction efConstruction=128, and expansion @ search ef=64. Batch size is 256. Jump to the Performance Tuning section to read about the effects of those hyper-parameters.

User-Defined Functions

While most vector search packages concentrate on just a couple of 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 a myriad of applications, from computing geo-spatial 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.

USearch uint40_t support

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 f32_t, f16_t, f64_t, and i8_t representations, even if the hardware doesn't natively support it. Continuing the topic of memory efficiency, we provide a uint40_t to allow collection with over 4B+ vectors without allocating 8 bytes for every neighbor reference in the proximity graph.

Serialization & Serving Index from Disk

USearch supports multiple forms of serialization:

  • Into a file defined with a path.
  • Into a stream defined with a callback, serializing or reconstructing incrementally.
  • Into a buffer of fixed length, or a memory-mapped file, that supports random access.

The latter allows you to serve indexes from external memory, enabling you to optimize your server choices for indexing speed and serving costs. This can result in 20x cost reduction on AWS and other public clouds.

index.save("index.usearch")

loaded_copy = index.load("index.usearch")
view = Index.restore("index.usearch", view=True)

other_view = Index(ndim=..., metric=CompiledMetric(...))
other_view.view("index.usearch")

Exact vs. Approximate Search

Approximate search methods, such as HNSW, are predominantly used when an exact brute-force search becomes too resource-intensive. This typically occurs when you have millions of entries in a collection. For smaller collections, we offer a more direct approach with the search method.

from usearch.index import search, MetricKind, Matches, BatchMatches
import numpy as np

# Generate 10'000 random vectors with 1024 dimensions
vectors = np.random.rand(10_000, 1024).astype(np.float32)
vector = np.random.rand(1024).astype(np.float32)

one_in_many: Matches = search(vectors, vector, 50, MetricKind.L2sq, exact=True)
many_in_many: BatchMatches = search(vectors, vectors, 50, MetricKind.L2sq, exact=True)

By passing 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. These lookups prevent the need to construct a single, massive index, allowing users to query multiple smaller ones instead.

from usearch.index import Indexes

multi_index = Indexes(
    indexes: Iterable[usearch.index.Index] = [...],
    paths: Iterable[os.PathLike] = [...],
    view: bool = False,
    threads: int = 0,
)
multi_index.search(...)

Clustering

Once the index is constructed, it can be used to cluster entries much faster. In essense, the Index itself can be seen as a clustering, and it allows 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 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 spliting it into more parts, all same arguments supported
sub_clustering = clustering.subcluster(min_count=..., max_count=...)

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 will AI 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 is different from searching for every entry, as it requires 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 come in handy 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 post: From Dating to Vector Search - "Stable Marriages" on a Planetary Scale 👩‍❤️‍👨

Functionality

By now, the core functionality is supported across all bindings. Broader functionality is ported per request.

C++ 11 Python 3 C 99 Java JavaScript Rust GoLang Swift
Add, search
Save, load, view
User-defined metrics
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 bitwise similarity metrics, like the Tanimoto coefficient. Below is an example using the RDKit package.

from usearch.index import Index, MetricKind
from rdkit import Chem
from rdkit.Chem import AllChem

import numpy as np

molecules = [Chem.MolFromSmiles('CCOC'), Chem.MolFromSmiles('CCO')]
encoder = AllChem.GetRDKitFPGenerator()

fingerprints = np.vstack([encoder.GetFingerprint(x) for x in molecules])
fingerprints = np.packbits(fingerprints, axis=1)

index = Index(ndim=2048, metric=MetricKind.Tanimoto)
keys = np.arange(len(molecules))

index.add(keys, fingerprints)
matches = index.search(fingerprints, 10)

USearch + POI Coordinates = GIS Applications... on iOS?

USearch Maps with SwiftUI

With Objective-C and Swift iOS bindings, USearch can be easily used in mobile applications. The SwiftVectorSearch project illustrates how to build a dynamic, real-time search system on iOS. In this example, we use 2-dimensional vectors—encoded as latitude and longitude—to find the closest Points of Interest (POIs) on a map. The search is based on the Haversine distance metric, but can easily be extended to support high-dimensional vectors.

Integrations

Citations

@software{Vardanian_USearch_2022,
doi = {10.5281/zenodo.7949416},
author = {Vardanian, Ash},
title = {{USearch by Unum Cloud}},
url = {https://github.com/unum-cloud/usearch},
version = {1.0.0},
year = {2022},
month = jun,
}

Project details


Release history Release notifications | RSS feed

This version

2.1.2

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.1.2-cp311-cp311-win_amd64.whl (245.3 kB view details)

Uploaded CPython 3.11 Windows x86-64

usearch-2.1.2-cp311-cp311-manylinux_2_28_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-2.1.2-cp311-cp311-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-2.1.2-cp311-cp311-macosx_11_0_arm64.whl (384.0 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl (395.3 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-2.1.2-cp311-cp311-macosx_10_9_universal2.whl (748.3 kB view details)

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

usearch-2.1.2-cp310-cp310-win_amd64.whl (243.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-2.1.2-cp310-cp310-manylinux_2_28_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-2.1.2-cp310-cp310-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-2.1.2-cp310-cp310-macosx_11_0_arm64.whl (382.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl (393.8 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-2.1.2-cp310-cp310-macosx_10_9_universal2.whl (745.9 kB view details)

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

usearch-2.1.2-cp39-cp39-win_amd64.whl (244.1 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-2.1.2-cp39-cp39-manylinux_2_28_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-2.1.2-cp39-cp39-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-2.1.2-cp39-cp39-macosx_11_0_arm64.whl (382.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl (394.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-2.1.2-cp39-cp39-macosx_10_9_universal2.whl (746.2 kB view details)

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

usearch-2.1.2-cp38-cp38-win_amd64.whl (243.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-2.1.2-cp38-cp38-manylinux_2_28_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-2.1.2-cp38-cp38-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-2.1.2-cp38-cp38-macosx_11_0_arm64.whl (382.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl (393.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-2.1.2-cp38-cp38-macosx_10_9_universal2.whl (745.8 kB view details)

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

usearch-2.1.2-cp37-cp37m-win_amd64.whl (245.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-2.1.2-cp37-cp37m-manylinux_2_28_x86_64.whl (3.9 MB view details)

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

usearch-2.1.2-cp37-cp37m-manylinux_2_28_aarch64.whl (3.8 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl (388.7 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for usearch-2.1.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d66f214cc1edd7e4434facf0e4c9d2b48719d31a2025c3bf24fa55151a16ffc1
MD5 aa45e0702399a0ffbc290a742ce38b84
BLAKE2b-256 826a7b5445d05a6905f360943bdd25bc29239d7cdb714947acac9b58f3af096d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 09a4a70ae1e870020dc551a4ba9ba79943eb4279fe149425df244bc4c2ec57b8
MD5 8a10736449704ed3b247339c1862e449
BLAKE2b-256 5cfca8f3772dec510d3aa004f6e8eb9240efdd1ac0c31ce8706678784f04cd67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d6ad23501e26265f7e6d4089c606f4a2b8668e49ec6b43ff19dafe9345a928d0
MD5 1a3c5ee62a32288692db6c923aee9b59
BLAKE2b-256 a000df75915f3b69f719edd84882943255f0cbbc5146a80e1fda9b7a2674f4d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8d9b41edd31e03cf1bb88e12cfc9e5764d6c463a892b43685cf2f411acef1ea
MD5 fbf5b53d052180a9dd14b7d0ead6fe51
BLAKE2b-256 7e1fc0b9f92e610ec5698d1dd0b57ce870f9f912c910116812d2b73aaafede78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 08c38cdfb6f7298e900680a9539a655affdbb19e8dae575836e7821031396ff4
MD5 78021dcb1877393453e43d11021a0dff
BLAKE2b-256 ba38a95a3dcb92de19d5165010d218e260354a1e9fd0e1dcca8ed3e1e4aaf2bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c4c295d6c9e85bf730b743a4a1ce43d58c069e19c172baa18b8d6b164414dc60
MD5 5aef85e2eac4562d6b76d65afdcf37e8
BLAKE2b-256 c439566eae208c8dd4c94f416fa6b2f0ca74a541b92d4d3a970527e9be503e03

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-2.1.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 932169e15f879f81b8c9f887f78f2f24197dbaf3248c7cb8f26ff797ddd2378e
MD5 eacfa1703bc3c3f9b623813dbbe804b9
BLAKE2b-256 1f401823ac72853d3f1dd66defb7a0da0152c2c7ec61ac6c4eb8a2cc74b211ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4f654eead70a7f16e869c1d5963f68f7a5e4d8eee8725c2d1dfdff9fb6f74055
MD5 650274aa6dd1ffc0818dd1202dadc654
BLAKE2b-256 2f4f3a77b641fb3a7ddb0340a646d771de4a6802fbdb54d38acbebe155d70b78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 db94058421a9e960d456d4ce7a44d1389443b3c7ee4e92f5f61157d510018bd3
MD5 4816383529e1da992a1475abccbd3073
BLAKE2b-256 56408612bee8402728193fb2ffd5d7c8e7821fbaa3f401d852ca0612871bcb54

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fef9427880293e9546cc3719e3309dde5c9beff6d8848fec41e41b9be3e8e5d7
MD5 222a50e4c0f18a61cb09beeffff0e0ba
BLAKE2b-256 2f969efb9bbc00b5de9921c26992dd3ad65f0edacf7809c647993c82b99f28d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aec0fb961ff1e9e9ba800eb477d4b097d2c92458cf9b5cc0314db7b1b8311705
MD5 161e6122b489741680888ca9807ca560
BLAKE2b-256 2d0874cafbb6911a5158c375ba92f003ea6953d2cb3285786f070e8c46487422

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7cc3d13df4d003be42ed6e40b94394e4ffb17cc29a2c860efcbef75b90e7e75f
MD5 234729a38a8e47900034accc38e26111
BLAKE2b-256 6147f64b04cea1ca4ff59d61d3c7aa98f8931298ce0dfaffd6e03093eca338a4

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-2.1.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 16669eb2f3c34f8f325c27e2dc7945eba87c8cabc719fb07a3fbcca60c2dab88
MD5 5c5fc0502e92f6de2b94c775ab311191
BLAKE2b-256 0b9f57d4d7a6b15f16bf8cdc67e59d79b5dd407216d66649ddbcf687e63b7b33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 179362b622a7392e171bafd2c5fdb29b3118006cf92b61efda0392f1532b7148
MD5 747484e107e896bb191e1b654c88abd8
BLAKE2b-256 35f712da030c6f5a631ba43c2c5328f1cbd22bb5326b8175e36d69386cd0a8c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7e034205dc8492e9b4a79990068886c64b06caba5d7eef974f1301977dd6daaf
MD5 4c532a5a8e2c5e53f88337e52dc93a7b
BLAKE2b-256 a0e92b21d0e4561766f12bea885b895f8312876fbd21b9c8cf599f2211107708

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c0a1191450b17288156ab8a4d7a59c32cb13d54e747c2deb48d7fdcb7ae1ccfd
MD5 16e71e9e5266e5d05b6263e82c4387ce
BLAKE2b-256 9df24f578a84064b5dfd1d2d2267b38971c169bef733592f983126f46dd5bc0f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 15c928ddd2a0823a2c637adbf91dc0d505fe1f39cce69cce616212946a788c99
MD5 a56e2850ef1c1e415a85e1d3b11e8457
BLAKE2b-256 fb48a5001f6d81f6ce96be552dd05bf14511dc3acf1b25198912bb15d1d742b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 723f336727f0760dad39d10bcb67c4257ae80b6d09cdf8d3513300a977e3888c
MD5 3d125b1f92be25338d18d98ecc62189b
BLAKE2b-256 f349beffebb12f145700907dbe9ecc3608ddaba882ac9e0b39cdbe31ea123dca

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-2.1.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 a7a28a12b239dd13e6d94d6204710640f2d7cf056a19ac43311c2c1b702b92be
MD5 28eb80ea15ddeadd3ab3cd9f344e8dae
BLAKE2b-256 fc358a168019d2c39241f74cfeb567815b052ba4450c367c81aa3cd411e4b752

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4600bb7abe9d3f634c99acb41f65074fa81a62b7e26fe9cd29d1d9cc2ca27651
MD5 aef2a0be3795cbe900085cf2a74a5c5a
BLAKE2b-256 3e0db53033f3a28a18a61a0af843f7fed3246e0480bee8862bafc7d7c4f89340

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 84d05ebaf5e91c3489fa587e58e1a1a73f35d256c57d7d7fc1b5001142374d1e
MD5 0a8870d451ffcb8e38888310557fc169
BLAKE2b-256 671155b0d62b3104627f8c1753f70edcf7c9440c9e58df70d76fea4672950446

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ae9a75c2debaf9094078b1c85c9c74e415e7a74c65f28ffc4efa16c2b3bc263
MD5 af11e8b9cafe9f6e71655b659fb26214
BLAKE2b-256 b79c7f7ac4e0c811ed3f7ce463549c6cb80fa7b805ca226b40861c5b918d12a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b78b19735665d1a6769e0ca688cf78be78d0649d2f24ffc90fac60785eaecc3f
MD5 c8e361583934232b12c257ef75e7f995
BLAKE2b-256 b9b3bc23741bf12d3b876576e05f0be39a0cfab29f786c4a0619763560623f59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 62ebd3ede681f9fef0bb6bbf0a9ae6b6572b3b5c49d688ddd89ae662a09393a9
MD5 5cb465edb43fbf7b9953412f2ac8f825
BLAKE2b-256 b27ac1164876de4c606d63c2eb82bf4ac99be5ab6afa3b80837149c69f5ed6d8

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-2.1.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d19a5319df048419a04a0a199dc3726a3e9480192e2e9e41d4e9ee24b1810339
MD5 caa35dabd3059017c17df918eaa2b91f
BLAKE2b-256 23fb233567d0548432b7d6aa7a8bfc091f912c4c09ecb154fcdfbab9a2a9b314

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e28f0b251618c96d1a709b91782140b604961add0d6461f1b508c567487b3fc
MD5 1a47df3c3681cffa1967b86b39cde8fc
BLAKE2b-256 40861e411826c832b4159835accbc51a3831a58aba6579f13ba3a03808a6c074

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 915d11324bac029c141590450c22c457df57cf4dcfcd15e9ca24b9fdf709fe66
MD5 0752f87430ce645e8f8a4c161483bce4
BLAKE2b-256 05edf9e0491753c33771f46d05dd7fa081c5c0761e7f2750819ab299095c77dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e60f41b28f13e9be3e0a07b7491853767a60d4e5c5c78155210ab6ba7f133d71
MD5 8e096bdc11e9471516f6d37152ba68f5
BLAKE2b-256 d2ca57ae46b2728904f081cec4f0720c9ce863af84b5de8a9f3fd2dec8a0c40b

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