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

Uploaded CPython 3.11 Windows x86-64

usearch-0.14.0-cp311-cp311-manylinux_2_28_x86_64.whl (325.1 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

usearch-0.14.0-cp311-cp311-manylinux_2_28_aarch64.whl (313.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

usearch-0.14.0-cp311-cp311-macosx_11_0_arm64.whl (208.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

usearch-0.14.0-cp311-cp311-macosx_10_9_x86_64.whl (221.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

usearch-0.14.0-cp311-cp311-macosx_10_9_universal2.whl (409.5 kB view details)

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

usearch-0.14.0-cp310-cp310-win_amd64.whl (163.8 kB view details)

Uploaded CPython 3.10 Windows x86-64

usearch-0.14.0-cp310-cp310-manylinux_2_28_x86_64.whl (325.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

usearch-0.14.0-cp310-cp310-manylinux_2_28_aarch64.whl (313.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

usearch-0.14.0-cp310-cp310-macosx_11_0_arm64.whl (208.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

usearch-0.14.0-cp310-cp310-macosx_10_9_x86_64.whl (221.8 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

usearch-0.14.0-cp310-cp310-macosx_10_9_universal2.whl (409.6 kB view details)

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

usearch-0.14.0-cp39-cp39-win_amd64.whl (164.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

usearch-0.14.0-cp39-cp39-manylinux_2_28_x86_64.whl (325.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

usearch-0.14.0-cp39-cp39-manylinux_2_28_aarch64.whl (313.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

usearch-0.14.0-cp39-cp39-macosx_11_0_arm64.whl (208.6 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

usearch-0.14.0-cp39-cp39-macosx_10_9_x86_64.whl (221.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

usearch-0.14.0-cp39-cp39-macosx_10_9_universal2.whl (409.9 kB view details)

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

usearch-0.14.0-cp38-cp38-win_amd64.whl (163.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

usearch-0.14.0-cp38-cp38-manylinux_2_28_x86_64.whl (324.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

usearch-0.14.0-cp38-cp38-manylinux_2_28_aarch64.whl (313.3 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

usearch-0.14.0-cp38-cp38-macosx_11_0_arm64.whl (208.3 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

usearch-0.14.0-cp38-cp38-macosx_10_9_x86_64.whl (221.8 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

usearch-0.14.0-cp38-cp38-macosx_10_9_universal2.whl (409.6 kB view details)

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

usearch-0.14.0-cp37-cp37m-win_amd64.whl (164.1 kB view details)

Uploaded CPython 3.7m Windows x86-64

usearch-0.14.0-cp37-cp37m-manylinux_2_28_x86_64.whl (328.0 kB view details)

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

usearch-0.14.0-cp37-cp37m-manylinux_2_28_aarch64.whl (318.7 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

usearch-0.14.0-cp37-cp37m-macosx_10_9_x86_64.whl (219.1 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

usearch-0.14.0-cp36-cp36m-win_amd64.whl (164.1 kB view details)

Uploaded CPython 3.6m Windows x86-64

usearch-0.14.0-cp36-cp36m-manylinux_2_28_x86_64.whl (328.0 kB view details)

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

usearch-0.14.0-cp36-cp36m-manylinux_2_28_aarch64.whl (318.6 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.28+ ARM64

usearch-0.14.0-cp36-cp36m-macosx_10_9_x86_64.whl (219.1 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: usearch-0.14.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 163.8 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.14.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f72dc954d73b3625185ec5ae4787153e44ddb22f7a17e926ee53d38b76793a48
MD5 7b0020f183e3a73e7aa986c427794fc5
BLAKE2b-256 2e7c4d0a69e22d9b0588c1a2b6e82f42070ec30909657546effa180c543f5bcb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0abc089021a7c2eb7c3a1062ab815566a1d91a36fc1c05048d610949fe610525
MD5 03522f0b25df495a03bae0edd7c77742
BLAKE2b-256 22d1c12f97f7a9dde082b5e4a7d9240efdc7ae6fe59e30f63caa034fd644e959

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 58e76437935302f0865dfe75ad44675e5caf29b14e5e7fa8a287b5c56e1cef7f
MD5 4c3655f6be7dd59c924e22a0b588fa20
BLAKE2b-256 b92d7fe29a185c08f201cd97478f03c39e87cdda0106a1b816c4b500a561bc9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fce604a1109b09e5e9fcf919cde84468a31454e6803227af7d7bd9cd3fa0f5a8
MD5 3650de34bdecdcb2299d2ba073cdd9a2
BLAKE2b-256 923e203a510675f44b5411ff5e7dda5cd2a83a610f439823dc38531bdfe4472a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 449c3e0f298eada04c2e3290b42dcafdf80a9fc559f437bb444dec052625e7f8
MD5 3edc4717016153696a882713c073f36c
BLAKE2b-256 bfcb0abe0ae5727508927f415d6447903a6087a50beb92c1ff584899732cec4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7eb3b81f154ae7ad11b85e246fe825e306e78aeb399759cb58c04dcef8425198
MD5 6e715374482db1cf4d9ecf55229b918f
BLAKE2b-256 a2b089b25b0805d3d9e03adb509f7c37485d1a6f417509a0950855f7e702f211

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.14.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 163.8 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.14.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 df847858c16a1a6522a0bce734fba3d6171eb6e4d61287ff12578558f350a9c1
MD5 d8e5da8f0f13fbfb43e5d5de48712135
BLAKE2b-256 a849fa9fabc2618095a674355182bf4f0eb3bfdb8b27ddeaebf3a6a0d14d0d05

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9298e682760ccc2e660aede3b67a306c6c650d37912c60458bc32201d243f688
MD5 4e93b0fc4c24899233c5bd9b372a37c6
BLAKE2b-256 7735505f4b8b3c9968ea337e18527a2f7f04d7edc5576635d17f4d82fdb3aa03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 73175fa3107d23e6c89c7a445d3b5d96b4f74e98c6a36e853d55d613a1032421
MD5 299e5b6de282fe0a89d1b795364cd363
BLAKE2b-256 5f8a72624825cefbad56629d3e2653b4764e971d59d9f55a34fe46549dad93fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5dff7275afcc9785591da23d93d8ebbbc1f1575a569cbab65e47760745882562
MD5 55a73b7ccd692af9117c622ee94d8afd
BLAKE2b-256 46fa818fdeaec2f888617d65dbbb26c2ff439ea8681cea4366d28a94b4a3b02f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 911410d3e2021d2e5d2767ea4ec2c4891ecc1ccdc711a4f0ff6a64a603efb3d7
MD5 5d1cb89be3e38b80b0bdd5c689aa4afc
BLAKE2b-256 d4ada7e28d3dfa2ea31c4b3e5cbba78a24fca635cf53b0bc7da8337a82b6084b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 8a8675889b317afe3788e8323d7f532e94a81213da81687a5c09e0ec4abd8c36
MD5 e03880cbd40930b71614150a7ebaa9ff
BLAKE2b-256 27669fd5875f202d4eaac733bae8d2b79c0d364a8e40edc71d5fd751f5de8020

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.14.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 164.0 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.14.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c0326b60f36a4e0c1bd4413c6223742fa6f62d0c730a1325831bdae5183aca35
MD5 d414b39d94cd586e81118ac418735b6e
BLAKE2b-256 b507b390033543314633638d898fc4c4bb5fcfd2a382c7c3fcf0762a9fff3b04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7b47d9062de9e736a280793c06a21d175b456c7180654f96f5c687355225dc23
MD5 5a833f8fcb19d0bc99d8e099257d35a4
BLAKE2b-256 5ac4101298287646426ee031ab2e274427fd221c8f22692c8e8137db12836c4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d43090626050b3abb33ef776b808878842f182ba9ad57f4342086dee9afa3d0f
MD5 c94fbc6a57f7d56f6c7ed01ae28de203
BLAKE2b-256 dbbc77763d340041ad0e8e6d74aad5362ce8490d3a5412b890a66b71a7be4ad4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 076cde557dea7d7e384cf458a0abc46db9b24880d6646b9502f26854f2767b32
MD5 ba54ff273155618e478489cd5ce23150
BLAKE2b-256 7bef47632b3d3a5fc34b612cc3f84a321759fe0e0b8aaf7575121e6255fdb911

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 00d01c317f3690265d383f518182ad4450702cf9de714d15ba8a28a963279b8c
MD5 4f85cb46b92112a2c4163647a9c2efa7
BLAKE2b-256 05c0891e9a595d1300b7c1e35c0fe76d8ac4c025de2633104776d17c360a5490

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 3fc54f4dd2df076984f4a7032da972f5a7769a5b6b806b07a69848e16411278d
MD5 992b382f2bc84aa0171763210fd90bd4
BLAKE2b-256 620036c8da687d5b565f388da12e88801c6b80334bf607bde097735f9d2d96e0

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for usearch-0.14.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ee0abb562c182ae787125474b4560c87f4c34254472ff6e5e6b7507be8420fa1
MD5 aa009c08d4bb841dacdaae12fe6449f7
BLAKE2b-256 958125d82464a6b84037abcd28232060049cbda985aa9cf0b2a3e03d84cbea6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a6900fd0f8b75741ea211c351e93abe422772d20c83babdd712ca15a072a141
MD5 015e247da9a300c6ec4bf29a8a85fa80
BLAKE2b-256 b7c266d0633705c9389d31cba420547b2036a1cb99ee9b30de86608f2dec971f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7a3d9942f93b148f5dc91141a7d8784435bd75b21f7c63d601e2d762ba88a089
MD5 4c0453b543a9d53a4c65a72e31d886fe
BLAKE2b-256 06e467ffb97f75ac036503392ce3c23237e2a205ce59358f40a64ae40f192001

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 46cea47d45921dcac799bf836c86cdd253f38e9429f1bae43f93c22fab16495f
MD5 d6fd2beca312235827f14d9f3709cda8
BLAKE2b-256 030fa28808b19dc9c78d8fbf4f919fe739d6bbc98cb77643ccb626f2c276dd76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6072412cc00341acb5c443d54c533be33e08c0dcf6f05a08d5b2300f2df70095
MD5 bd75e7afd7dcaa300f66d8657469446b
BLAKE2b-256 03a2801fe5dcf6af5b5f3e60397468dce9c0617b0c43b6a4cdf0731fb73a53b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 bfea10d50225f4f5f94315acee0a49e0f12742093cbb56ac021a81120f79270c
MD5 ea56c547cbd8c41b5472e2a9e5d28c60
BLAKE2b-256 6c3bcd2c459e0bc3ccf69ddc1c343cff2a833a43a185cf0314043ebf6336a9f4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.14.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 164.1 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.14.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a751eddfcade7ee614af934b3a830659d1b5fd2b45a72277fdf4197a114937aa
MD5 bef3c6b86e099c5c8db21e069877e41f
BLAKE2b-256 ca71ee5ef0ed6ba8666aebf25fffda88749acd3f0ab21803084958aae65c2b94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a4458a67573bb0786d02983b81d35ac47e4b88a7f01aab4fc0e9c09f91ea1f13
MD5 2e70e6954bf13bffccd8719d61b08b5d
BLAKE2b-256 6df0e373d1bdff33050aa940c1f257a3e252a349ad1bbf95acb0989ea00fdedc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6da61b7077b14a5a656b1a8b6e276b6c9ced46e662a351e616004bdc98b8325f
MD5 be0810873ec21e10187b14b44991ae2b
BLAKE2b-256 db293681f8a83f5d415a85d8a532543342dc92695db76d08ef6dafed3e9f68a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 30d93de5b1ae0dad0e3398128d2b64ea7b06a6211cb775351f21e0ea4ff015ad
MD5 829b544c9af560eb4459d6ef3f455a1a
BLAKE2b-256 d93c90411ac4a7cc048f1b0ebe5216d6cdfcb475576684c955ffbeaabc545ef0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: usearch-0.14.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 164.1 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.14.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 d288affa3707c6503fbb4bf000a553281e09ead7a7070ce245638fa4d83017c2
MD5 0853e96c908afffc5423a9dd37545b54
BLAKE2b-256 ef8a0332b743459c276fcddc89f6e6a754a8314a032edb8d3376e1fa98521f45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp36-cp36m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c4e8dc515da228c3368cec10b699d7dee181caaab36538385fe8976de15cef2f
MD5 0f75cbec2f96026635dbfcf1c3456b3b
BLAKE2b-256 b1d68e010120dbafdf2b2daeb4912abc3e6991ed9bd756d60e060f0382013ff5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp36-cp36m-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b605f1a672362b3d8a42777e814806d102fd699e11632f3c65e51f180280b53c
MD5 375cbe47ede80f006be37cc5fece0670
BLAKE2b-256 86a1bc6e40fbd510227985617d75190ced3a0f86e7a254b0e493d44430b05edf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for usearch-0.14.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 846facf452344558484d496dd513e5657ba4a50c65a22990eed0ab3476dc2315
MD5 d918f1a370916158c6fb45d0339bb284
BLAKE2b-256 0c4e4395bf141ab87a618e38033584be9cbf30d3e806592e1aba7f833d19c888

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