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

Uploaded CPython 3.11 Windows x86-64

usearch-0.4.0-cp311-cp311-win32.whl (117.6 kB view details)

Uploaded CPython 3.11 Windows x86

usearch-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl (277.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-0.4.0-cp311-cp311-manylinux_2_28_aarch64.whl (268.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-0.4.0-cp311-cp311-macosx_11_0_arm64.whl (156.5 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl (170.9 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-0.4.0-cp311-cp311-macosx_10_9_universal2.whl (314.1 kB view details)

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

usearch-0.4.0-cp310-cp310-win_amd64.whl (134.0 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-0.4.0-cp310-cp310-win32.whl (117.5 kB view details)

Uploaded CPython 3.10 Windows x86

usearch-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl (277.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-0.4.0-cp310-cp310-manylinux_2_28_aarch64.whl (268.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-0.4.0-cp310-cp310-macosx_11_0_arm64.whl (156.5 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl (170.9 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-0.4.0-cp310-cp310-macosx_10_9_universal2.whl (314.2 kB view details)

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

usearch-0.4.0-cp39-cp39-win_amd64.whl (134.1 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-0.4.0-cp39-cp39-win32.whl (117.5 kB view details)

Uploaded CPython 3.9 Windows x86

usearch-0.4.0-cp39-cp39-manylinux_2_28_x86_64.whl (277.1 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-0.4.0-cp39-cp39-manylinux_2_28_aarch64.whl (268.8 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-0.4.0-cp39-cp39-macosx_11_0_arm64.whl (156.7 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl (171.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-0.4.0-cp39-cp39-macosx_10_9_universal2.whl (314.5 kB view details)

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

usearch-0.4.0-cp38-cp38-win_amd64.whl (134.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-0.4.0-cp38-cp38-win32.whl (117.3 kB view details)

Uploaded CPython 3.8 Windows x86

usearch-0.4.0-cp38-cp38-manylinux_2_28_x86_64.whl (276.8 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-0.4.0-cp38-cp38-manylinux_2_28_aarch64.whl (267.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-0.4.0-cp38-cp38-macosx_11_0_arm64.whl (156.5 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-0.4.0-cp38-cp38-macosx_10_9_x86_64.whl (170.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-0.4.0-cp38-cp38-macosx_10_9_universal2.whl (314.0 kB view details)

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

usearch-0.4.0-cp37-cp37m-win_amd64.whl (134.2 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-0.4.0-cp37-cp37m-win32.whl (118.1 kB view details)

Uploaded CPython 3.7m Windows x86

usearch-0.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl (280.9 kB view details)

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

usearch-0.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl (271.1 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-0.4.0-cp37-cp37m-macosx_10_9_x86_64.whl (169.2 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

usearch-0.4.0-cp36-cp36m-win_amd64.whl (134.2 kB view details)

Uploaded CPython 3.6m Windows x86-64

usearch-0.4.0-cp36-cp36m-win32.whl (118.0 kB view details)

Uploaded CPython 3.6m Windows x86

usearch-0.4.0-cp36-cp36m-manylinux_2_28_x86_64.whl (281.0 kB view details)

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

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

Uploaded CPython 3.6m manylinux: glibc 2.28+ ARM64

usearch-0.4.0-cp36-cp36m-macosx_10_9_x86_64.whl (169.3 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 133.9 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.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d06c4c3d5580e3ee9e3fc21b25eaf1a35577ef316a29ab75890a5d6ac54fab66
MD5 6d5267a5e6c3394ec63646587dd6c6ba
BLAKE2b-256 e82d1385864cad0def02f1dcf7cec969108694fb67b48a7c35bed1378dd11bbc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 117.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.4.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 8951da8744f5b867d03e459073b4b0c35f8e6ae6d91f014508e1ab77464723e8
MD5 9ba9bfff94497aad4460854ec07ab34f
BLAKE2b-256 8477c09dc4722632f777626c3319ad07009d295c050f08a589de979a7922c51f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a2ba352c03685676ab5bd29e35ab7a6324f8fd49ac5277c9019896ac533f9201
MD5 9a250f1e9a4bf16ad6eedaa8ebf43be4
BLAKE2b-256 177a483fad87e9502dc25595949d589a45f6d253c66705508b282ccb5a7513e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a52f20192fd7ad75d1b1f76896a714a2085a67e83228efcaba6837b60a6ac633
MD5 0c76dc38db2d5c49fc2eac6bac1790af
BLAKE2b-256 3c6927f3d8540b093da6e6e34b7e5c2e125f065dc7262d095e7f4e5449b13359

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 608c22ff4bcdddaa765893f032215971b84a2b26e29cbd6978a47be1ab8ac86b
MD5 4592be0e68e7fd1ca3c1c8a5ea77ca9c
BLAKE2b-256 eaef0a8f2c50f8faed0baa3c170805dfd74bc36c6bc4b3d225337ee1f71088a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3149b8c82325ec3af88a27264a180c868223b181a316dfad8aa5a82872067027
MD5 e338a27cf60ea4d6c22fc5b61d7ccd57
BLAKE2b-256 dac3dbd68955c30be36fe8cf033f2c81a36577341d9670f062f9d1d07cf39753

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 fa9f88a423ab0e7eea9fe450f146097bc522a5c683288f43bd971973776cc066
MD5 43b6a35d6e7c710e128d40647e1318f6
BLAKE2b-256 7c82450e38c85c367697d9707843b6cbf06c7ad4f84a9e9540f2a7e917637dea

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 134.0 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.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2d1ca432d43a101eef8aa0fd98daa34ed78e804267a0f530d02c34206b082150
MD5 22cd7da72588840e749b5a20b95d3209
BLAKE2b-256 cf2007ff55fd6ad3a8ba2b8708945497dcf26c16a2bcbe0adb67da99edee7453

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 117.5 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.4.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 d856f0134823742c9b3013a495cef147b11598bd56b62ad1a631251468835d3e
MD5 f3f8c370a0dd7434b301167d218ffe1f
BLAKE2b-256 7f786e3740f7d2a52dc901b3b63dc3f54feb0a1c42ccab2d7249c1ec4cf468bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 879e9834979e4c02fe3c3d6f9e99b4f941cf2c600d99d480f13b5b520505a828
MD5 f151fd08b29da865282b5613d6dae614
BLAKE2b-256 2b836eff5aa49e4635f1c727ebe00d35edf530b909fb5405df8c6b934d1a637c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b85d7f588f1d99063b15378b46bcb8687ef3bdcc7eaacc17ae4cdd6a0458d8ac
MD5 711531c44da738cec140b3c2e6f66dfd
BLAKE2b-256 2b9543d90969a02772ce5aae3a38afe126e09be4185457d780b74c4a505e1840

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e4a69e93d14a9e39d19bef694986810174952489976d8ef5b59dc90ef0368c87
MD5 c9f5c080fb3b361563b16d337d339d2a
BLAKE2b-256 f17944ca1f8956a68308d336f14cba7b36c68fe232df58e3f26edcbd02edc446

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2d4e315a0db4d5f9426e521a800870ae4919724c3debab9cf287d996d822a9ef
MD5 367098bd1ceefbc4238677df76cbccde
BLAKE2b-256 54e7256325184e7c0fab37ef245445ed7606e41ed33ac921e81cd445c21bccad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 12e5776eab25b930135371ea72485c06d5863abf7a6023b562b990d1295d97bf
MD5 1144b7a4f86edd2d6dd7775eba49b455
BLAKE2b-256 53e6a923811198f4d64aa09fa6e641a61685012d991ebc47fd2293bf975d4b3e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 134.1 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.4.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6884cc02ebed190dd5b96d96783c9f963387e5b09edd15f8874274b1d93bd0d1
MD5 d620e6e58f4875a2a6a55bf64b078fbc
BLAKE2b-256 cfbdf3436bb3aa84de0b634bf2e3e3aeb398a13335fdd24b91c2565c48c4c3f6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 117.5 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.4.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 b703673fbf302f4a2a74d6eb2dec76c04e117e9f644cc199170ed99cb8ee24f1
MD5 76a1d5c26aed594aca6f5aa5ee73cfdf
BLAKE2b-256 e1732a14c5fa91e18b4271744af64e6fb5179ce0d9d09a611ea438e654509117

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ac1e686c5433feb667afbd49e410833f7bad5b3311d2cbe2c84b7ece9ca6b078
MD5 2885f8fdc4ae698e446ec27aac120159
BLAKE2b-256 71091d8a611d99850436ed23f04295f575553c81e95446f063977c5f09261e00

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ab47b25f15c24522c97e79d38184757c454b6641e3fdd3f0e817fc03785cbfee
MD5 3f0aabbebcd3ba9de5e8ff582170aa52
BLAKE2b-256 bfafb1043aa87ef2ab148fb21c3693aa634f2989c4a89c3e473b22eb11d021ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e88c9a95edc9b62796a72d2d5898130fb2c20eb4cfed602ab991a244f7840dd7
MD5 b3c597affebd307ed481fa1f94688451
BLAKE2b-256 e1449a8c9b01452c7042dd9fc08cb2958c38d402639e598c42d085ba4e3584f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0a74c0f5b3cac763a46c265a5aa42addf9fc9f7396127276a26b3af385265956
MD5 4e080fa0bed270c6c853d9de165a98c2
BLAKE2b-256 59360edd231512f8aad94d976d5958a4f43f29832a013ffa291afb72387504bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 01ae428786069f9427bbaacf2fa99dc170f5b30946776962101261fa5ffb1457
MD5 c69d7766409beab676f20c1ab2e9268e
BLAKE2b-256 5b703ebec290d77733eae636643f86c20d9aaaf34455f6a58f17a768e0ae3b52

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 134.0 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.4.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 bb34c610572e1fd75cb1e20e9dc6876fdb0b464252514f806772ba50b22a0e51
MD5 10babf0083c827bf277efc76cb1517c2
BLAKE2b-256 c94df77b7034682a7b81e7ae46a16b8bc733a1cb4e2fe0e32505814218890479

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 117.3 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.4.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 2c6d167f7f41673646cce83baf461a95023c89516c7baee3e58b645aef1b3b70
MD5 d858db8d5c8860b3e03f152792ef052d
BLAKE2b-256 1ac5396292693161738519661a111f76ea1f801eae4c7197e60d61c9afc0b903

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eaadf15a76946bb3ef4042fc45f0b5b58c7e96f29bae3c8b91ed997c8c90e8cd
MD5 c2d1d3b4c12d020989a9393daade0266
BLAKE2b-256 1c999a284322b2341ea2f6d920e9a90d001525e4e418206ef0c9687789f35efb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0b0e4898a0489e2c0051293fc9980b943e059c4bbce2687faaae1b6e2f768cc6
MD5 b895625d2de42bf49218d78c96de6019
BLAKE2b-256 902d586b7bc9f3fe498cc4d199f33fef6bf1b8c10fe1a3513665d9bae94dc20b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c4ede4cb58d06738845dec7717ee664277a6045732a8a6fd75626e416979c9f
MD5 1b99a010530e107320ac4d45ebbb892b
BLAKE2b-256 6d10e380dc55a6f80c912492a2d083fdf7b619a42b743ff777d4579a56ec042f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e93965cd524ae975683d85ac041c8fcdc8f8d89463802222d74c70f1b001f112
MD5 ab137cd53207a0d0f53b0c1d296f1af1
BLAKE2b-256 864273311979488467c077116cc85441f43df239a67fb3f1ae49860c44ddc808

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 464786e9c0ebdef1ce8a47ab1fa0ce3d8e8e0bf99316289e40dee262b4fed4f5
MD5 4b44aaad7fa511160360e3465fdc289c
BLAKE2b-256 26ef44f4d2a00f52c643f45fab3e0077187652a7ba17793680702525c293a015

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 134.2 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.4.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 4641ae124a12a2e9f5d08b5d41f897172f10d2505180faa1eb6f0d98474cd31d
MD5 c8a658ec3106221ee9697ad94bf5a227
BLAKE2b-256 499ef1bb65f48ec66718f294a51fc6026085e28988066653b8be0e44d7677038

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 118.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.4.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 b89719fc4e331c02f170b7ee6e141b50d430dedce3b3759c87a80482d085db9d
MD5 bff9b60a77dab2a74895549c4e81fd4f
BLAKE2b-256 d33cc04575e65dfceff10eb54ec3ce5f8960bb470283300ac896cf37aa39960b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da62fafa0e6f09587786b7dbb9914d3bb37fb3aad288892080bf2b2fcc22ce72
MD5 5e42c16c4a35c99018911e7094d67e49
BLAKE2b-256 6b0ba2a7464e157ece1d346166c2733968badd9531ce389fdf437000bd0acf83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c89c268f524be164e30b406cae4055989534614e35d2aa93e429628ff9c82739
MD5 24aea3dcaea2c7e091dbacc8b7643648
BLAKE2b-256 7e955542846fe228c67abafe89bf5935602dd7bd4a5870bf788911e414d34267

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9e79cb974dace9cf3be73c1a6fed3b43c2690e9cbd136f2fbc610c96635949b4
MD5 91aff17325db3d2abbd1dc1c5ff36017
BLAKE2b-256 aca1a3cea32a742216d1a87c1f53b0e3710ec7377bd7386e1c89ed19a62010ce

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 134.2 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.4.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 128405a8cd72ef002f70346c36dd8655d3fa6637a3752a8925fad45193ceefaf
MD5 b83d085ad40ad462d4376f1a6fe8fcd9
BLAKE2b-256 6cb1883bf96106fbb2787ef9894742e2ff1c55f3d205352316a1a674ba313b3a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.4.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 118.0 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.4.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 55e96bd5b904ac941403d36d235aa881a5d92ec64f3309d33bf1eb240965ee80
MD5 17530c2636869166c9184934801fa3db
BLAKE2b-256 f0130f7d7d73775518db6a9fc43ad14a3dc84a79c4a60e89e6566470f9966efb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp36-cp36m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 263fce06ec3b4b461d881fdfc52de1a5e8153777e4632d7ad5b08559cffef18a
MD5 ec80f05ceb200da711ef09d0fc8c513a
BLAKE2b-256 04fdd6e66676436a4d7c39904c806ad8962c54973f2e054e073a623672cb0a27

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp36-cp36m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ab5a9330ebe5c5f82c45075de26aa894bdde83db97af53586ff4234cbb6280f3
MD5 8d2ad1b53387216e3036adc63c63c761
BLAKE2b-256 67fd5cc3feaf9a9b23a940edf81a805f23a445adce6562f1716abccddc044282

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.4.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 586ccb400056b2642fa8e385673846726ddf8140c2382648a252d524ac00b681
MD5 484acf82910ae3ad88076f35c7fd6215
BLAKE2b-256 79240ad091ca89c5a263b8804054922eff64f141d65941068e1f055167639f97

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