Skip to main content

Fastest SIMD-Accelerated Vector Similarity Functions for x86 and Arm

Project description

SimSIMD 📏

Hardware-Accelerated Similarity Metrics and Distance Functions

Implemented distance functions include:

  • Euclidean (L2), Inner Distance, and Cosine (Angular) spatial distances.
  • Hamming (~ Manhattan) and Jaccard (~ Tanimoto) binary distances.
  • Kullback-Leibler and Jensen–Shannon divergences for probability distributions.

Technical Insights and related articles:

Benchmarks

Apple M2 Pro

Given 1000 embeddings from OpenAI Ada API with 1536 dimensions, running on the Apple M2 Pro Arm CPU with NEON support, here's how SimSIMD performs against conventional methods:

Kind f32 improvement f16 improvement i8 improvement Conventional method SimSIMD
Cosine 32 x 79 x 133 x scipy.spatial.distance.cosine cosine
Euclidean ² 5 x 26 x 17 x scipy.spatial.distance.sqeuclidean sqeuclidean
Inner Distance 2 x 9 x 18 x numpy.inner inner
Jensen Shannon 31 x 53 x scipy.spatial.distance.jensenshannon jensenshannon

Intel Sapphire Rapids

On the Intel Sapphire Rapids platform, SimSIMD was benchmarked against auto-vectorized code using GCC 12. GCC handles single-precision float but might not be the best choice for int8 and _Float16 arrays, which has been part of the C language since 2011.

Kind GCC 12 f32 GCC 12 f16 SimSIMD f16 f16 improvement
Cosine 3.28 M/s 336.29 k/s 6.88 M/s 20 x
Euclidean ² 4.62 M/s 147.25 k/s 5.32 M/s 36 x
Inner Distance 3.81 M/s 192.02 k/s 5.99 M/s 31 x
Jensen Shannon 1.18 M/s 18.13 k/s 2.14 M/s 118 x

Broader Benchmarking Results:

Using SimSIMD in Python

The package is intended to replace the usage of numpy.inner, numpy.dot, and scipy.spatial.distance. Aside from drastic performance improvements, SimSIMD significantly improves accuracy in mixed precision setups. NumPy and SciPy, processing i8 or f16 vectors, will use the same types for accumulators, while SimSIMD can combine i8 enumeration, i16 multiplication, and i32 accumulation to entirely avoid overflows. The same applies to processing f16 values with f32 precision.

Installation

pip install simsimd

Distance Between 2 Vectors

import simsimd
import numpy as np

vec1 = np.random.randn(1536).astype(np.float32)
vec2 = np.random.randn(1536).astype(np.float32)
dist = simsimd.cosine(vec1, vec2)

Supported functions include cosine, inner, sqeuclidean, hamming, and jaccard. Unlike SciPy, SimSIMD allows explicitly stating the precision of the input vectors, which is especially useful for mixed-precision setups.

dist = simsimd.cosine(vec1, vec2, "i8")
dist = simsimd.cosine(vec1, vec2, "f16")
dist = simsimd.cosine(vec1, vec2, "f32")
dist = simsimd.cosine(vec1, vec2, "f64")

Distance Between 2 Batches

batch1 = np.random.randn(100, 1536).astype(np.float32)
batch2 = np.random.randn(100, 1536).astype(np.float32)
dist = simsimd.cosine(batch1, batch2)

If either batch has more than one vector, the other batch must have one or the same number of vectors. If it contains just one, the value is broadcasted.

All Pairwise Distances

For calculating distances between all possible pairs of rows across two matrices (akin to scipy.spatial.distance.cdist):

matrix1 = np.random.randn(1000, 1536).astype(np.float32)
matrix2 = np.random.randn(10, 1536).astype(np.float32)
distances = simsimd.cdist(matrix1, matrix2, metric="cosine")

Multithreading

By default, computations use a single CPU core. To optimize and utilize all CPU cores on Linux systems, add the threads=0 argument. Alternatively, specify a custom number of threads:

