Skip to main content

SIMD-accelerated string search, sort, hashes, fingerprints, & edit distances

Project description

StringZilla 🦖

StringZilla banner

The world wastes a minimum of $100M annually due to inefficient string operations. A typical codebase processes strings character by character, resulting in too many branches and data-dependencies, neglecting 90% of modern CPU's potential. LibC is different. It attempts to leverage SIMD instructions to boost some operations, and is often used by higher-level languages, runtimes, and databases. But it isn't perfect. 1️⃣ First, even on common hardware, including over a billion 64-bit ARM CPUs, common functions like strstr and memmem only achieve 1/3 of the CPU's throughput. 2️⃣ Second, SIMD coverage is inconsistent: acceleration in forward scans does not guarantee speed in the reverse-order search. 3️⃣ At last, most high-level languages can't always use LibC, as the strings are often not NULL-terminated or may contain the Unicode "Zero" character in the middle of the string. That's why StringZilla was created. To provide predictably high performance, portable to any modern platform, operating system, and programming language.

StringZilla Python installs StringZilla Rust installs GitHub Actions Workflow Status GitHub Actions Workflow Status GitHub Actions Workflow Status GitHub Actions Workflow Status StringZilla code size

StringZilla is the GodZilla of string libraries, using SIMD and SWAR to accelerate string operations on modern CPUs. It is up to 10x faster than the default and even other SIMD-accelerated string libraries in C, C++, Python, and other languages, while covering broad functionality. It accelerates exact and fuzzy string matching, edit distance computations, sorting, lazily-evaluated ranges to avoid memory allocations, and even random-string generators.

  • 🐂 C : Upgrade LibC's <string.h> to <stringzilla.h> in C 99
  • 🐉 C++: Upgrade STL's <string> to <stringzilla.hpp> in C++ 11
  • 🐍 Python: Upgrade your str to faster Str
  • 🍎 Swift: Use the String+StringZilla extension
  • 🦀 Rust: Use the StringZilla traits crate
  • 🐚 Shell: Accelerate common CLI tools with sz_ prefix
  • 📚 Researcher? Jump to Algorithms & Design Decisions
  • 💡 Thinking to contribute? Look for "good first issues"
  • 🤝 And check the guide to setup the environment
  • Want more bindings or features? Let me know!

Who is this for?

  • For data-engineers parsing large datasets, like the CommonCrawl, RedPajama, or LAION.
  • For software engineers optimizing strings in their apps and services.
  • For bioinformaticians and search engineers looking for edit-distances for USearch.
  • For DBMS devs, optimizing LIKE, ORDER BY, and GROUP BY operations.
  • For hardware designers, needing a SWAR baseline for strings-processing functionality.
  • For students studying SIMD/SWAR applications to non-data-parallel operations.

Performance

C C++ Python StringZilla
find the first occurrence of a random word from text, ≅ 5 bytes long
strstr 1
x86: 7.4 · arm: 2.0 GB/s
.find
x86: 2.9 · arm: 1.6 GB/s
.find
x86: 1.1 · arm: 0.6 GB/s
sz_find
x86: 10.6 · arm: 7.1 GB/s
find the last occurrence of a random word from text, ≅ 5 bytes long
.rfind
x86: 0.5 · arm: 0.4 GB/s
.rfind
x86: 0.9 · arm: 0.5 GB/s
sz_rfind
x86: 10.8 · arm: 6.7 GB/s
split lines separated by \n or \r 2
strcspn 1
x86: 5.42 · arm: 2.19 GB/s
.find_first_of
x86: 0.59 · arm: 0.46 GB/s
re.finditer
x86: 0.06 · arm: 0.02 GB/s
sz_find_charset
x86: 4.08 · arm: 3.22 GB/s
find the last occurrence of any of 6 whitespaces 2
.find_last_of
x86: 0.25 · arm: 0.25 GB/s
sz_rfind_charset
x86: 0.43 · arm: 0.23 GB/s
Random string from a given alphabet, 20 bytes long 5
rand() % n
x86: 18.0 · arm: 9.4 MB/s
std::uniform_int_distribution
x86: 47.2 · arm: 20.4 MB/s
join(random.choices(...))
x86: 13.3 · arm: 5.9 MB/s
sz_generate
x86: 56.2 · arm: 25.8 MB/s
Mapping Characters with Look-Up Table Transforms
std::transform
x86: 3.81 · arm: 2.65 GB/s
str.translate
x86: 260.0 · arm: 140.0 MB/s
sz_look_up_transform
x86: 21.2 · arm: 8.5 GB/s
Get sorted order, ≅ 8 million English words 6
qsort_r
x86: 3.55 · arm: 5.77 s
std::sort
x86: 2.79 · arm: 4.02 s
numpy.argsort
x86: 7.58 · arm: 13.00 s
sz_sort
x86: 1.91 · arm: 2.37 s
Levenshtein edit distance, ≅ 5 bytes long
via jellyfish 3
x86: 1,550 · arm: 2,220 ns
sz_edit_distance
x86: 99 · arm: 180 ns
Needleman-Wunsch alignment scores, ≅ 10 K aminoacids long
via biopython 4
x86: 257 · arm: 367 ms
sz_alignment_score
x86: 73 · arm: 177 ms

StringZilla has a lot of functionality, most of which is covered by benchmarks across C, C++, Python and other languages. You can find those in the ./scripts directory, with usage notes listed in the CONTRIBUTING.md file. Notably, if the CPU supports misaligned loads, even the 64-bit SWAR backends are faster than either standard library.

Most benchmarks were conducted on a 1 GB English text corpus, with an average word length of 6 characters. 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 withing x86 CPUs will be larger. 1 Unlike other libraries, LibC requires strings to be NULL-terminated. 2 Six whitespaces in the ASCII set are: \t\n\v\f\r. Python's and other standard libraries have specialized functions for those. 3 Most Python libraries for strings are also implemented in C. 4 Unlike the rest of BioPython, the alignment score computation is implemented in C. 5 All modulo operations were conducted with uint8_t to allow compilers more optimization opportunities. The C++ STL and StringZilla benchmarks used a 64-bit Mersenne Twister as the generator. For C, C++, and StringZilla, an in-place update of the string was used. In Python every string had to be allocated as a new object, which makes it less fair. 6 Contrary to the popular opinion, Python's default sorted function works faster than the C and C++ standard libraries. That holds for large lists or tuples of strings, but fails as soon as you need more complex logic, like sorting dictionaries by a string key, or producing the "sorted order" permutation. The latter is very common in database engines and is most similar to numpy.argsort. Current StringZilla solution can be at least 4x faster without loss of generality.

Functionality

StringZilla is compatible with most modern CPUs, and provides a broad range of functionality.

  • works on both Little-Endian and Big-Endian architectures.
  • works on 32-bit and 64-bit hardware architectures.
  • compatible with ASCII and UTF-8 encoding.

Not all features are available across all bindings. Consider contributing, if you need a feature that's not yet implemented.

Maturity C 99 C++ 11 Python Swift Rust
Substring Search 🌳
Character Set Search 🌳
Edit Distances 🧐
Small String Class 🧐
Sorting & Sequence Operations 🚧
Lazy Ranges, Compressed Arrays 🧐
Hashes & Fingerprints 🚧

🌳 parts are used in production. 🧐 parts are in beta. 🚧 parts are under active development, and are likely to break in subsequent releases. ✅ are implemented. ⚪ are considered. ❌ are not intended.

Quick Start: Python 🐍

Python bindings are available on PyPI, and can be installed with pip. You can immediately check the installed version and the used hardware capabilities with following commands:

pip install stringzilla
python -c "import stringzilla; print(stringzilla.__version__)"
python -c "import stringzilla; print(stringzilla.__capabilities__)"

Basic Usage

If you've ever used the Python str, bytes, bytearray, memoryview class, you'll know what to expect. StringZilla's Str class is a hybrid of those two, providing str-like interface to byte-arrays.

from stringzilla import Str, File

text_from_str = Str('some-string') # no copies, just a view
text_from_bytes = Str(b'some-array') # no copies, just a view
text_from_file = Str(File('some-file.txt')) # memory-mapped file

import numpy as np
alphabet_array = np.arange(ord("a"), ord("z"), dtype=np.uint8)
text_from_array = Str(memoryview(alphabet_array))

The File class memory-maps a file from persistent memory without loading its copy into RAM. The contents of that file would remain immutable, and the mapping can be shared by multiple Python processes simultaneously. A standard dataset pre-processing use case would be to map a sizeable textual dataset like Common Crawl into memory, spawn child processes, and split the job between them.

Basic Operations

  • Length: len(text) -> int
  • Indexing: text[42] -> str
  • Slicing: text[42:46] -> Str
  • Substring check: 'substring' in text -> bool
  • Hashing: hash(text) -> int
  • String conversion: str(text) -> str

Advanced Operations

import sys

x: bool = text.contains('substring', start=0, end=sys.maxsize)
x: int = text.find('substring', start=0, end=sys.maxsize)
x: int = text.count('substring', start=0, end=sys.maxsize, allowoverlap=False)
x: str = text.decode(encoding='utf-8', errors='strict')
x: Strs = text.split(separator=' ', maxsplit=sys.maxsize, keepseparator=False)
x: Strs = text.rsplit(separator=' ', maxsplit=sys.maxsize, keepseparator=False)
x: Strs = text.splitlines(keeplinebreaks=False, maxsplit=sys.maxsize)

It's important to note, that the last function behavior is slightly different from Python's str.splitlines. The native version matches \n, \r, \v or \x0b, \f or \x0c, \x1c, \x1d, \x1e, \x85, \r\n, \u2028, \u2029, including 3x two-bytes-long runes. The StringZilla version matches only \n, \v, \f, \r, \x1c, \x1d, \x1e, \x85, avoiding two-byte-long runes.

Character Set Operations

Python strings don't natively support character set operations. This forces people to use regular expressions, which are slow and hard to read. To avoid the need for re.finditer, StringZilla provides the following interfaces:

x: int = text.find_first_of('chars', start=0, end=sys.maxsize)
x: int = text.find_last_of('chars', start=0, end=sys.maxsize)
x: int = text.find_first_not_of('chars', start=0, end=sys.maxsize)
x: int = text.find_last_not_of('chars', start=0, end=sys.maxsize)
x: Strs = text.split_charset(separator='chars', maxsplit=sys.maxsize, keepseparator=False)
x: Strs = text.rsplit_charset(separator='chars', maxsplit=sys.maxsize, keepseparator=False)

You can also transform the string using Look-Up Tables (LUTs), mapping it to a different character set. This would result in a copy - str for str inputs and bytes for other types.

x: str = text.translate('chars', {}, start=0, end=sys.maxsize, inplace=False)
x: bytes = text.translate(b'chars', {}, start=0, end=sys.maxsize, inplace=False)

For efficiency reasons, pass the LUT as a string or bytes object, not as a dictionary. This can be useful in high-throughput applications dealing with binary data, including bioinformatics and image processing. Here is an example:

import stringzilla as sz
look_up_table = bytes(range(256)) # Identity LUT
image = open("/image/path.jpeg", "rb").read()
sz.translate(image, look_up_table, inplace=True)

Collection-Level Operations

Once split into a Strs object, you can sort, shuffle, and reorganize the slices, with minimum memory footprint. If all the chunks are located in consecutive memory regions, the memory overhead can be as low as 4 bytes per chunk.

lines: Strs = text.split(separator='\n') # 4 bytes per line overhead for under 4 GB of text
batch: Strs = lines.sample(seed=42) # 10x faster than `random.choices`
lines.shuffle(seed=42) # or shuffle all lines in place and shard with slices
# WIP: lines.sort() # explodes to 16 bytes per line overhead for any length text
# WIP: sorted_order: tuple = lines.argsort() # similar to `numpy.argsort`

Working on RedPajama, addressing 20 Billion annotated english documents, one will need only 160 GB of RAM instead of Terabytes. Once loaded, the data will be memory-mapped, and can be reused between multiple Python processes without copies. And of course, you can use slices to navigate the dataset and shard it between multiple workers.

lines[::3] # every third line
lines[1::1] # every odd line
lines[:-100:-1] # last 100 lines in reverse order

Iterators and Memory Efficiency

Python's operations like split() and readlines() immediately materialize a list of copied parts. This can be very memory-inefficient for large datasets. StringZilla saves a lot of memory by viewing existing memory regions as substrings, but even more memory can be saved by using lazily evaluated iterators.

x: SplitIterator[Str] = text.split_iter(separator=' ', keepseparator=False)
x: SplitIterator[Str] = text.rsplit_iter(separator=' ', keepseparator=False)
x: SplitIterator[Str] = text.split_charset_iter(separator='chars', keepseparator=False)
x: SplitIterator[Str] = text.rsplit_charset_iter(separator='chars', keepseparator=False)

StringZilla can easily be 10x more memory efficient than native Python classes for tokenization. With lazy operations, it practically becomes free.

import stringzilla as sz
%load_ext memory_profiler

text = open("enwik9.txt", "r").read() # 1 GB, mean word length 7.73 bytes
%memit text.split() # increment: 8670.12 MiB (152 ms)
%memit sz.split(text) # increment: 530.75 MiB (25 ms)
%memit sum(1 for _ in sz.split_iter(text)) # increment: 0.00 MiB

Low-Level Python API

Aside from calling the methods on the Str and Strs classes, you can also call the global functions directly on str and bytes instances. Assuming StringZilla CPython bindings are implemented without any intermediate tools like SWIG or PyBind, the call latency should be similar to native classes.

import stringzilla as sz

contains: bool = sz.contains("haystack", "needle", start=0, end=sys.maxsize)
offset: int = sz.find("haystack", "needle", start=0, end=sys.maxsize)
count: int = sz.count("haystack", "needle", start=0, end=sys.maxsize, allowoverlap=False)

