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.

Multi-Threading

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}, add_config_t { .thread = 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);

Multi-Threading

assert!(index.add_in_thread(42, &first, 0).is_ok());
assert!(index.add_in_thread(43, &second, 0).is_ok());
let results = index.search_in_thread(&first, 10, 0).unwrap();

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

Uploaded CPython 3.11 Windows x86-64

usearch-0.5.0-cp311-cp311-win32.whl (119.1 kB view details)

Uploaded CPython 3.11 Windows x86

usearch-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl (278.7 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl (269.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (157.2 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl (172.1 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-0.5.0-cp311-cp311-macosx_10_9_universal2.whl (315.5 kB view details)

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

usearch-0.5.0-cp310-cp310-win_amd64.whl (136.3 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-0.5.0-cp310-cp310-win32.whl (119.0 kB view details)

Uploaded CPython 3.10 Windows x86

usearch-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl (278.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl (269.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (157.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl (172.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-0.5.0-cp310-cp310-macosx_10_9_universal2.whl (315.6 kB view details)

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

usearch-0.5.0-cp39-cp39-win_amd64.whl (136.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-0.5.0-cp39-cp39-win32.whl (119.1 kB view details)

Uploaded CPython 3.9 Windows x86

usearch-0.5.0-cp39-cp39-manylinux_2_28_x86_64.whl (279.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-0.5.0-cp39-cp39-manylinux_2_28_aarch64.whl (269.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-0.5.0-cp39-cp39-macosx_11_0_arm64.whl (157.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl (172.4 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-0.5.0-cp39-cp39-macosx_10_9_universal2.whl (315.8 kB view details)

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

usearch-0.5.0-cp38-cp38-win_amd64.whl (136.3 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-0.5.0-cp38-cp38-win32.whl (118.8 kB view details)

Uploaded CPython 3.8 Windows x86

usearch-0.5.0-cp38-cp38-manylinux_2_28_x86_64.whl (278.4 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-0.5.0-cp38-cp38-manylinux_2_28_aarch64.whl (269.0 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-0.5.0-cp38-cp38-macosx_11_0_arm64.whl (157.2 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl (172.0 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-0.5.0-cp38-cp38-macosx_10_9_universal2.whl (315.4 kB view details)

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

usearch-0.5.0-cp37-cp37m-win_amd64.whl (136.5 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-0.5.0-cp37-cp37m-win32.whl (119.8 kB view details)

Uploaded CPython 3.7m Windows x86

usearch-0.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl (283.9 kB view details)

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

usearch-0.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl (272.7 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-0.5.0-cp37-cp37m-macosx_10_9_x86_64.whl (170.6 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

usearch-0.5.0-cp36-cp36m-win_amd64.whl (136.4 kB view details)

Uploaded CPython 3.6m Windows x86-64

usearch-0.5.0-cp36-cp36m-win32.whl (119.8 kB view details)

Uploaded CPython 3.6m Windows x86

usearch-0.5.0-cp36-cp36m-manylinux_2_28_x86_64.whl (283.9 kB view details)

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

usearch-0.5.0-cp36-cp36m-manylinux_2_28_aarch64.whl (272.7 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.28+ ARM64

usearch-0.5.0-cp36-cp36m-macosx_10_9_x86_64.whl (170.6 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 136.3 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.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e036a65e21cb7ec6a1732673de0eb2c440670c884bac9a9f39ad6fa663bf126d
MD5 9744077a9e37429b7ee239aefb5414fd
BLAKE2b-256 c009db040d8fb90cc311f6af3fd870c653cff8ef5e3f3432201e2a91ded142fd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 119.1 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.5.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 88e69858b88e1bb70241cd445ebb9e3d994beb2670ae25fe0ccacf52dc3de8bc
MD5 d7a21a87138fdd694a5f4ab677ad0d7b
BLAKE2b-256 3791a56580b382db59e4ba9a803c7b6fcbf93ed3c4467f218b03415aba57a797

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 21dc321e5272034b1749a7c7be9878f973e7431bf6de6e06ec60733ae3b001e3
MD5 6599c787591fef97a6d0346d5e950b6f
BLAKE2b-256 8778fca623aecab6ecc987c15db11635a765a79acb231c4297936de3af2502d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 900ca7e1dbf9be5e1a068fd814d8903d6f74dd5231bb6ccfdc5a6f93a4d5b3db
MD5 a5bcce6fc11101ca1812643d39104765
BLAKE2b-256 3d5015686be5ad3858bc338413a1c0430034fcbe7388639ca566666c97b93b9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 14d1691240c3042cc3cf6dc7de19d798d526477c8a8f11ebd8f3bdf277995f65
MD5 3e01cb08ce4cf75bc91c20e68134e1c5
BLAKE2b-256 602ddae716ebda4af492f46697d303de0d4befe325cbd9316d16d863cc55a7e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bed23fd151ce50f96480f3745b559b28a4e28e56f4ea7efec9827bbc0aaab9fc
MD5 ee8b2c03ed1fd08c4bcf431531c30103
BLAKE2b-256 132137e1881799ae1fad87509db669acd7d80bcd4a9f0e5f10f71bc4123694c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 84108d57da47f34c8211b9e0ecb19c77eca3db6954c67110309be77ba1d06095
MD5 ffa389cc3ac28524d5af1358ea007882
BLAKE2b-256 20595c87e757d5579dbc8593a07b3b6268a8a298b6518d52c9ed12331a8850d8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 136.3 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.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 287a19f107c4898a934f67df3c12fdc6bbfaafae0bf16ec785cbbfbc27157b33
MD5 fb63d7d6b847202ed96f14b2157e7835
BLAKE2b-256 4e1a1a782f3da805ecaa5bd5aa1ade86a6aaa654d129d84c7a20866edb166bfd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 119.0 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.5.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 2abf9d6e77038ae63996a6c25903bfbbc3a212485bb11572687603f4fa3f340d
MD5 e7e648c1d4d31591163bdb74f0a73c25
BLAKE2b-256 a0fc68cdf8b94eb929343bab5bcd93860049a4fa1d8050540104629dd42e5826

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d13b1558d1a03331d6b5a06e38d9e15d8b9c1722da1e597a92aaa22c40b42864
MD5 98f1f234fb22f00186ebfcc64e8ae396
BLAKE2b-256 b3bc56b206efb9e975b2500b14de77f6446ba5424c00ccb26a83019b8c249d08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 62b34a68e5b1539f5cf9cc3e8b18701b6338a76373935d364c2aa377eb32640b
MD5 7a11f287eb4e8d638e204be1525c0ef4
BLAKE2b-256 5cfc7462d706fd60215324a467e06d41fd4b3659c9766b22a4e4eee486ddecea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c5974ec2a2389e1e62f1e7945cbae07c92c53ca34272ff54be8e29eb6b7667ca
MD5 d0607c935a1b0a8dff05a4228602d555
BLAKE2b-256 26fbcbadcf71fbed572c90879369ca6f1eb61d7d1c4475f68a3b9870c599854c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 190e24d9a1ae042cba1e87d973393969a17755a78238f41e6404c4e6c1153a6c
MD5 4a57002504ca707e717ae78921f92bd2
BLAKE2b-256 9a79bd688576f0e40075ec7efebb3c9cd9804aa482bd68af002105d86f45d3a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e615b4bf6395fd1823cf796c5fe02dc3c4c5a16e5f25eb893ec14e14aec93870
MD5 33ac5f3006503607c775c518a0b34ddd
BLAKE2b-256 679d74fd1c71af50048835559008b7f9a5fda5d6a660fd7ea60370c023acb250

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 136.4 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.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 aca6c705f2c892f2dd028af88d6f13eeaa4c8601acb122d45676dedcad3c83d5
MD5 c59a73b42c580e65169c9b87aa11454b
BLAKE2b-256 9a72354e17fea13c6b472b9adf0dbc9f3e5d04c82e35affc545a8c224c1968a3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 119.1 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.5.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 cac5791ab192c0b11f6de12d0e879ed893fc5e3976353055afa453e3ada8fb52
MD5 934a4f63e6dcceb99658c5ee793c1fdd
BLAKE2b-256 b3ba23d2a60891356bade72d141a1507bd5ecc4ddc25fcebb4f51e4a6acced97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cf699f20c845b7d34e59742d1b753f4e9dc92d66eff2d37cc4bea4321b7beadb
MD5 c3320a6f94888b4bc11cf2ec81de1681
BLAKE2b-256 28938b712b53090adde00731f62b9f3bb0a0a6f4d976cd43e00b7a688752af43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b00d4e22df1fe2c468464bd0fdfedbe59b69daa736b966f8614babec35203010
MD5 f4a17f11db3dff4b1b14cb9ba14b45d6
BLAKE2b-256 0d48d8a1d05375c56f69106f5bce2c0a7f102f2edd64a9ba0239b303e82cda2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8cba70d0911b68e6a014f72dab0b9384b9f86de501750cace8efe2948bfb843f
MD5 fa97e6e0c0d8ecfda58f39b7a04ea962
BLAKE2b-256 010f730e36d298260ab2cae76dca8ed9b630b7dcc077e963328c3224808007d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a27f20ade3fe2fd6fc637d3f32ce69893f4b4deb59768aec763f6aaff8ea5325
MD5 6085e452f011a193ddf892de59bf846a
BLAKE2b-256 12efce78eda562a95b14ceaf6c5a3cde1653f9b2ffeec0148f8c0db3efacef10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 55bfee5e95a9dd5492c121a8a791d2b4734330eb595d7e825365dffd4c0bb997
MD5 3a1c09adba0c6711e620bd3755ccc37f
BLAKE2b-256 7e95b623abc80b32a1ab6563116ceb4abcb71d75e1d09ec4a604d31c60d42e1a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 136.3 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.5.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 a0e0b1a71c81da94f2fd170173d913bfcb589bdc8dd17c181d5c5109c63bcb02
MD5 81e41a2c183a3e051a1f0dafe2a13444
BLAKE2b-256 33eaa8b5f4aa7762a4681a16521b7fae696fddba256d22ed45812f261a906135

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 118.8 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.5.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 b93e7d6915d74c5bbdb46253d89795ab223e281bbfb1e0b6382cb7e709d9da79
MD5 189f4a90286af18d2c3772b2d5cf47d2
BLAKE2b-256 a5c72a17e5ac8e0efe2f1e7c7047e0f30190739a55deaed4931c5dd4312052d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 72d361fa928a6aaf7b0836f25c3c4f307a4f16c52596b8a5641d7c896eaa17ff
MD5 20640c0e28560a90386c75e105121c62
BLAKE2b-256 eb6e228473a6c081b1a22b242bb8138c2922c0035068a328f91b4c534fb09e7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 31e6cd05eab9394cc7c3944d0a23dfa0f48fdad91523a9a28a7ac911ecf48668
MD5 8459e774379e98170f475b69eb4a5d4b
BLAKE2b-256 609400a632884722128bcd5a587fb6595ea2131ef9d250cabf4e45f5071ae51e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 68951e7ceb8cf78109fbfdcfe9c4ea9c59e3d8bfed4442c82a50e608214934d4
MD5 2796415c340e720cd7b6771d3a288c70
BLAKE2b-256 4895993ccda2d25eed2c1a16333828286f5cddf545b7520444da61e5779e5c82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4eda51dea8e24891cadfd29c06c3b38f173e41e8dceb1fb9191b90b7f207e8b
MD5 fd5cbb1d6202931fabb7c2a755aab4d2
BLAKE2b-256 144838add054ed360a8d8395cfbea063e6394b38c29d9b7e2273cb17a0438c7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d4fe30b1f02fc7e85e5a9cf559d5bb5840de9cc8ed5ca0541c45b62f0f352382
MD5 bd05f1d16846cf6e33af96269a472719
BLAKE2b-256 9c441673b6212d9b5c8c0117d68baa8c61cf7fb14a2ee24ad3e27136b2d4d4a5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 136.5 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.5.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 4899bcb3b961655d128e61d80c548d0ba4d63c0f5e0b9c68d9d38fbac188623d
MD5 7d7a94c52aaf8ce4edb966f001ee5fc6
BLAKE2b-256 6a2c9a5e8b430c0737840aa4af78031893f3e8b8f5fc2f38c06cdb6c82f36567

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 119.8 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.5.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 154a3f99b96e5ff4eb91f3b20ae882897e8f927d95873bc8e8db3ab655495fbb
MD5 c7be49011fa41275686f99505fede11a
BLAKE2b-256 90dca4cefd5c7fd1ae8769c43fbb8448c41766aaf131abf35b9ee719fab06ebd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0a1cef765b853ff60024e66e3de64d36fc2da3c711f3d6298bc3ba32e30ffbe0
MD5 d4381adcfbd8bc85cdbee7044a22b0b6
BLAKE2b-256 3e08761b8ee5e8dbd7dd11444fc447367fc2aa1615d66a56f007911bf60487bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9f9c9c60b505466ef565190989248ec5596eb3966e74f3e9918068efad6735ed
MD5 09122b33555bb4bda7bb193def788b77
BLAKE2b-256 c6970d76cd6f389028ee6b0e04b3b13954d6c0fe7bd63636158774dd357713b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 41c7ee9e5ba3b25575d1d07c1a34577eb92ec9eef2afea85413638b44f49ff59
MD5 e14e3179c219efd759bfd70cef04daa6
BLAKE2b-256 9a888e6c63b39c20563535218e3265cbc04aa6240be0b5fd32d9a7c9cac56c2d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 136.4 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.5.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 c9b783ad530a08913d1d9ea909fa4a44489831556d6a70b6b18a78a476aa5781
MD5 dccf4d484d9f037acbcec23d92eeec8e
BLAKE2b-256 5034b1bef2c3b0a6f1df8f5fabb91110cdda532a42587bc43c347ca354377227

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.5.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 119.8 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.5.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 f3ce1472857170a4c5dffbd7b4b2c1b99ddd4bbd6789e5f9dd93c718b85e282f
MD5 f6dfcb4585ce8565856b4a5da3ff0659
BLAKE2b-256 7c83f9c567502b7d4a26157655cdd07e57758856db686c61749fc1a68119348f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp36-cp36m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9f108bb56ec32f075e6a04675486eb257ac581e653e381543c99c226e66ffbda
MD5 ec1712fd2b7ff50b07a87def3c410119
BLAKE2b-256 8601399e09cf6fd31f9b9fc11c0e646aaa8d9e5599c2d7eb9c5a4b135b2ab7c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp36-cp36m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3c88eea8704979325c6691f16fabb8c879a680736e1b61d685ed22a111ebded7
MD5 66d2da0273c73a386a1ad21aa579edea
BLAKE2b-256 0009954026de8569b576a41ed5c2f40fa91603001de9131f3be64eeeeddd2bdb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.5.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5a9013a5c43a734007b720eb4dafde385d5ba91dc1b37e7daa332381b511148d
MD5 1caa1df31f2b29d5fc69173441a0d86c
BLAKE2b-256 9db0ea7031b04d671af1d2ddb2f2af0af54a755371ea5049e1b58de105960ad6

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