Skip to main content

Portable mixed-precision BLAS-like vector math library for x86 and ARM

Project description

SimSIMD banner

Computing dot-products, similarity measures, and distances between low- and high-dimensional vectors is ubiquitous in Machine Learning, Scientific Computing, Geospatial Analysis, and Information Retrieval. These algorithms generally have linear complexity in time, constant or linear complexity in space, and are data-parallel. In other words, it is easily parallelizable and vectorizable and often available in packages like BLAS (level 1) and LAPACK, as well as higher-level numpy and scipy Python libraries. Ironically, even with decades of evolution in compilers and numerical computing, most libraries can be 3-200x slower than hardware potential even on the most popular hardware, like 64-bit x86 and Arm CPUs. Moreover, most lack mixed-precision support, which is crucial for modern AI! The rare few that support minimal mixed precision, run only on one platform, and are vendor-locked, by companies like Intel and Nvidia. SimSIMD provides an alternative. 1️⃣ SimSIMD functions are practically as fast as memcpy. 2️⃣ Unlike BLAS, most kernels are designed for mixed-precision and bit-level operations. 3️⃣ SimSIMD often ships more binaries than NumPy and has more backends than most BLAS implementations, and more high-level interfaces than most libraries.

Features

SimSIMD (Arabic: "سيمسيم دي") is a mixed-precision math library of over 350 SIMD-optimized kernels extensively used in AI, Search, and DBMS workloads. Named after the iconic "Open Sesame" command that opened doors to treasure in Ali Baba and the Forty Thieves, SimSIMD can help you 10x the cost-efficiency of your computational pipelines. Implemented distance functions include:

  • Euclidean (L2) and Cosine (Angular) spatial distances for Vector Search. docs
  • Dot-Products for real & complex vectors for DSP & Quantum computing. docs
  • Hamming (~ Manhattan) and Jaccard (~ Tanimoto) bit-level distances. docs
  • Set Intersections for Sparse Vectors and Text Analysis. docs
  • Mahalanobis distance and Quadratic forms for Scientific Computing. docs
  • Kullback-Leibler and Jensen–Shannon divergences for probability distributions. docs
  • Fused-Multiply-Add (FMA) and Weighted Sums to replace BLAS level 1 functions. docs
  • For Levenshtein, Needleman–Wunsch, and Smith-Waterman, check StringZilla.
  • 🔜 Haversine and Vincenty's formulae for Geospatial Analysis.

Moreover, SimSIMD...

  • handles float64, float32, float16, and bfloat16 real & complex vectors.
  • handles int8 integral, int4 sub-byte, and b8 binary vectors.
  • handles sparse uint32 and uint16 sets, and weighted sparse vectors.
  • is a zero-dependency header-only C 99 library.
  • has Python, Rust, JS, and Swift bindings.
  • has Arm backends for NEON, Scalable Vector Extensions (SVE), and SVE2.
  • has x86 backends for Haswell, Skylake, Ice Lake, Genoa, and Sapphire Rapids.
  • with both compile-time and runtime CPU feature detection easily integrates anywhere!

Due to the high-level of fragmentation of SIMD support in different x86 CPUs, SimSIMD generally uses the names of select Intel CPU generations for its backends. They, however, also work on AMD CPUs. Intel Haswell is compatible with AMD Zen 1/2/3, while AMD Genoa Zen 4 covers AVX-512 instructions added to Intel Skylake and Ice Lake. You can learn more about the technical implementation details in the following blog-posts:

Benchmarks

NumPy C 99 SimSIMD
cosine distances between 1536d vectors in int8
🚧 overflows
x86: 10,548,600 ops/s
arm: 11,379,300 ops/s
x86: 16,151,800 ops/s
arm: 13,524,000 ops/s
cosine distances between 1536d vectors in bfloat16
🚧 not supported
x86: 119,835 ops/s
arm: 403,909 ops/s
x86: 9,738,540 ops/s
arm: 4,881,900 ops/s
cosine distances between 1536d vectors in float16
x86: 40,481 ops/s
arm: 21,451 ops/s
x86: 501,310 ops/s
arm: 871,963 ops/s
x86: 7,627,600 ops/s
arm: 3,316,810 ops/s
cosine distances between 1536d vectors in float32
x86: 253,902 ops/s
arm: 46,394 ops/s
x86: 882,484 ops/s
arm: 399,661 ops/s
x86: 8,202,910 ops/s
arm: 3,400,620 ops/s
cosine distances between 1536d vectors in float64
x86: 212,421 ops/s
arm: 52,904 ops/s
x86: 839,301 ops/s
arm: 837,126 ops/s
x86: 1,538,530 ops/s
arm: 1,678,920 ops/s
euclidean distance between 1536d vectors in int8
x86: 252,113 ops/s
arm: 177,443 ops/s
x86: 6,690,110 ops/s
arm: 4,114,160 ops/s
x86: 18,989,000 ops/s
arm: 18,878,200 ops/s
euclidean distance between 1536d vectors in bfloat16
🚧 not supported
x86: 119,842 ops/s
arm: 1,049,230 ops/s
x86: 9,727,210 ops/s
arm: 4,233,420 ops/s
euclidean distance between 1536d vectors in float16
x86: 54,621 ops/s
arm: 71,793 ops/s
x86: 196,413 ops/s
arm: 911,370 ops/s
x86: 19,466,800 ops/s
arm: 3,522,760 ops/s
euclidean distance between 1536d vectors in float32
x86: 424,944 ops/s
arm: 292,629 ops/s
x86: 1,295,210 ops/s
arm: 1,055,940 ops/s
x86: 8,924,100 ops/s
arm: 3,602,650 ops/s
euclidean distance between 1536d vectors in float64
x86: 334,929 ops/s
arm: 237,505 ops/s
x86: 1,215,190 ops/s
arm: 905,782 ops/s
x86: 1,701,740 ops/s
arm: 1,735,840 ops/s

For benchmarks we mostly use 1536-dimensional vectors, like the embeddings produced by the OpenAI Ada API. The code was compiled with GCC 12, using glibc v2.35. The benchmarks performed on Arm-based Graviton3 AWS c7g instances and r7iz Intel Sapphire Rapids. Most modern Arm-based 64-bit CPUs will have similar relative speedups. Variance within x86 CPUs will be larger.

Similar speedups are often observed even when compared to BLAS and LAPACK libraries underlying most numerical computing libraries, including NumPy and SciPy in Python. 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 int8, uint8 or float16 vectors, will use the same types for accumulators, while SimSIMD can combine int8 enumeration, int16 multiplication, and int32 accumulation to avoid overflows entirely. The same applies to processing float16 and bfloat16 values with float32 precision.

Installation

Use the following snippet to install SimSIMD and list hardware acceleration options available on your machine:

pip install simsimd
python -c "import simsimd; print(simsimd.get_capabilities())"   # for hardware introspection
python -c "import simsimd; help(simsimd)"                       # for documentation

With precompiled binaries, SimSIMD ships .pyi interface files for type hinting and static analysis. You can check all the available functions in python/annotations/__init__.pyi.

One-to-One Distance

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, jaccard, kullbackleibler, jensenshannon, and intersect. Dot products are supported for both real and complex numbers:

vec1 = np.random.randn(768).astype(np.float64) + 1j * np.random.randn(768).astype(np.float64)
vec2 = np.random.randn(768).astype(np.float64) + 1j * np.random.randn(768).astype(np.float64)

dist = simsimd.dot(vec1.astype(np.complex128), vec2.astype(np.complex128))
dist = simsimd.dot(vec1.astype(np.complex64), vec2.astype(np.complex64))
dist = simsimd.vdot(vec1.astype(np.complex64), vec2.astype(np.complex64)) # conjugate, same as `np.vdot`

Unlike SciPy, SimSIMD allows explicitly stating the precision of the input vectors, which is especially useful for mixed-precision setups. The dtype argument can be passed both by name and as a positional argument:

dist = simsimd.cosine(vec1, vec2, "int8")
dist = simsimd.cosine(vec1, vec2, "float16")
dist = simsimd.cosine(vec1, vec2, "float32")
dist = simsimd.cosine(vec1, vec2, "float64")
dist = simsimd.hamming(vec1, vec2, "bin8")

Binary distance functions are computed at a bit-level. Meaning a vector of 10x 8-bit integers will be treated as a sequence of 80 individual bits or dimensions. This differs from NumPy, that can't handle smaller-than-byte types, but you can still avoid the bin8 argument by reinterpreting the vector as booleans:

vec1 = np.random.randint(2, size=80).astype(np.uint8).packbits().view(np.bool_)
vec2 = np.random.randint(2, size=80).astype(np.uint8).packbits().view(np.bool_)
hamming_distance = simsimd.hamming(vec1, vec2)
jaccard_distance = simsimd.jaccard(vec1, vec2)

With other frameworks, like PyTorch, one can get a richer type-system than NumPy, but the lack of good CPython interoperability makes it hard to pass data without copies. Here is an example of using SimSIMD with PyTorch to compute the cosine similarity between two bfloat16 vectors:

import numpy as np
buf1 = np.empty(8, dtype=np.uint16)
buf2 = np.empty(8, dtype=np.uint16)

# View the same memory region with PyTorch and randomize it
import torch
vec1 = torch.asarray(memoryview(buf1), copy=False).view(torch.bfloat16)
vec2 = torch.asarray(memoryview(buf2), copy=False).view(torch.bfloat16)
torch.randn(8, out=vec1)
torch.randn(8, out=vec2)

# Both libs will look into the same memory buffers and report the same results
dist_slow = 1 - torch.nn.functional.cosine_similarity(vec1, vec2, dim=0)
dist_fast = simsimd.cosine(buf1, buf2, "bfloat16")

It also allows using SimSIMD for half-precision complex numbers, which NumPy does not support. For that, view data as continuous even-length np.float16 vectors and override type-resolution with complex32 string.

