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.9.tar.gz (183.1 kB view details)

Uploaded Source

Built Distributions

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

Uploaded CPython 3.12 Windows ARM64

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

Uploaded CPython 3.12 Windows x86-64

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

Uploaded CPython 3.12 Windows x86

stringzilla-3.10.9-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.9-cp312-cp312-musllinux_1_2_s390x.whl (205.4 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ s390x

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

Uploaded CPython 3.12 musllinux: musl 1.2+ ppc64le

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

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

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

Uploaded CPython 3.12 musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

stringzilla-3.10.9-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.9-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.9-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.9-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.9-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.9-cp312-cp312-macosx_11_0_arm64.whl (80.1 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

stringzilla-3.10.9-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.9-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.9-cp311-cp311-win_arm64.whl (67.2 kB view details)

Uploaded CPython 3.11 Windows ARM64

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

Uploaded CPython 3.11 Windows x86-64

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

Uploaded CPython 3.11 Windows x86

stringzilla-3.10.9-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.9-cp311-cp311-musllinux_1_2_s390x.whl (204.9 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ s390x

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

Uploaded CPython 3.11 musllinux: musl 1.2+ ppc64le

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

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

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

Uploaded CPython 3.11 musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

stringzilla-3.10.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (203.5 kB view details)

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

stringzilla-3.10.9-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.9-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.9-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.9-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.9-cp311-cp311-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

stringzilla-3.10.9-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.9-cp311-cp311-macosx_10_11_universal2.whl (121.3 kB view details)

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

stringzilla-3.10.9-cp310-cp310-win_arm64.whl (67.2 kB view details)

Uploaded CPython 3.10 Windows ARM64

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

Uploaded CPython 3.10 Windows x86-64

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

Uploaded CPython 3.10 Windows x86

stringzilla-3.10.9-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.9-cp310-cp310-musllinux_1_2_s390x.whl (201.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ s390x

stringzilla-3.10.9-cp310-cp310-musllinux_1_2_ppc64le.whl (226.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ppc64le

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

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

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

Uploaded CPython 3.10 musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

stringzilla-3.10.9-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.9-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.9-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.9-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.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (206.5 kB view details)

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

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

Uploaded CPython 3.10 macOS 11.0+ ARM64

stringzilla-3.10.9-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.9-cp310-cp310-macosx_10_11_universal2.whl (121.3 kB view details)

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

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

Uploaded CPython 3.9 Windows ARM64

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

Uploaded CPython 3.9 Windows x86-64

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

Uploaded CPython 3.9 Windows x86

stringzilla-3.10.9-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.9-cp39-cp39-musllinux_1_2_s390x.whl (200.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ s390x

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

Uploaded CPython 3.9 musllinux: musl 1.2+ ppc64le

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

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

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

Uploaded CPython 3.9 musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

stringzilla-3.10.9-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.9-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.9-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.9-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.9-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.9-cp39-cp39-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

stringzilla-3.10.9-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.9-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.9-cp38-cp38-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

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

Uploaded CPython 3.8 Windows x86

stringzilla-3.10.9-cp38-cp38-musllinux_1_2_x86_64.whl (283.7 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.8 musllinux: musl 1.2+ s390x

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

Uploaded CPython 3.8 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.9-cp38-cp38-musllinux_1_2_i686.whl (205.4 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

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

Uploaded CPython 3.8 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.9-cp38-cp38-musllinux_1_2_aarch64.whl (218.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

stringzilla-3.10.9-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.9-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.9-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.9-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.9-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.9-cp38-cp38-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

stringzilla-3.10.9-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.9-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.9-cp37-cp37m-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.7m Windows x86-64

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

Uploaded CPython 3.7m Windows x86

stringzilla-3.10.9-cp37-cp37m-musllinux_1_2_x86_64.whl (282.1 kB view details)

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

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

Uploaded CPython 3.7m musllinux: musl 1.2+ s390x

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

Uploaded CPython 3.7m musllinux: musl 1.2+ ppc64le

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

Uploaded CPython 3.7m musllinux: musl 1.2+ i686

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

Uploaded CPython 3.7m musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.7m musllinux: musl 1.2+ ARM64

stringzilla-3.10.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (196.3 kB view details)

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

stringzilla-3.10.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (224.9 kB view details)

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

stringzilla-3.10.9-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.9-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (287.3 kB view details)

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

stringzilla-3.10.9-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.9-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.9-cp36-cp36m-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.6m Windows x86-64

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

Uploaded CPython 3.6m Windows x86

stringzilla-3.10.9-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.9-cp36-cp36m-musllinux_1_2_s390x.whl (197.4 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ s390x

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

Uploaded CPython 3.6m musllinux: musl 1.2+ ppc64le

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

Uploaded CPython 3.6m musllinux: musl 1.2+ i686

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

Uploaded CPython 3.6m musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.6m musllinux: musl 1.2+ ARM64

stringzilla-3.10.9-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.9-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.9-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.9-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.9-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.9-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.9.tar.gz.

File metadata

  • Download URL: stringzilla-3.10.9.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.9.tar.gz
Algorithm Hash digest
SHA256 b71f20c7f08117657c4a9ed5c1c5e2af2b05f853548867efd5717b792cdd41b2
MD5 565bb1ba681549b3293e796d35a50475
BLAKE2b-256 1461f0a67ea3a7931401f593ec5175ef32dcf732e743d9356c811073bc2042e2

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 a6d027d5cec9cdff21b169fdce573206d2d2472e5e14b0107f928458c5c8b970
MD5 bbedca96d759fd85ee1d8d6117c0e40d
BLAKE2b-256 6037ed1a599ebbcaba83ad75e3025a9925d48f86e8b0aa5e6997c6b62b8a6f65

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 aa711d20bb3b302cdf143d536045853d7a8297b0bff9d2fdd797a57eea0ac7f8
MD5 bef3f1e30e3845b4ddec17a4da0ce6b7
BLAKE2b-256 86c4e9615ebb0e44d1ca4b7a9c89292ab4615ef74c0ea4533b2af6dc0931c026

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 c31471452e0ce4da735d07fd76d40c462934e390148fa8f15e40067382ba6f36
MD5 965c3c34c9b557281dd28bb228c8faac
BLAKE2b-256 0ce19248c54d7f1be5377e239ce0976935894ee1022d638148d55023f5e9b462

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 68ae3f2403ec105a1909be0aa7df3285a399026bba20b39801909d4c9ecf75ec
MD5 a3f0655d6f3dbf0f008930c96e0aee3d
BLAKE2b-256 1860aef5f9a77f4f7d3ef798c580d8c60ebecca987c4f653f2d344d6d287c9e9

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 265e6bbccdb0c9e9500edaa7670e5fe7bb89bc769ae451ba7fb960763668a39d
MD5 6b8620db6dfd58171ac5771473a8fb65
BLAKE2b-256 44b512f997321660c3c8d499343b3b2c9839ffb7266c2c69dedd1f0d18487863

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 4a3f460ecf2ba5e9a0fafe1fd01194379b85563f84a2cf68006bf1948aaecf65
MD5 c1155118f182dbeb6fcc0ac38fee6852
BLAKE2b-256 c5023f98a77e581e103eb95dfe0558a356c11e3b1023ea70dc387e4db0b6f552

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 7a9e68cd1d9ea02f5f807254ced1f2887ed83375054e135c21aff775d079c578
MD5 df89fde9579e8f91e0cbdc5594ca21bf
BLAKE2b-256 b01fae7da2fbff0a9200577bc06020b20a1b8b621cd49b442f781d566b21a3be

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 72106aeb246c77fe9bfae1179512023f78ae72d2bc9a768f0a26506f9287e3f7
MD5 2c76737458e1843841fe32dd5150ba47
BLAKE2b-256 c7e81e2e5754177bbb527e492f8e97582f3dfc3cc6790db61dee8b691b279607

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 18f8c0ffd1029f1571623b864c28501d41a560dd11a82e4ca00af3006ce4abdb
MD5 2af6845d92e2b78bbc0bf135504eac80
BLAKE2b-256 6c5fd09849660e20b82c18f66ffe3c373c6d5de0a6ea52e816dc31fdf35fb03d

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 df30aeffa3f9fdecc631b4f1efaa30cea9a2974184aa1c911b8557d4367af29a
MD5 6455081019ab0d96669334c1aa0044d4
BLAKE2b-256 0fd4a46bc339f682ca17ee219f4434b01acfb52c12cc153fc6b6ab2416669ec8

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 694bca667ad6ff2e4b2b046bfcb33ffeaabfb93dd69c00d7e6346b597316ed11
MD5 23f63a70e47c50e2bb6b41c869651439
BLAKE2b-256 f6810a07bd5f98bf0238b7cf808c2f7ca928049f3571a463d5bc4e7b6358a5e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4cf5ce9bdfc4d5c01e603eefee31c455e6aa11a8f0c73df2d3bfe587e580d1e6
MD5 8a5a70eee3aeacde562c8a9a86f0980d
BLAKE2b-256 fcda67a79e17ece94479b61738727017d3786ac1ec8444be63114e354060d362

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-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.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b291bebd82016f28e08681f8a97ad70fd3c2a44449a16f84171c36dc62d1ac75
MD5 a73509419dd9fa4f355f1a1707b7020c
BLAKE2b-256 c172d0d3b70e4cdc7bc8a9efc5b5b8bc74bf5b5756fe4247f63f851644ecf265

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f820f20f18cddfc4309cef6a727e6a23b695bee78a2b348aab1c94b364d69aba
MD5 c509f59eb55f3f9df0369edbd38470b9
BLAKE2b-256 8c7b602ba13f5b132d9383d1397c521a2bf39d5004390f49453b47cdf1956a05

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fb1fe726cf3a6777638ae6648d17b166ff7a8595186115394cd414b8a8436fa6
MD5 703bc84a8e278d80f0690af12367d1df
BLAKE2b-256 0bfc8f96f9c5cf1f234dc9cf6615cd47b0fdc4b4056abf1c626b6009aae66824

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e3e3f467a1439aeff091e261ea73d2b8ea92041def1c58cb12d2b90b0167b395
MD5 c3dc5d136d8deac1ea0b01feb2c97011
BLAKE2b-256 c58a483fd04fc714990b9841f3ec91dec1612d1b3f2ee3bb5df9623d3b02545c

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 64a8eeb96f3ef7eacc9ac1a834f3947adde87604c5cb56ad32b28e9247a7c9b9
MD5 40e567d5d2fa29112fdf4d0c1c794da3
BLAKE2b-256 ea61c4f0e08da1af6df6a05a10fae5df789ee61a28434407fa6712b6286e7901

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 2f16de144b1ef26f76b49b2827b2d9728495f06b328851115e0b79fb79a3caeb
MD5 4b915f9a08adfc1b988397462f2db345
BLAKE2b-256 c5a3eaef0f5bb155ad1ffaeb4359000ee384ef4494b669a8b601517626e9e69e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b67399173f5af4f9711c3a08ef19024f4851f0a1efb2660d4e0f66a1c5be6f09
MD5 c3f88c952d7dff06d84f834c958168cd
BLAKE2b-256 44616442bfcc0e67ac13f8b1059f4e5bec1199ae091a53a0bc811a919b05fdf7

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 cab4371d2d947c2d7a0e9e4e91eb5e9a015fea546514d97657a2995329157db4
MD5 af7f54840b51469737baf7999a7836b0
BLAKE2b-256 88bd40cbb31a204f1fea4d9fe358499b4f6672bb63f30a1ae2c12ba16973e601

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0a327bd93357a6686ece7dc239d425e06318f4288e02f1e3d379d378ab6afe5b
MD5 24b65ee9e72ad0c3651d3c10d26cbb5f
BLAKE2b-256 ac92e72f9b60e29a812a4c7051b4f99a7160414f96f589b4381d17ed1c3ae3b2

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 595d196515aefa7ada9d54f25d0193735f5f0d560ed96e4497af9b4bf5bd023a
MD5 3684d4c2868955389a06bee811639307
BLAKE2b-256 1f4bca36ba48d7213f14768c4f21d38a2d0844225ebb6c5c2058d8160300d8d4

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 b59ecc957b3f529ab21ced1c83099e6dab74f8122becff341f44bacc204ed888
MD5 41113a6bd62e9ac84a60758ebd59260c
BLAKE2b-256 9cec0f8e770c8d198ad03f48a98cdb20f73bfc0a9ef9995201374c1004d11cc4

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 73f5b55f706c44d88820ba724bb7ee401c848ad3f23683eb2290c23246989daf
MD5 e86caaf644ff1b954659ea2d6f2563ba
BLAKE2b-256 441256739e2a800183c34bd80d9739c817d4640163b1f98088863256272ee023

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 8867ffd99ff420fee852a0b24c28dc8eca0af111f6f1897106dd02a55a673ac2
MD5 0491de7dd4fdb0ff88ab9d5bb758b388
BLAKE2b-256 cce4196cfec3a42b4e38c889c42f660a9ca8841fe5404671847caa2f96fff5a3

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b702f565f4196a4a5bb3bccee51f1fcd35a382b69b113cad90296947d4557906
MD5 67bce7f7b3ce1bafbb95e6e8ffaf7819
BLAKE2b-256 65c3541f5648b9c4c055d74b4a19ff3cfa31e44b309ccabfe39c97319a712e2b

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 e3c0d442ad11ac4644b245742d217a13089d46ba32a7cde56a047ec3c8e80570
MD5 1d2054bfe084e0509c08d2007a0086e2
BLAKE2b-256 7d6661627c604e2e6862c70fe8f1e8dec57bc39280e48241c92a0eeda67d0c51

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 f6172081130c1929f5150c69b45342d1812cf63e4e188273d8a1ab8fec12c04f
MD5 ad684e3fb943a39f5354a7db3f2bf365
BLAKE2b-256 ff7e3090c104eb0199e56a3eb05373debcd665a67cc696b6e727e387b942be39

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3aaa5383c6295e8b8f4411df234ecbcc7dfada328ee9d14f1332eb7965cde4dd
MD5 4a7a40d6683d54ba3068c62b9b393f02
BLAKE2b-256 f60b1ee2a212de7700af101370b4f34ba6bbf9e9ec61e094306babece9e869f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-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.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 71adab37267b774c64d1c10424c330b893d59478cc639e1aa37a26a02a39dd7d
MD5 b970a5302babd47667ecc3b8dc0c45d0
BLAKE2b-256 5b684d895295c6ab6c53f1b7da593882f3432665707504c46c77768f320e0a41

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 666bb2b9d8911ba0ed697868545affd1a301a86f3f3b3afa029c9edff73fe005
MD5 1c82e2e4f15078454f8109aa3b3a9128
BLAKE2b-256 4feefbf5e55e02133d3dc7db41d926d4c5479166974e9d27185e62acb2e1a4ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 74e149fca7563fe2be25bda0c40ca8c37302dc70d46d7fe31de54d7f2ab5f062
MD5 9b1f05530d1cd7681f6f62374ca1c197
BLAKE2b-256 365840d614ffe7e7f2b3905eb58a390eaee3c62cf3b8ec170549d9ca25b10ae6

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 7481aaf36444c0ad20ab0ac2eefb96542cb391f322ada8c511e29489035a8ef9
MD5 729499f03b89d8af76512b4a2e293061
BLAKE2b-256 e37ff200157e46e1cd18661090dfcd5b84c1b638d4bbb156254e762b56299a7b

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp311-cp311-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 7fec660c8f9887276d40009edce04d8337a3157fc01b9d0f69c69fa742d6e839
MD5 fee690dfdeac532cb990bb3a7728f92b
BLAKE2b-256 f53f162a217f141576ad5e53f9d129c760b65d2077f50a8e1d48ac95220ab0e1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 69ab8cc0426e144f85be6d8ba299e3baba127e6aba137efd7aa3161a36d07483
MD5 fede94675eeb39eed2234a8b1137d8be
BLAKE2b-256 5dcdbeb84a99985f704ac8dc4e867f255a6a378eac68cccc52be79b273b1f802

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0afc6bfaffee48df541d5e0370fb7f77be9e505a8ca2c8ec6161a3a8e0876b8b
MD5 cf986e8aad3f267482e9fddf4dbc1007
BLAKE2b-256 a62a71638576d3b7f3de5286acebeaf130503a04f535a76542a24d76b8694398

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 44efdac0d7f28039e0abe2e1eb83155634b80ab53a2fc72cc41425b5746bba23
MD5 05fdf46e1b1545a381b240def078362e
BLAKE2b-256 7f9307240fc3c28682190940e83b3331bdd08376e56cf77f725638e74628efe3

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8058eca02a5b47d36a88c6b3212424864b954b07f0f0f7d9e5effe70bc752468
MD5 b7428f26a1455470d5fca2adbaad3cfa
BLAKE2b-256 88534108a3cfdb787de1c1b887ef25396ca8cc4ad84f69e5f868c90d31bfc1b6

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 335570b208a1b1298a2d826b314bfe8d5d5a73f6a0ec11aa10fa6f7b6b0a7050
MD5 78c0f5365267279e38476058c6b7a4a2
BLAKE2b-256 fb762da3242839f7969fd13df3a5fea7946581c46cfae65e6c6602a5431742db

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 739d39f19ad3cd1ebd4263dc52cd171e62c29efc1c863db87ccea32abd86a240
MD5 c61c74d338be7b22b2d5b38544c9887c
BLAKE2b-256 abe32327875eeb060e267b79610e5428ea0f6434c4856d38c7d9ec0b08cb414e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d5fcb055cfe2ab60c867ef8938812529620e1adfb2c14e6a33f3c340482ae9a4
MD5 58f361d66f8ff8f7801c14a88ee4e01f
BLAKE2b-256 82b26c787b5d13876e52aaf949fd3f19dde657744bf8cf7b32ea106009bccde5

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 ab18f33f23242b3050eee8d3ad2929054ca733457807c256f6f74c349fe7949e
MD5 fdaa24b39ed8be9d096420de6fc0cb06
BLAKE2b-256 db5a94dd299f1038625adb03ed26390b46f49c10aab9380d2c0caf33071646bc

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9eb996fcf8f2f834f04b714616df16837a3115b63d4f43deb00af44e5c47bac8
MD5 20368cada45e6a51437b2f14b946e4b8
BLAKE2b-256 7f4027595a006283105092986cf55fc399f45404a84ebb20b1e281cbe01b0001

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 9485031d2237d8c5a4b977c2e0131577ecb67cd573c0dec9e7658dd1c77021bf
MD5 63a9bf11ad27cec3172c9e883bfc1d70
BLAKE2b-256 07bc66acf5f2028dcfbc58fb30cbd6ae6d37a0a49b798b22f8fb0b79bf1e4399

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 8aaa7b418b80c86d317b2e637f62f73e79c4fb6bde7251943ec329fc5340f269
MD5 2740316c172c2f6a82a36d83dfb4c503
BLAKE2b-256 1d720380c9c06178964571220573689b06dbd542a8b7320420010229a96090f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ee6248e35b2999f39bf2398f574669135f75c04b6b8b831a57c0d8f0a911a628
MD5 8dec3e4637840012a75354a6d55a6c77
BLAKE2b-256 04af7f0ead26ed41028953fb769e34214e298b93a2e0313983d6ecc6a50124ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-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.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 07d7688e571e0f60808c5c90b079c45427e5dd4ceba22f37913059d0f0b06236
MD5 4c42feaea6147e3b21066c1f22e206f9
BLAKE2b-256 beb0af2044b2c1ecf4730c4f01209bf29508187f6f0f26b1d8f8bd5bad690294

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5466524e441887b9bade2aefc53d3e5825214c38b2f054e75f340325a4dbe433
MD5 d8d485c81a3a6846208e012a0e34a1b8
BLAKE2b-256 a49271572443d9b4ce49057adee759608fc6357947f4d3adede42a68c0351dbe

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7feab4660b0f44efa514bb20f8ec6c4eee069222627ae2e19357d221cecc600d
MD5 5bd0c28dbfc1f3a95d9b3b740685fb03
BLAKE2b-256 fb88169dbb9e5fe906c0b23763d7123114338d7b8a90385c608c844911b78f33

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 2076fe757af1e8f403680ae9e2501d381a907ef472b7518216b2d00b51f28b96
MD5 61e76aa4878c256f1b099a8ab599eb50
BLAKE2b-256 e95a9db2f08a1d47e9c4ec4fef0682f1807935309136ab71f411bba73b8ddbde

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp310-cp310-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 ee0ce8f8ebba1ec30c4d0b9408ca2634cab358715df0059e2d1d18b323d8efe7
MD5 670b858271bc5687bd92e3f064a11472
BLAKE2b-256 8f3d592ce7eade8cfa82e136630e05f8e6305434168f1be153b01cd95196a203

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 0b14bdc0b34e4ff72354ce7e65c9a71dc4412eff90841606797e3fbecf89b8b4
MD5 af9ec6c915242005ddaa6b3c321c3269
BLAKE2b-256 c621b370e06e2654d338ae2e16a09dfa835f8c56f3c99a8b6a8135cd0e87681e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 05351c4fad125deccd64b383df0fd1951c9012de961dff8b5b8550e58b5da4bf
MD5 469650ebef56fc39d955cbba2547541a
BLAKE2b-256 dec4bbc49316805e56854236a2cab0ad4bdd9d84fbc069df4706e7383a513c6e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

  • Download URL: stringzilla-3.10.9-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.9-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 eaf0140eeb552720fe5d2d9a891769cc38c14466c3be7125aa91dd9626c12fd2
MD5 cb608f174cdbfa5492925350c14c1084
BLAKE2b-256 5aeb25034177eb2020173de09c5bf799f8927b378c4daf4faf3cac65a4607fe1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 89f63ead11cc94ec8e064c00ffa3a329d8c923e9b5c0d529dcd532402a5ec2bd
MD5 dada2d4496c979c9680c1f4c802c0a53
BLAKE2b-256 197c47db642b3bd4053052aee3bc58a062c6bd942347da2aae7176fdeffb510f

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 23b95d7c2fc2f21fc9ad61fb8942944bb0284a5d79fc650962cc305b35122e3f
MD5 0320aacc266572dfccfaceccfe0d0660
BLAKE2b-256 68d4e21f5c4c8dc926e20abdf86791b382f8922096ec2b6cc88eca48482f5d86

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 59eab61e68b7853097fd59c6bb71883f5d9f69d922540d3625bbfc5409cecd2a
MD5 7db7e4d319879c4ca50eaecb120deb3b
BLAKE2b-256 e19e0a5b9337d340241ac6e7cae0f48f251665a94ff65d81832b9a15f56f6c6a

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 ef6e204bf9ed016d43727e4a843778f919645069c9e9c51a7d19977865a5b57a
MD5 cd5cfe5aa414b615519eae85659b807c
BLAKE2b-256 cd4ef2e3f5f430ed4818127e685ef621bcccf8dbecd2247d32ca62481ee48191

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 39ff6c27232910ebca1a1f03442db603d7301fb6c859673eeadbe9ba00e15d3f
MD5 01a3597fa4bf8340b076a2fea58792cb
BLAKE2b-256 3a33434dc9010e148c113ecea6b9abfe90bb79491e0865d032a33fc9a3c7faca

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2994fb576ce9c9bdfa79c9b9536d8e7bfd62c56243a49d9902375299453f3305
MD5 8138037a2da75e64a906fd37399b373d
BLAKE2b-256 5b96b3e1ce4ef57988940882219ba872e6b28517bb3065d7b44e3e82ccf6843c

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 d24fa3b4aeae9ca6c3d7b2e92c200e47464af280379344342bb7e71535d73b29
MD5 8db52151bb386d53b88e34dcbd957a34
BLAKE2b-256 bb34f35eb8bc8ec7f206bacb1e71e61a899b2564bf84c0beea0c59845b0ef2c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 af3e732bc7f49e910eaf832a24faf9d114915efc409182491a3ac73417ae197d
MD5 40781cd86fef284f0d893cc1b94f5a25
BLAKE2b-256 79d49327a6388eaeeba5f14c1104584039765c22cd8476ef21fdea378b03c1fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f5bcb9c051014922bc5b5ce6670b73bf477c7617f25ba03a1a7d3724aaf15489
MD5 b69d3c74298945fc73a4eca01f0779ed
BLAKE2b-256 4f252b5728442aa96d55dd1387e0a5ab5cb80b7f24984e4c960afe9eb33d5909

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-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.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 277473a4a4c2bc641188dd4e2bbcf8cd9ccb8a6cd4ceccee0887069474706a2e
MD5 538bbd02ec98f72a1499500b76b88da7
BLAKE2b-256 7c605b5663d28418fc5d21c6bcf923ba16b5ebf4dc4d438b4953acd5398f8bbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 454a11d92fa2c43c8e95365da136d21060491a07c50f0706364ef310ac0be072
MD5 00f6c3776776404cf54107bf12eb761a
BLAKE2b-256 04211ffe6563836b96b0ed58973c45c4f2c2c3b2cf50fcf10b65790625392bd9

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8af3290678140cd69034b55b85103f9878dfbaac08e6ad23ea0e053f4c1b4ac6
MD5 f8e4104afd9c2d9f3656dbb524c28e68
BLAKE2b-256 a3c46b647048b2b4f3ef9b6d785b1059d5a49e54d28e4ead9e77845bd6bc197f

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 a44370d43ac6bf313877a709382e858af92cd6acd723c2d8fc42b05ec392dd61
MD5 67806504496425eee29495d8b43ae86a
BLAKE2b-256 c135924877cec74650eb43b3d8fc89fd2c7bf43795feb10603aa38794fdf51bd

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp39-cp39-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 176ef74a94e684275b40706d0855c2bcbea0e11e77c7bd3ccf670def9d17886f
MD5 1072fbc674eb35447fa9be3fbe2efcec
BLAKE2b-256 a31ff2a31e5c2810d5522029018cd561e355c0bf5e760a2c0b4c02199b80c2a3

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 673cb17406bd9e1afce95c41a48d7dae795eac367d6658ee37f052b00937e090
MD5 614d30b55939c9d4170b052ca6f68ac9
BLAKE2b-256 1237ede24694578bd4c595844f685815c8adca9b83ca2367bf09363848a7ac11

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

  • Download URL: stringzilla-3.10.9-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.9-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 b350113538addb94efc141004e1a9aabf5861fc20148565cf437848b5f21b34a
MD5 b3d231b7c8d5a6018eb51c0b744841f4
BLAKE2b-256 7a70221b979b4cd41205547322753b0cfa85b8d9c818c18ad3a07d1e4e066c39

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2bccb27ae498ba3ab7f193a30ae70fb05f54614a291d92063be37ee561adf29a
MD5 9d452f45f0fa45390190e447894f8654
BLAKE2b-256 18b238bd54f21c7cdfcced1bd88cde5aefdb9efa61ff82df0d874ce09affc350

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 ebdf31aebab89c92db403f23042c0cc47ea6f8e19e080b6e5495dad20347382c
MD5 f93f6f9c76579f39eea15a7104806eaa
BLAKE2b-256 7cc1f8e6736b10db56f8d35aa6e832f902afb478eed52d1fb9754a7450c50fab

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 2be05768e47c4f9cb2fb5b2c644b2c1b5b91f57ba90a86811c166f1896e74092
MD5 aa0de223570b76e979bbb04223266da1
BLAKE2b-256 dfaf095c2964d94f3fecb78bb4c73e8b050fab1e667770f20db4af86086796ef

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 5fc3ba2fa67c615a2de035a92c67714e82bae90b0c3e3095034fb730c0f08d77
MD5 11822cccaec1db03fc7e5a8af985f381
BLAKE2b-256 49673b86ce5c7487af79a6e325040163768ae357981f90dce8e5f0aae9410c87

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 ca3c23d1dd39eff775ba5b3447808aee5e7fb6aa036a4afc35284f3cb880f433
MD5 5f680027e155154593970a690c926a00
BLAKE2b-256 f673ba04ab250eff97ab2daa27d9453a651729360104707159e818ef17c62e44

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5781ea565090a870ba273799bb4c1b78610ca7c08e2ead8725cda13261cf7e17
MD5 05a7422e969483d0de29b90af07ccca3
BLAKE2b-256 ea16be5a0a2bcf5ab6836a15a6bcfa40b4b7b9edee69367f0c166cd733c11a0f

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 867d1654a550001d2e6fde6fd0e18d489475efca2cbb2f656c0deef0f8d29639
MD5 fd7d517227db11ffe6851fcc6f27e9ae
BLAKE2b-256 4aa1c27556f8ec083e890e1caa2d2cad09c3f9be2ec38d0bde935c9c8bdf2b47

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 5d3f83901c2f94cb5fa7c48dcacc8f08e98ad73fa959337d297f3493082a0cd3
MD5 6ee77cbd223e5b89e5394e9a36dd5b82
BLAKE2b-256 74d09ea594f07dcde50e66fd683d8d74f5aa3b7db69fef8e603de6e14866421c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ee33605eb43bd9b69558cec118bb0efcbd4d9d9ba5df4a1e764eb7bcbd2b3336
MD5 f33a74c0c99832096f6e31e4878b8874
BLAKE2b-256 2196bcb7d6d347375259cb230cabd3cfa2af8e2e24846a8233391380d3e9e202

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-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.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 128e894425383b07a3d4fc71dec6b343a15014cb4fff16f750443abb231f8a71
MD5 8c27ddbbeb10b29c02deaa21812890ab
BLAKE2b-256 3fb1091b21898e4d4732f2d123a6dfdabb3ac3dcd162e23d869c88155cb918f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 df3308534b527ad7cc6774cc3ef8ac787d09b363bfc86d11b7c7837c98b26d95
MD5 6ec69554887dd741145968f719cb14c0
BLAKE2b-256 021fdac4e36d8c43362d6f2ff9787156103a0e1965f971f05341fd5dee5acac1

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f66386cf9f728d7d3575f6293fa3863997483d44beddf426542771167f0cc579
MD5 b14f1d594dc2c201ef85b441db879842
BLAKE2b-256 937c3d7cef14ae3d9ef1f8f90806f2aefbc7456ff3989a781d6fc2c55114a045

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 db10d15c88efdc07bd072631a56ca952040987ce4e074bdeb1131e3deb098f31
MD5 69e529e43979e4085fa7df5b98ae7089
BLAKE2b-256 d8f7c94c9d58c2b4a504752437e15e0e8ce1ab0db80290916d9483285bfa0e0e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp38-cp38-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 0604d6b8b0d364288c08f4e79c0f1543725944e1150266f494feb031f0467728
MD5 65617ef992daa1d293e5be438d3b9e3c
BLAKE2b-256 3fe7b430568e78b4ea947c99db4afa32c88728d8c44986a551c121938ecf2615

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 8bb2156854bb2729ce97902b95f6b7f90517b35f4be30aa3ff18fedbeb3a52db
MD5 3f17b73f568d354eb040eedcb1cbd08c
BLAKE2b-256 ba6759ba8ff2cb5c3221541358aa75bd40f35cd94ff5eb563bf1db8f64f76bff

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

  • Download URL: stringzilla-3.10.9-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 68.4 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 917064da17bb54b20aec271b8e58b6a743a2543a0da963ef6ab1c8a1e1140a2e
MD5 494a1237f8525a7904b307a3c03a61b6
BLAKE2b-256 bd3746daffd67c0f483b017612799e044e0b7e4da689328d154bff91378ee858

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 649896c4d5843f36137d728df5a9845dde7897b9f0a13149efe141c9c874d497
MD5 0c24650326da9f9e903339036e4dd00b
BLAKE2b-256 17979134650ab4486edac86b68c19067e92a63e69b1ed382aaebc6242423a4da

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 2bd2f6391d60d4d5b89f55f8bbacefdb5cc7493c75bf8f76f476baaeaf9a28bc
MD5 135690370e42a9507df4aacc061c9ea0
BLAKE2b-256 9e1c6d478856836747f94026e1b12ab61bd9854618e58bf0b3aefc07acb2ff91

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 64e80ee1ac781830e6db082de96da4213b7d3ba9ed0b3c60e1c45b73ba3de7c5
MD5 11ab22c595f048a2bbfac8731b21d5ce
BLAKE2b-256 12dfb060e671bf22b8e2506387cc3a450b514ed994c95ddfe85875922b4cefc8

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 1b04fbed55ca86461257d915422de4e5143ba856be3d14d51cc61cbc1907e5ad
MD5 9edad3f3deee2b1c111796abe1fff794
BLAKE2b-256 9a17bf0716e849659ed167eb316d4946493540343bf9244f6ada0742f72ba997

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 bb60341ecc0ca782ab88632333579476eee184d1b6598eb0dd6e1c10388b90c5
MD5 a7e56a84f9646bfa8c5eeeadadf49b24
BLAKE2b-256 34da1fc17eecfe0f0cdfb7834893d1a95671d3febbbf4b346f8a1c1619982bf0

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 98a42adb6148c039cba4aa41d0e16ba5f6682416eb68e9d93f3f0e5c61bd34d0
MD5 e17aa6d269fbec48e7484b8b0423cb49
BLAKE2b-256 26b01b9389b7a5a50b3db6188b7a81034f83187c38f8e27f15f0a2f9a27294be

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 c882933f5b1fa26d7f6f92e6ab5936c1ab3a01e27788c6eec52a317d8ea16941
MD5 322984e6cdc71712f3ea296989599574
BLAKE2b-256 9d27a2e9f74d1d05ae29b7b882ac7979db7c7ed084201ab80feaf40938befb3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 7b8d074a50eb59b63a0f66ee7a7565476808a14ac8fdc139314580758db59257
MD5 2bb6e2257977a5f6f0fba2f8887a8860
BLAKE2b-256 5b5de742cc5b00bff496306a296da3fc4383f99483fac6372ebb10ba1e68a77d

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3b928261a3af1a17ab8730f5502f126e0bb0a538ad420613def717eab749df9f
MD5 fc6964171a8849cc4362b69a67dc9a94
BLAKE2b-256 70b80355d5fc19f10a5f3234c12dd74d050f0c4545ba70da96c30e1020fd81c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-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.9-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c29b2e0034514035c2cc55231d666604fe9009dc1f10c9c9b120d41317a0b64a
MD5 e9dac19438a9ef54b685fe8c7b24f9dc
BLAKE2b-256 c58cea4ab5335233a992b89f6db72a8a2cb39ed8f78784175097d6e6ec07090a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 94c70e7ad9d6047b7e0c5f7866ab26b737c345b0878ed777f87f86273b35eeb4
MD5 b709647114e341c386d94e468ada5dde
BLAKE2b-256 c3d1600eef4b602df4430a53850e70e7e1ae69d21ee999f5c85333d4f4079f71

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp37-cp37m-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp37-cp37m-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 75cc43ea9a94a4691a9028baa1b2067ff5524fe171b99f8f0ee6519b179da093
MD5 e90305fb771ce6f05704999853d4ee23
BLAKE2b-256 bf48abf3ef5c1d265f3ae29ae89a1ce85780e0357a3d54a35cc7843d4eeedaa7

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 d46f5f681822197c3e1e60b94236cf13d986e96c830578342d804f3c66c243f8
MD5 fedc98378c71b1802798ee34440f2188
BLAKE2b-256 52d4fada017de2cb151d06640b90eb31cd40375ce71c3bfa66a63c45966de941

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

  • Download URL: stringzilla-3.10.9-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 68.3 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 e9958af97ec950cdab91ff1bd89640ffc0b328e060af0f57fc2db9193446fa49
MD5 83ea57a318fb8ab871ec2c02788175a2
BLAKE2b-256 c513d968a0683001040e8cceeaedf416014bf21cc0e76d289a6b7e3ca1556113

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9614d72561b23b8d3fe3201eb4d2ba33450e989480f8c06ff3c510519aacdcdc
MD5 b17c454fc8720a810308a67e8d247365
BLAKE2b-256 f7a268413831fa1a72f486037bce7016450c84debc048edbf75769d5c37aaa8e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 f85046a915f7abcf0cda04d06c4cb9e56f2e994c14882d147d371314250ef700
MD5 e8f9dd19e375f727b7e247c4f3b492b7
BLAKE2b-256 0e92a92f5286899cb7ffa5c4e96d126b1606dead5c231204d9268289750d56f5

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 041b3446d208d40e1cd0598605751666b6fa647f1a3fcd7b97087be1880f621a
MD5 b234814e4395ab374a36573db476f998
BLAKE2b-256 b016f72efcad702f6c1aa263623b809e89eec6a98a293a862f46fe1f74da5c7f

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 ca18e3919b956141877c72f39a721d660e743b702f3276b8f012a1cd8486c6b0
MD5 fe5c99dfdbe913cecaa2c848f1dddeac
BLAKE2b-256 5dd3fe8fa859d7fa375230bc24dc359b28682cd4ea0e46e3dd26df92f7501c0a

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 fd59d8b7091af0a63479453a6b8883e13ba024b1857e8532456a326846b28805
MD5 adf91d2f95fe9523b52b26660b5baa5c
BLAKE2b-256 50a75bdc5c0df6f5512d2a3705618647a3713eb3d587ce2dc14a1ff34f1f3c95

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 77794018e0e06a5f82690ffa249744213c7d7cddd5549a3d0b017e7a70a80d98
MD5 5c4442237774844e0311c7f26d7f79cf
BLAKE2b-256 3d2f4a9c16f3d939000f6e6ec62dcb6beb25d331a7985ebda546a1e4d51e47ae

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 305296a5a502a02580e811f6bb8c76ebfc512243bcd6f6178f3f1c8c2b645d74
MD5 b6df13c6f3c7b1ef54787f08b4ffa0d5
BLAKE2b-256 d886f4822ea4577760d2b1690f9a616aa8bd2dc878f00b86eace1f4adc023138

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 8f4995a7fb46184bd4e1ec8d45c79836515efc7fa79fc4baa102dc1f398d4c83
MD5 8eae9cf5e52b691067144f9994f512cd
BLAKE2b-256 3706a5d2651f7e76afdcb34e3612652d39cfd27ba02940a2e3a42d2d6e55cc15

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7724f2d47cf254b3ef7c937db148114f7f7004f1fdbed97e80fc8f2172d8e7a2
MD5 5321237748c60ab0b3eb2e8ba21f41af
BLAKE2b-256 32791288c145bd3181cee744f215b88a0bca5f1afadc1ff268d1f0079155f3e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-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.9-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 835b66e96bfa5953ba1dc7d8fab97285c1f3c0f4a21a056c38ac739a2bf9d2cb
MD5 1bada8687080efc9d0a81ea8343f37a6
BLAKE2b-256 463eca84cb22eef7f83a5a484f3493550f27a8ee2bd481e6e193892fba05b299

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fe9296b93dfbd2a6baa20f779878f5d5f3948c4261b04ec129a946f8566deb97
MD5 fe2569909ef7286bb46cd5ab08e1592c
BLAKE2b-256 e8a5a75cdb2b0259851063f102495ef5a22f98454e3ac24171646fa2e183f4fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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.9-cp36-cp36m-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.10.9-cp36-cp36m-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 549bbf56b7728b433dc272c66fa39381369e716b93dfd363e81ece6e3ed2c5c7
MD5 a0aa0ff5f7617e92c342a1dad72f7b67
BLAKE2b-256 e2991048dc93ee7e26de8416efcba3c1511645d2de9f010f11b5e54fb660cda1

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.9-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