distances = simsimd.cdist(matrix1, matrix2, metric="cosine", threads=0)

Hardware Backend Capabilities

To view a list of hardware backends that SimSIMD supports:

print(simsimd.get_capabilities())

Using Python API with USearch

Want to use it in Python with USearch? You can wrap the raw C function pointers SimSIMD backends into a CompiledMetric and pass it to USearch, similar to how it handles Numba's JIT-compiled code.

from usearch.index import Index, CompiledMetric, MetricKind, MetricSignature
from simsimd import pointer_to_sqeuclidean, pointer_to_cosine, pointer_to_inner

metric = CompiledMetric(
    pointer=pointer_to_cosine("f16"),
    kind=MetricKind.Cos,
    signature=MetricSignature.ArrayArraySize,
)

index = Index(256, metric=metric)

Using SimSIMD in Rust

To install, add the following to your Cargo.toml:

[dependencies]
simsimd = "..."

Before using the SimSIMD library, ensure you have imported the necessary traits and types into your Rust source file. The library provides several traits for different distance/similarity kinds - SpatialSimilarity, BinarySimilarity, and ProbabilitySimilarity.

use simsimd::SpatialSimilarity;

fn main() {
    let vector_a: Vec<f32> = vec![1.0, 2.0, 3.0];
    let vector_b: Vec<f32> = vec![4.0, 5.0, 6.0];

    // Compute the cosine similarity between vector_a and vector_b
    let cosine_similarity = f32::cosine(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Cosine Similarity: {}", cosine_similarity);

    // Compute the squared Euclidean distance between vector_a and vector_b
    let sq_euclidean_distance = f32::sqeuclidean(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Squared Euclidean Distance: {}", sq_euclidean_distance);
}

Similarly, one can compute bit-level distance functions between slices of unsigned integers:

use simsimd::BinarySimilarity;

fn main() {
    let vector_a = &[0b11110000, 0b00001111, 0b10101010];
    let vector_b = &[0b11110000, 0b00001111, 0b01010101];

    // Compute the Hamming distance between vector_a and vector_b
    let hamming_distance = u8::hamming(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Hamming Distance: {}", hamming_distance);

    // Compute the Jaccard distance between vector_a and vector_b
    let jaccard_distance = u8::jaccard(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Jaccard Distance: {}", jaccard_distance);
}

Rust has no native support for half-precision floating-point numbers, but SimSIMD provides a f16 type for this purpose. It doesn't have any functionality and is a transparent wrapper around u16, so it can be used with half, or any other half-precision library.

use simsimd::SpatialSimilarity;
use simsimd::f16 as SimF16;
use half::f16 as HalfF16;

fn main() {
    let vector_a: Vec<HalfF16> = ...
    let vector_b: Vec<HalfF16> = ...

    let buffer_a: &[SimF16] = unsafe { std::slice::from_raw_parts(a_half.as_ptr() as *const SimF16, a_half.len()) };
    let buffer_b: &[SimF16] = unsafe { std::slice::from_raw_parts(b_half.as_ptr() as *const SimF16, b_half.len()) };

    // Compute the cosine similarity between vector_a and vector_b
    let cosine_similarity = SimF16::cosine(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Cosine Similarity: {}", cosine_similarity);
}

Using SimSIMD in JavaScript

To install, choose one of the following options depending on your environment:

  • npm install --save simsimd
  • yarn add simsimd
  • pnpm add simsimd
  • bun install simsimd

The package is distributed with prebuilt binaries for Node.js v10 and above for Linux (x86_64, arm64), macOS (x86_64, arm64), and Windows (i386,x86_64).

If your platform is not supported, you can build the package from source via npm run build. This will automatically happen unless you install the package with --ignore-scripts flag or use Bun.

After you install it, you will be able to call the SimSIMD functions on various TypedArray variants:

const { sqeuclidean, cosine, inner, hamming, jaccard } = require('simsimd');

const vectorA = new Float32Array([1.0, 2.0, 3.0]);
const vectorB = new Float32Array([4.0, 5.0, 6.0]);

const distance = sqeuclidean(vectorA, vectorB);
console.log('Squared Euclidean Distance:', distance);

Using SimSIMD in C

For integration within a CMake-based project, add the following segment to your CMakeLists.txt:

FetchContent_Declare(
    simsimd
    GIT_REPOSITORY https://github.com/ashvardanian/simsimd.git
    GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(simsimd)

If you're aiming to utilize the _Float16 functionality with SimSIMD, ensure your development environment is compatible with C 11. For other functionalities of SimSIMD, C 99 compatibility will suffice. A minimal usage example would be:

#include <simsimd/simsimd.h>

int main() {
    simsimd_f32_t vector_a[1536];
    simsimd_f32_t vector_b[1536];
    simsimd_f32_t distance = simsimd_avx512_f32_cos(vector_a, vector_b, 1536);
    return 0;
}

All of the functions names follow the same pattern: simsimd_{backend}_{type}_{metric}.

  • The backend can be avx512, avx2, neon, or sve.
  • The type can be f64, f32, f16, i8, or b8.
  • The metric can be cos, ip, l2sq, hamming, jaccard, kl, or js.

In case you want to avoid hard-coding the backend, you can use the simsimd_metric_punned_t to pun the function pointer, and simsimd_capabilities function to get the available backends at runtime.

Project details


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

simsimd-3.9.0-cp312-cp312-win_arm64.whl (20.7 kB view hashes)

Uploaded CPython 3.12 Windows ARM64

simsimd-3.9.0-cp312-cp312-win_amd64.whl (25.1 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

simsimd-3.9.0-cp312-cp312-win32.whl (21.6 kB view hashes)

Uploaded CPython 3.12 Windows x86

simsimd-3.9.0-cp312-cp312-musllinux_1_2_x86_64.whl (255.5 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

simsimd-3.9.0-cp312-cp312-musllinux_1_2_aarch64.whl (219.1 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

simsimd-3.9.0-cp312-cp312-musllinux_1_1_s390x.whl (137.4 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ s390x

simsimd-3.9.0-cp312-cp312-musllinux_1_1_ppc64le.whl (154.3 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ ppc64le

simsimd-3.9.0-cp312-cp312-musllinux_1_1_i686.whl (135.0 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

simsimd-3.9.0-cp312-cp312-manylinux_2_28_x86_64.whl (342.2 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.28+ x86-64

simsimd-3.9.0-cp312-cp312-manylinux_2_28_aarch64.whl (199.7 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.28+ ARM64

simsimd-3.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (121.3 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

simsimd-3.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (146.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

simsimd-3.9.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (123.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

simsimd-3.9.0-cp312-cp312-macosx_11_0_arm64.whl (30.2 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

simsimd-3.9.0-cp312-cp312-macosx_10_9_x86_64.whl (28.8 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

simsimd-3.9.0-cp312-cp312-macosx_10_9_universal2.whl (48.5 kB view hashes)

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

simsimd-3.9.0-cp311-cp311-win_arm64.whl (20.7 kB view hashes)

Uploaded CPython 3.11 Windows ARM64

simsimd-3.9.0-cp311-cp311-win_amd64.whl (24.9 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

simsimd-3.9.0-cp311-cp311-win32.whl (21.5 kB view hashes)

Uploaded CPython 3.11 Windows x86

simsimd-3.9.0-cp311-cp311-musllinux_1_2_x86_64.whl (255.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

simsimd-3.9.0-cp311-cp311-musllinux_1_2_aarch64.whl (219.0 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

simsimd-3.9.0-cp311-cp311-musllinux_1_1_s390x.whl (137.5 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ s390x

simsimd-3.9.0-cp311-cp311-musllinux_1_1_ppc64le.whl (154.5 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ ppc64le

simsimd-3.9.0-cp311-cp311-musllinux_1_1_i686.whl (135.2 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

simsimd-3.9.0-cp311-cp311-manylinux_2_28_x86_64.whl (341.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

simsimd-3.9.0-cp311-cp311-manylinux_2_28_aarch64.whl (199.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

simsimd-3.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (120.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

simsimd-3.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (146.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

simsimd-3.9.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (123.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

simsimd-3.9.0-cp311-cp311-macosx_11_0_arm64.whl (30.2 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

simsimd-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl (28.7 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

simsimd-3.9.0-cp311-cp311-macosx_10_9_universal2.whl (48.4 kB view hashes)

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

simsimd-3.9.0-cp310-cp310-win_arm64.whl (20.7 kB view hashes)

Uploaded CPython 3.10 Windows ARM64

simsimd-3.9.0-cp310-cp310-win_amd64.whl (24.9 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

simsimd-3.9.0-cp310-cp310-win32.whl (21.5 kB view hashes)

Uploaded CPython 3.10 Windows x86

simsimd-3.9.0-cp310-cp310-musllinux_1_2_x86_64.whl (255.1 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

simsimd-3.9.0-cp310-cp310-musllinux_1_2_aarch64.whl (218.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

simsimd-3.9.0-cp310-cp310-musllinux_1_1_s390x.whl (136.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ s390x

simsimd-3.9.0-cp310-cp310-musllinux_1_1_ppc64le.whl (153.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ ppc64le

simsimd-3.9.0-cp310-cp310-musllinux_1_1_i686.whl (134.3 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

simsimd-3.9.0-cp310-cp310-manylinux_2_28_x86_64.whl (341.7 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

simsimd-3.9.0-cp310-cp310-manylinux_2_28_aarch64.whl (199.2 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

simsimd-3.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (120.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

simsimd-3.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (146.5 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

simsimd-3.9.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (123.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

simsimd-3.9.0-cp310-cp310-macosx_11_0_arm64.whl (30.2 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

simsimd-3.9.0-cp310-cp310-macosx_10_9_x86_64.whl (28.7 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

simsimd-3.9.0-cp310-cp310-macosx_10_9_universal2.whl (48.4 kB view hashes)

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

simsimd-3.9.0-cp39-cp39-win_arm64.whl (20.7 kB view hashes)

Uploaded CPython 3.9 Windows ARM64

simsimd-3.9.0-cp39-cp39-win_amd64.whl (24.9 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

simsimd-3.9.0-cp39-cp39-win32.whl (21.5 kB view hashes)

Uploaded CPython 3.9 Windows x86

simsimd-3.9.0-cp39-cp39-musllinux_1_2_x86_64.whl (254.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

simsimd-3.9.0-cp39-cp39-musllinux_1_2_aarch64.whl (218.5 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

simsimd-3.9.0-cp39-cp39-musllinux_1_1_s390x.whl (136.4 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ s390x

simsimd-3.9.0-cp39-cp39-musllinux_1_1_ppc64le.whl (153.4 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ ppc64le

simsimd-3.9.0-cp39-cp39-musllinux_1_1_i686.whl (134.0 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

simsimd-3.9.0-cp39-cp39-manylinux_2_28_x86_64.whl (341.5 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

simsimd-3.9.0-cp39-cp39-manylinux_2_28_aarch64.whl (198.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

simsimd-3.9.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (120.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

simsimd-3.9.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (146.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

simsimd-3.9.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (123.4 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

simsimd-3.9.0-cp39-cp39-macosx_11_0_arm64.whl (30.1 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

simsimd-3.9.0-cp39-cp39-macosx_10_9_x86_64.whl (28.7 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

simsimd-3.9.0-cp39-cp39-macosx_10_9_universal2.whl (48.4 kB view hashes)

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

simsimd-3.9.0-cp38-cp38-win_amd64.whl (24.9 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

simsimd-3.9.0-cp38-cp38-win32.whl (21.5 kB view hashes)

Uploaded CPython 3.8 Windows x86

simsimd-3.9.0-cp38-cp38-musllinux_1_2_x86_64.whl (254.7 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

simsimd-3.9.0-cp38-cp38-musllinux_1_2_aarch64.whl (218.2 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

simsimd-3.9.0-cp38-cp38-musllinux_1_1_s390x.whl (136.5 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ s390x

simsimd-3.9.0-cp38-cp38-musllinux_1_1_ppc64le.whl (153.5 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ ppc64le

simsimd-3.9.0-cp38-cp38-musllinux_1_1_i686.whl (134.1 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

simsimd-3.9.0-cp38-cp38-manylinux_2_28_x86_64.whl (341.7 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

simsimd-3.9.0-cp38-cp38-manylinux_2_28_aarch64.whl (199.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

simsimd-3.9.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (121.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

simsimd-3.9.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (146.8 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

simsimd-3.9.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (123.9 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

simsimd-3.9.0-cp38-cp38-macosx_11_0_arm64.whl (30.1 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

simsimd-3.9.0-cp38-cp38-macosx_10_9_x86_64.whl (28.7 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

simsimd-3.9.0-cp38-cp38-macosx_10_9_universal2.whl (48.4 kB view hashes)

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

simsimd-3.9.0-cp37-cp37m-win_amd64.whl (24.9 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

simsimd-3.9.0-cp37-cp37m-win32.whl (21.5 kB view hashes)

Uploaded CPython 3.7m Windows x86

simsimd-3.9.0-cp37-cp37m-musllinux_1_2_x86_64.whl (254.1 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.2+ x86-64

simsimd-3.9.0-cp37-cp37m-musllinux_1_2_aarch64.whl (217.6 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARM64

simsimd-3.9.0-cp37-cp37m-musllinux_1_1_s390x.whl (137.0 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ s390x

simsimd-3.9.0-cp37-cp37m-musllinux_1_1_ppc64le.whl (154.1 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ ppc64le

simsimd-3.9.0-cp37-cp37m-musllinux_1_1_i686.whl (134.8 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

simsimd-3.9.0-cp37-cp37m-manylinux_2_28_x86_64.whl (341.3 kB view hashes)

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

simsimd-3.9.0-cp37-cp37m-manylinux_2_28_aarch64.whl (198.6 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

simsimd-3.9.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (120.6 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

simsimd-3.9.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (146.3 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

simsimd-3.9.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (123.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

simsimd-3.9.0-cp37-cp37m-macosx_10_9_x86_64.whl (28.7 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

simsimd-3.9.0-cp36-cp36m-win_amd64.whl (24.9 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

simsimd-3.9.0-cp36-cp36m-win32.whl (21.5 kB view hashes)

Uploaded CPython 3.6m Windows x86

simsimd-3.9.0-cp36-cp36m-musllinux_1_2_x86_64.whl (254.1 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.2+ x86-64

simsimd-3.9.0-cp36-cp36m-musllinux_1_2_aarch64.whl (217.6 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARM64

simsimd-3.9.0-cp36-cp36m-musllinux_1_1_s390x.whl (136.1 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ s390x

simsimd-3.9.0-cp36-cp36m-musllinux_1_1_ppc64le.whl (153.1 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ ppc64le

simsimd-3.9.0-cp36-cp36m-musllinux_1_1_i686.whl (133.8 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

simsimd-3.9.0-cp36-cp36m-manylinux_2_28_x86_64.whl (341.3 kB view hashes)

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

simsimd-3.9.0-cp36-cp36m-manylinux_2_28_aarch64.whl (198.6 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.28+ ARM64

simsimd-3.9.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl (120.6 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ s390x

simsimd-3.9.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (146.3 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ppc64le

simsimd-3.9.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (123.5 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686

simsimd-3.9.0-cp36-cp36m-macosx_10_9_x86_64.whl (28.5 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

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