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 • Docker • WebAssembly 🔜



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 105 K/s 115 K/s 202 K/s
Queries 118 K/s 174 K/s 173 K/s 304 K/s
Recall @1 99% 99.2% 99.1% 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[0], 3});
auto results = index.search(/* query: */ {&vec[0], 3}, 5 /* neighbors */);

for (std::size_t i = 0; i != results.size(); ++i)
    results[i].member.label, results[i].member.vector, results[i].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.
  • bitwise_hamming_gt<scalar_t> for "Hamming" distance, as the number of shared bits in hashes.
  • bitwise_tanimoto_gt<scalar_t> for "Tanimoto" coefficient for bit-strings.
  • bitwise_sorensen_gt<scalar_t> for "Dice-Sorensen" coefficient for bit-strings.
  • pearson_correlation_gt<scalar_t> for "Pearson" correlation between probability distributions.
  • haversine_gt<scalar_t> for "Haversine" or "Great Circle" distance between coordinates used in GIS applications.

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 'l2sq', '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.uint64, types.uint64)

@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=python_dot.address)

To use Numba JIT, install USearch with extras:

pip install usearch[jit]

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_l2sq(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</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.l2sq(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

Installation

import (
	"github.com/unum-cloud/usearch/golang"
)

Quickstart

package main

import (
	"fmt"
	"github.com/unum-cloud/usearch/golang"
)

func main() {
	conf := usearch.DefaultConfig(128)
	index := usearch.NewIndex(conf)
	v := make([]float32, 128)
	index.Add(42, v)
	results := index.Search(v, 1)
}

Wolfram

TODO

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

Application Examples

USearch + AI = Multi-Modal 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 a text-to-image search platform in just 20 lines of Python.

import ucall
import uform
import usearch

import numpy as np
import PIL as pil

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

@server
def add(label: int, photo: pil.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()
    matches = index.search(vector.flatten(), 3)
    return matches.labels

server.run()

USearch + RDKit = Molecular Search

Research in natural sciences is expensive. To search for properties of different molecules, large databases are used. Comparing the molecules, however, is hard. Instead, binary hash-like fingerprints are produced from the graph structure, using packages like RDKit.

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

import numpy as np

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

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

index = Index(ndim=2048, metric=MetricKind.BitwiseTanimoto)
labels = np.array(len(molecules), dtype=np.longlong)

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

RDKit provides Atom-Pair, Topological Torsion, Morgan, and Layered Fingerprints, among other options.


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

Uploaded CPython 3.11 Windows x86-64

usearch-0.13.0-cp311-cp311-manylinux_2_28_x86_64.whl (316.1 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-0.13.0-cp311-cp311-manylinux_2_28_aarch64.whl (305.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-0.13.0-cp311-cp311-macosx_11_0_arm64.whl (198.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-0.13.0-cp311-cp311-macosx_10_9_x86_64.whl (211.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-0.13.0-cp311-cp311-macosx_10_9_universal2.whl (388.6 kB view details)

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

usearch-0.13.0-cp310-cp310-win_amd64.whl (158.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-0.13.0-cp310-cp310-manylinux_2_28_x86_64.whl (316.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-0.13.0-cp310-cp310-manylinux_2_28_aarch64.whl (305.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-0.13.0-cp310-cp310-macosx_11_0_arm64.whl (198.3 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-0.13.0-cp310-cp310-macosx_10_9_x86_64.whl (211.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-0.13.0-cp310-cp310-macosx_10_9_universal2.whl (388.6 kB view details)

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

usearch-0.13.0-cp39-cp39-win_amd64.whl (158.8 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-0.13.0-cp39-cp39-manylinux_2_28_x86_64.whl (316.1 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-0.13.0-cp39-cp39-manylinux_2_28_aarch64.whl (305.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-0.13.0-cp39-cp39-macosx_11_0_arm64.whl (198.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-0.13.0-cp39-cp39-macosx_10_9_x86_64.whl (211.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-0.13.0-cp39-cp39-macosx_10_9_universal2.whl (389.0 kB view details)

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

usearch-0.13.0-cp38-cp38-win_amd64.whl (158.5 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-0.13.0-cp38-cp38-manylinux_2_28_x86_64.whl (315.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-0.13.0-cp38-cp38-manylinux_2_28_aarch64.whl (305.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-0.13.0-cp38-cp38-macosx_11_0_arm64.whl (198.3 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-0.13.0-cp38-cp38-macosx_10_9_x86_64.whl (211.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-0.13.0-cp38-cp38-macosx_10_9_universal2.whl (388.5 kB view details)

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

usearch-0.13.0-cp37-cp37m-win_amd64.whl (158.5 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-0.13.0-cp37-cp37m-manylinux_2_28_x86_64.whl (318.9 kB view details)

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

usearch-0.13.0-cp37-cp37m-manylinux_2_28_aarch64.whl (309.3 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-0.13.0-cp37-cp37m-macosx_10_9_x86_64.whl (209.3 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

usearch-0.13.0-cp36-cp36m-win_amd64.whl (158.4 kB view details)

Uploaded CPython 3.6m Windows x86-64

usearch-0.13.0-cp36-cp36m-manylinux_2_28_x86_64.whl (319.5 kB view details)

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

usearch-0.13.0-cp36-cp36m-manylinux_2_28_aarch64.whl (309.6 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.28+ ARM64

usearch-0.13.0-cp36-cp36m-macosx_10_9_x86_64.whl (209.3 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-0.13.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 158.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.13.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9b1fd0c2b5abdd40666fcba097a57d009783aab82405cc360c92fbf8931bf1c5
MD5 07107ce33410fc92febfde0efa01ce88
BLAKE2b-256 efc4b39c066b6efb751463c99ef8a4b995afa7f68d5aaa4617f7e588b763d74c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 631a80aa4daaefba0136a43c9a2875b18609e9299123e52f7d211d63eec34867
MD5 9ce4feade3f73d8ec76d3e22df797222
BLAKE2b-256 323113a651c2b80a949ac4064b3c975029145c37edccbd9b1c231eda8f86b9f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0b7586464b5586c04dd7fed2b3613cfe0030a7fcc01446c4f75e8876ecdc4161
MD5 d923e12ad26085d553896879df4eaadf
BLAKE2b-256 cc8b5863a14ccb8c2354d8cce2eaeedd6dee18cb59bd2cf56b2eb852581ce029

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac170256b470920991463ef6ae02055180c97ea15092e1d91adba93363b3c603
MD5 bf08826eb51ff09e7e220441c8a8afcc
BLAKE2b-256 76a61a990c3a600465352c4bd6dc3c5b9c82e96f9a426341c229dd87bf1cf3e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 67e69b5bab053d9e20db115196edcb9bbbdab518d439b712f90e7de336b556d7
MD5 e041c7d6471322329550fabbb1d1b7bf
BLAKE2b-256 341374ca572226fef1e0ecff1639a77ac2cd01ee996c6e36015b452a5f98accd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c37c27806cf79f09605d29f462d0d808fdd056e6edd379779f86acda83dac03f
MD5 be39e4d911bc8dc77d87702cf4e3a95a
BLAKE2b-256 fb4be50917a856a293d6768cb85d899a7d31b660f30ac1da1f7e1ff48543fb8a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.13.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 158.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.13.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ca2d724c1b01efe1a636c2cabf29e67681b3671f9281b2620968eb26a624f8d5
MD5 dfd3e48566b74cfd774b27acd5d93a95
BLAKE2b-256 f9fc7e42dece685dac5513c1e9521b535b224477ed55b826384231b93b9cead7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b427b440852b7a79d6524050f9dda658ceadef505287ae3d779f0a7c47b2ad0c
MD5 5d8b82f8396f03c6c84b841df145a6ea
BLAKE2b-256 429a7f6b877e4089087c5538be48399afd49dfcad037b3760beb4583673b2be4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 06c9eced58cd8db849e8d08059b248c621c25882431c8a16678a166bd79ab653
MD5 e9a3d7b9a8f5a0b9190463ede6fe6864
BLAKE2b-256 ae983f6adfb1a7d9d9c572f0b2d341b39ddc93aba4c2a52b8ab905369ec0b77a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03e9863a2a490f610f1c3f0ae10db74743da4331569370d1e2be9eb2dfcbbf9d
MD5 dd4ee615704b6e2062ac803e9baf6fc7
BLAKE2b-256 5e46ea4841ea295d2f0bc44721cebda9fe5380b184b84e1e3c6143ce394c2e9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b10317355a0ed2e500ccde1eecc3ff30a910040cb8921f5b7603573bb46e34d3
MD5 fd030531a8d2b34bb4507423d53a451f
BLAKE2b-256 c13d20e7fbf0581ea816aa35aa0d5a26beda89075cf2311acca2bf7c991aa7c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7834d0cbb4ab79c4b65b5c6fb5ff396287b35fc0179e52009d9a09042ba59144
MD5 94adbc74e96ae6a5980a333435743b88
BLAKE2b-256 c11daa2195285a8a71c819d12b31c812fc246381004bc0f49e419d9e91f3c051

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.13.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 158.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.13.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5eec7da99cada9dd9fec7dc74378749bd27de52ea189fe542ef45bc1e129453b
MD5 d1e4a511ce0d1a9671ce7c18f49a8661
BLAKE2b-256 a536155fb16fb82b2662ddbb9730d7df88dbe0482b505365d139c2ad3bb60ab4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 761f4960b981be2ea2a9c569b78a44a2e06856ae7119d08da131977bcd657b7e
MD5 ccc063aff8fda59bc5043ff88fbc3412
BLAKE2b-256 9180c8252243d3c819d39b709984032a7e538f6211339e0acc4dda5fa25c58e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b9d9d3019e568b0b8251f089504687b69beb93cf618264885f3abab7fa732f1b
MD5 9b5a136d0a000450fb5318df6657be1e
BLAKE2b-256 1860e05c5754fefcae47e2173d631c969a24555df93ba011f7bdde82e01ee822

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 851faea27a527bd176b314fb40334e325ea759acc9c43796048d6fa8b538f495
MD5 8e9208a0a3b5275b61fce653fe5bc4da
BLAKE2b-256 72f86134894b0b7e36f7d268a7a6865dcc29796bf3de21b57548647b686e7da7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a9d6e3144c723a9522218507219618c27907e9898195b2058e5d9c55ddc90907
MD5 b54d790823f272e2529de6ec6ad61f3b
BLAKE2b-256 ec1bf7098744edd42a99b4fe850384ca45d59d27601de21d360615a539e320b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 004459f5eac1f9cc0b9c47020b82a17627af7f81908de9ef0cc9934c06fffa34
MD5 5e7a02c33c41282d19e7cbc2e7358506
BLAKE2b-256 fb3395d0f818099c5fd0ae12c4519b7db4355db21c83ad4e3559302eb7578e84

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.13.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 158.5 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.13.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 daf3d16dcaec3cbe2f4c315edd9197125042f4c303f2e782e6b7c9f76d7fb32c
MD5 486509692bb21a413a1aa25a75e5b564
BLAKE2b-256 db0143f0d627017b1f972ba4c65be032fa893f61a038cb4030617f5bea52935f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c9fb1366c173da96fa18e654c0f39e19e5370c197fe311ff58f7ac20d0edb54f
MD5 dc38f18fcdb2a250589ebd8d3ac45cf0
BLAKE2b-256 190e128de88a2d8039c6182040c81615988f1a804862a4c7c0c747d08d0b9e50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a7ab0649ab36969f025c07ef20b39b9cb14f0dcce1c541fa3f4e4914b43c4119
MD5 d4c8377ba75484f8d4f98e2093f19d28
BLAKE2b-256 20746a40b71e22098068ae039b79105680593deea4b20ff013d7ff0827944b67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0386acba51eb3d7415a20ec75329de3e1f0683b990a61e256e7f1bd31027538b
MD5 5e39f4e681f6886c36b660f687550c04
BLAKE2b-256 69577321ac73e962794598f494342a06a23eda7ebc802a1c592db8252c76bc4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 52f38dd4d93f9b4e8acdf9e0611d0dce8a0e2e6100a6be444ff7eebb176e28ae
MD5 fa6592d2b820caddefe5329056f6a479
BLAKE2b-256 39e05467799d94cee2e6980cb0869d97910e3f6bebe9b9236838c612a25e4dcf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 804e77cc36a8350fd37f7afa6718c3ce1181b901dfa8ce7356452f7f32ab48be
MD5 66a97fbc68c60d123218565bb1cc8109
BLAKE2b-256 377db5aa1415d649a9ab0be553573386d13dc65cd6fc63e366a66737a579a70e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.13.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 158.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.13.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 473eef246c8556fd1441ab27f56b70af58fc66e45c2713d036cfc6fb37551dbc
MD5 0b49d0bbce40241db02cd6c695065a97
BLAKE2b-256 688405bb321a9e3812972bbf5afc5b772ad97037014eaecb6b5952080cc47255

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 314f50d46b782dc0dd262719247844f5547917cfc6b28806e0c00e112a8c34e6
MD5 798c364e7338ef52aa8661315f8270b0
BLAKE2b-256 350c80e786890895678ffed04b3c9b5ed3ef535eab34acf1016aaae0d1dc071c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4d44b8279ce8096fb52b6bdccc97a6088aa3fc617447c8cdc9ef4830202fa037
MD5 d832b0bd4fb99f54d1a7a29ada666414
BLAKE2b-256 072592193292739c27b70c50a32430be98a00d0d2d0d2963d08e2bc1be71e29c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e82409b0aaffeee51bd023c93543684013c4d23cb252ea72e11ac85b4a87bc6d
MD5 45bacb4a9de869ddeff2eee55affc014
BLAKE2b-256 a99460cdc9fb41b2f36f12999bcafb8e6131b6fba37732dcb38e056dc9953d95

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.13.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 158.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.13.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 4288e0616cc5d226a6d83c5be7c6efafaf9b76d2d9cd79ec348b608c698fb19e
MD5 e77ec0d8799f4b3eff91e48b4d430555
BLAKE2b-256 98120fe06c64185af1ca13e4da52d7c333f5eb291edeef142ba698bba01f99b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp36-cp36m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a9630af63c5c6d4651e2761b29679a6cf6168fbaabbfe80daac90e8de91f19ed
MD5 cef3c8f4c25276ee64e6b399609a685d
BLAKE2b-256 7c95dea38c795b1ca80fee59b58ee991a66ff0ebc87e380bbe18246a3764f3b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp36-cp36m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fe5be724c39a0f053bf07868538a6b05e87110c26a1d391e5cc2d0e69e29c8d0
MD5 4c541b2888b81f23416d28b43ddd2cbe
BLAKE2b-256 f7384dec1b2d7ff2827aa40a0a22c8e3c8d47b615f40c96e6a5650ee9975a214

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.13.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 72f1b6b8a7422bbaca456d76abd8facc3b8e8a5aac770fbadbcd31e228b7fad7
MD5 fc6c1a433a15d492c9e9d261c94368e8
BLAKE2b-256 3b8f87b9d9ee090d342393ab7c217324e0ea0ce979eb8b7d97b174cf2030b085

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