Edit Distances

assert sz.edit_distance("apple", "aple") == 1 # skip one ASCII character
assert sz.edit_distance("αβγδ", "αγδ") == 2 # skip two bytes forming one rune
assert sz.edit_distance_unicode("αβγδ", "αγδ") == 1 # one unicode rune

Several Python libraries provide edit distance computation. Most of them are implemented in C, but are not always as fast as StringZilla. Taking a 1'000 long proteins around 10'000 characters long, computing just a 100 distances:

Moreover, you can pass custom substitution matrices to compute the Needleman-Wunsch alignment scores. That task is very common in bioinformatics and computational biology. It's natively supported in BioPython, and its BLOSUM matrices can be converted to StringZilla's format. Alternatively, you can construct an arbitrary 256 by 256 cost matrix using NumPy. Depending on arguments, the result may be equal to the negative Levenshtein distance.

import numpy as np
import stringzilla as sz

costs = np.zeros((256, 256), dtype=np.int8)
costs.fill(-1)
np.fill_diagonal(costs, 0)

assert sz.alignment_score("first", "second", substitution_matrix=costs, gap_score=-1) == -sz.edit_distance(a, b)

Using the same proteins as for Levenshtein distance benchmarks:

§ Example converting from BioPython to StringZilla.
import numpy as np
from Bio import Align
from Bio.Align import substitution_matrices

aligner = Align.PairwiseAligner()
aligner.substitution_matrix = substitution_matrices.load("BLOSUM62")
aligner.open_gap_score = 1
aligner.extend_gap_score = 1

# Convert the matrix to NumPy
subs_packed = np.array(aligner.substitution_matrix).astype(np.int8)
subs_reconstructed = np.zeros((256, 256), dtype=np.int8)

# Initialize all banned characters to a the largest possible penalty
subs_reconstructed.fill(127)
for packed_row, packed_row_aminoacid in enumerate(aligner.substitution_matrix.alphabet):
    for packed_column, packed_column_aminoacid in enumerate(aligner.substitution_matrix.alphabet):
        reconstructed_row = ord(packed_row_aminoacid)
        reconstructed_column = ord(packed_column_aminoacid)
        subs_reconstructed[reconstructed_row, reconstructed_column] = subs_packed[packed_row, packed_column]

# Let's pick two examples for of tri-peptides (made of 3 aminoacids)
glutathione = "ECG" # Need to rebuild human tissue?
thyrotropin_releasing_hormone = "QHP" # Or to regulate your metabolism?

assert sz.alignment_score(
    glutathione,
    thyrotropin_releasing_hormone, 
    substitution_matrix=subs_reconstructed, 
    gap_score=1) == aligner.score(glutathione, thyrotropin_releasing_hormone) # Equal to 6

Serialization

Filesystem

Similar to how File can be used to read a large file, other interfaces can be used to dump strings to disk faster. The Str class has write_to to write the string to a file, and offset_within to obtain integer offsets of substring view in larger string for navigation.

web_archive = Str("<html>...</html><html>...</html>")
_, end_tag, next_doc = web_archive.partition("</html>") # or use `find`
next_doc_offset = next_doc.offset_within(web_archive)
web_archive.write_to("next_doc.html") # no GIL, no copies, just a view

PyArrow

A Str is easy to cast to PyArrow buffers.

from pyarrow import foreign_buffer
from stringzilla import Str

original = "hello"
view = Str(native)
arrow = foreign_buffer(view.address, view.nbytes, view)

That means you can convert Str to pyarrow.Buffer and Strs to pyarrow.Array without extra copies.

Quick Start: C/C++ 🛠️

The C library is header-only, so you can just copy the stringzilla.h header into your project. Same applies to C++, where you would copy the stringzilla.hpp header. Alternatively, add it as a submodule, and include it in your build system.

git submodule add https://github.com/ashvardanian/stringzilla.git

Or using a pure CMake approach:

FetchContent_Declare(stringzilla GIT_REPOSITORY https://github.com/ashvardanian/stringzilla.git)
FetchContent_MakeAvailable(stringzilla)

Last, but not the least, you can also install it as a library, and link against it. This approach is worse for inlining, but brings dynamic runtime dispatch for the most advanced CPU features.

Basic Usage with C 99 and Newer

There is a stable C 99 interface, where all function names are prefixed with sz_. Most interfaces are well documented, and come with self-explanatory names and examples. In some cases, hardware specific overloads are available, like sz_find_avx512 or sz_find_neon. Both are companions of the sz_find, first for x86 CPUs with AVX-512 support, and second for Arm NEON-capable CPUs.

#include <stringzilla/stringzilla.h>

// Initialize your haystack and needle
sz_string_view_t haystack = {your_text, your_text_length};
sz_string_view_t needle = {your_subtext, your_subtext_length};

// Perform string-level operations
sz_size_t substring_position = sz_find(haystack.start, haystack.length, needle.start, needle.length);
sz_size_t substring_position = sz_find_avx512(haystack.start, haystack.length, needle.start, needle.length);
sz_size_t substring_position = sz_find_neon(haystack.start, haystack.length, needle.start, needle.length);

// Hash strings
sz_u64_t hash = sz_hash(haystack.start, haystack.length);

// Perform collection level operations
sz_sequence_t array = {your_order, your_count, your_get_start, your_get_length, your_handle};
sz_sort(&array, &your_config);
§ Mapping from LibC to StringZilla.

By design, StringZilla has a couple of notable differences from LibC:

  1. all strings are expected to have a length, and are not necessarily null-terminated.
  2. every operations has a reverse order counterpart.

That way sz_find and sz_rfind are similar to strstr and strrstr in LibC. Similarly, sz_find_byte and sz_rfind_byte replace memchr and memrchr. The sz_find_charset maps to strspn and strcspn, while sz_rfind_charset has no sibling in LibC.

LibC Functionality StringZilla Equivalents
memchr(haystack, needle, haystack_length), strchr sz_find_byte(haystack, haystack_length, needle)
memrchr(haystack, needle, haystack_length) sz_rfind_byte(haystack, haystack_length, needle)
memcmp, strcmp sz_order, sz_equal
strlen(haystack) sz_find_byte(haystack, haystack_length, needle)
strcspn(haystack, needles) sz_rfind_charset(haystack, haystack_length, needles_bitset)
strspn(haystack, needles) sz_find_charset(haystack, haystack_length, needles_bitset)
memmem(haystack, haystack_length, needle, needle_length), strstr sz_find(haystack, haystack_length, needle, needle_length)
memcpy(destination, source, destination_length) sz_copy(destination, source, destination_length)
memmove(destination, source, destination_length) sz_move(destination, source, destination_length)
memset(destination, value, destination_length) sz_fill(destination, destination_length, value)

Basic Usage with C++ 11 and Newer

There is a stable C++ 11 interface available in the ashvardanian::stringzilla namespace. It comes with two STL-like classes: string_view and string. The first is a non-owning view of a string, and the second is a mutable string with a Small String Optimization.

#include <stringzilla/stringzilla.hpp>

namespace sz = ashvardanian::stringzilla;

sz::string haystack = "some string";
sz::string_view needle = sz::string_view(haystack).substr(0, 4);

auto substring_position = haystack.find(needle); // Or `rfind`
auto hash = std::hash<sz::string_view>{}(haystack); // Compatible with STL's `std::hash`

haystack.end() - haystack.begin() == haystack.size(); // Or `rbegin`, `rend`
haystack.find_first_of(" \v\t") == 4; // Or `find_last_of`, `find_first_not_of`, `find_last_not_of`
haystack.starts_with(needle) == true; // Or `ends_with`
haystack.remove_prefix(needle.size()); // Why is this operation in-place?!
haystack.contains(needle) == true; // STL has this only from C++ 23 onwards
haystack.compare(needle) == 1; // Or `haystack <=> needle` in C++ 20 and beyond

StringZilla also provides string literals for automatic type resolution, similar to STL:

using sz::literals::operator""_sz;
using std::literals::operator""sv;

auto a = "some string"; // char const *
auto b = "some string"sv; // std::string_view
auto b = "some string"_sz; // sz::string_view

Memory Ownership and Small String Optimization

Most operations in StringZilla don't assume any memory ownership. But in addition to the read-only search-like operations StringZilla provides a minimalistic C and C++ implementations for a memory owning string "class". Like other efficient string implementations, it uses the Small String Optimization (SSO) to avoid heap allocations for short strings.

typedef union sz_string_t {
    struct internal {
        sz_ptr_t start;
        sz_u8_t length;
        char chars[SZ_STRING_INTERNAL_SPACE]; /// Ends with a null-terminator.
    } internal;

    struct external {
        sz_ptr_t start;
        sz_size_t length;        
        sz_size_t space; /// The length of the heap-allocated buffer.
        sz_size_t padding;
    } external;

} sz_string_t;

As one can see, a short string can be kept on the stack, if it fits within internal.chars array. Before 2015 GCC string implementation was just 8 bytes, and could only fit 7 characters. Different STL implementations today have different thresholds for the Small String Optimization. Similar to GCC, StringZilla is 32 bytes in size, and similar to Clang it can fit 22 characters on stack. Our layout might be preferential, if you want to avoid branches. If you use a different compiler, you may want to check it's SSO buffer size with a simple Gist.

libstdc++ in GCC 13 libc++ in Clang 17 StringZilla
sizeof(std::string) 32 24 32
Small String Capacity 15 22 22

This design has been since ported to many high-level programming languages. Swift, for example, can store 15 bytes in the String instance itself. StringZilla implements SSO at the C level, providing the sz_string_t union and a simple API for primary operations.

sz_memory_allocator_t allocator;
sz_string_t string;

// Init and make sure we are on stack
sz_string_init(&string);
sz_string_is_on_stack(&string); // == sz_true_k

// Optionally pre-allocate space on the heap for future insertions.
sz_string_grow(&string, 100, &allocator); // == sz_true_k

// Append, erase, insert into the string.
sz_string_expand(&string, 0, "_Hello_", 7, &allocator); // == sz_true_k
sz_string_expand(&string, SZ_SIZE_MAX, "world", 5, &allocator); // == sz_true_k
sz_string_erase(&string, 0, 1);

// Unpacking & introspection.
sz_ptr_t string_start;
sz_size_t string_length;
sz_size_t string_space;
sz_bool_t string_is_external;
sz_string_unpack(string, &string_start, &string_length, &string_space, &string_is_external);
sz_equal(string_start, "Hello_world", 11); // == sz_true_k

// Reclaim some memory.
sz_string_shrink_to_fit(&string, &allocator); // == sz_true_k
sz_string_free(&string, &allocator);

Unlike the conventional C strings, the sz_string_t is allowed to contain null characters. To safely print those, pass the string_length to printf as well.

printf("%.*s\n", (int)string_length, string_start);

What's Wrong with the C Standard Library?

StringZilla is not a drop-in replacement for the C Standard Library. It's designed to be a safer and more modern alternative. Conceptually:

  1. LibC strings are expected to be null-terminated, so to use the efficient LibC implementations on slices of larger strings, you'd have to copy them, which is more expensive than the original string operation.
  2. LibC functionality is asymmetric - you can find the first and the last occurrence of a character within a string, but you can't find the last occurrence of a substring.
  3. LibC function names are typically very short and cryptic.
  4. LibC lacks crucial functionality like hashing and doesn't provide primitives for less critical but relevant operations like fuzzy matching.

Something has to be said about its support for UTF8. Aside from a single-byte char type, LibC provides wchar_t:

  • The size of wchar_t is not consistent across platforms. On Windows, it's typically 16 bits (suitable for UTF-16), while on Unix-like systems, it's usually 32 bits (suitable for UTF-32). This inconsistency can lead to portability issues when writing cross-platform code.
  • wchar_t is designed to represent wide characters in a fixed-width format (UTF-16 or UTF-32). In contrast, UTF-8 is a variable-length encoding, where each character can take from 1 to 4 bytes. This fundamental difference means that wchar_t and UTF-8 are incompatible.

StringZilla partially addresses those issues.

What's Wrong with the C++ Standard Library?

C++ Code Evaluation Result Invoked Signature
"Loose"s.replace(2, 2, "vath"s, 1) "Loathe" 🤢 (pos1, count1, str2, pos2)
"Loose"s.replace(2, 2, "vath", 1) "Love" 🥰 (pos1, count1, str2, count2)

StringZilla is designed to be a drop-in replacement for the C++ Standard Templates Library. That said, some of the design decisions of STL strings are highly controversial, error-prone, and expensive. Most notably:

  1. Argument order for replace, insert, erase and similar functions is impossible to guess.
  2. Bounds-checking exceptions for substr-like functions are only thrown for one side of the range.
  3. Returning string copies in substr-like functions results in absurd volume of allocations.
  4. Incremental construction via push_back-like functions goes through too many branches.
  5. Inconsistency between string and string_view methods, like the lack of remove_prefix and remove_suffix.

Check the following set of asserts validating the std::string specification. It's not realistic to expect the average developer to remember the 14 overloads of std::string::replace.

using str = std::string;

assert(str("hello world").substr(6) == "world");
assert(str("hello world").substr(6, 100) == "world"); // 106 is beyond the length of the string, but its OK
assert_throws(str("hello world").substr(100), std::out_of_range);   // 100 is beyond the length of the string
assert_throws(str("hello world").substr(20, 5), std::out_of_range); // 20 is beyond the length of the string
assert_throws(str("hello world").substr(-1, 5), std::out_of_range); // -1 casts to unsigned without any warnings...
assert(str("hello world").substr(0, -1) == "hello world");          // -1 casts to unsigned without any warnings...

assert(str("hello").replace(1, 2, "123") == "h123lo");
assert(str("hello").replace(1, 2, str("123"), 1) == "h23lo");
assert(str("hello").replace(1, 2, "123", 1) == "h1lo");
assert(str("hello").replace(1, 2, "123", 1, 1) == "h2lo");
assert(str("hello").replace(1, 2, str("123"), 1, 1) == "h2lo");
assert(str("hello").replace(1, 2, 3, 'a') == "haaalo");
assert(str("hello").replace(1, 2, {'a', 'b'}) == "hablo");

To avoid those issues, StringZilla provides an alternative consistent interface. It supports signed arguments, and doesn't have more than 3 arguments per function or The standard API and our alternative can be conditionally disabled with SZ_SAFETY_OVER_COMPATIBILITY=1. When it's enabled, the subjectively risky overloads from the Standard will be disabled.

using str = sz::string;

str("a:b").front(1) == "a"; // no checks, unlike `substr`
str("a:b").front(2) == "2"; // take first 2 characters
str("a:b").back(-1) == "b"; // accepting negative indices
str("a:b").back(-2) == ":b"; // similar to Python's `"a:b"[-2:]`
str("a:b").sub(1, -1) == ":"; // similar to Python's `"a:b"[1:-1]`
str("a:b").sub(-2, -1) == ":"; // similar to Python's `"a:b"[-2:-1]`
str("a:b").sub(-2, 1) == ""; // similar to Python's `"a:b"[-2:1]`
"a:b"_sz[{-2, -1}] == ":"; // works on views and overloads `operator[]`

Assuming StringZilla is a header-only library you can use the full API in some translation units and gradually transition to safer restricted API in others. Bonus - all the bound checking is branchless, so it has a constant cost and won't hurt your branch predictor.

Beyond the C++ Standard Library - Learning from Python

Python is arguably the most popular programming language for data science. In part, that's due to the simplicity of its standard interfaces. StringZilla brings some of that functionality to C++.

  • Content checks: isalnum, isalpha, isascii, isdigit, islower, isspace, isupper.
  • Trimming character sets: lstrip, rstrip, strip.
  • Trimming string matches: remove_prefix, remove_suffix.
  • Ranges of search results: splitlines, split, rsplit.
  • Number of non-overlapping substring matches: count.
  • Partitioning: partition, rpartition.

For example, when parsing documents, it is often useful to split it into substrings. Most often, after that, you would compute the length of the skipped part, the offset and the length of the remaining part. This results in a lot of pointer arithmetic and is error-prone. StringZilla provides a convenient partition function, which returns a tuple of three string views, making the code cleaner.

auto parts = haystack.partition(':'); // Matching a character
auto [before, match, after] = haystack.partition(':'); // Structure unpacking
auto [before, match, after] = haystack.partition(sz::char_set(":;")); // Character-set argument
auto [before, match, after] = haystack.partition(" : "); // String argument
auto [before, match, after] = haystack.rpartition(sz::whitespaces_set()); // Split around the last whitespace

Combining those with the split function, one can easily parse a CSV file or HTTP headers.

for (auto line : haystack.split("\r\n")) {
    auto [key, _, value] = line.partition(':');
    headers[key.strip()] = value.strip();
}

Some other extensions are not present in the Python standard library either. Let's go through the C++ functionality category by category.

Some of the StringZilla interfaces are not available even Python's native str class. Here is a sneak peek of the most useful ones.

text.hash(); // -> 64 bit unsigned integer 
text.ssize(); // -> 64 bit signed length to avoid `static_cast<std::ssize_t>(text.size())`
text.contains_only(" \w\t"); // == text.find_first_not_of(sz::char_set(" \w\t")) == npos;
text.contains(sz::whitespaces_set()); // == text.find(sz::char_set(sz::whitespaces_set())) != npos;

// Simpler slicing than `substr`
text.front(10); // -> sz::string_view
text.back(10); // -> sz::string_view

// Safe variants, which clamp the range into the string bounds
using sz::string::cap;
text.front(10, cap) == text.front(std::min(10, text.size()));
text.back(10, cap) == text.back(std::min(10, text.size()));

// Character set filtering
text.lstrip(sz::whitespaces_set()).rstrip(sz::newlines_set()); // like Python
text.front(sz::whitespaces_set()); // all leading whitespaces
text.back(sz::digits_set()); // all numerical symbols forming the suffix

// Incremental construction
using sz::string::unchecked;
text.push_back('x'); // no surprises here
text.push_back('x', unchecked); // no bounds checking, Rust style
text.try_push_back('x'); // returns `false` if the string is full and the allocation failed

sz::concatenate(text, "@", domain, ".", tld); // No allocations

Splits and Ranges

One of the most common use cases is to split a string into a collection of substrings. Which would often result in StackOverflow lookups and snippets like the one below.

std::vector<std::string> lines = split(haystack, "\r\n"); // string delimiter
std::vector<std::string> words = split(lines, ' '); // character delimiter

Those allocate memory for each string and the temporary vectors. Each allocation can be orders of magnitude more expensive, than even serial for-loop over characters. To avoid those, StringZilla provides lazily-evaluated ranges, compatible with the Range-v3 library.

for (auto line : haystack.split("\r\n"))
    for (auto word : line.split(sz::char_set(" \w\t.,;:!?")))
        std::cout << word << std::endl;

Each of those is available in reverse order as well. It also allows interleaving matches, if you want both inclusions of xx in xxx. Debugging pointer offsets is not a pleasant exercise, so keep the following functions in mind.

  • haystack.[r]find_all(needle, interleaving)
  • haystack.[r]find_all(sz::char_set(""))
  • haystack.[r]split(needle)
  • haystack.[r]split(sz::char_set(""))

For $N$ matches the split functions will report $N+1$ matches, potentially including empty strings. Ranges have a few convenience methods as well:

range.size(); // -> std::size_t
range.empty(); // -> bool
range.template to<std::set<std::sting>>(); 
range.template to<std::vector<std::sting_view>>(); 

Concatenating Strings without Allocations

Another common string operation is concatenation. The STL provides std::string::operator+ and std::string::append, but those are not very efficient, if multiple invocations are performed.

std::string name, domain, tld;
auto email = name + "@" + domain + "." + tld; // 4 allocations

The efficient approach would be to pre-allocate the memory and copy the strings into it.

std::string email;
email.reserve(name.size() + domain.size() + tld.size() + 2);
email.append(name), email.append("@"), email.append(domain), email.append("."), email.append(tld);

That's mouthful and error-prone. StringZilla provides a more convenient concatenate function, which takes a variadic number of arguments. It also overrides the operator| to concatenate strings lazily, without any allocations.

auto email = sz::concatenate(name, "@", domain, ".", tld);   // 0 allocations
auto email = name | "@" | domain | "." | tld;                // 0 allocations
sz::string email = name | "@" | domain | "." | tld;          // 1 allocations

Random Generation

Software developers often need to generate random strings for testing purposes. The STL provides std::generate and std::random_device, that can be used with StringZilla.

sz::string random_string(std::size_t length, char const *alphabet, std::size_t cardinality) {
    sz::string result(length, '\0');
    static std::random_device seed_source; // Expensive to construct - due to system calls
    static std::mt19937 generator(seed_source()); // Also expensive - due to the state size
    std::uniform_int_distribution<std::size_t> distribution(0, cardinality);
    std::generate(result.begin(), result.end(), [&]() { return alphabet[distribution(generator)]; });
    return result;
}

Mouthful and slow. StringZilla provides a C native method - sz_generate and a convenient C++ wrapper - sz::generate. Similar to Python it also defines the commonly used character sets.

auto protein = sz::string::random(300, "ARNDCQEGHILKMFPSTWYV"); // static method
auto dna = sz::basic_string<custom_allocator>::random(3_000_000_000, "ACGT");

dna.randomize("ACGT"); // `noexcept` pre-allocated version
dna.randomize(&std::rand, "ACGT"); // pass any generator, like `std::mt19937`

char uuid[36];
sz::randomize(sz::string_span(uuid, 36), "0123456789abcdef-"); // Overwrite any buffer

Bulk Replacements

In text processing, it's often necessary to replace all occurrences of a specific substring or set of characters within a string. Standard library functions may not offer the most efficient or convenient methods for performing bulk replacements, especially when dealing with large strings or performance-critical applications.

  • haystack.replace_all(needle_string, replacement_string)
  • haystack.replace_all(sz::char_set(""), replacement_string)
  • haystack.try_replace_all(needle_string, replacement_string)
  • haystack.try_replace_all(sz::char_set(""), replacement_string)
  • haystack.transform(sz::look_up_table::identity())
  • haystack.transform(sz::look_up_table::identity(), haystack.data())

Levenshtein Edit Distance and Alignment Scores

Levenshtein and Hamming edit distance are provided for both byte-strings and UTF-8 strings. The latter will output the distance in Unicode code points, not bytes. Needleman-Wunsch alignment scores are only defined for byte-strings.

// Count number of substitutions in same length strings
sz::hamming_distance(first, second[, upper_bound]) -> std::size_t;
sz::hamming_distance_utf8(first, second[, upper_bound]) -> std::size_t;

// Count number of insertions, deletions and substitutions
sz::edit_distance(first, second[, upper_bound[, allocator]]) -> std::size_t;
sz::edit_distance_utf8(first, second[, upper_bound[, allocator]]) -> std::size_t;

// Substitution-parametrized Needleman-Wunsch global alignment score
std::int8_t costs[256][256]; // Substitution costs matrix
sz::alignment_score(first, second, costs[, gap_score[, allocator]) -> std::ptrdiff_t;

Sorting in C and C++

LibC provides qsort and STL provides std::sort. Both have their quarks. The LibC standard has no way to pass a context to the comparison function, that's only possible with platform-specific extensions. Those have different arguments order on every OS.

// Linux: https://linux.die.net/man/3/qsort_r
void qsort_r(void *elements, size_t count, size_t element_width, 
    int (*compare)(void const *left, void const *right, void *context),
    void *context);
// MacOS and FreeBSD: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/qsort_r.3.html
void qsort_r(void *elements, size_t count, size_t element_width, 
    void *context,
    int (*compare)(void *context, void const *left, void const *right));
// Windows conflicts with ISO `qsort_s`: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/qsort-s?view=msvc-170
void qsort_s(id *elements, size_t count, size_t element_width, 
    int (*compare)(void *context, void const *left, void const *right),
    void *context);

C++ generic algorithm is not perfect either. There is no guarantee in the standard that std::sort won't allocate any memory. If you are running on embedded, in real-time or on 100+ CPU cores per node, you may want to avoid that. StringZilla doesn't solve the general case, but hopes to improve the performance for strings. Use sz_sort, or the high-level sz::sorted_order, which can be used sort any collection of elements convertible to sz::string_view.

std::vector<std::string> data({"c", "b", "a"});
std::vector<std::size_t> order = sz::sorted_order(data); //< Simple shortcut

// Or, taking care of memory allocation:
sz::sorted_order(data.begin(), data.end(), order.data(), [](auto const &x) -> sz::string_view { return x; });

Standard C++ Containers with String Keys

The C++ Standard Templates Library provides several associative containers, often used with string keys.

std::map<std::string, int, std::less<std::string>> sorted_words;
std::unordered_map<std::string, int, std::hash<std::string>, std::equal_to<std::string>> words;

The performance of those containers is often limited by the performance of the string keys, especially on reads. StringZilla can be used to accelerate containers with std::string keys, by overriding the default comparator and hash functions.

std::map<std::string, int, sz::string_view_less> sorted_words;
std::unordered_map<std::string, int, sz::string_view_hash, sz::string_view_equal_to> words;

Alternatively, a better approach would be to use the sz::string class as a key. The right hash function and comparator would be automatically selected and the performance gains would be more noticeable if the keys are short.

std::map<sz::string, int> sorted_words;
std::unordered_map<sz::string, int> words;

Compilation Settings and Debugging

SZ_DEBUG:

For maximal performance, the C library does not perform any bounds checking in Release builds. In C++, bounds checking happens only in places where the STL std::string would do it. If you want to enable more aggressive bounds-checking, define SZ_DEBUG before including the header. If not explicitly set, it will be inferred from the build type.

SZ_USE_X86_AVX512, SZ_USE_X86_AVX2, SZ_USE_ARM_NEON:

One can explicitly disable certain families of SIMD instructions for compatibility purposes. Default values are inferred at compile time.

SZ_DYNAMIC_DISPATCH:

By default, StringZilla 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 stringzilla.so shared library, as well as the Python bindings.

SZ_USE_MISALIGNED_LOADS:

By default, StringZilla avoids misaligned loads. If supported, it replaces many byte-level operations with word-level ones. Going from char-like types to uint64_t-like ones can significantly accelerate the serial (SWAR) backend. So consider enabling it if you are building for some embedded device.

SZ_AVOID_LIBC and SZ_OVERRIDE_LIBC:

When using the C header-only library one can disable the use of LibC. This may affect the type resolution system on obscure hardware platforms. Moreover, one may let stringzilla override the common symbols like the memcpy and memset with its own implementations. In that case you can use the LD_PRELOAD trick to prioritize it's symbols over the ones from the LibC and accelerate existing string-heavy applications without recompiling them.

SZ_AVOID_STL and SZ_SAFETY_OVER_COMPATIBILITY:

When using the C++ interface one can disable implicit conversions from std::string to sz::string and back. If not needed, the <string> and <string_view> headers will be excluded, reducing compilation time. Moreover, if STL compatibility is a low priority, one can make the API safer by disabling the overloads, which are subjectively error prone.

STRINGZILLA_BUILD_SHARED, STRINGZILLA_BUILD_TEST, STRINGZILLA_BUILD_BENCHMARK, STRINGZILLA_TARGET_ARCH for CMake users:

When compiling the tests and benchmarks, you can explicitly set the target hardware architecture. It's synonymous to GCC's -march flag and is used to enable/disable the appropriate instruction sets. You can also disable the shared library build, if you don't need it.

Quick Start: Rust 🦀

StringZilla is available as a Rust crate, with documentation available on docs.rs/stringzilla. To use the latest crate release in your project, add the following to your Cargo.toml:

[dependencies]
stringzilla = ">=3"

Or if you want to use the latest pre-release version from the repository:

[dependencies]
stringzilla = { git = "https://github.com/ashvardanian/stringzilla", branch = "main-dev" }

Once installed, all of the functionality is available through the stringzilla namespace. Many interfaces will look familiar to the users of the memchr crate.

use stringzilla::sz;

// Identical to `memchr::memmem::find` and `memchr::memmem::rfind` functions
sz::find("Hello, world!", "world") // 7
sz::rfind("Hello, world!", "world") // 7

// Generalizations of `memchr::memrchr[123]`
sz::find_char_from("Hello, world!", "world") // 2
sz::rfind_char_from("Hello, world!", "world") // 11

Unlike memchr, the throughput of stringzilla is high in both normal and reverse-order searches. It also provides no constraints on the size of the character set, while memchr allows only 1, 2, or 3 characters. In addition to global functions, stringzilla provides a StringZilla extension trait:

use stringzilla::StringZilla;

let my_string: String = String::from("Hello, world!");
let my_str = my_string.as_str();
let my_cow_str = Cow::from(&my_string);

// Use the generic function with a String
assert_eq!(my_string.sz_find("world"), Some(7));
assert_eq!(my_string.sz_rfind("world"), Some(7));
assert_eq!(my_string.sz_find_char_from("world"), Some(2));
assert_eq!(my_string.sz_rfind_char_from("world"), Some(11));
assert_eq!(my_string.sz_find_char_not_from("world"), Some(0));
assert_eq!(my_string.sz_rfind_char_not_from("world"), Some(12));

// Same works for &str and Cow<'_, str>
assert_eq!(my_str.sz_find("world"), Some(7));
assert_eq!(my_cow_str.as_ref().sz_find("world"), Some(7));

The library also exposes Levenshtein and Hamming edit-distances for byte-arrays and UTF-8 strings, as well as Needleman-Wunch alignment scores.

use stringzilla::sz;

// Handling arbitrary byte arrays:
sz::edit_distance("Hello, world!", "Hello, world?"); // 1
sz::hamming_distance("Hello, world!", "Hello, world?"); // 1
sz::alignment_score("Hello, world!", "Hello, world?", sz::unary_substitution_costs(), -1); // -1

// Handling UTF-8 strings:
sz::hamming_distance_utf8("αβγδ", "αγγδ") // 1
sz::edit_distance_utf8("façade", "facade") // 1

Quick Start: Swift 🍏

StringZilla can be added as a dependency in the Swift Package Manager. In your Package.swift file, add the following:

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

The package currently covers only the most basic functionality, but is planned to be extended to cover the full C++ API.

var s = "Hello, world! Welcome to StringZilla. 👋"
s[s.findFirst(substring: "world")!...] // "world! Welcome to StringZilla. 👋")    
s[s.findLast(substring: "o")!...] // "o StringZilla. 👋")
s[s.findFirst(characterFrom: "aeiou")!...] // "ello, world! Welcome to StringZilla. 👋")
s[s.findLast(characterFrom: "aeiou")!...] // "a. 👋")
s[s.findFirst(characterNotFrom: "aeiou")!...] // "Hello, world! Welcome to StringZilla. 👋"
s.editDistance(from: "Hello, world!")! // 29

Algorithms & Design Decisions 📚

StringZilla aims to optimize some of the slowest string operations. Some popular operations, however, like equality comparisons and relative order checking, almost always complete on some of the very first bytes in either string. In such operations vectorization is almost useless, unless huge and very similar strings are considered. StringZilla implements those operations as well, but won't result in substantial speedups.

Exact Substring Search

Substring search algorithms are generally divided into: comparison-based, automaton-based, and bit-parallel. Different families are effective for different alphabet sizes and needle lengths. The more operations are needed per-character - the more effective SIMD would be. The longer the needle - the more effective the skip-tables are. StringZilla uses different exact substring search algorithms for different needle lengths and backends:

  • When no SIMD is available - SWAR (SIMD Within A Register) algorithms are used on 64-bit words.
  • Boyer-Moore-Horspool (BMH) algorithm with Raita heuristic variation for longer needles.
  • SIMD algorithms are randomized to look at different parts of the needle.

On very short needles, especially 1-4 characters long, brute force with SIMD is the fastest solution. On mid-length needles, bit-parallel algorithms are effective, as the character masks fit into 32-bit or 64-bit words. Either way, if the needle is under 64-bytes long, on haystack traversal we will still fetch every CPU cache line. So the only way to improve performance is to reduce the number of comparisons. The snippet below shows how StringZilla accomplishes that for needles of length two.

https://github.com/ashvardanian/StringZilla/blob/266c01710dddf71fc44800f36c2f992ca9735f87/include/stringzilla/stringzilla.h#L1585-L1637

Going beyond that, to long needles, Boyer-Moore (BM) and its variants are often the best choice. It has two tables: the good-suffix shift and the bad-character shift. Common choice is to use the simplified BMH algorithm, which only uses the bad-character shift table, reducing the pre-processing time. We do the same for mid-length needles up to 256 bytes long. That way the stack-allocated shift table remains small.

https://github.com/ashvardanian/StringZilla/blob/46e957cd4f9ecd4945318dd3c48783dd11323f37/include/stringzilla/stringzilla.h#L1774-L1825

In the C++ Standards Library, the std::string::find function uses the BMH algorithm with Raita's heuristic. Before comparing the entire string, it matches the first, last, and the middle character. Very practical, but can be slow for repetitive characters. Both SWAR and SIMD backends of StringZilla have a cheap pre-processing step, where we locate unique characters. This makes the library a lot more practical when dealing with non-English corpora.

https://github.com/ashvardanian/StringZilla/blob/46e957cd4f9ecd4945318dd3c48783dd11323f37/include/stringzilla/stringzilla.h#L1398-L1431

All those, still, have $O(hn)$ worst case complexity. To guarantee $O(h)$ worst case time complexity, the Apostolico-Giancarlo (AG) algorithm adds an additional skip-table. Preprocessing phase is $O(n+sigma)$ in time and space. On traversal, performs from $(h/n)$ to $(3h/2)$ comparisons. It however, isn't practical on modern CPUs. A simpler idea, the Galil-rule might be a more relevant optimizations, if many matches must be found.

Other algorithms previously considered and deprecated:

  • Apostolico-Giancarlo algorithm for longer needles. Control-flow is too complex for efficient vectorization.
  • Shift-Or-based Bitap algorithm for short needles. Slower than SWAR.
  • Horspool-style bad-character check in SIMD backends. Effective only for very long needles, and very uneven character distributions between the needle and the haystack. Faster "character-in-set" check needed to generalize.

§ Reading materials. Exact String Matching Algorithms in Java. SIMD-friendly algorithms for substring searching.

Levenshtein Edit Distance

Levenshtein distance is the best known edit-distance for strings, that checks, how many insertions, deletions, and substitutions are needed to transform one string to another. It's extensively used in approximate string-matching, spell-checking, and bioinformatics.

The computational cost of the Levenshtein distance is $O(n * m)$, where $n$ and $m$ are the lengths of the string arguments. To compute that, the naive approach requires $O(n * m)$ space to store the "Levenshtein matrix", the bottom-right corner of which will contain the Levenshtein distance. The algorithm producing the matrix has been simultaneously studied/discovered by the Soviet mathematicians Vladimir Levenshtein in 1965, Taras Vintsyuk in 1968, and American computer scientists - Robert Wagner, David Sankoff, Michael J. Fischer in the following years. Several optimizations are known:

  1. Space Optimization: The matrix can be computed in $O(min(n,m))$ space, by only storing the last two rows of the matrix.
  2. Divide and Conquer: Hirschberg's algorithm can be applied to decompose the computation into subtasks.
  3. Automata: Levenshtein automata can be effective, if one of the strings doesn't change, and is a subject to many comparisons.
  4. Shift-Or: Bit-parallel algorithms transpose the matrix into a bit-matrix, and perform bitwise operations on it.

The last approach is quite powerful and performant, and is used by the great RapidFuzz library. It's less known, than the others, derived from the Baeza-Yates-Gonnet algorithm, extended to bounded edit-distance search by Manber and Wu in 1990s, and further extended by Gene Myers in 1999 and Heikki Hyyro between 2002 and 2004.

StringZilla introduces a different approach, extensively used in Unum's internal combinatorial optimization libraries. The approach doesn't change the number of trivial operations, but performs them in a different order, removing the data dependency, that occurs when computing the insertion costs. This results in much better vectorization for intra-core parallelism and potentially multi-core evaluation of a single request.

Next design goals:

  • Generalize fast traversals to rectangular matrices.
  • Port x86 AVX-512 solution to Arm NEON.

§ Reading materials. Faster Levenshtein Distances with a SIMD-friendly Traversal Order.

Needleman-Wunsch Alignment Score for Bioinformatics

The field of bioinformatics studies various representations of biological structures. The "primary" representations are generally strings over sparse alphabets:

  • DNA sequences, where the alphabet is {A, C, G, T}, ranging from ~100 characters for short reads to 3 billion for the human genome.
  • RNA sequences, where the alphabet is {A, C, G, U}, ranging from ~50 characters for tRNA to thousands for mRNA.
  • Proteins, where the alphabet is made of 22 amino acids, ranging from 2 characters for dipeptide to 35,000 for Titin, the longest protein.

The shorter the representation, the more often researchers may want to use custom substitution matrices. Meaning that the cost of a substitution between two characters may not be the same for all pairs.

StringZilla adapts the fairly efficient two-row Wagner-Fisher algorithm as a baseline serial implementation of the Needleman-Wunsch score. It supports arbitrary alphabets up to 256 characters, and can be used with either BLOSUM, PAM, or other substitution matrices. It also uses SIMD for hardware acceleration of the substitution lookups. This however, does not yet break the data-dependency for insertion costs, where 80% of the time is wasted. With that solved, the SIMD implementation will become 5x faster than the serial one.

Memory Copying, Fills, and Moves

A lot has been written about the time computers spend copying memory and how that operation is implemented in LibC. Interestingly, the operation can still be improved, as most Assembly implementations use outdated instructions. Even performance-oriented STL replacements, like Meta's Folly v2024.09.23 focus on AVX2, and don't take advantage of the new masked instructions in AVX-512 or SVE.

In AVX-512, StringZilla uses non-temporal stores to avoid cache pollution, when dealing with very large strings. Moreover, it handles the unaligned head and the tails of the target buffer separately, ensuring that writes in big copies are always aligned to cache-line boundaries. That's true for both AVX2 and AVX-512 backends.

StringZilla also contains "drafts" of smarter, but less efficient algorithms, that minimize the number of unaligned loads, perfoming shuffles and permutations. That's a topic for future research, as the performance gains are not yet satisfactory.

§ Reading materials. memset benchmarks by Nadav Rotem. Cache Associativity by Sergey Slotin.

Random Generation

Generating random strings from different alphabets is a very common operation. StringZilla accepts an arbitrary Pseudorandom Number Generator to produce noise, and an array of characters to sample from. Sampling is optimized to avoid integer division, a costly operation on modern CPUs. For that a 768-byte long lookup table is used to perform 2 lookups, 1 multiplication, 2 shifts, and 2 accumulations.

https://github.com/ashvardanian/StringZilla/blob/266c01710dddf71fc44800f36c2f992ca9735f87/include/stringzilla/stringzilla.h#L2490-L2533

Sorting

For lexicographic sorting of strings, StringZilla uses a "hybrid-hybrid" approach with $O(n * log(n))$ and.

  1. Radix sort for first bytes exported into a continuous buffer for locality.
  2. IntroSort on partially ordered chunks to balance efficiency and worst-case performance.
    1. IntroSort begins with a QuickSort.
    2. If the recursion depth exceeds a certain threshold, it switches to a HeapSort.

A better algorithm is in development. Check #173 for design goals and progress updates.

Hashing

[!WARNING] Hash functions are not cryptographically safe and are currently under active development. They may change in future minor releases.

Choosing the right hashing algorithm for your application can be crucial from both performance and security standpoint. In StringZilla a 64-bit rolling hash function is reused for both string hashes and substring hashes, Rabin-style fingerprints. Rolling hashes take the same amount of time to compute hashes with different window sizes, and are fast to update. Those are not however perfect hashes, and collisions are frequent. StringZilla attempts to use SIMD, but the performance is not yet satisfactory. On Intel Sapphire Rapids, the following numbers can be expected for N-way parallel variants.

  • 4-way AVX2 throughput with 64-bit integer multiplication (no native support): 0.28 GB/s.
  • 4-way AVX2 throughput with 32-bit integer multiplication: 0.54 GB/s.
  • 4-way AVX-512DQ throughput with 64-bit integer multiplication: 0.46 GB/s.
  • 4-way AVX-512 throughput with 32-bit integer multiplication: 0.58 GB/s.
  • 8-way AVX-512 throughput with 32-bit integer multiplication: 0.11 GB/s.

Next design goals:

  • Try gear-hash and other rolling approaches.

Why not CRC32?

Cyclic Redundancy Check 32 is one of the most commonly used hash functions in Computer Science. It has in-hardware support on both x86 and Arm, for both 8-bit, 16-bit, 32-bit, and 64-bit words. The 0x1EDC6F41 polynomial is used in iSCSI, Btrfs, ext4, and the 0x04C11DB7 in SATA, Ethernet, Zlib, PNG. In case of Arm more than one polynomial is supported. It is, however, somewhat limiting for Big Data usecases, which often have to deal with more than 4 Billion strings, making collisions unavoidable. Moreover, the existing SIMD approaches are tricky, combining general purpose computations with specialized instructions, to utilize more silicon in every cycle.

§ Reading materials. Comprehensive derivation of approaches Faster computation for 4 KB buffers on x86 Comparing different lookup tables Great open-source implementations. By Peter Cawley By Stephan Brumme

Other Modern Alternatives

MurmurHash from 2008 by Austin Appleby is one of the best known non-cryptographic hashes. It has a very short implementation and is capable of producing 32-bit and 128-bit hashes. The CityHash from 2011 by Google and the xxHash improve on that, better leveraging the super-scalar nature of modern CPUs and producing 64-bit and 128-bit hashes.

Neither of those functions are cryptographic, unlike MD5, SHA, and BLAKE algorithms. Most of cryptographic hashes are based on the Merkle-Damgård construction, and aren't resistant to the length-extension attacks. Current state of the Art, might be the BLAKE3 algorithm. It's resistant to a broad range of attacks, can process 2 bytes per CPU cycle, and comes with a very optimized official implementation for C and Rust. It has the same 128-bit security level as the BLAKE2, and achieves its performance gains by reducing the number of mixing rounds, and processing data in 1 KiB chunks, which is great for longer strings, but may result in poor performance on short ones.

All mentioned libraries have undergone extensive testing and are considered production-ready. They can definitely accelerate your application, but so may the downstream mixer. For instance, when a hash-table is constructed, the hashes are further shrunk to address table buckets. If the mixer looses entropy, the performance gains from the hash function may be lost. An example would be power-of-two modulo, which is a common mixer, but is known to be weak. One alternative would be the fastrange by Daniel Lemire. Another one is the Fibonacci hash trick using the Golden Ratio, also used in StringZilla.

Unicode, UTF-8, and Wide Characters

Most StringZilla operations are byte-level, so they work well with ASCII and UTF8 content out of the box. In some cases, like edit-distance computation, the result of byte-level evaluation and character-level evaluation may differ. So StringZilla provides following functions to work with Unicode:

  • sz_edit_distance_utf8 - computes the Levenshtein distance between two UTF-8 strings.
  • sz_hamming_distance_utf8 - computes the Hamming distance between two UTF-8 strings.

Java, JavaScript, Python 2, C#, and Objective-C, however, use wide characters (wchar) - two byte long codes, instead of the more reasonable fixed-length UTF32 or variable-length UTF8. This leads to all kinds of offset-counting issues when facing four-byte long Unicode characters. So consider transcoding with simdutf, if you are coming from such environments.

Contributing 👾

Please check out the contributing guide for more details on how to setup the development environment and contribute to this project. If you like this project, you may also enjoy USearch, UCall, UForm, and SimSIMD. 🤗

If you like strings and value efficiency, you may also enjoy the following projects:

  • simdutf - transcoding UTF8, UTF16, and UTF32 LE and BE.
  • hyperscan - regular expressions with SIMD acceleration.
  • pyahocorasick - Aho-Corasick algorithm in Python.
  • rapidfuzz - fast string matching in C++ and Python.

If you are looking for more reading materials on this topic, consider the following:

License 📜

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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stringzilla-3.10.10.tar.gz (183.1 kB view details)

Uploaded Source

Built Distributions

stringzilla-3.10.10-cp313-cp313-win_arm64.whl (67.2 kB view details)

Uploaded CPython 3.13 Windows ARM64

stringzilla-3.10.10-cp313-cp313-win_amd64.whl (78.9 kB view details)

Uploaded CPython 3.13 Windows x86-64

stringzilla-3.10.10-cp313-cp313-win32.whl (68.4 kB view details)

Uploaded CPython 3.13 Windows x86

stringzilla-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl (290.1 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ x86-64

stringzilla-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl (205.5 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ s390x

stringzilla-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl (228.7 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.10-cp313-cp313-musllinux_1_2_i686.whl (210.8 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ i686

stringzilla-3.10.10-cp313-cp313-musllinux_1_2_armv7l.whl (198.4 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl (223.8 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ ARM64

stringzilla-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (203.5 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ s390x manylinux: glibc 2.28+ s390x

stringzilla-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (231.9 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ ppc64le manylinux: glibc 2.28+ ppc64le

stringzilla-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (228.4 kB view details)

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

stringzilla-3.10.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (295.7 kB view details)

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

stringzilla-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (209.8 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

stringzilla-3.10.10-cp313-cp313-macosx_11_0_arm64.whl (80.1 kB view details)

Uploaded CPython 3.13 macOS 11.0+ ARM64

stringzilla-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl (79.2 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

stringzilla-3.10.10-cp313-cp313-macosx_10_13_universal2.whl (121.7 kB view details)

Uploaded CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)

stringzilla-3.10.10-cp312-cp312-win_arm64.whl (67.2 kB view details)

Uploaded CPython 3.12 Windows ARM64

stringzilla-3.10.10-cp312-cp312-win_amd64.whl (78.9 kB view details)

Uploaded CPython 3.12 Windows x86-64

stringzilla-3.10.10-cp312-cp312-win32.whl (68.4 kB view details)

Uploaded CPython 3.12 Windows x86

stringzilla-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl (290.0 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

stringzilla-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl (205.4 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ s390x

stringzilla-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl (228.7 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.10-cp312-cp312-musllinux_1_2_i686.whl (210.8 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

stringzilla-3.10.10-cp312-cp312-musllinux_1_2_armv7l.whl (198.4 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl (223.7 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

stringzilla-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (203.5 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x manylinux: glibc 2.28+ s390x

stringzilla-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (231.8 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le manylinux: glibc 2.28+ ppc64le

stringzilla-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (228.3 kB view details)

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

stringzilla-3.10.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (295.6 kB view details)

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

stringzilla-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (209.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

stringzilla-3.10.10-cp312-cp312-macosx_11_0_arm64.whl (80.1 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

stringzilla-3.10.10-cp312-cp312-macosx_10_13_x86_64.whl (79.2 kB view details)

Uploaded CPython 3.12 macOS 10.13+ x86-64

stringzilla-3.10.10-cp312-cp312-macosx_10_13_universal2.whl (121.7 kB view details)

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

stringzilla-3.10.10-cp311-cp311-win_arm64.whl (67.3 kB view details)

Uploaded CPython 3.11 Windows ARM64

stringzilla-3.10.10-cp311-cp311-win_amd64.whl (78.9 kB view details)

Uploaded CPython 3.11 Windows x86-64

stringzilla-3.10.10-cp311-cp311-win32.whl (68.3 kB view details)

Uploaded CPython 3.11 Windows x86

stringzilla-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl (289.4 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

stringzilla-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl (204.9 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ s390x

stringzilla-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl (229.1 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.10-cp311-cp311-musllinux_1_2_i686.whl (211.0 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

stringzilla-3.10.10-cp311-cp311-musllinux_1_2_armv7l.whl (197.7 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl (224.0 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

stringzilla-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (203.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x manylinux: glibc 2.28+ s390x

stringzilla-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (232.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le manylinux: glibc 2.28+ ppc64le

stringzilla-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (228.4 kB view details)

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

stringzilla-3.10.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (295.0 kB view details)

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

stringzilla-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (209.7 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

stringzilla-3.10.10-cp311-cp311-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

stringzilla-3.10.10-cp311-cp311-macosx_10_11_x86_64.whl (79.0 kB view details)

Uploaded CPython 3.11 macOS 10.11+ x86-64

stringzilla-3.10.10-cp311-cp311-macosx_10_11_universal2.whl (121.4 kB view details)

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

stringzilla-3.10.10-cp310-cp310-win_arm64.whl (67.3 kB view details)

Uploaded CPython 3.10 Windows ARM64

stringzilla-3.10.10-cp310-cp310-win_amd64.whl (78.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

stringzilla-3.10.10-cp310-cp310-win32.whl (68.3 kB view details)

Uploaded CPython 3.10 Windows x86

stringzilla-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl (286.3 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

stringzilla-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl (201.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ s390x

stringzilla-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl (226.1 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.10-cp310-cp310-musllinux_1_2_i686.whl (207.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

stringzilla-3.10.10-cp310-cp310-musllinux_1_2_armv7l.whl (194.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl (220.9 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

stringzilla-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (200.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x manylinux: glibc 2.28+ s390x

stringzilla-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (229.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le manylinux: glibc 2.28+ ppc64le

stringzilla-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (225.7 kB view details)

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

stringzilla-3.10.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (291.7 kB view details)

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

stringzilla-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (206.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

stringzilla-3.10.10-cp310-cp310-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

stringzilla-3.10.10-cp310-cp310-macosx_10_11_x86_64.whl (79.0 kB view details)

Uploaded CPython 3.10 macOS 10.11+ x86-64

stringzilla-3.10.10-cp310-cp310-macosx_10_11_universal2.whl (121.4 kB view details)

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

stringzilla-3.10.10-cp39-cp39-win_arm64.whl (67.3 kB view details)

Uploaded CPython 3.9 Windows ARM64

stringzilla-3.10.10-cp39-cp39-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

stringzilla-3.10.10-cp39-cp39-win32.whl (68.4 kB view details)

Uploaded CPython 3.9 Windows x86

stringzilla-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl (284.9 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

stringzilla-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl (200.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ s390x

stringzilla-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl (224.7 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.10-cp39-cp39-musllinux_1_2_i686.whl (206.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

stringzilla-3.10.10-cp39-cp39-musllinux_1_2_armv7l.whl (193.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl (219.8 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

stringzilla-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (199.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x manylinux: glibc 2.28+ s390x

stringzilla-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (227.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le manylinux: glibc 2.28+ ppc64le

stringzilla-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (224.4 kB view details)

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

stringzilla-3.10.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (290.2 kB view details)

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

stringzilla-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (205.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

stringzilla-3.10.10-cp39-cp39-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

stringzilla-3.10.10-cp39-cp39-macosx_10_11_x86_64.whl (79.0 kB view details)

Uploaded CPython 3.9 macOS 10.11+ x86-64

stringzilla-3.10.10-cp39-cp39-macosx_10_11_universal2.whl (121.3 kB view details)

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

stringzilla-3.10.10-cp38-cp38-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

stringzilla-3.10.10-cp38-cp38-win32.whl (68.4 kB view details)

Uploaded CPython 3.8 Windows x86

stringzilla-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl (283.8 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

stringzilla-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl (199.2 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ s390x

stringzilla-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl (223.7 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.10-cp38-cp38-musllinux_1_2_i686.whl (205.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

stringzilla-3.10.10-cp38-cp38-musllinux_1_2_armv7l.whl (192.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl (218.6 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

stringzilla-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (198.0 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x manylinux: glibc 2.28+ s390x

stringzilla-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (226.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le manylinux: glibc 2.28+ ppc64le

stringzilla-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (223.1 kB view details)

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

stringzilla-3.10.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (289.0 kB view details)

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

stringzilla-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (203.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

stringzilla-3.10.10-cp38-cp38-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

stringzilla-3.10.10-cp38-cp38-macosx_10_11_x86_64.whl (79.0 kB view details)

Uploaded CPython 3.8 macOS 10.11+ x86-64

stringzilla-3.10.10-cp38-cp38-macosx_10_11_universal2.whl (121.3 kB view details)

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

stringzilla-3.10.10-cp37-cp37m-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.7m Windows x86-64

stringzilla-3.10.10-cp37-cp37m-win32.whl (68.4 kB view details)

Uploaded CPython 3.7m Windows x86

stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_x86_64.whl (282.2 kB view details)

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

stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_s390x.whl (197.8 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ s390x

stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_ppc64le.whl (221.8 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ppc64le

stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_i686.whl (203.5 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ i686

stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_armv7l.whl (190.3 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_aarch64.whl (216.2 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARM64

stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (196.4 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x manylinux: glibc 2.28+ s390x

stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (225.0 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le manylinux: glibc 2.28+ ppc64le

stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (220.8 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

stringzilla-3.10.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (287.4 kB view details)

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

stringzilla-3.10.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (201.8 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

stringzilla-3.10.10-cp37-cp37m-macosx_10_11_x86_64.whl (78.9 kB view details)

Uploaded CPython 3.7m macOS 10.11+ x86-64

stringzilla-3.10.10-cp36-cp36m-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.6m Windows x86-64

stringzilla-3.10.10-cp36-cp36m-win32.whl (68.3 kB view details)

Uploaded CPython 3.6m Windows x86

stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_x86_64.whl (281.5 kB view details)

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

stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_s390x.whl (197.4 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ s390x

stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_ppc64le.whl (221.3 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ppc64le

stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_i686.whl (203.0 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ i686

stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_armv7l.whl (189.8 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_aarch64.whl (215.6 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARM64

stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (195.5 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ s390x manylinux: glibc 2.28+ s390x

stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (224.3 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ppc64le manylinux: glibc 2.28+ ppc64le

stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (220.1 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

stringzilla-3.10.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (286.5 kB view details)

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

stringzilla-3.10.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (201.2 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

stringzilla-3.10.10-cp36-cp36m-macosx_10_11_x86_64.whl (78.7 kB view details)

Uploaded CPython 3.6m macOS 10.11+ x86-64

File details

Details for the file stringzilla-3.10.10.tar.gz.

File metadata

  • Download URL: stringzilla-3.10.10.tar.gz
  • Upload date:
  • Size: 183.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for stringzilla-3.10.10.tar.gz
Algorithm Hash digest
SHA256 4cf002fc70ab4f88dcc2c329d8bd069a056c52f2527d241fa78a84ae7b3ca877
MD5 412db85ff148f619edcb85d62d58b546
BLAKE2b-256 76e2eb0170ee352c9f7fd98bb98d38034688b235c9d7fd1634579a3d68d0ce71

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10.tar.gz:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 e0728f576502db18332fb0bd27678a771f020cef1350d34fd9d9cf10bc29decb
MD5 ae1db6d487968ae429a895d3f180c78e
BLAKE2b-256 59ce3f9fab8faf78f7629df6715429717292907d78862008b3e640fa5eb88bb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-win_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 697643485344401709a845d100f36b768e90e8a4d15199d06d464a1f2249e2a4
MD5 2f59e89bfb4c5ea5303a0309fd98b5bd
BLAKE2b-256 67142abbbd54aefce7abf162fb30c22c9baffd9cce30e0fef574b11984ddf85c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-win_amd64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 1f95ea56719b0768006dd237aaee1ab4f700ff594a67c4b169d531cbcd30ef5b
MD5 41b84d110b6057752b2124b5b616c5bd
BLAKE2b-256 787ddb92ae0a892eb264515c0113e7effe8299e50eab4b92257d8629379e9d8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-win32.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3c567cc35417ff29a5b3bb875e0fe9b64cda1965e439cb1088138e2c82633935
MD5 1a28152ec687e10d8c10127c77a0eb13
BLAKE2b-256 ea8211d7728c43db4bc86e9f60a1212a62705242cd3bdd36f493d6e8eb8eeed8

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 663d986d50bf052446d8d28ab4392b82b3540be2134fb9763ac80f49ae1163c2
MD5 8dba9168b6f08535e3dbf029d9f656ef
BLAKE2b-256 8c6c7023c8d0db9c13ee088ebeef3d75aafdc2a1ee1b0ec787dd52e18a4dfe3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 81bc26bff0820acc7b3081feb0e52a29f17a542e1d63d247c32c0a17a042e7fa
MD5 94ae19f371ce589afe68da9faae14a6d
BLAKE2b-256 1c5e4ade14668de4fdf1689c34ff7716c298484afc23aeb01d0958100c2640ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 b40db77668213c1c790b6a470ba45070fb1ea6e07b0feebfdf2b9b96a6505e4e
MD5 950abd909b62664d13c7f8fd86a4a3e7
BLAKE2b-256 312e98521faba004c4d7c986c14aad43ed61b6ed90088c0ae88764271a7407ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 f15162b069dad490f39d76dcb6f852b215b1456dbcc885866d72011d3d24c1b5
MD5 7fc24bc4ee3449ad5ce6ac729cfe0c8d
BLAKE2b-256 a95dbcc5869a24d1167a5e548cf00d5ac2288e754f317f7c33c534f8c53aa46c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_armv7l.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 65022065730d38c4ac10807a346d6e80b5e26b8c9245a3b5b6ad99ea82e76f41
MD5 08de9143652eca65282014fcbcdde5f3
BLAKE2b-256 9604f36a4ae0ca05a2d4e48360d3bd7653ac8904925f507fe014c3fb1ecafa04

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 7ad7a8dbde99e46136b7f18e702670dcd43a91eb2aba7977e88be817afa04e78
MD5 6f66cd8dfbcfe80b5d9b3d04690936da
BLAKE2b-256 058c65fff1a5730debf5c638d26a646d92e96611464b71693d8767ac9f57535c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 a2405f203bad59f3a8c059db5297ea7ab30f70f71be9c05c726cfb7a6481504e
MD5 84988fcf70a1e36afa951cfcdff476d0
BLAKE2b-256 02c84b01ea3201daff53b938a8fcc0ad6cfe38a1e996c70bcac29e3f82fc777c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c8c400f99cb170e268543c91186f67914146a4bd9a23ec0c90cb023ffd564efa
MD5 c4922bb62764cf9f0ea5e2e303fe9d4d
BLAKE2b-256 4f6c32ac9a4296f48e6b9c525713fb94b85b0cd5ada14fb4b6dcecef8732a329

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 07c462ab35966ed6772e45976fb5023293ed65ccab80afa2398243ae8c796a31
MD5 8dfbc4948a1ea14cad9170548e24c4e6
BLAKE2b-256 f41ea8a4d7a8faacaed48d0111afe7b24d7e1c559edcdcdac95157596be49366

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9c50253a9baa6df878fb7cd006322a6135041d4cf01768ffcb45c8e960cba078
MD5 d757bd03622334b011608ff4af582f09
BLAKE2b-256 22d9b78ba82781d2fd860c63c27fb7e1698578edfb827de17fde7fec9ccb63cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e48e833771faa52f750c6052b5894df78b3df1660618405c75cf0e86c928bd18
MD5 482e66fc3134794cd842be5f7d201022
BLAKE2b-256 14c6ece67a189774ff722e92cc9541614344e063e68747380bfb4267d99a6e99

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5614e38857f4e36210784b877ae55806aae59c87f37188a4ec103aabd9e80fb0
MD5 a1f31faca6fd301d057c880616a653be
BLAKE2b-256 e4628c55e77cc865766c303062fcf7efbf8bef5ab768d9ca5d9603623930deb5

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 6f7cc6696ae926798ac4aa8b63550003611502718a50461c30c3baf78883c2b7
MD5 b10993afeec013cbd9fdbdae33e885ab
BLAKE2b-256 03d39e02a82d3636a88688916b8efbb340e9e83adce194a9f3a17b62b2157f0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp313-cp313-macosx_10_13_universal2.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 6d46be49a245da9abcfa8b6c69dde83e9f6699b79276c79da058c3f1e6c57685
MD5 9422519ef68cf238041fa6919432ff29
BLAKE2b-256 eaa0acf904b0059c67e1b142c8a77144194058b5bf357ab3c7b1c2386bec7123

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-win_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ab330e7e9cdd2e970918a11dbffbd4a355fdc8aab4055950486908cf28b17972
MD5 37909621a4a713aa1523fc60f6f28a76
BLAKE2b-256 62692a602d88709666c89dfd06a019df0d8264f98ef17b8cf1334997907716f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-win_amd64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 deae343488d9bfda22168170c1f5018bc35a1d70ae5fc64b59ffaecb1efc86be
MD5 4d2dbcb66aec5ed93277273f0767fceb
BLAKE2b-256 be3a8f0df2af4297064d06ac30c74e8dc6575ce568808f18cdb50d592e207093

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-win32.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e8f687b17bd6468a52ad69e6a3c8a553dfebc2461be782fa015039a985cb4fd1
MD5 d0400d1c5bea0d31702c6c36bc806464
BLAKE2b-256 8b97628b0899c1619a5e5bfb931c9ee051928a04b5e9997585944eb9ff80d4a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 f4d383b49635a2b6c51affe39b24b4f85927b41616ff8807ac45d0946dcc2b27
MD5 3b71ba29b17ef2f80d6fbd44920c2fb0
BLAKE2b-256 e6ff5676f110eb89a7a2ede837b61ea8250fc8cf830edace62912e15887105ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 c2a92858f64cc5eea72c876864727d58bfc74cae2ad7a43d68faca433b54fce6
MD5 4f1aa5493745fe6cc1bb02857f939cbe
BLAKE2b-256 c7877e32e8be4fa3d00e1306e709398469a49c9af9fcb6f73ea459dd1db5d026

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 3e39364f23098f8ed5b4779d2cda75c0d1b237c8dc35f951aea3df096c6748ed
MD5 51ff68afcb7b1a7f3e4a9527a0ff4933
BLAKE2b-256 50a97ea324f4ce2f3e1cffa37260ec13d3821e5e3e2515dc5d812604a1f7ac9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 8668adc91a433dc32645d0ef2489cece7b8c4376796f2c0e7e4cd4ce1f69612d
MD5 81aac9995eabe1c9ca876ec4e3c2e101
BLAKE2b-256 d8a60c2103121fd4495a344c8cd633fc17d285ac545b50398914b1db579df56b

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_armv7l.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f8b40968253b686485cd3214d368f70bc06ee6ea6e8e8bbb153bad1d2e76a9fb
MD5 5e17a2616889ad0bf52a52eaeb893297
BLAKE2b-256 e8e431a4912ff2a465ed7b42f8b9585bd8c9f0d3f3b43d0a2f05c5e1e881010e

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 22d89c9fa2a45e14034239bc63b41ed5a307672d478b6c49dd0bc0ee16442652
MD5 fd71581fe388cfd076bf4f84d9981149
BLAKE2b-256 d9d5c0d0ec1d6fd47098ebf748b0f33a25e7158d690aa2ff3bcb6c90ad8ccabd

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 12f9574578f967706fa3364b7ccfde4dfc40fc349da02b765e160ddd84e4563d
MD5 84164daffa61486d240c99bac5f426fc
BLAKE2b-256 77a4abaddc6963d6084de892c2677d38263c8229810be70a86401cd653894c35

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e77dfae13dc98da6c10b1806188db84c0b43c7cb21d7417e99faee82aba0179a
MD5 9708a2af0dee1495f141b87f8573e606
BLAKE2b-256 7703c699a116f670db7f6227e758ff8f7e667bea6faef5760dcf32f3c3d3cae9

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4546142d591e8551451693c7ebf73bea6bc6e77d1c726e20fe708b334a97d890
MD5 527d3a76169181218f3d15a32be273d8
BLAKE2b-256 a3ad7ffd15ef808346eee74f79c46aa7e8d38fb372f914ba6236ed2df71555f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f2e5299e7e857d69fe213e2808fa73b198b00439267653b85d83a6f00a413eca
MD5 f4a0ed35f33d8f103b45dece28857ff9
BLAKE2b-256 668fb9cd6b62612f72db2ed0aac7829c93f69c47e40e2a653450213319c4422c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56790ce9263c400d9775d4fe5cf23eac6e708fec2792ea03a0d6dc6a5e0bb0d9
MD5 6581f07bd4a7765c91f87419c32b990d
BLAKE2b-256 12a250e7662e0db1f78fb9daeade7a075e1960964f1ffc2d5a3d9d1585a08f99

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 329b0e64656ee97e1e642cad32cea2fa1c2e0ea37e6366006362e467886e2c89
MD5 68e314fd5feecf390f6f35ddf2947659
BLAKE2b-256 ddf55fbe95cee553a1530004e3eb57e2b06128f4cd51a9733dc8d5ad2fcb1af1

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 d2894efe2d5ae80d1aa7cc855bba262c73a5522e27b78d3eec9f4da5c6e433b5
MD5 55404e810b865dfff3bcf87672d83f07
BLAKE2b-256 02f247dde07662345179d892d1765a56017c5cd4b0f2e0372e222748dc6806fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp312-cp312-macosx_10_13_universal2.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 07568dd5e19739401ab7168feb1ade0dedfbf04bafaf5ff0d022796e26c42250
MD5 8d28bfff516c6460fbb9d17e00462019
BLAKE2b-256 fc070a19aff976c7273a8e506a8dfe5ef921ebd0b4260c929a7e6dc70922d84a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-win_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 899af4e164cdc21c4be91c1a87f39a27401b9318ac8d8ab8d8b038d1e5207c96
MD5 82adc2185a1b80abc015d131c1236a84
BLAKE2b-256 516a97dd333873e020281f26f14677c101d8b437fb0ca6a3b7f0187d9cab9093

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-win_amd64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 6e7b95358f583dd0324c0c1f0bedcdcbeeffa5fa59380adf823055d675c3dd29
MD5 f37baa87c93babca8a9e3b03b09fdb63
BLAKE2b-256 0b2be4da52c90aa0fe7537a5f71d74aed38d5cae1f1839d1c75ed1c83748dfd5

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-win32.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8e96777ab6bbc8b8a2db641dddb6af16da38c0a4cb768a52bbef3b8917f48d3c
MD5 0e596bbabbbb211f95eb76f26b77f2d1
BLAKE2b-256 c5f37898c5166feddbe84677f10eb75a7f5b168fdf905d255d8824b8eae7ed18

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 aedb583a882394fd24e2881c8f730fcd80774a4d7969d02bb5c302f881232985
MD5 29bc2a5692d1a619ef63f5a2af6427e8
BLAKE2b-256 21f72e28618f26881121d8f361f033788c3cbf9dc8974ccf12d7c82a45536468

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 89c6ad4fd6215bba0af592346df3c7b68f1858cc1a96791f049a0ace11d73cb0
MD5 4474aee449a0299e5fa38a32f2b7d119
BLAKE2b-256 800587b009839739c3e4a6747126c6ae8bd8016035eddb2063e3b83247eeb717

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 577572a038334f5f541ac81595ce320f198cc951ffc082480278395c42559b44
MD5 bbc34f65002d9811175e009faad0ee66
BLAKE2b-256 0c9a71afd18cb6701f283e24e752cee67383f33d784519e8a6c4cd242701a0f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 557b501d0727dbfd932d7ca45191392c2fbac5b4fbb3c300c36cec35b93864ac
MD5 517d6a6244410fdea2a3e28283982eb5
BLAKE2b-256 50be9d6966e9f966023dc3af6803de4f09e6be5150f2167f9a63537da77e7dab

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_armv7l.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5e13e85e6abc409a581c1b0d2ba503e9d1070a8d07c50fb023cb2d9bfe05e00b
MD5 be96ea61694f2731ae5c74c8981e72e8
BLAKE2b-256 d602e5f99b4805b072f5999d9df73c292e6cd8ef5bf6bf4c7fe1a8b5fa0c2246

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 218b1714ed4056df1855c72e9f7ca2a14f2820e96d9021da96a72fe38780fc8e
MD5 bcc8c3da1eb535b189f2b2bfd563f54c
BLAKE2b-256 97e654b57eaa67e5d347fa3e24a5718628b487acb505a2d2d097cd3633669213

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 3d9d38a71fb4a5551cc55d792906b9bc9da7cb14ba38b0b50d971b94247c2d89
MD5 9ffb5833b1229d12150f822c8e556910
BLAKE2b-256 83ecaa03a3c94906a77309055ec65e4f17532042cdb0536c559e4896f39e732a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e62fbe2ef48804fe80eb9ced329181fd1c2aed305a972a3733dc1ce98e40396b
MD5 948442c720715835ce8b539510c17b2d
BLAKE2b-256 777fd522f8b930d0fada1ad403dfcf59d3051dd1152e78df7cc2be8b7c2edb88

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2aa94b1b03823c78cbadcd72e5b7ed2837ec1866e4eb29b5a51829f8e839e13c
MD5 fec6124f84ee98ead214845e37d812d2
BLAKE2b-256 03c15ca88e5062f69aea2cc49eb0d7c207d2b2666b54e3c398b43ba231cc5856

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 dba9eb7ba34d3fb9b7a6f84dd32c8284ef08605a8f4ecfe34c675378fd4bcb35
MD5 d6c037bd6d9338b02e3e419777dab0c5
BLAKE2b-256 f4f40d1d0a867a47ac6acd72fa1e55bb2b0c7f99b49aaef30c77209149609e1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3aa1ee3ea4322a1e9ce1183137419546d770d6a0844965755dee280515f494e5
MD5 e80fa39a4d7ab8f737d182639522eb65
BLAKE2b-256 63d36aed2bb65c24a012daebd2218d91d988ac019e99b652b2d110570d5b43d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 1716915151c7734238386bfaed0ad4cf8f00736b8e328f25da6b3aca0d49f1e0
MD5 5c56a7f182524adaa6bb3e5c4c3cd923
BLAKE2b-256 2538568f3e573bfa901619f94286223f92e9e3b43d7a38802e688a0e9726e7fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-macosx_10_11_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp311-cp311-macosx_10_11_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp311-cp311-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 6347dc7bc384243dbe64050c65f07bbd2d7bba3ab3914ca7155bb2f4d965a8a1
MD5 71166d1c2773927639c2396e81590206
BLAKE2b-256 8cff4470c5244fc6cce19164be759981c14c75868a339586ca31aa39796ebc5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp311-cp311-macosx_10_11_universal2.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-win_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 3a004ba22756f004624c406d64f71811378cb4d3035b3f201769992d33c773a4
MD5 6bd6d76b76f2388b55fb95348b7252e3
BLAKE2b-256 d7ee76666fb29994a9617e3e2e4e2a7642ab9ab7d973d0febfa0daa8c2112a61

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-win_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3685ee3f73bbdf19249345c8e3ce7e5db11458d34342394fd0f755f586eb02fe
MD5 e8f00bea124d01a3a414d232fd160411
BLAKE2b-256 7a672faf7ac98cf442ab615f701e7dda65dbe995767aa80f309f1b0193abb825

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-win_amd64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 a8fe10de8484554c5e87b1ae1ede81827aa980b227c7930bfbcc35b01a790f80
MD5 da0a4ac56f9da8f1e3a445a6b9f1a2a0
BLAKE2b-256 9a9d6d3de943f26b75510d587c9f6f9b022d966e583565f160eab3bfb573f865

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-win32.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 330ac905c2a3a5bd5ddcdc7ef4fa4240cb6211c43480425e4938bf1fcfbbd678
MD5 b6d528ce4eec1e823388c20c32a12a34
BLAKE2b-256 9b2c1ec014855a22ab1bc4c435485081fa9cbbf24c3cef9ce8facf895367933e

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 3e12013e25a5fb5151f9f24b6496e4de9c333a69c0f363576f0759e49d874b95
MD5 e0653662c1579360e0df7cf827612816
BLAKE2b-256 ab7c38c56b07ac0f8f9c4c66ad02d18f4e1b0d6bcf66955d10f0bd53ed7d35e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 0cec5046a5aa5eb874b70ac85df1b826179f4c68e4b601f8da4f9fe19a4848dd
MD5 ae57af110e927ab74c10706cef0a0eab
BLAKE2b-256 41c8c18595f2b7425c2c967ad74b619e5afdf6daf9a29cb8a06b5f41a27f69d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 263f58cb50957c21a31c7ac8bfe3b781dc8095223eb118a83c63dd2ab5bea3f8
MD5 b8e8bf4ac1d4c12192415988769f978b
BLAKE2b-256 46fa30caac5da5d718dff1106980714fa0bbcb6803d1614c9e0ebb68e35cb224

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 fa02f05c2329138c0c826348fd8080e91842997cc5718e3f714d37cb06738e6c
MD5 ce73743ef1d9dc74cd9ecd1bbc08f4ca
BLAKE2b-256 5a36aa260a0df304581cd595f2cfafa357e65ad76ceae8fd85fbd8de2ab139e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_armv7l.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 92461af285d7688220114cc5cd865955201dc136df4bc8ead11b95b716f4827b
MD5 5fc21f7ede47e9317c48103095b0162c
BLAKE2b-256 245f96d0d8200c9ebe3d1de71e4fa3e101c69b2f3b74031b9c4e49d5220e1a82

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 f31a2b0a5f54e2dd8179dc2c563df5aeb1328579d21675aad083a878a850c79c
MD5 c46c9009c2df2f8b043a93cc2673ad1d
BLAKE2b-256 5a02c456954d8bb13c955a1ef23e9a46bcd389cd8e47a288eb960ba5f5f19cb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 29e4b8a61e2183e5e2b0c84d9de29f9b29cb93b7cef686c277cb3736c0cb3165
MD5 8c52b94e982b60cccce872aca47e06a3
BLAKE2b-256 2e2c19134cd226bf10b0f69082395460454b7c3b787951325da0a1c6d094284a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fcde7fdda80f7ff89775ba1a8c1628597669ce160488cdd59394cb6059073d54
MD5 769525362246b052c21e9708481ab98e
BLAKE2b-256 c88fe0a45a21289a703ce42a6f9dd13ecf580e4f49eee11999d17d9054663f0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1671f4a78d68790f7403be0b791134ca3cb56bf71bbaaf04fe49f1be6dc1b0b2
MD5 702075b2657ba154ba8cf276aa0aad10
BLAKE2b-256 2db52a28ce2d5d9d401a87ee2c1b074abd9eb06ffaef4094a1262a5056fd05b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 25e5f527409369900924bfea9212cac215a7ba8dea1d7358fbe64c66cae54076
MD5 1132bd04dc868c8237ecee958fa24f47
BLAKE2b-256 b108ebd71d89783ab3d99cfaf19d38a30ef17247eabae32f509e7d35dbdad6f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9261fd08db2e8cb51b7313569a6f999cfeac9e562e00bdec543c776d72521551
MD5 380bcd7a451cd5ef11cb2fa85d73382f
BLAKE2b-256 2dd84360bfe18c084abef7f106dc9db482203ce9b3121afd0cd1d08fddde9183

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 a76d7f01b1e5e3034b2e17b6ebefc70840225d288e97b4672f89299b8d49cc93
MD5 98d6e1fc3f8b3f2ba03748f45d390024
BLAKE2b-256 ff1c1f113912b68de2771342b1bcf7ed6c0e27742c623e40448b005ad87f63a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-macosx_10_11_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp310-cp310-macosx_10_11_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp310-cp310-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 b1161bf30dd088d5b8135a2249db93451a77d174bae3b5dfcf880b3cdf471ec8
MD5 16589f44650f04c7bbdad2f33eb7a1aa
BLAKE2b-256 fea6efc24affddfa52cdc69e698845bb5a1b975874d3f604e008beaa9e7edea3

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp310-cp310-macosx_10_11_universal2.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-win_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 be08c01d17084ab15c07badeae2590e2660800f7e23c0d0072b944cc64cc2a51
MD5 c94c6eee602afb4691dce56b2e8f1b8f
BLAKE2b-256 533e974c517a3ac5629c340441cc3c1bf3504072879407ae3d2b50f1dca08042

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-win_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1b2e2b79bc56ac1ea9f9ce82ad76d902b7bf336da697ad621f548592270286e0
MD5 625ee70eac8008f7661d52abb8481ff5
BLAKE2b-256 90d3ca8070fface6cb284e190fcd22aa0aa4eab8e06f7a65447126adfcf8734f

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-win_amd64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-win32.whl.

File metadata

  • Download URL: stringzilla-3.10.10-cp39-cp39-win32.whl
  • Upload date:
  • Size: 68.4 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 603b64569fb20a0b48f9eea068c4663203619c1b5c316cbfb6562f76b5180dd1
MD5 00c0fe514e0695a982a3719c7ba2fece
BLAKE2b-256 d9c2b12dc42aeb322dde53cd5ddc974634a1071eba783605dee6027957546028

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-win32.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fab0319e6db80d55d65148fd9a9c4c2202b9df982269a80e22fa0055fdf89974
MD5 3fca89562f669ad5229d501e6f3c3587
BLAKE2b-256 b0e1b07ce0df6555338fab34e75a39818a024e46faee0f8fe3a4ceb40591b5d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 e687d8a16b4d01c06925fa305801acdb69c9a20246ab7f613d0dbf05d275239e
MD5 aad89d176d5d880d79deb8c216eab7c5
BLAKE2b-256 00c6eacb26e75b42f3c5201b882e338190af70cceccc40c07abf48b3938b7c9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 a30b2711094affad6535a7c4fc5d170652d2399d25dbea6da943cf044e61d0a6
MD5 3dc1d4e2ed434af69b0a253f2621d10d
BLAKE2b-256 7f004ed75f920ef1249d813cd29a4a4a45c2d7ae1dd7bac22b77b8c5f4c25f7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 b6de33bf3fbf9adf3cd168cd07a7aaf76a38d2227ea54037803b70d95b6e1a6c
MD5 f1c9860653e4e11b7c628973e5e9646b
BLAKE2b-256 395b8212f074b92c432706a666905d48eba516ea28ffd21854e0359601d46971

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 bc6c8341b6fe2e131e4cdede46d86dad7bd177a3b4e00186a7fb424eee965b88
MD5 00fff9449137664e2f75c43568d2b80f
BLAKE2b-256 3c2ed57c4d1a218a74cddf31fe74677beae4dc6db834bdc4fe83fad2729705e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_armv7l.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9d4dc207a01f368579d7dae270f8b1e9974d872af0d8881161a47044bf8ea9b0
MD5 9a4bf33d3ef3e1e1ce2e42a66dfc20f9
BLAKE2b-256 2b4d3d687ee3a47044b13168b28153d1702d7d2d49c443cd574a7a549df87173

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 59716fb2c4a5b1e9531bcec9f03d197e4aead781fe474986b5d011db6dc60517
MD5 f6ba343f9c983dfe6ec2dd17479ea319
BLAKE2b-256 1a0bf2d33d648dc34766f5a7b45192500ca5bda4430a01a445ea4713a4a1291a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 b26a167aa7bf57bde815d11c037aed47323111b06d7be79757c0ca2af1e84513
MD5 c80cb3aff8d7b2a9e10a9e64a65d1905
BLAKE2b-256 a0871b2ef06607b4c8c06c7339961d7489ccf2dd69f4eab8e58dd1a3a426421d

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2e7c2c9bdbf3a781288cf32f9d949e5a3827f55ef7365fac623eb228219627dc
MD5 e5d9fce580b1de944c8494defb2269bc
BLAKE2b-256 a957afce068c51e2b0a8d337f529650f8527ced6c4d1a52c0987e7bde738a972

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d0a5a2b8a7705bc82e3d5ef0b4517be296366fab0cf5c32ab697237b045efec1
MD5 60eb7c26611166553cb2ba5d28dd4c91
BLAKE2b-256 7d78b6ddf56edff825e5ce844c8b7f4f99e571a8c1cd8357d8064f4a9c458477

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 bb47501923dc620041f155da97b502c780a38801358970fb7757f8c90aa305c0
MD5 3c4717434b248f5603358d27dc5de1a6
BLAKE2b-256 602d5660d733bb0ccabef67a866392d723033878cefd25a53e45ed0e637cb4c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dbf2eb2334092dc9e440e49480bb4af2e7c022fdc607ef280e9b4eec539e601a
MD5 7b84c104f9cde61b331f27af9198413e
BLAKE2b-256 bccaffcd2ddeb294bea323670ae603ca7e9c029722079e9d45f45b56b283a665

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 6b918e0bb565f7e0bb89ba319e77be000637f2df51406167de4a30b8fab20552
MD5 7e3917e547dba7d81c439478c440afc5
BLAKE2b-256 d20a81443da58010a039eb6a372141bcea90f264095b356c3b5bc58dbfcb9467

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-macosx_10_11_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp39-cp39-macosx_10_11_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp39-cp39-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 89f8ef0baa76e1b63e658ec8211ea36bbd88b710e5a1adfbb7ff1c154726adc8
MD5 3d1cce0832840789c5fa00a014049cae
BLAKE2b-256 fe05d8a86d56afeb39e49b02c37c3e0d09f49845a897c4fa838e8153eebf0d53

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp39-cp39-macosx_10_11_universal2.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2fed3d492adaafd1ea6a38f1b2de015a36ef80d218c70d8b23bc4209a3037535
MD5 57f5da16515556148f40b4b1962aaf3f
BLAKE2b-256 5e79b3d2fec351200220e08267dd2e3c566fcc718b1c8318af61c550dfa3579a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-win_amd64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-win32.whl.

File metadata

  • Download URL: stringzilla-3.10.10-cp38-cp38-win32.whl
  • Upload date:
  • Size: 68.4 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 76ea7f0b826dc5b5ee1bb0d8a4e76e61935fc93a3051a5830a75bff2d1eacd85
MD5 947363e21a050d57e53a7dc307e82421
BLAKE2b-256 68be006a4c528b5a405f71ffe6383008ad22be4a3529fb0283b52eae94a132b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-win32.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49d4c21634fc8af6598d4b70ec68c0af6912969f908751e277b9aec01c834d40
MD5 c8cc55d659fc1e34b2834eb64c4f2f63
BLAKE2b-256 ef182e0492a8a52d9aace7113ff0f5539d9d509360f7edf7fae1496cbd9642f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 e7d582546228089a09a040f4101ebe1c5c86ed1df0b11c15078c9256a4a1ba21
MD5 6993e4e522f4bc9faa46e20e2aa24817
BLAKE2b-256 04f7cd3ee7c4330e2ba469749264706433f85a5052a43ff570a141335bfc9e2a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 01fd75ea8783ecc0025c96f374e0347d3024e1ab1e4cb0d2365735d539cb41cc
MD5 f3b89323a159caa28a69eb6cf759dbfc
BLAKE2b-256 b9f1561aed895b60e1724e7c88909962ff922e61429ec1ee322f7582af4e1bc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 e9626e64ea41fbe15527716bd7d35a1c60604618de1ab94753a3152d872b5dd8
MD5 184a4c432f35cfcabe633f1a67b62dd9
BLAKE2b-256 dd1590ef78930dfb3f5928aa1a28636a24cba3edd6231d26235bdc55cf03b124

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 190c48a7ad8e09b2674450a2f10ea1dec54192d801e72283b6bd9fc6f2bbd4f2
MD5 a8a9702cd4d74c8562791fc82761c469
BLAKE2b-256 298b668f1263519e547a34a32bb474ebcf3a70ce0404b8f2c307a233e9ace37a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_armv7l.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f2aaaa53dc3ff14eabc09e0b98c7ceac0369e830b45779fdc83d62e7c5b1873c
MD5 debaea18e3cf5d299e6496af176fe130
BLAKE2b-256 c244598898d9118208bc2edde24b1c37add3e968b098b84556918de342043bb1

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 228368cf6b9b3a7580fc57569f65d54b6c14c1e2c8600ed6c2a0e1c61ace5600
MD5 a996e7ac67b04d585e16c3d03abd6dad
BLAKE2b-256 2f08139200eb13b93b9c9cf3badf2cd1899344e5ec0066acbe7454d31c513616

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 0c693a24da15963530f55eabcdb83ad5f458e7b50ab20e5ab77b2aa9cc1930b6
MD5 ebe84b62a0e97ad2a5f92650859064e0
BLAKE2b-256 a52f97c686b4d85d12a0694bcf9c3e930b1dcf107838bf11c1d072cf31f4d761

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3f8d8a4e43d2ebddafb4d4a657d369c0c8adf862fd047e8af2e4eaa6845d6785
MD5 63151c140c46d1c165088f9c68c4298a
BLAKE2b-256 6061f9c4929707064f2609c18cc054bd4052534c513f5fe4c54a598401bc2762

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 20e77232f30156fa532590185b4a374ae92c41fd2cdcdff3ddcc9eeac325ff01
MD5 d9a6b82176a6ed78df3c8b4f28242d0b
BLAKE2b-256 25887fba13fdb6eaf0fbc7cdf724eb07dccb26ef3356d5ba23c6bfa946992ecf

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 305715b4b672b132c307b31c3475463d6c6e740c7dbe5334b468eb524c578ac6
MD5 fb8c69bec341a00d4a3f54e2af69d91a
BLAKE2b-256 c131f6d34102bfcb161f395573b670244415a50f3615ffbb03e836cecde9660c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c43e5fcfb6ca320346ea2c3d24ad79119e6853fd3136ce26121158c4ecd9d32
MD5 94f1f19b277a4898a5c2d2d73cd628a4
BLAKE2b-256 65f94410f6c8b9753016e9c55b974f9e8aa50904e62fe6262d4833c6081c2a50

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 3734ba45d3a35f97aeb73cd4f6056539b515f706e2a2ad42cc1d5a7ceb599664
MD5 e8605fcba48a9c6d64cd85456cd26d09
BLAKE2b-256 9e2f06ea8b58aa3b19809546aa31157a9a51ca5d4d00b6ab8c92875f6dbd761c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-macosx_10_11_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp38-cp38-macosx_10_11_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp38-cp38-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 23967d0bcfc3de8cbe3c6ecdb326bd3e5ac06d6a58999c4b7fe6f2b23901f649
MD5 2161b45163a1fe4a33a0ed4fcc512e1a
BLAKE2b-256 af3a3787ebc41b4e967e08691c854d3073f819db7d53b67de84ae44331bc51a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp38-cp38-macosx_10_11_universal2.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 fbd55d9dc999793ece531b3361b7fe8f501ca1c528a02d5b40bae343883b3a6e
MD5 70e0f1fa02744f6b7cdf212629bb1e25
BLAKE2b-256 f4a1a7657d017e488ed6f4d922542f13629131f7d09e0e3382ac3fece28634c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-win_amd64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-win32.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 bc22248bde073bd72f4712f5579c54b50492a50285a33579927fd2e70bac603c
MD5 2b82221f597dbd5e94a2fddccbb684ad
BLAKE2b-256 73ce8fbf4e81ca2319491eeab96891fee4c97db208b91f210af09ff7f173ceb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-win32.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 78de8987252c645da0cc83646b6d10a1b9f02fd11061487687b93f1c4c66d0f7
MD5 9d48a09a7f1b00fc9ef9bd1e127bc520
BLAKE2b-256 2983af90324f23a5422a568dff5ba0d7f02222593db300c9ba25f8ffc70991f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 0fedf15becedb11e81fa96fb09d5bee390888408a25946dda15929f08d10a813
MD5 d0899c7c6ea7299dc5f5f8a9a7f5a33b
BLAKE2b-256 5fff2ca558db13dd02cb18d1cdaa8fa9f9a06ca30c22f02bd60648aaf45c6a7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 71cd57499f40203c31f7b9d2b58e0666e63876a4158c08dbe3272ae86bfca39f
MD5 9e7e95742301c820302bd5fa835aaaa5
BLAKE2b-256 b2c5916f9ae94acd264b5b0341b09f6f91f1ddf4317be89dbc71a6a3f9402482

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 796173a0e576b053235bea42f876331fe1b11eece3af3aafe17ebc09d997e975
MD5 2878e27b318767700ec78e865abb67e4
BLAKE2b-256 3116f8ec1d0c6cf102a6bb47ccee1c2311cce26536371ce8f7b13eda4964aba0

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 dfa0eb9923cd302a2d681e17740e550c6f473bf19b78ae337a8b5f5253709930
MD5 2712fd9662465778c35b5fe479aeddca
BLAKE2b-256 385ac885601f763f40bef7af4b46d2b635d72e144fd265d7abadbfa2874ed69e

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_armv7l.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e45791446254a4c77bb5648f936df2f214e88d8cd33107168d6ca5f8c2a73707
MD5 507c1fdd7a91bc573558cf64748eec13
BLAKE2b-256 cd47adb50d4dfd77c41bcd67f5206f2ce0d98830076ef5b4b3fee01e392a5d60

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 5aa93def8f8c6b8d0a0f9be7fb18bae2be0d9e1c64a16e95309e61abd4f44c43
MD5 4e0e4cd54b0d5df66f1b5a1c1c207474
BLAKE2b-256 a35e2d64d93938b50190990e5c18919a0f634492b02183935af40404ba276b4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 e386897355f98efa8b00a2c7651d0b16059591bf7cdde41044f73cfabad0e69c
MD5 eeba854e3efcc887f12500dc5d273bd1
BLAKE2b-256 12e14eb731de9c3e41cddaab520c8749fa6556f5864be3f8a1d397bca68e3d63

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 838f500884a52d7b5ab8482fb5049b2f6e971768259b4acdc80eeb78a52c4ab9
MD5 2ee04ad8138120d7b787de033c97fd18
BLAKE2b-256 12cf8ad1621672f792dc1f387a9f7d3a48990a4aec46164e642f232e812daf39

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2f2a30cab5023bd3ee04475875d301e78572ec4c6a36f308d043db505a3e7936
MD5 40eb4da2e02b067387988473ba3b62a6
BLAKE2b-256 eddfd0b14dd0f2eeab6357faa3041171f4d93998b70d21d68f546aef6371ad8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2799281342ccb2ee771b48153b690c2d6899b60d85f961328cc22af0006e7075
MD5 fd2b83452998bc6646a826aa3967aea0
BLAKE2b-256 de1b018b1b7d84cf439dea46d94566a3c403ea51fd66332c51b2fde1eeaeef36

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp37-cp37m-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp37-cp37m-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 e639d20b90d1d816edc5a7f2be87521a5814755bfc34071667387d8be8a8c040
MD5 07070ccf09942356d6c392f7e3550818
BLAKE2b-256 1fe1daa8f1b827719e3e7bff6570501834bad9ec1da20418a8730927f131f926

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp37-cp37m-macosx_10_11_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 a05445efe91e3674a549ff1cf06b844b6fc18ccf43d431dcae2308fde0d8096e
MD5 6e3f4fe3fb3832e80f73ac9e26d962f4
BLAKE2b-256 9fc1499aa25f372c2137dab29f604a367c42e0184b55cd28c063d1c06bddccdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-win_amd64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-win32.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 cdba558c535659744873ae7e48eca231d924aa444fc6259e45766e2cf3618161
MD5 ac891a2b7deab0dfa1814bc0acd00ac2
BLAKE2b-256 f87a4fe334712baeb323dff3abb99e12487971a5d512ad09c524059020f8a89c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-win32.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 405d15d118557e413d7516cf1edd59c44b803f7855792057ebdf863b7e98032b
MD5 56593a60f4cba872d86aacdcf3a6c6f2
BLAKE2b-256 c79083ed94888ea53974c9ea8c8a51253f57b99a8c106812c78dc2d1b77e2a81

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 ae2e08dacc0f0300dcb38e0b1030d76d1eca47daaf9343ef8a13492f3ffe1a4c
MD5 d700117b9b9d428e2cf12ae12c34a399
BLAKE2b-256 42c2d639455ce538e9fceb3775ed54f7b4e75495cfc2a52f3161c40a32cd8da9

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 ada54d51d0f91489b7338109fcbf3c7804d6da156fd4e1ebcc22283ca6e43480
MD5 7c4ec334723669f3ad7b033948300c2e
BLAKE2b-256 c90695ffaacb11fbf648dfe818a46570456df8c6a33a30f68afa2a8d13f3196a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 c1c70c4d1e1904886e0d9c608ff25d3997ce71c2896cb582912de88de557908e
MD5 4d1c9c81f193052af857e9235a495e0c
BLAKE2b-256 7f72a1a7138792af03e3fee3c0c3e75a9fc588c525e5bc9312125cef34eec80c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 834d4c032ed4e1d9abf99a6445e6889a97c61c104e547ef6309c1aff9b7d06a2
MD5 48946f0ee88f5ec417196d8561090eb7
BLAKE2b-256 264faab7a63b72a20c34a833561adabee3c60c3acb44083c6fd4866a81e684e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_armv7l.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 413023f8b764fd9a868dedd4318bcf1614c57609a9fb59102b1ba230ed4f690b
MD5 162b73ae5f069ae2224a005f29772ec9
BLAKE2b-256 c49ec52f2d92b9a8f2d3455fd2d1c5a5ee515271da99b373c8699cde627921a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-musllinux_1_2_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 3f2cd660e19bc74a129e05fa0b02e32c84683684d8ce1b42b1f95179446d440e
MD5 fc3147c2e41f3bc95af182db1cb5a69e
BLAKE2b-256 6cfb15bc1c6eefc7a1569ab067dc7c660affcc8fb8701262702451f50fc46936

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 7d94927ce924590660a158b96677c7903dd87e8d6539b32b1627bbee88b6871f
MD5 29ab472b6ce7ce18fcb4f16571b1fd7d
BLAKE2b-256 b9283c1b49abee7a9c871078e083c0e87187f9afeba917f3e8306f5cb9fda60b

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bd30128e4732481d706a757c9c9a0f56678216eb8f1456a06d5a2fa4f587da7a
MD5 ae5f6b41758af1f980e608eed587df10
BLAKE2b-256 82f3872be2fc1a7aac30aac9c67ae200d765fd552ea5b92e21563e954fc6f56a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 11539fc78b3e561f143da48c2a56948c2f8b4ab5f9fb2cd5e752f2d162d962d0
MD5 a055ddf2300ee375dc77999151460e4c
BLAKE2b-256 32026332cd69d2d8e00e77fdbd577ea759ab9acbb002056436c757bd58664cc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c275c12f45f66d009eb79153e85cafea471a5aed10f3a2cbbbda1eaef279048d
MD5 48dc38be983afae497024e55f88aa585
BLAKE2b-256 547c5d61d3e5c8f5c8fa1cb7fbbc59fdc6b3473f71193fd08a748c2e1af40e2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

Details for the file stringzilla-3.10.10-cp36-cp36m-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.10-cp36-cp36m-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 233ece4ca0e47cb3f5af75dffc8e75b2b18157ae39c1c000e98c0397a61405a4
MD5 8c96dd90acbbdea59bb47b5e10ad266a
BLAKE2b-256 af5af4064ab89115f0eda65737c7a2b3c3742d0a14f1d73f387da4b6c1dc2084

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.10-cp36-cp36m-macosx_10_11_x86_64.whl:

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

Supported by

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