Skip to main content

Smaller & Faster Single-File Vector Search Engine from Unum

Project description

USearch

Smaller & Faster Single-File
Vector Search Engine


Discord     LinkedIn     Twitter     Blog     GitHub

Euclidean • Angular • Jaccard • Hamming • Haversine • User-Defined Metrics
C++11PythonJavaScriptJavaRustObjective-CSwiftGoLangWolfram
Linux • MacOS • Windows



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

FAISS is the industry standard for a high-performance batteries-included vector search engine. Both USearch and FAISS implement the same HNSW algorithm. But they differ in a lot of design decisions. USearch is designed to be compact and broadly compatible without sacrificing performance.

FAISS, f32 USearch, f32 USearch, f16 USearch, f8
Insertions 76 K/s 89 K/s 73 K/s 137 K/s
Queries 118 K/s 167 K/s 140 K/s 281 K/s
Recall @1 99% 99.2% 98% 99.2%

Dataset: 1M vectors sample of the Deep1B dataset. Hardware: c7g.metal AWS instance with 64 cores and DDR5 memory. HNSW was configured with identical hyper-parameters: connectivity M=16, expansion @ construction efConstruction=128, and expansion @ search ef=64. Both libraries were compiled for the target architecture. Jump to the Performance Tuning section to read about the effects of those hyper-parameters.

User-Defined Functions

Most vector-search packages focus on just 2 metrics - "Inner Product distance" and "Euclidean distance". That only partially exhausts the list of possible metrics. A good example would be the rare Haversine distance, used to compute the distance between geo-spatial coordinates, extending Vector Search into the GIS domain. Another example would be designing a custom metric for composite embeddings concatenated from multiple AI models in real-world applications. USearch supports that: Python and C++ examples.

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.

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 f8_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.

View Larger Indexes from Disk

Modern search systems often suggest using different servers to maximize indexing speed and minimize serving costs. Memory-optimized for the first task, and storage-optimized for the second, if the index can be served from external memory, which USearch can.

To Build To Serve
Instance u-24tb1.metal is4gen.8xlarge
Price ~ $200/h ~$4.5/h
Memory 24 TB RAM + EBS 192 GB RAM + 30 TB SSD

There is a 50x difference between the cost of such instances for identical capacity. Of course, the latency of external memory access will be higher, but it is in part compensated with an excellent prefetching mechanism.

Usage

There are two usage patters:

  1. Bare-bones with usearch/usearch.hpp, only available in C++.
  2. Full-fat version with it's own threads, mutexes, type-punning, quantization, that is available both in C++ and is wrapped for higher-level bindings.

C++

Installation

To use in a C++ project simply copy the include/usearch/usearch.hpp header into your project. Alternatively fetch it with CMake:

FetchContent_Declare(usearch GIT_REPOSITORY https://github.com/unum-cloud/usearch.git)
FetchContent_MakeAvailable(usearch)

Quickstart

Once included, the low-level C++11 interface is as simple as it gets: reserve(), add(), search(), size(), capacity(), save(), load(), view(). This covers 90% of use-cases.

using namespace unum::usearch;

index_gt<cos_gt<float>> index;
float vec[3] = {0.1, 0.3, 0.2};

index.reserve(10);
index.add(/* label: */ 42, /* vector: */ {&vec, 3});
index.search(
  /* query: */ {&vec, 3}, /* top */ 5 /* results */,
  /* with callback: */ [](std::size_t label, float distance) { });

The add is thread-safe for concurrent index construction.

Serialization

index.save("index.usearch");
index.load("index.usearch"); // Copying from disk
index.view("index.usearch"); // Memory-mapping from disk

User-Defined Metrics in C++

For advanced users, more compile-time abstractions are available.

template <typename metric_at = ip_gt<float>,            //
          typename label_at = std::size_t,              // `uint32_t`, `uuid_t`...
          typename id_at = std::uint32_t,               // `uint40_t`, `uint64_t`...
          typename scalar_at = float,                   // `double`, `half`, `char`...
          typename allocator_at = std::allocator<char>> //
class index_gt;

You may want to use a custom memory allocator or a rare scalar type, but most often, you would start by defining a custom similarity measure. The function object should have the following signature to support different-length vectors.

struct custom_metric_t {
    T operator()(T const* a, T const* b, std::size_t a_length, std::size_t b_length) const;
};

The following distances are pre-packaged:

  • cos_gt<scalar_t> for "Cosine" or "Angular" distance.
  • ip_gt<scalar_t> for "Inner Product" or "Dot Product" distance.
  • l2sq_gt<scalar_t> for the squared "L2" or "Euclidean" distance.
  • jaccard_gt<scalar_t> for "Jaccard" distance between two ordered sets of unique elements.
  • bit_hamming_gt<scalar_t> for "Hamming" distance, as the number of shared bits in hashes.
  • pearson_correlation_gt<scalar_t> for "Pearson" correlation between probability distributions.
  • haversine_gt<scalar_t> for "Haversine" or "Great Circle" distance between coordinates.

Bring your Threads

Most AI, HPC, or Big Data packages use some form of a thread pool. Instead of spawning additional threads within USearch, we focus on the thread safety of add() function, simplifying resource management.

#pragma omp parallel for
    for (std::size_t i = 0; i < n; ++i)
        native.add(label, span_t{vector, dims}, omp_get_thread_num());

During initialization, we allocate enough temporary memory for all the cores on the machine. On the call, the user can supply the identifier of the current thread, making this library easy to integrate with OpenMP and similar tools.

Python

Installation

pip install usearch

Quickstart

import numpy as np
from usearch.index import Index

index = Index(
    ndim=3, # Define the number of dimensions in input vectors
    metric='cos', # Choose 'l2', 'haversine' or other metric, default = 'ip'
    dtype='f32', # Quantize to 'f16' or 'f8' if needed, default = 'f32'
    connectivity=16, # How frequent should the connections in the graph be, optional
    expansion_add=128, # Control the recall of indexing, optional
    expansion_search=64, # Control the quality of search, optional
)

vector = np.array([0.2, 0.6, 0.4], dtype=np.float32)
index.add(42, vector)
matches, distances, count = index.search(vector, 10)

assert len(index) == 1
assert count == 1
assert matches[0] == 42
assert distances[0] <= 0.001

Python bindings are implemented with pybind/pybind11. Assuming the presence of Global Interpreter Lock in Python, we spawn threads in the C++ layer on large insertions.

Serialization

index.save('index.usearch')
index.load('index.usearch') # Copy the whole index into memory
index.view('index.usearch') # View from disk without loading in memory

Batch Operations

Adding or querying a batch of entries is identical to adding a single vector. The difference would be in the shape of the tensors.

n = 100
labels = np.array(range(n), dtype=np.longlong)
vectors = np.random.uniform(0, 0.3, (n, index.ndim)).astype(np.float32)

index.add(labels, vectors, threads=..., copy=...)
matches, distances, counts = index.search(vectors, 10, threads=...)

assert matches.shape[0] == vectors.shape[0]
assert counts[0] <= 10

You can also override the default threads and copy arguments in bulk workloads. The first controls the number of threads spawned for the task. The second controls whether the vector itself will be persisted inside the index. If you can preserve the lifetime of the vector somewhere else, you can avoid the copy.

User-Defined Metrics in Python

Assuming the language boundary exists between Python user code and C++ implementation, there are more efficient solutions than passing a Python callable to the engine. Luckily, with the help of Numba, we can JIT compile a function with a matching signature and pass it down to the engine.

from numba import cfunc, types, carray

signature = types.float32(
    types.CPointer(types.float32),
    types.CPointer(types.float32),
    types.size_t, types.size_t)

@cfunc(signature)
def python_dot(a, b, n, m):
    a_array = carray(a, n)
    b_array = carray(b, n)
    c = 0.0
    for i in range(n):
        c += a_array[i] * b_array[i]
    return c

index = Index(ndim=ndim, metric_pointer=python_dot.address)

Tooling

from usearch.index import Index
from usearch.io import load_matrix, save_matrix

vectors = load_matrix('deep1B.fbin')
index = Index(ndim=vectors.shape[1])
index.add(labels, vectors)

JavaScript

Installation

npm install usearch

Quickstart

var index = new usearch.Index({ metric: 'cos', connectivity: 16, dimensions: 3 })
index.add(42, new Float32Array([0.2, 0.6, 0.4]))
var results = index.search(new Float32Array([0.2, 0.6, 0.4]), 10)

assert.equal(index.size(), 1)
assert.deepEqual(results.labels, new Uint32Array([42]))
assert.deepEqual(results.distances, new Float32Array([0]))

Serialization

index.save('index.usearch')
index.load('index.usearch')
index.view('index.usearch')

Rust

Installation

cargo add usearch

Quickstart

let quant: &str = "f16";
let index = new_ip(3, &quant, 0, 0, 0).unwrap();

assert!(index.reserve(10).is_ok());
assert!(index.capacity() >= 10);
assert!(index.connectivity() != 0);
assert_eq!(index.dimensions(), 3);
assert_eq!(index.size(), 0);

let first: [f32; 3] = [0.2, 0.1, 0.2];
let second: [f32; 3] = [0.2, 0.1, 0.2];

assert!(index.add(42, &first).is_ok());
assert!(index.add(43, &second).is_ok());
assert_eq!(index.size(), 2);

// Read back the tags
let results = index.search(&first, 10).unwrap();
assert_eq!(results.count, 2);

Being a systems-programming language, Rust has better control over memory management and concurrency but lacks function overloading. Aside from the add and search, USearch Rust binding also provides add_in_thread and search_in_thread, which let users identify the calling thread to use underlying temporary memory more efficiently.

Serialization

assert!(index.save("index.usearch").is_ok());
assert!(index.load("index.usearch").is_ok());
assert!(index.view("index.usearch").is_ok());

Metrics

assert!(new_l2(3, &quant, 0, 0, 0).is_ok());
assert!(new_cos(3, &quant, 0, 0, 0).is_ok());
assert!(new_haversine(&quant, 0, 0, 0).is_ok());

Java

Installation

<dependency>
  <groupId>cloud.unum.usearch</groupId>
  <artifactId>usearch</artifactId>
  <version>0.2.3</version>
</dependency>

Add that snippet to your pom.xml and hit mvn install.

Quickstart

Index index = new Index.Config().metric("cos").dimensions(2).build();
float vec[] = {10, 20};
index.add(42, vec);
int[] labels = index.search(vec, 5);

Swift

Installation

https://github.com/unum-cloud/usearch

Quickstart

let index = Index.l2(dimensions: 3, connectivity: 8)
let vectorA: [Float32] = [0.3, 0.5, 1.2]
let vectorB: [Float32] = [0.4, 0.2, 1.2]
index.add(label: 42, vector: vectorA[...])
index.add(label: 43, vector: vectorB[...])

let results = index.search(vector: vectorA[...], count: 10)
assert(results.0[0] == 42)

GoLang

Wolfram

TODO

  • JavaScript: Allow calling from "worker threads".
  • Rust: Allow passing a custom thread ID.
  • C# .NET bindings.

AI + Vector Search = Semantic 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 an image search platform in just 20 lines of Python.

import ucall.rich_posix as ucall
import uform
from usearch.index import Index

import numpy as np
from PIL import Image

server = ucall.Server()
model = uform.get_model('unum-cloud/uform-vl-multilingual')
index = Index(ndim=256)

@server
def add(label: int, photo: Image.Image):
    image = model.preprocess_image(photo)
    vector = model.encode_image(image).detach().numpy()
    index.add(label, vector.flatten(), copy=True)

@server
def search(query: str) -> np.ndarray:
    tokens = model.preprocess_text(query)
    vector = model.encode_text(tokens).detach().numpy()
    neighbors, _, _ = index.search(vector.flatten(), 3)
    return neighbors

server.run()

Check that and other examples on our corporate GitHub 🤗

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

Uploaded CPython 3.11 Windows x86-64

usearch-0.2.4-cp311-cp311-win32.whl (116.6 kB view details)

Uploaded CPython 3.11 Windows x86

usearch-0.2.4-cp311-cp311-manylinux_2_28_x86_64.whl (275.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-0.2.4-cp311-cp311-manylinux_2_28_aarch64.whl (265.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-0.2.4-cp311-cp311-macosx_11_0_arm64.whl (154.4 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-0.2.4-cp311-cp311-macosx_10_9_x86_64.whl (167.1 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-0.2.4-cp311-cp311-macosx_10_9_universal2.whl (307.4 kB view details)

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

usearch-0.2.4-cp310-cp310-win_amd64.whl (132.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-0.2.4-cp310-cp310-win32.whl (116.6 kB view details)

Uploaded CPython 3.10 Windows x86

usearch-0.2.4-cp310-cp310-manylinux_2_28_x86_64.whl (275.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-0.2.4-cp310-cp310-manylinux_2_28_aarch64.whl (265.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-0.2.4-cp310-cp310-macosx_11_0_arm64.whl (154.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-0.2.4-cp310-cp310-macosx_10_9_x86_64.whl (167.1 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-0.2.4-cp310-cp310-macosx_10_9_universal2.whl (307.4 kB view details)

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

usearch-0.2.4-cp39-cp39-win_amd64.whl (132.8 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-0.2.4-cp39-cp39-win32.whl (116.6 kB view details)

Uploaded CPython 3.9 Windows x86

usearch-0.2.4-cp39-cp39-manylinux_2_28_x86_64.whl (276.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-0.2.4-cp39-cp39-manylinux_2_28_aarch64.whl (267.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-0.2.4-cp39-cp39-macosx_11_0_arm64.whl (154.6 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-0.2.4-cp39-cp39-macosx_10_9_x86_64.whl (167.3 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-0.2.4-cp39-cp39-macosx_10_9_universal2.whl (307.7 kB view details)

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

usearch-0.2.4-cp38-cp38-win_amd64.whl (132.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-0.2.4-cp38-cp38-win32.whl (116.4 kB view details)

Uploaded CPython 3.8 Windows x86

usearch-0.2.4-cp38-cp38-manylinux_2_28_x86_64.whl (275.7 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-0.2.4-cp38-cp38-manylinux_2_28_aarch64.whl (266.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-0.2.4-cp38-cp38-macosx_11_0_arm64.whl (154.4 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-0.2.4-cp38-cp38-macosx_10_9_x86_64.whl (167.1 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-0.2.4-cp38-cp38-macosx_10_9_universal2.whl (307.3 kB view details)

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

usearch-0.2.4-cp37-cp37m-win_amd64.whl (132.9 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-0.2.4-cp37-cp37m-win32.whl (117.1 kB view details)

Uploaded CPython 3.7m Windows x86

usearch-0.2.4-cp37-cp37m-manylinux_2_28_x86_64.whl (280.1 kB view details)

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

usearch-0.2.4-cp37-cp37m-manylinux_2_28_aarch64.whl (271.3 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-0.2.4-cp37-cp37m-macosx_10_9_x86_64.whl (165.1 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

usearch-0.2.4-cp36-cp36m-win_amd64.whl (132.9 kB view details)

Uploaded CPython 3.6m Windows x86-64

usearch-0.2.4-cp36-cp36m-win32.whl (117.1 kB view details)

Uploaded CPython 3.6m Windows x86

usearch-0.2.4-cp36-cp36m-manylinux_2_28_x86_64.whl (280.4 kB view details)

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

usearch-0.2.4-cp36-cp36m-manylinux_2_28_aarch64.whl (270.7 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.28+ ARM64

usearch-0.2.4-cp36-cp36m-macosx_10_9_x86_64.whl (165.1 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-0.2.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 132.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 84c344ed1245c1d51125c7b6c893a2b1149244d2b260f8b377dad96fe8b4ddc2
MD5 f6d6fdca01163a59bbbbc62163138b62
BLAKE2b-256 d5f3033d68314ba0a0b10d562479e3fbc2a65658d2efd68d14bc457b458383ef

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp311-cp311-win32.whl.

File metadata

  • Download URL: usearch-0.2.4-cp311-cp311-win32.whl
  • Upload date:
  • Size: 116.6 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 420c7ec6262c66e06dd55b98447a89accd87989cacf48233cca3d9a1913c6da8
MD5 d38887ce0ff40658ea34eb958a3c908d
BLAKE2b-256 3390f31ad9eb006a4f2935c9cc581ec2f6d1cf6877499e6276ce8d2de244df88

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9e825fc17ceb9d95f0af7949de9e212c2adaaa52c6bd4efcad99b7da4a9afb3a
MD5 69fcb847cdc6b72add7a1f8ba230c58a
BLAKE2b-256 8d69cfe257fc1fe6a410b2bb83b9cad70cb995057a34d69f439490bfa2ad1d77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d06a2cd19c28a48bcf94784275ec1e2f64bfa8a12f4dfea20ff3b0e69d33ba6
MD5 7fe15e2cec6c9c299aa05bc4cecb094b
BLAKE2b-256 8f295ec4c622c14ebc41705af3cd2b11f07380b5525410fca9b5661fc57c80cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 70c6cf21fe64429af7eac9ad29b5822cb6f109f42a74366947293eed60f14517
MD5 a78bf49ff122aea6b2fe192d5ea29c2a
BLAKE2b-256 475aec2a0bc513eb059a4d92e02b550ab82e0338778b09dc2ecbb5c4892b1519

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 64e2c4ce86a6b0c73caba5004e3c32cfa8316fd9d0420b9fbec5d1b52a5de879
MD5 32d95f4450882201351253a6c2827d39
BLAKE2b-256 6c5a655187a42e0bcfbe7c36f5fbd89b42c098d42213eb2f7976c6b84609435c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 184f7496fdb69cd58a12aa72b750cd89f9c040217d2e6c6ce94bf35bd77344b9
MD5 e4265b4ac7380c57219807d84544eb25
BLAKE2b-256 eefe0d3c4f4ef84226e5f3713b1c2b92f8b71914ee4d541447ec1d12588cbc7e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.2.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 132.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 92f56510e0a5a47465be779750e3c97f078016616c331fc7d5b0e721acd801d1
MD5 88be0fed096ebb5ed4737b9619fa9e10
BLAKE2b-256 93f84d771acc336c2884ebc720bd4dbbcdd31b91a4281d562db914a22291d0f1

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp310-cp310-win32.whl.

File metadata

  • Download URL: usearch-0.2.4-cp310-cp310-win32.whl
  • Upload date:
  • Size: 116.6 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 21bc5891e9c2a30cbd74098ac74d57f2aff215b9dfdbd59b0598592cb4a973d7
MD5 1ae74f7f9562fb9780d2cdc1f83335f5
BLAKE2b-256 b4f114ccf2beab87983de0ce36c80da1327c5ca3474cc6551a873dda1f505769

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a51035fc7aad7346e38772a1f81d360e3a1823505db4aa7509ffd9472cc97457
MD5 cdc52045e598d2c9724cacaebe3266dd
BLAKE2b-256 16df234fa3a51508b0781441f0ea3df34d184d9c5787777182d319db9ab9c394

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b0976d613e22915083810548cbd794914e4efb0aa366520891dc84da3418e7fc
MD5 e72072c1880d8637d0ffc29cb8036c95
BLAKE2b-256 a8c4958d57b4e7826c5acc0f18fa104e9596df4f4ce2538e82e353694c3eae16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0f3badcd3079d99f0d475649ed72862e54ffa59d258dd26c893d25fab7481b7e
MD5 2bac83903edcfa2de5a397fde484d8bb
BLAKE2b-256 a881da498be0a5bacdfde26335e9e020be4ce36d43dbda6494426f6af80503db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9cb0bb248824b4a31c7c9bd77e8ec4a8778630a29cda296a65281cccd834463b
MD5 51296efeeb5072ce45d846633082a358
BLAKE2b-256 ecda6262e1c43486b605f9beec27bbc1a7c9dc4f57056256a859105f58e67950

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f7fbd61f8c6365d3e452ae2af2a27c2cf0a98c46651da415c09425f4d125ad3e
MD5 a25d3354833cf19f518308e02e752ffc
BLAKE2b-256 ecc4e0bea9ef5c9af1e22bba3dc2b061593efee72a2b9b7cbb938487b7a463de

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.2.4-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 132.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 135aef22baff3deb25f02e42d30e0d71ae1f9417a1e4e6d054042da91a53c191
MD5 244ed263538c3e1ae69ae4565c570e7e
BLAKE2b-256 da2af7c12cea0d6d5cf43611392429e1c8ab94761a5e733d27cb432c4d30831e

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp39-cp39-win32.whl.

File metadata

  • Download URL: usearch-0.2.4-cp39-cp39-win32.whl
  • Upload date:
  • Size: 116.6 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 bbfb63963b2da9fe5e93a9e3000c37c0bd45e8c30f9da524ea23fc40346490af
MD5 93119e9bfda06c6031e2526ba2f5b677
BLAKE2b-256 9f520b5064b6905ea94d8e8905fcbfe9aee91a58105c23b1f1cf37a5f49e4690

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c48d49182495d10bd2dbf59f0c4a3503bf717f0440101346a95c40abc8a86306
MD5 0183f0b3e100d33c398edb6307515043
BLAKE2b-256 42dd1c385eba179769eeca9f9eefba6a9acc1cc0f82511163d7d60c06568b36d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c9bf535a2e4790b7b0ddf230b9a5f0687e90b059518cf2d20ed51439f473a9d1
MD5 aa118d8fa0029b117dc863ba8625698e
BLAKE2b-256 4faf0c2d30a26596767431af3694b867ced252858bbb3206ad7bc7b0e51d6170

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cd54cd2413531375fb938194bbe4ffabaed5937a174d7c9a8dafe9ed6c4c4a05
MD5 523c9dc96f3cac6d9904b9f6a57dadd3
BLAKE2b-256 3266564a661347c1f4f646ba5642f5d2bfe3cadc8b7685b014e0bb25baf860d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c2275418ed24baf91f1cf842d89930429098d0877cdd364247c4746cc0088a7c
MD5 f5c9d793c4c2e7ce546d6a823a03ef90
BLAKE2b-256 e44891c50b6ac81f9e9f5c6e18d0bfc5b6c1377f6ff066d61fb8b9ebb4e4820c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2148c81fc231742518235a12781def6f2299df7212f56888b4099661c9529c94
MD5 5d6c8f0fcfaa46d1780225169b7d6f07
BLAKE2b-256 12bc1b5dbc1ba79ba0a9538d6cab0b2b1e96782c0eb123fa20cf2c8812382c0b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.2.4-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 132.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d21b8f54c61a8c84a123f76818e4838f8468ff48b7e764cacfda98c47f15d93f
MD5 522db5cc2b183c4725ea8c543d155b61
BLAKE2b-256 5c8a1a726639cd80ded35f203c025ce6ffb9bb9b93d284caf7cff2c6278030db

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp38-cp38-win32.whl.

File metadata

  • Download URL: usearch-0.2.4-cp38-cp38-win32.whl
  • Upload date:
  • Size: 116.4 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 19e58bbaf1f5f21e43928d45ff9307a59631db9eb23a1c49f57993bab103bf03
MD5 ab4f77457c95ac2fb3a483dbe1d473e2
BLAKE2b-256 1641dabfc3da2b4e8bdb8ff2f315760936fee3a6212dd8eeaac8be431c1208cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d5ef824812fe0472dd95539027bf6b63574596e6e9fb043d0626b0bc63494e19
MD5 e3ca9ba60993fce93c7ed85793adad9c
BLAKE2b-256 3c4ae442b5147306e5f943b8421047e955c0579836420a67601b4f0d6eedd4d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6cf0171572a3a978fc9be1777868e0aaf55e3f4f29925c38adb4ee90225af762
MD5 c49a74ab88181aceb9be419042e6b64c
BLAKE2b-256 cd8bb240c9cd359c2fc6bb121554ca1e715302f39eaee31ed321337b4374d758

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 df26b88e0e5d7351fd9b73b5aff14e28ab22ac32de2632c9a10131fa62365473
MD5 21abcdddaf6710be94d20c59b0df9879
BLAKE2b-256 b1ca688ee3788eb7e4e499b22748e3c7b1d8a3ae9b8658b2240e896217c44926

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 82a0c562efe60d0bdfb0ba6a85166cadc76595de6b57a11fac43b502cd6eb721
MD5 c8fe7535a72e8ab638d8a58032023ead
BLAKE2b-256 4130a90fa779a2abb06437818bfe34a432112163bbe919f6be45305a2513b13d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 ffd6a28f0d827da2ea83a32c7b58067fbaafdd70c9e76c55759fe1434bd3a9f3
MD5 44b0354e9d28ddeb428e0bfe7d92b60c
BLAKE2b-256 1eaf0d176d12ecda38b4ca80d42dc4c513afb8319d15ffaec604f12355e31097

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-0.2.4-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d0a2834f21706c01025b831c625c2b686f701ab7b828eeca0940199822025d5a
MD5 4f80f1888540149d108b91b8d9dfdb78
BLAKE2b-256 15e81ce0bd56f7f9728d47a60d0a8a6755052a940f6a1b676a62dd5621fb4062

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp37-cp37m-win32.whl.

File metadata

  • Download URL: usearch-0.2.4-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 117.1 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 17c228c1e5b57bf8ed7cb2389a5df8ada4af941c9e554b348c6d706a09148dc1
MD5 6ba03fc7c1cfa7210268d1f9302b15e6
BLAKE2b-256 053ffdec604cc58486827b7fcbf252aad95bab4a94d4c3d3feb3675b032f085a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1cde67ce86af2c99443daff3aec6820dcea51b1ec78a5ed272731dddc4e3aae
MD5 cbaf4278880b38ae4fdf64c2a1eb925d
BLAKE2b-256 871be1fc2f00978212033617a9da3718e76bdec824e2bdc56fc5c8b08e5e889d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4e73ef64b583ecbdec0af3671418329a7ec4c4f1d160e34a85da11a1d76a8066
MD5 a8d55ac841ab7200fe8ef68f8dcb660d
BLAKE2b-256 982bbd17312a80eb4081d5718f1a24e9bfc80fd96e172590ca63b6dfa9e23a97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.2.4-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 79b7a8d27d50de1673c2f57d15e7df0c93b7d74fba664aa5ee01212bea9c6d9d
MD5 baaaef7acbc3eb7f40fe098802eed6b4
BLAKE2b-256 e4281f3748133ce3fe4c488a7dcb4541c7daa40cba2aac7863d3eabad8d4208c

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: usearch-0.2.4-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 132.9 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 9445d81150361b94dd5fe5c3ab6b1432c26f6bd42575ac1d9697da7dc3ae222b
MD5 ad4d62238e2b982ca9bd5fc774d3b352
BLAKE2b-256 08e5a33042ab48270c2fb76af416e5b5e5d768e2a2bf06ac157fea4503d24449

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp36-cp36m-win32.whl.

File metadata

  • Download URL: usearch-0.2.4-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 117.1 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for usearch-0.2.4-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 579eabc137ea2268a97c242853b0bcc054d2f3ae636a945124f1cd47bae6a6af
MD5 0918f6d07d2301e4366e167b9fcc396d
BLAKE2b-256 2256cb5f9c47954849e890f753b1d21e5c2f3f5984034eb33761e4141b71b928

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp36-cp36m-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for usearch-0.2.4-cp36-cp36m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f8e77aa0c0778cf47c5cbbfdea2a480898e2626772aa6da067012c36df37300
MD5 f1f91feadfb0352e0f1c1511df1dcc9b
BLAKE2b-256 1aedb0a91559fc099e3ee0714b3bb29791e3783207b356ae6000eaa46c298cc7

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp36-cp36m-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for usearch-0.2.4-cp36-cp36m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ac8ae50d935c0c189695d80a4da744c487ad359d87bb42ae1524f60f42390a45
MD5 165af2a5f34bb6fdf1b29a0dbde1cdd2
BLAKE2b-256 380214a02446fdf67b320c3e5c672b8b619cc805aa926b065c7a2422756d075c

See more details on using hashes here.

File details

Details for the file usearch-0.2.4-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for usearch-0.2.4-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7931a93f583972f8e626d03c9b4b97750fe130e8433b239c73e0f17cd3aa10c3
MD5 249c493080bf9c1aeac000911496034a
BLAKE2b-256 8966e672d913dfb75086aca6ad61a0774b7a014739481fe0a6d4d962669bf413

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