vec1 = np.random.randn(1536).astype(np.float16)
vec2 = np.random.randn(1536).astype(np.float16)
simd.dot(vec1, vec2, "complex32")
simd.vdot(vec1, vec2, "complex32")

When dealing with sparse representations and integer sets, you can apply the intersect function to two 1-dimensional arrays of uint16 or uint32 integers:

from random import randint
import numpy as np
import simsimd as simd

length1, length2 = randint(1, 100), randint(1, 100)
vec1 = np.sort(np.random.randint(0, 1000, length1).astype(np.uint16))
vec2 = np.sort(np.random.randint(0, 1000, length2).astype(np.uint16))

slow_result = len(np.intersect1d(vec1, vec2))
fast_result = simd.intersect(vec1, vec2)
assert slow_result == fast_result

One-to-Many Distances

Every distance function can be used not only for one-to-one but also one-to-many and many-to-many distance calculations. For one-to-many:

vec1 = np.random.randn(1536).astype(np.float32) # rank 1 tensor
batch1 = np.random.randn(1, 1536).astype(np.float32) # rank 2 tensor
batch2 = np.random.randn(100, 1536).astype(np.float32)

dist_rank1 = simsimd.cosine(vec1, batch2)
dist_rank2 = simsimd.cosine(batch1, batch2)

Many-to-Many Distances

All distance functions in SimSIMD can be used to compute many-to-many distances. For two batches of 100 vectors to compute 100 distances, one would call it like this:

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

Input matrices must have identical shapes. This functionality isn't natively present in NumPy or SciPy, and generally requires creating intermediate arrays, which is inefficient and memory-consuming.

Many-to-Many All-Pairs Distances

One can use SimSIMD to compute distances between all possible pairs of rows across two matrices (akin to scipy.spatial.distance.cdist). The resulting object will have a type DistancesTensor, zero-copy compatible with NumPy and other libraries. For two arrays of 10 and 1,000 entries, the resulting tensor will have 10,000 cells:

import numpy as np
from simsimd import cdist, DistancesTensor

matrix1 = np.random.randn(1000, 1536).astype(np.float32)
matrix2 = np.random.randn(10, 1536).astype(np.float32)
distances: DistancesTensor = simsimd.cdist(matrix1, matrix2, metric="cosine")   # zero-copy, managed by SimSIMD
distances_array: np.ndarray = np.array(distances, copy=True)                    # now managed by NumPy

Element-wise Kernels

SimSIMD also provides mixed-precision element-wise kernels, where the input vectors and the output have the same numeric type, but the intermediate accumulators are of a higher precision.

import numpy as np
from simsimd import fma, wsum

# Let's take two FullHD video frames
first_frame = np.random.randn(1920 * 1024).astype(np.uint8)
second_frame = np.random.randn(1920 * 1024).astype(np.uint8)
average_frame = np.empty_like(first_frame)
wsum(first_frame, second_frame, alpha=0.5, beta=0.5, out=average_frame)

# Slow analog with NumPy:
slow_average_frame = (0.5 * first_frame + 0.5 * second_frame).astype(np.uint8)

Similarly, the fma takes three arguments and computes the fused multiply-add operation. In applications like Machine Learning you may also benefit from using the "brain-float" format not natively supported by NumPy. In 3D Graphics, for example, we can use FMA to compute the Phong shading model:

# Assume a FullHD frame with random values for simplicity
light_intensity = np.random.rand(1920 * 1080).astype(np.float16)  # Intensity of light on each pixel
diffuse_component = np.random.rand(1920 * 1080).astype(np.float16)  # Diffuse reflectance on the surface
specular_component = np.random.rand(1920 * 1080).astype(np.float16)  # Specular reflectance for highlights
output_color = np.empty_like(light_intensity)  # Array to store the resulting color intensity

# Define the scaling factors for diffuse and specular contributions
alpha = 0.7  # Weight for the diffuse component
beta = 0.3   # Weight for the specular component

# Formula: color = alpha * light_intensity * diffuse_component + beta * specular_component
fma(light_intensity, diffuse_component, specular_component,
    dtype="float16", # Optional, unless it can't be inferred from the input
    alpha=alpha, beta=beta, out=output_color)

# Slow analog with NumPy for comparison
slow_output_color = (alpha * light_intensity * diffuse_component + beta * specular_component).astype(np.float16)

Multithreading and Memory Usage

By default, computations use a single CPU core. To override this behavior, use the threads argument. Set it to 0 to use all available CPU cores and let the underlying C library manage the thread pool. Here is an example of dealing with large sets of binary vectors:

ndim = 1536 # OpenAI Ada embeddings
matrix1 = np.packbits(np.random.randint(2, size=(10_000, ndim)).astype(np.uint8))
matrix2 = np.packbits(np.random.randint(2, size=(1_000, ndim)).astype(np.uint8))

distances = simsimd.cdist(matrix1, matrix2,
    metric="hamming",   # Unlike SciPy, SimSIMD doesn't divide by the number of dimensions
    out_dtype="uint8",  # so we can use `uint8` instead of `float64` to save memory.
    threads=0,          # Use all CPU cores with OpenMP.
    dtype="bin8",       # Override input argument type to `bin8` eight-bit words.
)

Alternatively, when using free-threading Python 3.13t builds, one can combine single-threaded SimSIMD operations with Python's concurrent.futures.ThreadPoolExecutor to parallelize the computations. By default, the output distances will be stored in double-precision float64 floating-point numbers. That behavior may not be space-efficient, especially if you are computing the hamming distance between short binary vectors, that will generally fit into 8x smaller uint8 or uint16 types. To override this behavior, use the out_dtype argument, or consider pre-allocating the output array and passing it to the out argument. A more complete example may look like this:

from multiprocessing import cpu_count
from concurrent.futures import ThreadPoolExecutor
from simsimd import cosine
import numpy as np

# Generate large dataset
vectors_a = np.random.rand(100_000, 1536).astype(np.float32)
vectors_b = np.random.rand(100_000, 1536).astype(np.float32)
distances = np.zeros((100_000,), dtype=np.float32)

def compute_batch(start_idx, end_idx):
    batch_a = vectors_a[start_idx:end_idx]
    batch_b = vectors_b[start_idx:end_idx]
    cosine(batch_a, batch_b, out=distances[start_idx:end_idx])

# Use all CPU cores with true parallelism (no GIL!)
num_threads = cpu_count()
chunk_size = len(vectors_a) // num_threads

with ThreadPoolExecutor(max_workers=num_threads) as executor:
    futures = []
    for i in range(num_threads):
        start_idx = i * chunk_size
        end_idx = (i + 1) * chunk_size if i < num_threads - 1 else len(vectors_a)
        futures.append(executor.submit(compute_batch, start_idx, end_idx))

    # Collect results from all threads
    results = [future.result() for future in futures]

Half-Precision Brain-Float Numbers

The "brain-float-16" is a popular machine learning format. It's broadly supported in hardware and is very machine-friendly, but software support is still lagging behind. Unlike NumPy, you can already use bf16 datatype in SimSIMD. Luckily, to downcast f32 to bf16 you only have to drop the last 16 bits:

import numpy as np
import simsimd as simd

ndim = 1536
a = np.random.randn(ndim).astype(np.float32)
b = np.random.randn(ndim).astype(np.float32)

# NumPy doesn't natively support brain-float, so we need a trick!
# Luckily, it's very easy to reduce the representation accuracy
# by simply masking the low 16-bits of our 32-bit single-precision
# numbers. We can also add `0x8000` to round the numbers.
a_f32rounded = ((a.view(np.uint32) + 0x8000) & 0xFFFF0000).view(np.float32)
b_f32rounded = ((b.view(np.uint32) + 0x8000) & 0xFFFF0000).view(np.float32)

# To represent them as brain-floats, we need to drop the second half
a_bf16 = np.right_shift(a_f32rounded.view(np.uint32), 16).astype(np.uint16)
b_bf16 = np.right_shift(b_f32rounded.view(np.uint32), 16).astype(np.uint16)

# Now we can compare the results
expected = np.inner(a_f32rounded, b_f32rounded)
result = simd.inner(a_bf16, b_bf16, "bf16")

Helper Functions

You can turn specific backends on or off depending on the exact environment. A common case may be avoiding AVX-512 on older AMD CPUs and Intel Ice Lake CPUs to ensure the CPU doesn't change the frequency license and throttle performance.

$ simsimd.get_capabilities()
> {'serial': True, 'neon': False, 'sve': False, 'neon_f16': False, 'sve_f16': False, 'neon_bf16': False, 'sve_bf16': False, 'neon_i8': False, 'sve_i8': False, 'haswell': True, 'skylake': True, 'ice': True, 'genoa': True, 'sapphire': True, 'turin': True}
$ simsimd.disable_capability("sapphire")
$ simsimd.enable_capability("sapphire")

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.

Spatial Similarity: Cosine and Euclidean Distances

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 distance between vectors
    let cosine_distance = f32::cosine(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Cosine Distance: {}", cosine_distance);

    // Compute the squared Euclidean distance between vectors
    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);
}

Spatial similarity functions are available for f64, f32, f16, and i8 types.

Dot-Products: Inner and Complex Inner Products

use simsimd::SpatialSimilarity;
use simsimd::ComplexProducts;

fn main() {
    // Complex vectors have interleaved real & imaginary components
    let vector_a: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0];
    let vector_b: Vec<f32> = vec![5.0, 6.0, 7.0, 8.0];

    // Compute the inner product between vectors
    let inner_product = SpatialSimilarity::dot(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Inner Product: {}", inner_product);

    // Compute the complex inner product between vectors
    let complex_inner_product = ComplexProducts::dot(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    let complex_conjugate_inner_product = ComplexProducts::vdot(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Complex Inner Product: {:?}", complex_inner_product); // -18, 69
    println!("Complex C. Inner Product: {:?}", complex_conjugate_inner_product); // 70, -8
}

Complex inner products are available for f64, f32, and f16 types.

Probability Distributions: Jensen-Shannon and Kullback-Leibler Divergences

use simsimd::ProbabilitySimilarity;

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];

    let jensen_shannon = f32::jensenshannon(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Jensen-Shannon Divergence: {}", jensen_shannon);

    let kullback_leibler = f32::kullbackleibler(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

    println!("Kullback-Leibler Divergence: {}", kullback_leibler);
}

Probability similarity functions are available for f64, f32, and f16 types.

Binary Similarity: Hamming and Jaccard Distances

Similar to spatial distances, 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 vectors
    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 vectors
    let jaccard_distance = u8::jaccard(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");

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

Binary similarity functions are available only for u8 types.

Half-Precision Floating-Point Numbers

Rust has no native support for half-precision floating-point numbers, but SimSIMD provides a f16 type with built-in conversion methods. The underlying u16 representation is publicly accessible for direct bit manipulation.

use simsimd::{SpatialSimilarity, f16};

fn main() {
    // Create f16 vectors using built-in conversion methods
    let vector_a: Vec<f16> = vec![1.0, 2.0, 3.0].iter().map(|&x| f16::from_f32(x)).collect();
    let vector_b: Vec<f16> = vec![4.0, 5.0, 6.0].iter().map(|&x| f16::from_f32(x)).collect();

    // Compute the cosine distance
    let cosine_distance = f16::cosine(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");
    
    println!("Cosine Distance: {}", cosine_distance);

    // Direct bit manipulation
    let half = f16::from_f32(3.14159);
    let bits = half.0; // Access raw u16 representation
    let reconstructed = f16(bits);
    
    // Convert back to f32
    let float_value = half.to_f32();
}

For interoperability with the half crate:

use simsimd::{SpatialSimilarity, f16 as SimF16};
use half::f16 as HalfF16;

fn main() {
    let vector_a: Vec<HalfF16> = vec![1.0, 2.0, 3.0].iter().map(|&x| HalfF16::from_f32(x)).collect();
    let vector_b: Vec<HalfF16> = vec![4.0, 5.0, 6.0].iter().map(|&x| HalfF16::from_f32(x)).collect();

    // Safe reinterpret cast due to identical memory layout
    let buffer_a: &[SimF16] = unsafe { std::slice::from_raw_parts(vector_a.as_ptr() as *const SimF16, vector_a.len()) };
    let buffer_b: &[SimF16] = unsafe { std::slice::from_raw_parts(vector_b.as_ptr() as *const SimF16, vector_b.len()) };

    let cosine_distance = SimF16::cosine(buffer_a, buffer_b)
        .expect("Vectors must be of the same length");

    println!("Cosine Distance: {}", cosine_distance);
}

Half-Precision Brain-Float Numbers

The "brain-float-16" is a popular machine learning format. It's broadly supported in hardware and is very machine-friendly, but software support is still lagging behind. Unlike NumPy, you can already use bf16 datatype in SimSIMD. SimSIMD provides a bf16 type with built-in conversion methods and direct bit access.

use simsimd::{SpatialSimilarity, bf16};

fn main() {
    // Create bf16 vectors using built-in conversion methods
    let vector_a: Vec<bf16> = vec![1.0, 2.0, 3.0].iter().map(|&x| bf16::from_f32(x)).collect();
    let vector_b: Vec<bf16> = vec![4.0, 5.0, 6.0].iter().map(|&x| bf16::from_f32(x)).collect();

    // Compute the cosine similarity
    let cosine_distance = bf16::cosine(&vector_a, &vector_b)
        .expect("Vectors must be of the same length");
    
    println!("Cosine Distance: {}", cosine_distance);

    // Direct bit manipulation
    let brain_half = bf16::from_f32(3.14159);
    let bits = brain_half.0; // Access raw u16 representation
    let reconstructed = bf16(bits);
    
    // Convert back to f32
    let float_value = brain_half.to_f32();

    // Compare precision differences
    let original = 3.14159_f32;
    let f16_roundtrip = f16::from_f32(original).to_f32();
    let bf16_roundtrip = bf16::from_f32(original).to_f32();
    
    println!("Original: {}", original);
    println!("f16 roundtrip: {}", f16_roundtrip);
    println!("bf16 roundtrip: {}", bf16_roundtrip);
}

Dynamic Dispatch in Rust

SimSIMD provides a dynamic dispatch mechanism to select the most advanced micro-kernel for the current CPU. You can query supported backends and use the SimSIMD::capabilities function to select the best one.

println!("uses neon: {}", capabilities::uses_neon());
println!("uses sve: {}", capabilities::uses_sve());
println!("uses haswell: {}", capabilities::uses_haswell());
println!("uses skylake: {}", capabilities::uses_skylake());
println!("uses ice: {}", capabilities::uses_ice());
println!("uses genoa: {}", capabilities::uses_genoa());
println!("uses sapphire: {}", capabilities::uses_sapphire());
println!("uses turin: {}", capabilities::uses_turin());
println!("uses sierra: {}", capabilities::uses_sierra());

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, but if your platform is not supported, you can build the package from the source via npm run build. This will automatically happen unless you install the package with the --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);

Other numeric types and precision levels are supported as well. For double-precision floating-point numbers, use Float64Array:

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

When doing machine learning and vector search with high-dimensional vectors you may want to quantize them to 8-bit integers. You may want to project values from the $[-1, 1]$ range to the $[-127, 127]$ range and then cast them to Int8Array:

const quantizedVectorA = new Int8Array(vectorA.map((v) => v * 127));
const quantizedVectorB = new Int8Array(vectorB.map((v) => v * 127));
const distance = cosine(quantizedVectorA, quantizedVectorB);

A more extreme quantization case would be to use binary vectors. You can map all positive values to 1 and all negative values and zero to 0, packing eight values into a single byte. After that, Hamming and Jaccard distances can be computed.

const { toBinary, hamming } = require("simsimd");

const binaryVectorA = toBinary(vectorA);
const binaryVectorB = toBinary(vectorB);
const distance = hamming(binaryVectorA, binaryVectorB);

Using SimSIMD in Swift

To install, simply add the following dependency to your Package.swift:

dependencies: [
    .package(url: "https://github.com/ashvardanian/simsimd")
]

The package provides the most common spatial metrics for Int8, Float16, Float32, and Float64 vectors.

import SimSIMD

let vectorA: [Int8] = [1, 2, 3]
let vectorB: [Int8] = [4, 5, 6]

let dotProduct = vectorA.dot(vectorB)           // Computes the dot product
let cosineDistance = vectorA.cosine(vectorB)    // Computes the cosine distance
let sqEuclidean = vectorA.sqeuclidean(vectorB)  // Computes the squared Euclidean 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)

After that, you can use the SimSIMD library in your C code in several ways. Simplest of all, you can include the headers, and the compiler will automatically select the most recent CPU extensions that SimSIMD will use.

#include <simsimd/simsimd.h>

int main() {
    simsimd_flush_denormals(); // Optional, to avoid performance penalties on denormal numbers

    simsimd_f32_t vector_a[1536];
    simsimd_f32_t vector_b[1536];
    simsimd_kernel_punned_t metric_punned = simsimd_metric_punned(
        simsimd_metric_cos_k,   // Metric kind, like the angular cosine distance
        simsimd_datatype_f32_k, // Data type, like: f16, f32, f64, i8, b8, and complex variants
        simsimd_cap_any_k);     // Which CPU capabilities are we allowed to use
    simsimd_distance_t distance;
    simsimd_metric_dense_punned_t metric = (simsimd_metric_dense_punned_t)metric_punned;
    metric(vector_a, vector_b, 1536, &distance);
    return 0;
}

Dynamic Dispatch in C

To avoid hard-coding the backend, you can rely on c/lib.c to prepackage all possible backends in one binary, and select the most recent CPU features at runtime. That feature of the C library is called dynamic dispatch and is extensively used in the Python, JavaScript, and Rust bindings. To test which CPU features are available on the machine at runtime, use the following APIs:

int uses_dynamic_dispatch = simsimd_uses_dynamic_dispatch(); // Check if dynamic dispatch was enabled
simsimd_capability_t capabilities = simsimd_capabilities();  // Returns a bitmask

int uses_neon = simsimd_uses_neon();
int uses_sve = simsimd_uses_sve();
int uses_haswell = simsimd_uses_haswell();
int uses_skylake = simsimd_uses_skylake();
int uses_ice = simsimd_uses_ice();
int uses_genoa = simsimd_uses_genoa();
int uses_sapphire = simsimd_uses_sapphire();

To override compilation settings and switch between runtime and compile-time dispatch, define the following macro:

#define SIMSIMD_DYNAMIC_DISPATCH 1 // or 0

Spatial Distances: Cosine and Euclidean Distances

#include <simsimd/simsimd.h>

int main() {
    simsimd_i8_t i8s[1536];
    simsimd_u8_t u8s[1536];
    simsimd_f64_t f64s[1536];
    simsimd_f32_t f32s[1536];
    simsimd_f16_t f16s[1536];
    simsimd_bf16_t bf16s[1536];
    simsimd_distance_t distance;

    // Cosine distance between two vectors
    simsimd_cos_i8(i8s, i8s, 1536, &distance);
    simsimd_cos_u8(u8s, u8s, 1536, &distance);
    simsimd_cos_f16(f16s, f16s, 1536, &distance);
    simsimd_cos_f32(f32s, f32s, 1536, &distance);
    simsimd_cos_f64(f64s, f64s, 1536, &distance);
    simsimd_cos_bf16(bf16s, bf16s, 1536, &distance);

    // Euclidean distance between two vectors
    simsimd_l2sq_i8(i8s, i8s, 1536, &distance);
    simsimd_l2sq_u8(u8s, u8s, 1536, &distance);
    simsimd_l2sq_f16(f16s, f16s, 1536, &distance);
    simsimd_l2sq_f32(f32s, f32s, 1536, &distance);
    simsimd_l2sq_f64(f64s, f64s, 1536, &distance);
    simsimd_l2sq_bf16(bf16s, bf16s, 1536, &distance);

    return 0;
}

Dot-Products: Inner and Complex Inner Products

#include <simsimd/simsimd.h>

int main() {
    // SimSIMD provides "sized" type-aliases without relying on `stdint.h`
    simsimd_i8_t i8[1536];
    simsimd_i8_t u8[1536];
    simsimd_f16_t f16s[1536];
    simsimd_f32_t f32s[1536];
    simsimd_f64_t f64s[1536];
    simsimd_bf16_t bf16s[1536];
    simsimd_distance_t product;

    // Inner product between two real vectors
    simsimd_dot_i8(i8s, i8s, 1536, &product);
    simsimd_dot_u8(u8s, u8s, 1536, &product);
    simsimd_dot_f16(f16s, f16s, 1536, &product);
    simsimd_dot_f32(f32s, f32s, 1536, &product);
    simsimd_dot_f64(f64s, f64s, 1536, &product);
    simsimd_dot_bf16(bf16s, bf16s, 1536, &product);

    // SimSIMD provides complex types with `real` and `imag` fields
    simsimd_f64c_t f64cs[768];
    simsimd_f32c_t f32cs[768];
    simsimd_f16c_t f16cs[768];
    simsimd_bf16c_t bf16cs[768];
    simsimd_distance_t products[2]; // real and imaginary parts

    // Complex inner product between two vectors
    simsimd_dot_f16c(f16cs, f16cs, 768, &products[0]);
    simsimd_dot_f32c(f32cs, f32cs, 768, &products[0]);
    simsimd_dot_f64c(f64cs, f64cs, 768, &products[0]);
    simsimd_dot_bf16c(bf16cs, bf16cs, 768, &products[0]);

    // Complex conjugate inner product between two vectors
    simsimd_vdot_f16c(f16cs, f16cs, 768, &products[0]);
    simsimd_vdot_f32c(f32cs, f32cs, 768, &products[0]);
    simsimd_vdot_f64c(f64cs, f64cs, 768, &products[0]);
    simsimd_vdot_bf16c(bf16cs, bf16cs, 768, &products[0]);
    return 0;
}

Binary Distances: Hamming and Jaccard Distances

#include <simsimd/simsimd.h>

int main() {
    simsimd_b8_t b8s[1536 / 8]; // 8 bits per word
    simsimd_distance_t distance;
    simsimd_hamming_b8(b8s, b8s, 1536 / 8, &distance);
    simsimd_jaccard_b8(b8s, b8s, 1536 / 8, &distance);
    return 0;
}

Probability Distributions: Jensen-Shannon and Kullback-Leibler Divergences

#include <simsimd/simsimd.h>

int main() {
    simsimd_f64_t f64s[1536];
    simsimd_f32_t f32s[1536];
    simsimd_f16_t f16s[1536];
    simsimd_distance_t divergence;

    // Jensen-Shannon divergence between two vectors
    simsimd_js_f16(f16s, f16s, 1536, &divergence);
    simsimd_js_f32(f32s, f32s, 1536, &divergence);
    simsimd_js_f64(f64s, f64s, 1536, &divergence);

    // Kullback-Leibler divergence between two vectors
    simsimd_kl_f16(f16s, f16s, 1536, &divergence);
    simsimd_kl_f32(f32s, f32s, 1536, &divergence);
    simsimd_kl_f64(f64s, f64s, 1536, &divergence);
    return 0;
}

Half-Precision Floating-Point Numbers

If you aim to utilize the _Float16 functionality with SimSIMD, ensure your development environment is compatible with C 11. For other SimSIMD functionalities, C 99 compatibility will suffice. To explicitly disable half-precision support, define the following macro before imports:

#define SIMSIMD_NATIVE_F16 0 // or 1
#define SIMSIMD_NATIVE_BF16 0 // or 1
#include <simsimd/simsimd.h>

Compilation Settings and Debugging

SIMSIMD_DYNAMIC_DISPATCH:

By default, SimSIMD is a header-only library. But if you are running on different generations of devices, it makes sense to pre-compile the library for all supported generations at once, and dispatch at runtime. This flag does just that and is used to produce the simsimd.so shared library, as well as the Python and other bindings.

For Arm: SIMSIMD_TARGET_NEON, SIMSIMD_TARGET_SVE, SIMSIMD_TARGET_SVE2, SIMSIMD_TARGET_NEON_F16, SIMSIMD_TARGET_SVE_F16, SIMSIMD_TARGET_NEON_BF16, SIMSIMD_TARGET_SVE_BF16. For x86: SIMSIMD_TARGET_HASWELL, SIMSIMD_TARGET_SKYLAKE, SIMSIMD_TARGET_ICE, SIMSIMD_TARGET_GENOA, SIMSIMD_TARGET_SAPPHIRE, SIMSIMD_TARGET_TURIN, SIMSIMD_TARGET_SIERRA.

By default, SimSIMD automatically infers the target architecture and pre-compiles as many kernels as possible. In some cases, you may want to explicitly disable some of the kernels. Most often it's due to compiler support issues, like the lack of some recent intrinsics or low-precision numeric types. In other cases, you may want to disable some kernels to speed up the compilation process and trim the binary size.

SIMSIMD_SQRT, SIMSIMD_RSQRT, SIMSIMD_LOG:

By default, for non-SIMD backends, SimSIMD may use libc functions like sqrt and log. Those are generally very accurate, but slow, and introduce a dependency on the C standard library. To avoid that you can override those definitions with your custom implementations, like: #define SIMSIMD_RSQRT(x) (1 / sqrt(x)).

Algorithms & Design Decisions 📚

In general there are a few principles that SimSIMD follows:

  • Avoid loop unrolling.
  • Never allocate memory.
  • Never throw exceptions or set errno.
  • Keep all function arguments the size of the pointer.
  • Avoid returning from public interfaces, use out-arguments instead.
  • Don't over-optimize for old CPUs and single- and double-precision floating-point numbers.
  • Prioritize mixed-precision and integer operations, and new ISA extensions.
  • Prefer saturated arithmetic and avoid overflows.

Possibly, in the future:

  • Best effort computation silencing NaN components in low-precision inputs.
  • Detect overflows and report the distance with a "signaling" NaN.

Last, but not the least - don't build unless there is a demand for it. So if you have a specific use-case, please open an issue or a pull request, and ideally, bring in more users with similar needs.

Cosine Similarity, Reciprocal Square Root, and Newton-Raphson Iteration

The cosine similarity is the most common and straightforward metric used in machine learning and information retrieval. Interestingly, there are multiple ways to shoot yourself in the foot when computing it. The cosine similarity is the inverse of the cosine distance, which is the cosine of the angle between two vectors.

\text{CosineSimilarity}(a, b) = \frac{a \cdot b}{\|a\| \cdot \|b\|}
\text{CosineDistance}(a, b) = 1 - \frac{a \cdot b}{\|a\| \cdot \|b\|}

In NumPy terms, SimSIMD implementation is similar to:

import numpy as np

def cos_numpy(a: np.ndarray, b: np.ndarray) -> float:
    ab, a2, b2 = np.dot(a, b), np.dot(a, a), np.dot(b, b) # Fused in SimSIMD
    if a2 == 0 and b2 == 0: result = 0                    # Same in SciPy
    elif ab == 0: result = 1                              # Division by zero error in SciPy
    else: result = 1 - ab / (sqrt(a2) * sqrt(b2))         # Bigger rounding error in SciPy
    return result

In SciPy, however, the cosine distance is computed as 1 - ab / np.sqrt(a2 * b2). It handles the edge case of a zero and non-zero argument pair differently, resulting in a division by zero error. It's not only less efficient, but also less accurate, given how the reciprocal square roots are computed. The C standard library provides the sqrt function, which is generally very accurate, but slow. The rsqrt in-hardware implementations are faster, but have different accuracy characteristics.

  • SSE rsqrtps and AVX vrsqrtps: $1.5 \times 2^{-12}$ maximal relative error.
  • AVX-512 vrsqrt14pd instruction: $2^{-14}$ maximal relative error.
  • NEON frsqrte instruction has no documented error bounds, but can be $2^{-3}$.

To overcome the limitations of the rsqrt instruction, SimSIMD uses the Newton-Raphson iteration to refine the initial estimate for high-precision floating-point numbers. It can be defined as:

x_{n+1} = x_n \cdot (3 - x_n \cdot x_n) / 2

On 1536-dimensional inputs on Intel Sapphire Rapids CPU a single such iteration can result in a 2-3 orders of magnitude relative error reduction:

Datatype NumPy Error SimSIMD w/out Iteration SimSIMD
bfloat16 1.89e-08 ± 1.59e-08 3.07e-07 ± 3.09e-07 3.53e-09 ± 2.70e-09
float16 1.67e-02 ± 1.44e-02 2.68e-05 ± 1.95e-05 2.02e-05 ± 1.39e-05
float32 2.21e-08 ± 1.65e-08 3.47e-07 ± 3.49e-07 3.77e-09 ± 2.84e-09
float64 0.00e+00 ± 0.00e+00 3.80e-07 ± 4.50e-07 1.35e-11 ± 1.85e-11

Curved Spaces, Mahalanobis Distance, and Bilinear Quadratic Forms

The Mahalanobis distance is a generalization of the Euclidean distance, which takes into account the covariance of the data. It's very similar in its form to the bilinear form, which is a generalization of the dot product.

\text{BilinearForm}(a, b, M) = a^T M b
\text{Mahalanobis}(a, b, M) = \sqrt{(a - b)^T M^{-1} (a - b)}

Bilinear Forms can be seen as one of the most important linear algebraic operations, surprisingly missing in BLAS and LAPACK. They are versatile and appear in various domains:

  • In Quantum Mechanics, the expectation value of an observable $A$ in a state $\psi$ is given by $\langle \psi | A | \psi \rangle$, which is a bilinear form.
  • In Machine Learning, in Support Vector Machines (SVMs), bilinear forms define kernel functions that measure similarity between data points.
  • In Differential Geometry, the metric tensor, which defines distances and angles on a manifold, is a bilinear form on the tangent space.
  • In Economics, payoff functions in certain Game Theoretic problems can be modeled as bilinear forms of players' strategies.
  • In Physics, interactions between electric and magnetic fields can be expressed using bilinear forms.

Broad applications aside, the lack of a specialized primitive for bilinear forms in BLAS and LAPACK means significant performance overhead. A $vector * matrix * vector$ product is a scalar, whereas its constituent parts ($vector * matrix$ and $matrix * vector$) are vectors:

  • They need memory to be stored in: $O(n)$ allocation.
  • The data will be written to memory and read back, wasting CPU cycles.

SimSIMD doesn't produce intermediate vector results, like a @ M @ b, but computes the bilinear form directly.

Set Intersection, Galloping, and Binary Search

The set intersection operation is generally defined as the number of elements that are common between two sets, represented as sorted arrays of integers. The most common way to compute it is a linear scan:

size_t intersection_size(int *a, int *b, size_t n, size_t m) {
    size_t i = 0, j = 0, count = 0;
    while (i < n && j < m) {
        if (a[i] < b[j]) i++;
        else if (a[i] > b[j]) j++;
        else i++, j++, count++;
    }
    return count;
}

Alternatively, one can use the binary search to find the elements in the second array that are present in the first one. On every step the checked region of the second array is halved, which is called the galloping search. It's faster, but only when large arrays of very different sizes are intersected. Third approach is to use the SIMD instructions to compare multiple elements at once:

  • Using string-intersection instructions on x86, like pcmpestrm.
  • Using integer-intersection instructions in AVX-512, like vp2intersectd.
  • Using vanilla equality checks present in all SIMD instruction sets.

After benchmarking, the last approach was chosen, as it's the most flexible and often the fastest.

Complex Dot Products, Conjugate Dot Products, and Complex Numbers

Complex dot products are a generalization of the dot product to complex numbers. They are supported by most BLAS packages, but almost never in mixed precision. SimSIMD defines dot and vdot kernels as:

\text{dot}(a, b) = \sum_{i=0}^{n-1} a_i \cdot b_i
\text{vdot}(a, b) = \sum_{i=0}^{n-1} a_i \cdot \bar{b_i}

Where $\bar{b_i}$ is the complex conjugate of $b_i$. Putting that into Python code for scalar arrays:

def dot(a: List[number], b: List[number]) -> number:
    a_real, a_imaginary = a[0::2], a[1::2]
    b_real, b_imaginary = b[0::2], b[1::2]
    ab_real, ab_imaginary = 0, 0
    for ar, ai, br, bi in zip(a_real, a_imaginary, b_real, b_imaginary):
        ab_real += ar * br - ai * bi
        ab_imaginary += ar * bi + ai * br
    return ab_real, ab_imaginary

def vdot(a: List[number], b: List[number]) -> number:
    a_real, a_imaginary = a[0::2], a[1::2]
    b_real, b_imaginary = b[0::2], b[1::2]
    ab_real, ab_imaginary = 0, 0
    for ar, ai, br, bi in zip(a_real, a_imaginary, b_real, b_imaginary):
        ab_real += ar * br + ai * bi
        ab_imaginary += ar * bi - ai * br
    return ab_real, ab_imaginary

Logarithms in Kullback-Leibler & Jensen–Shannon Divergences

The Kullback-Leibler divergence is a measure of how one probability distribution diverges from a second, expected probability distribution. Jensen-Shannon divergence is a symmetrized and smoothed version of the Kullback-Leibler divergence, which can be used as a distance metric between probability distributions.

\text{KL}(P || Q) = \sum_{i} P(i) \log \frac{P(i)}{Q(i)}
\text{JS}(P, Q) = \frac{1}{2} \text{KL}(P || M) + \frac{1}{2} \text{KL}(Q || M), M = \frac{P + Q}{2}

Both functions are defined for non-negative numbers, and the logarithm is a key part of their computation.

Mixed Precision in Fused-Multiply-Add and Weighted Sums

The Fused-Multiply-Add (FMA) operation is a single operation that combines element-wise multiplication and addition with different scaling factors. The Weighted Sum is its simplified variant without element-wise multiplication.

\text{FMA}_i(A, B, C, \alpha, \beta) = \alpha \cdot A_i \cdot B_i + \beta \cdot C_i
\text{WSum}_i(A, B, \alpha, \beta) = \alpha \cdot A_i + \beta \cdot B_i

In NumPy terms, the implementation may look like:

import numpy as np
def wsum(A: np.ndarray, B: np.ndarray, /, Alpha: float, Beta: float) -> np.ndarray:
    assert A.dtype == B.dtype, "Input types must match and affect the output style"
    return (Alpha * A + Beta * B).astype(A.dtype)
def fma(A: np.ndarray, B: np.ndarray, C: np.ndarray, /, Alpha: float, Beta: float) -> np.ndarray:
    assert A.dtype == B.dtype and A.dtype == C.dtype, "Input types must match and affect the output style"
    return (Alpha * A * B + Beta * C).astype(A.dtype)

The tricky part is implementing those operations in mixed precision, where the scaling factors are of different precision than the input and output vectors. SimSIMD uses double-precision floating-point scaling factors for any input and output precision, including i8 and u8 integers and f16 and bf16 floats. Depending on the generation of the CPU, given native support for f16 addition and multiplication, the f16 temporaries are used for i8 and u8 multiplication, scaling, and addition. For bf16, native support is generally limited to dot-products with subsequent partial accumulation, which is not enough for the FMA and WSum operations, so f32 is used as a temporary.

Auto-Vectorization & Loop Unrolling

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 have been part of the C language since 2011.

Kind GCC 12 f32 GCC 12 f16 SimSIMD f16 f16 improvement
Inner Product 3,810 K/s 192 K/s 5,990 K/s 31 x
Cosine Distance 3,280 K/s 336 K/s 6,880 K/s 20 x
Euclidean Distance ² 4,620 K/s 147 K/s 5,320 K/s 36 x
Jensen-Shannon Divergence 1,180 K/s 18 K/s 2,140 K/s 118 x

Dynamic Dispatch

Most popular software is precompiled and distributed with fairly conservative CPU optimizations, to ensure compatibility with older hardware. Database Management platforms, like ClickHouse, and Web Browsers, like Google Chrome,need to run on billions of devices, and they can't afford to be picky about the CPU features. For such users SimSIMD provides a dynamic dispatch mechanism, which selects the most advanced micro-kernel for the current CPU at runtime.

Subset F CD ER PF 4FMAPS 4VNNIW VPOPCNTDQ VL DQ BW IFMA VBMI VNNI BF16 VBMI2 BITALG VPCLMULQDQ GFNI VAES VP2INTERSECT FP16
Knights Landing (Xeon Phi x200, 2016) Yes Yes No
Knights Mill (Xeon Phi x205, 2017) Yes No
Skylake-SP, Skylake-X (2017) No No Yes No
Cannon Lake (2018) Yes No
Cascade Lake (2019) No Yes No
Cooper Lake (2020) Yes No
Ice Lake (2019) Yes No Yes No
Tiger Lake (2020) Yes No
Rocket Lake (2021) No
Alder Lake (2021) Partial Partial
Zen 4 (2022) Yes Yes No
Sapphire Rapids (2023) No Yes
Zen 5 (2024) Yes No

You can compile SimSIMD on an old CPU, like Intel Haswell, and run it on a new one, like AMD Genoa, and it will automatically use the most advanced instructions available. Reverse is also true, you can compile on a new CPU and run on an old one, and it will automatically fall back to the most basic instructions. Moreover, the very first time you prove for CPU capabilities with simsimd_capabilities(), it initializes the dynamic dispatch mechanism, and all subsequent calls will be faster and won't face race conditions in multi-threaded environments.

Target Specific Backends

SimSIMD exposes all kernels for all backends, and you can select the most advanced one for the current CPU without relying on built-in dispatch mechanisms. That's handy for testing and benchmarking, but also in case you want to dispatch a very specific kernel for a very specific CPU, bypassing SimSIMD assignment logic. All of the function names follow the same pattern: simsimd_{function}_{type}_{backend}.

  • The backend can be serial, haswell, skylake, ice, genoa, sapphire, turin, neon, or sve.
  • The type can be f64, f32, f16, bf16, f64c, f32c, f16c, bf16c, i8, or b8.
  • The function can be dot, vdot, cos, l2sq, hamming, jaccard, kl, js, or intersect.

To avoid hard-coding the backend, you can use the simsimd_kernel_punned_t to pun the function pointer and the simsimd_capabilities function to get the available backends at runtime. To match all the function names, consider a RegEx:

SIMSIMD_PUBLIC void simsimd_\w+_\w+_\w+\(

On Linux, you can use the following command to list all unique functions:

$ grep -oP 'SIMSIMD_PUBLIC void simsimd_\w+_\w+_\w+\(' include/simsimd/*.h | sort | uniq
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_haswell(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_ice(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_neon(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_serial(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_sve(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_haswell(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_ice(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_neon(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_serial(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_sve(

License

Feel free to use the project under Apache 2.0 or the Three-clause BSD license at your preference.

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 Distribution

simsimd-6.5.15.tar.gz (186.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

simsimd-6.5.15-cp314-cp314t-win_arm64.whl (65.1 kB view details)

Uploaded CPython 3.14tWindows ARM64

simsimd-6.5.15-cp314-cp314t-win_amd64.whl (90.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

simsimd-6.5.15-cp314-cp314t-musllinux_1_2_x86_64.whl (620.3 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp314-cp314t-musllinux_1_2_aarch64.whl (423.0 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (584.7 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (387.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp314-cp314t-macosx_11_0_arm64.whl (94.7 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

simsimd-6.5.15-cp314-cp314t-macosx_10_15_x86_64.whl (105.3 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

simsimd-6.5.15-cp314-cp314-win_arm64.whl (64.9 kB view details)

Uploaded CPython 3.14Windows ARM64

simsimd-6.5.15-cp314-cp314-win_amd64.whl (90.1 kB view details)

Uploaded CPython 3.14Windows x86-64

simsimd-6.5.15-cp314-cp314-musllinux_1_2_x86_64.whl (619.2 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp314-cp314-musllinux_1_2_aarch64.whl (421.5 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (583.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (385.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp314-cp314-macosx_11_0_arm64.whl (94.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

simsimd-6.5.15-cp314-cp314-macosx_10_15_x86_64.whl (105.2 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

simsimd-6.5.15-cp313-cp313t-win_arm64.whl (63.1 kB view details)

Uploaded CPython 3.13tWindows ARM64

simsimd-6.5.15-cp313-cp313t-win_amd64.whl (87.6 kB view details)

Uploaded CPython 3.13tWindows x86-64

simsimd-6.5.15-cp313-cp313t-musllinux_1_2_x86_64.whl (620.2 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp313-cp313t-musllinux_1_2_aarch64.whl (422.9 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (584.6 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (387.0 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp313-cp313t-macosx_11_0_arm64.whl (94.7 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

simsimd-6.5.15-cp313-cp313t-macosx_10_13_x86_64.whl (105.3 kB view details)

Uploaded CPython 3.13tmacOS 10.13+ x86-64

simsimd-6.5.15-cp313-cp313-win_arm64.whl (62.9 kB view details)

Uploaded CPython 3.13Windows ARM64

simsimd-6.5.15-cp313-cp313-win_amd64.whl (87.4 kB view details)

Uploaded CPython 3.13Windows x86-64

simsimd-6.5.15-cp313-cp313-musllinux_1_2_x86_64.whl (619.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp313-cp313-musllinux_1_2_aarch64.whl (421.3 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (583.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (385.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp313-cp313-macosx_11_0_arm64.whl (94.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

simsimd-6.5.15-cp313-cp313-macosx_10_13_x86_64.whl (105.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

simsimd-6.5.15-cp312-cp312-win_arm64.whl (62.9 kB view details)

Uploaded CPython 3.12Windows ARM64

simsimd-6.5.15-cp312-cp312-win_amd64.whl (87.4 kB view details)

Uploaded CPython 3.12Windows x86-64

simsimd-6.5.15-cp312-cp312-musllinux_1_2_x86_64.whl (619.0 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp312-cp312-musllinux_1_2_aarch64.whl (421.3 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (583.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (385.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp312-cp312-macosx_11_0_arm64.whl (94.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

simsimd-6.5.15-cp312-cp312-macosx_10_13_x86_64.whl (105.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

simsimd-6.5.15-cp311-cp311-win_arm64.whl (62.7 kB view details)

Uploaded CPython 3.11Windows ARM64

simsimd-6.5.15-cp311-cp311-win_amd64.whl (87.2 kB view details)

Uploaded CPython 3.11Windows x86-64

simsimd-6.5.15-cp311-cp311-musllinux_1_2_x86_64.whl (619.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp311-cp311-musllinux_1_2_aarch64.whl (421.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (583.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (385.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp311-cp311-macosx_11_0_arm64.whl (94.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

simsimd-6.5.15-cp311-cp311-macosx_10_9_x86_64.whl (106.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

simsimd-6.5.15-cp310-cp310-win_arm64.whl (62.7 kB view details)

Uploaded CPython 3.10Windows ARM64

simsimd-6.5.15-cp310-cp310-win_amd64.whl (87.2 kB view details)

Uploaded CPython 3.10Windows x86-64

simsimd-6.5.15-cp310-cp310-musllinux_1_2_x86_64.whl (618.6 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp310-cp310-musllinux_1_2_aarch64.whl (420.8 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (582.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (384.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp310-cp310-macosx_11_0_arm64.whl (94.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

simsimd-6.5.15-cp310-cp310-macosx_10_9_x86_64.whl (106.3 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

simsimd-6.5.15-cp39-cp39-win_arm64.whl (62.8 kB view details)

Uploaded CPython 3.9Windows ARM64

simsimd-6.5.15-cp39-cp39-win_amd64.whl (87.2 kB view details)

Uploaded CPython 3.9Windows x86-64

simsimd-6.5.15-cp39-cp39-musllinux_1_2_x86_64.whl (618.4 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp39-cp39-musllinux_1_2_aarch64.whl (420.6 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (582.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (384.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp39-cp39-macosx_11_0_arm64.whl (94.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

simsimd-6.5.15-cp39-cp39-macosx_10_9_x86_64.whl (106.3 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

simsimd-6.5.15-cp38-cp38-win_amd64.whl (87.1 kB view details)

Uploaded CPython 3.8Windows x86-64

simsimd-6.5.15-cp38-cp38-musllinux_1_2_x86_64.whl (618.3 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

simsimd-6.5.15-cp38-cp38-musllinux_1_2_aarch64.whl (420.6 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

simsimd-6.5.15-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (582.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

simsimd-6.5.15-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (384.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

simsimd-6.5.15-cp38-cp38-macosx_11_0_arm64.whl (94.3 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

simsimd-6.5.15-cp38-cp38-macosx_10_9_x86_64.whl (106.1 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file simsimd-6.5.15.tar.gz.

File metadata

  • Download URL: simsimd-6.5.15.tar.gz
  • Upload date:
  • Size: 186.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15.tar.gz
Algorithm Hash digest
SHA256 04e5e791b838924a65be9226d03fe30ab4c3680cc250ff1aebaf99a4db4955ae
MD5 0bef6eaa94c08c2f8decda2c4072b2d5
BLAKE2b-256 9a5dae0de3096271cfec187437b4e2c931b4e900c743201b76f84b96aa48b760

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15.tar.gz:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp314-cp314t-win_arm64.whl
  • Upload date:
  • Size: 65.1 kB
  • Tags: CPython 3.14t, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 f90d2e8fbcef8e81233b9a9cd45d8e142e1132be8de4a9b635382cbaeb66d84b
MD5 cafc9b8de3df60960da79b30bb9bd3ab
BLAKE2b-256 0bc15aecfba6e3dd6aee7e6cc965842e8298380c65c0fc67428c17ecb1be4c5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314t-win_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 90.3 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 7081776f6985b748969716e9cc50d9fcf861e05f32a3c4aa88b497d8f028b2bb
MD5 c8313cb3f9f5eae8c77b1471f28a27ed
BLAKE2b-256 56edc7bb32f74188937cd28ed44f2ca68a75af2691518d84b7cc7f9e69da78c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314t-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8ca9b832ad06c11127b9b32d0832ad04b099ca72657c12724a0df3345a4a9b53
MD5 7c714b9e49a57e407bcdb0e52464d9ca
BLAKE2b-256 e88c87ce4e70f72dc4d572baefe4f6aaafc35a4f48616574daa93c76e2369c00

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 007ec6a8e4c8c85b55254cdef365eea46fd1f25ab75f75807cc9f1ee1dd2a501
MD5 df108014dfea2b75894f65d000197fec
BLAKE2b-256 edda311fa7f62968871bec56e06efcad3a9689a4474dd7d9622f10a70891d0be

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314t-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 772b38a204e039340c878a326fd6b0e2973b29923459a44d42b0c2f2a92cfb15
MD5 233d84692efbe980eb904273ff3cf85f
BLAKE2b-256 58673bf8a8556e373a66490310e315ab6ea32ba933ed90d20b212b2d77ced2e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e9765278d8fdfeb494af32158a43ac20a4552308af15561918b18685fea58acc
MD5 a7e581faf644fe30f86df955e2d2609d
BLAKE2b-256 ba22a4f9de7e71c78469b7dd79d32cb8d68a70352c58fc6e5f231d2234ed1d67

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0d751ea8183436fb526c5f2879abc8dc8204963bfac1b8568ad2eecbb4b4a9d5
MD5 a65e251efd7d2c3029008f506d164d37
BLAKE2b-256 876e9409bd4b3d8590c5e029762af328e5342a812346e6a7318e06443873d089

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0083edb18dc94ab43339c7014136d45ebe6bcfac1fbe8bbb4f5e92c6be5128bb
MD5 ceeb38e281c3ba1d364113609ad85ec0
BLAKE2b-256 69affdb5b671f5ea781aa9fb5579d8393fb19440d98cb1ba3a9f870e430edc8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 64.9 kB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 3cbd916a8f93f0ac91e84ee518af4d7dd3c882dee46b83b7b72a4159090c6423
MD5 7bbc4e030a49d5eecc59e7182b79084b
BLAKE2b-256 4e6054a919061c9b6183ca85933eee995559725423ccf0d3b8831a0620eb8f5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314-win_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 90.1 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6ab68a36d87e2e1c3d6bb246a5d47a68e50c837904656ddbc58b5683e83219fe
MD5 4a62aa4ba9832300831598b179c38319
BLAKE2b-256 a6df24aaca5b9145d12676a2affa03c2daf2d065ad205296e0bd5e3817e2ee18

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d1e199615f9e22aa4263ac39a8f7731129e406d8db365c24668634adaf10bd3f
MD5 1bc19f1418cf2cf4a9f2e7d73731f78c
BLAKE2b-256 6189f2da978e37e739ceb984cf2191ed383b11b38e02a8f3031fa49f53141216

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0585a0ace76c5f78436cd572ef8cac0b9350de929987ccbabedbfd99ed189fad
MD5 01858d992d131c4385e9bdb83f882fa3
BLAKE2b-256 55a25edfcf79099b40cc8740fa8941934c751325b0519c1049f2696c8f2eabd6

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 96766cf7cd6f21b0924e67e66c63787213e21cb3001b1c79415f8da27382a5ba
MD5 14ead7ef664bf1ec5a1602ec6546691f
BLAKE2b-256 4bdfe6bf2c23f4cfc8f0fea26f6d561cd096ff3a25bda11e1512e9f37ff259fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 59d15cc02a3a60e23b69ad806cebf1b64b15acb3a7eefba1bc68e2790f6b885d
MD5 b945dbe1b35714ca16b07b551c1cfd9d
BLAKE2b-256 5d13cff5b0cccf31ca0db760d5cfd5339ce320a968885c9ead0711781847b178

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e04285fc8836f27a5125cc0ca48655d4908b2dbe32ff17b849454e274dda6c19
MD5 e080bbab3b18bfc8d66e56f9549a0c20
BLAKE2b-256 b77d5a1ce3ba0239490ccc6f8d3522f68e6f74183b853a211565160e7eb4e0ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 74ccf2a6bb3a7f4e2c93e33dbc4de5809394b276e522cec1429ce7bee72aba4d
MD5 14a48e6cdd3fd44664a85ff4306ec508
BLAKE2b-256 b15177119a2d0ee1b5667065da1ad087a2ac784c32228cd18de21dfa5965b1c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313t-win_arm64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp313-cp313t-win_arm64.whl
  • Upload date:
  • Size: 63.1 kB
  • Tags: CPython 3.13t, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 080fdb7b26155c6f4acf5bf1d05ca2c3c2020d5c0391ffdd4dc785db0f21879a
MD5 78989890e2da35705dca50b1d81b7261
BLAKE2b-256 6888d927cba94266bc95333f80ed42c49e461ea159bf7635a0dbc387fcd55395

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313t-win_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313t-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp313-cp313t-win_amd64.whl
  • Upload date:
  • Size: 87.6 kB
  • Tags: CPython 3.13t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 1cca4ec8aaf376666032160dc1083e2e05e05c85413b9504b66fe3f04ff20a11
MD5 ebaaa357974cafc4302a0c87e632dee2
BLAKE2b-256 d6bcac1a7ad28e24774bf483927469fd300ef2772286270f31703737611c5e1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313t-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 38cdde866e2d23768f73edacb248e7dc62806ae0a7be82c73f3582e10f269d07
MD5 514393db9578889c35e86da300431545
BLAKE2b-256 28a118a80bf3422e382a07fe69fa9bee047c1dcc42aca5d0e18021c9711fe7e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313t-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 06af7bb370500e9f4b917995f49ca4bac4be61a7ba7a258d6cb8f0330149651f
MD5 9f6cd3c3bf97eac480537c6f1ba006f2
BLAKE2b-256 54d4c4249f0597d11cb7c993d7147850d15f314a4c19cae7c760121a3933985b

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313t-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dc9e8cf2d43b0ff4ea0366076593cf7f06292db0a071aed2371c30f62e7f79f6
MD5 1f545a51238fbce55fedf5294df8a16e
BLAKE2b-256 154aaf52ad37402e3ceebbf988b024c61a59fbb324c3b0f636b1ea5a3600b21b

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 be90b165ab0d1f27ef0ff2b42447d7ce8990f1c6bf73e0ba94d5aa8aff9d3c7d
MD5 1e37cc5012b4bd927335685a9ad9fb3b
BLAKE2b-256 91ffd13e966643da2ce34e0ac0d9860742d4ccafbc8b0f02b272c8261161372b

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c25ba0f5336249cebd1cf688026f5991e75cf3333f06a66425841ce974bbae7
MD5 13cc2f038fc7e348682bafdcc4b92578
BLAKE2b-256 ffcf478843b03653359ec62de7ba82c36bf2ac1fe777d7b055140245661877f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313t-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313t-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4d82a2c5153ce92258fa2d2fe16d45fd9af7459a1fd1306a6e96d20125477030
MD5 44013b57036bfd1fcde4b66e514fa5a8
BLAKE2b-256 17591ba830e6e04d58c88e6da9b260e9f6bb52ddc2d0dfdefaa5f2517042c8ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313t-macosx_10_13_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 62.9 kB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 e96ca1924d6055156e14228b4034b99427be1305f6fd40c612164ab36ab2eb3b
MD5 b2a2b5ef10fdb1f73c9a75d3fd90059b
BLAKE2b-256 de50f961808ff92ef0cd315a1cf9799ee63804d887550d36d1fab668b482b3e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313-win_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 87.4 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a70e8a072e0762195a774e55d31702b697ecd8e2ce5bedc3f1f37664a1c0a3d3
MD5 b21be7a36b359e55384e010662ccdab6
BLAKE2b-256 be0d69598574ae5f36774bec41b416dfe5d332b8b88302f0be75ea71b922c6bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 042c4cf39b942b67b2f5c1f8390c95ce42547110d32d138883f4e11313c8dca9
MD5 172f1a88b1f7cb76fec7e3d311c0ceba
BLAKE2b-256 955b1183494e66575edba3e422001a3691332ad50b4b72e10a085262a486b14b

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4ba0ebe6f64e6b415e73ae4291e5bf12a28163527b82b4431da22f4190cfe7fa
MD5 6fd2c6219cadf3fed929ca7fa792dc6e
BLAKE2b-256 b8c115650a75077e6c1ad59e9d8e78b070b6e3f603a821e7200a653716d08dd5

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7cdb094911efe77aef386ab5a84e057fff35b6df67635efd40419376e4ea81d9
MD5 e0aa3abb5a6da4856ffcff6007b01b96
BLAKE2b-256 200301a1d1c5249dd12710f6efcf33493f9fe5b32f5d43b7c7119a3f4e9ae889

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c97346ebead9657de244c534d3c25b85211549143652de5f69d8a041fa08ed11
MD5 7c0ad9cf884c9225461e04cc97b72c08
BLAKE2b-256 462339dc00b2a22301185acdaec3183ebbfce4a1733b69aef7fb624acb891f84

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c82ec11cfb26a41ae5e5d11237a8e680eac1c80e1111646386c9a31fbe4301ca
MD5 1555155d0dccfb083654155b100bd297
BLAKE2b-256 91b65bfd4bb36551cd0a2a0eb4f63eb08971ba5069a9d1df6da1576e3599f0d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 8e7c38060a400a5a16a3b0c8333aaf9af8e9fe63b3f7ab90fe70f47b8db8c475
MD5 5a517f9f8f9b7dab44fcb99c214d8158
BLAKE2b-256 268c4edb40b8bdb218f21534c6b4facae9e1a5f9b230424bd8675baaf31d0030

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 62.9 kB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 b9799e4f6f83939f88493647299e4471d239d1822323115976d9229d80431f29
MD5 d6655d7b5a12fff1f6d7db6f905ba8df
BLAKE2b-256 ed9bc92a212efd6d0242f6c67b4d874a081edafc354e73c23fc97a48a67d53df

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp312-cp312-win_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 87.4 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7e36af8a3d6cc639b23695fff63d67a7a23a084593055f7445693bbfaaaffeba
MD5 6e3cbc139f330ee41491ff5f4da0fcde
BLAKE2b-256 32cde457415996aeb1a01c8ca2fd8129032ed8a91715cf250ef73a42cbf18778

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp312-cp312-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e2345031856914b3091d77750f2c4935e4aadfdc19aa83c8e35d402ee3b40d05
MD5 efe73df105600493e1b21b8d5e322a0a
BLAKE2b-256 fed9d29033e3f1c6b980f1c65735f33bdd70b1b332235cee6b6b99165cab59ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 838175c43569faf64c465c747813d9c8871f167673324965fca6c43aeb8d4816
MD5 fab53f694aa5bb6674ece8b81a61fb83
BLAKE2b-256 0fd51df3ffa42af6417af3e7510b68aaca6afaf8a28ff0f1b625bc6949047a35

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f38d68b4ad1a186f6a9d4b4e576c322ae2b13d440a374af4cf5af70d70301e44
MD5 99d990ee2cabf07b118091840b8ec210
BLAKE2b-256 572c33521754eb09bd0e96aa76110e064744919a438f021d1e6eb67245ddff23

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bd4af0528125dc6b07b9c1828eb4df23823eb95fca5cc9bec9e4858848cecfcd
MD5 d5e8b74b5e2abcae0ec29c4422d8aaa5
BLAKE2b-256 023b6ac7f3f4b1cad9924ab7aa2de652ece8ecb46a51d9f5d3739ce751b16c32

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dc9a6dd2f94db9c761ee4b61c688326f98c51d7832aa8398bccebe02a24948f4
MD5 2ebd6efc3a57d2a2f7ae3b51f8258909
BLAKE2b-256 4fb99cb0e6672228dd58d34605a6968c3b9f1cc319b5ed078947ed7e3975f53d

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b8dd4e7731675690be3bd3f93beeef10dd455b776bc35f4c9ba47f43d58c3fdf
MD5 820fe3cf3ca3ec28efb20251bc69e6d2
BLAKE2b-256 50d62192c453920e92e4d9473f348917f2840565d7eb9b20443f48c289f68942

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 62.7 kB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 1fc8ff558d44fdd815e614f7e87dc1f4b5545e89bc2a9691eb69c87a7963bf4e
MD5 e47fba4f2b33a56311ced13d2c174419
BLAKE2b-256 c4329549632d8200aee5c0785162869d1f2a658a469811a167aa654a4b7d946a

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp311-cp311-win_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 87.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 84e9b3a975aa4387493333f46cac46bb76fd42006a29b394b473947ce552e00f
MD5 bb2df7de4ad3902fe55b774f335fc7bb
BLAKE2b-256 5fc4a62c5b361315181bf97aeb6387539e75bb3b685858b2881395709b035c2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp311-cp311-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f404ce0a48e9807f6eaeff4caa676df64bf149505746710fa402480271f2d923
MD5 b312f6f886667007427a871fb0e47b97
BLAKE2b-256 6e42454ae81d4bfd09950e2291ad7d9ae0e157bcb01ca8fa9007f73b07d79902

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5f5d9a100628a9065384c6bef04ef9345b50b3c25c19895ed8bcb820c6965533
MD5 d905f0ca0e848f9d10b9ef184a5e56cf
BLAKE2b-256 5fb54db8a7d5e043b1bdbc71aee686cfc809b5fccb38becf125ee42276adef0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 455bfbe3d0ccb889ab8c9b5d7504e8dba50823348ce6c74c2f7a849e44bd4060
MD5 87c5f98a959410705238a8a8f2d14d88
BLAKE2b-256 86fb964260f8d61317a5ab43c7c88da06491afd170231e39b10131f24159d2d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 be3d312439acd97af1ea7af1f4188149c3ab5e71a2284e9a6b3a8fb72172e391
MD5 54e97552ff3db913bf112a610a0ae567
BLAKE2b-256 0786f51bd1b4076a1ad85b3f12cb29daf26b3057cfcab472ee942f92d6b93338

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72d30cdfcf0ced0410e2d423800e3a7a0e0308c5a3e266659b1bb994b688c98b
MD5 7940ffb4bb2ad4312a51d2592188086b
BLAKE2b-256 ff3acadfc63d3434b347d99a292490f8420778daa0274fcc319f355b311be630

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2583287354e5ef5825b30f6b0e2aed67852f8f9c52cf25a8c13a95853b097af6
MD5 f1f5d54c3b5e85c402c62d341e9847d5
BLAKE2b-256 ea5e4f858d94d17f72bf381f5de4722b37ca804031acf5521b8fc6cac77216dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 62.7 kB
  • Tags: CPython 3.10, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 876e245472ab8e5561dc54f326a954d5ee5634da7e4bbabc3494ff8f07080235
MD5 592090884672c1c6f57fbb8c7c0887c0
BLAKE2b-256 215c00f528a948531f6de134d8cd73844dcdec90f3273d2c207ffc3d081627d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp310-cp310-win_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 87.2 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d4bea93442dd7355606e76215c873fdce02662ef67267020107a75a50513dd44
MD5 a370be0519506bc8c6bfa3e353c0b748
BLAKE2b-256 fdeaf64381f63b1fc4f2d151122f84e23d1ddd35badd5b1f3ec74e327d529e8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp310-cp310-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a6a3ffc42d9e2a4b28360b01ffda956642c2c94734177191f77a6e6778afa363
MD5 8f0ebdb078af9bef0e1763e0b3ea6b04
BLAKE2b-256 ae0efc5d5d8fef7582c6b34f893f26623850fb029a50f4b2f10083a7a386fdb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d5ae46dc0781bfb33ed9e1f67e0c1442aec73c6e3c3a93d399b97c9b2a097801
MD5 e0ef6c63b575e63351c95a2b52493dd6
BLAKE2b-256 2134681c3995791fa8e1313e8a7ac1061a83423eeeff46aec64d716eb399c7f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 89cd3d87b8fe5105b2f554d0e7035d4b7d219ef20d834e83e51cb0ba59c11e7c
MD5 794af236b23abfdcae1a06fbc1d1463b
BLAKE2b-256 d4cc9682383ce42cd4664f8c05676345fd01e5eccb549b090b2333ce6279e12c

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4244d543a497d7d6ce1cd138fefaac9662e87b261ca73b8a6d1aea916161b369
MD5 2144c5b1e6e19e2a401487a21ee6658d
BLAKE2b-256 910286a513032cdb00d58aa14c0dece4bb41287ef062c2088a06a2dac828c36d

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b59b71fa59e44efdd6edf81852a051fd5022ad45fa9f84f0fb8ee86c1d41a05a
MD5 b8887e951eb130ab912a7c25178cd9fb
BLAKE2b-256 3eee571718d6ab855029a79afa7960be81bafa64a879913c4878254c1bf92639

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ed8c9a3f2e089a24ca4ef575f5106924630253141fa77b97035872953a680335
MD5 bc04bad4e6999f47bf44cd7ee9fc0401
BLAKE2b-256 82139a30d9f577153815d2c221fa3f49c2e336f85209f0031e17cbb51c345e15

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp39-cp39-win_arm64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp39-cp39-win_arm64.whl
  • Upload date:
  • Size: 62.8 kB
  • Tags: CPython 3.9, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 4b713e13835d30b9b2f3fc2462d6578116dcbe30239af671bedaedc98b53dee6
MD5 245e8f57bb616d97a35e2c80de7ba041
BLAKE2b-256 e1a6c8989c744caf9230d65be45335ddedce74afcee2b6a534d295beab53d001

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp39-cp39-win_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 87.2 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 db67fffd8777ae79269a01367a6eba643ef1f7366267839a56a1b401e99ccf9a
MD5 3d7321ad3b9f5c6bbeaf866084cd765c
BLAKE2b-256 482927d7c92dd7da2d43d2c59b45caa15e9b41e633261b070789be83bb50c6bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp39-cp39-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d210fbe915ed3f745fb826b4d6db6a134549fb86b98c0c9592d64ac9ed7a95fc
MD5 f8eb8524c1da4728657241aa2954b993
BLAKE2b-256 252f60f3f55db8f9ce6e6e7c6a53e534662e65c208d5ad9323a5ab8c788b126a

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 eeb9d72a712f459a07a823f02a779ca066ea7f634b96086df65e3aa37782a922
MD5 c883404aa605c120d21b48daa2345adc
BLAKE2b-256 9d0835d5cd351236b387ca0f7c8a46a77f7db807db195dda293e6ab48afe2158

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp39-cp39-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c5cbaa23b9c78af4763ae64c886711a7ca4c86614f8e3cc5f424ff48406d5e1d
MD5 52751f7cf838792438d307bcb6a281f1
BLAKE2b-256 8351a2674c78078889cf01a0c7746d6a5819040393f48ba36e4d56251b15fcca

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ad4fcc49af2c833ecd88edb0cb10214d2870ec010478fa93b828a4a69ba112e8
MD5 fde18ec1337a59e2d4ba27a8cc49b03c
BLAKE2b-256 bedbe7f2db2e1251327856d2f00d90bf7aa26fdddfc597d1dca732a4a6439f80

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38103b62073e43f431d506cb1a015f71f7fc552e4cb8290e3181a0d98604d020
MD5 c141b1cbc35747b6ff12f456223d519f
BLAKE2b-256 c2523dada046be606664b3968c4e2ca1c472eb76c128f829f13c92453dda863c

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7283876a9344a23cd544e8253489a30962acde55acc9cfaec41b53ff4c15bc9c
MD5 9ac742cfbfb92f2fb9ed57b568722c35
BLAKE2b-256 dc96a448580e6728577e34ed86f287c5f91defd3053c76d2a3d9642af520cef4

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp39-cp39-macosx_10_9_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: simsimd-6.5.15-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 87.1 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simsimd-6.5.15-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e4ea77d9a0097e99b563719a334fc11476d18781a0a64ee999c5153f379b2320
MD5 99bc3754dfd78be296eff7680148f9e6
BLAKE2b-256 587246ffd36a6a142373c7d4ae311d4dd366a64e66afe9f2483df268f4c78fbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp38-cp38-win_amd64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 af655d18b1327779f0da891e1e1f2e25f670d8fbe1c5154dc459c9e2f74bd0d4
MD5 ae3e43b76f46d7cd19214aa032bba63e
BLAKE2b-256 f350568cf0625ab193857522f604eed51a6fcb2dd987e844a98a468a610f44b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp38-cp38-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp38-cp38-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 dfa3e8b60bbd6e353e0f93c8b5e53b0ed9605fb483adcf16916227a815729b22
MD5 56f4e030efb5b469c9e8f24e5e81e805
BLAKE2b-256 b9e2365b0f37889b7f647907d7d2f27fb33774014bca4abf181d823f423ca106

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp38-cp38-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4841e5a53082a85f46e4537d731c495ba8ab62067153dc74f8055e071a4ef27a
MD5 f59c572a0211f801c12fb0ef622c015b
BLAKE2b-256 983c448c42e270b93abe7a73dbcaf2fe922a66f39ceb223181a5325017e12b5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5c3220a2452fb2f09b5aa5d326aaf7e03c77471b105cd445e958f2b6b6208114
MD5 22dcd0878bc7faf88c4938c16f56761a
BLAKE2b-256 10bf5a7401fb752d9a356f17857fe7ab8c9b57c00069be78935269345cab90e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a1956b982472d1de5831c08e7c50cce654872195ce972f0dc83b5f26b7f30b3d
MD5 4386f9e5532aaf4e27f4c8a40b67dc0d
BLAKE2b-256 abffd2e64d94f482cd46b0cd0b3bfbe958cf2163b0c979f55c06a3bfbfe07020

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simsimd-6.5.15-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simsimd-6.5.15-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bdf99d51fa435589c0d60cede7f14f8f382f63e326b8959cd8299f3534153521
MD5 0ba92226c3d359fe49b74db3370fc872
BLAKE2b-256 8a832157b9f92aa6a5f72e52f05a231c93d96dc9cdf7873721f68847680fb3bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for simsimd-6.5.15-cp38-cp38-macosx_10_9_x86_64.whl:

Publisher: release.yml on ashvardanian/SimSIMD

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page