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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.12 Windows ARM64

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

Uploaded CPython 3.12 Windows x86-64

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

Uploaded CPython 3.12 Windows x86

stringzilla-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl (289.6 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

stringzilla-3.10.7-cp312-cp312-musllinux_1_2_s390x.whl (205.1 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ s390x

stringzilla-3.10.7-cp312-cp312-musllinux_1_2_ppc64le.whl (228.5 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.7-cp312-cp312-musllinux_1_2_i686.whl (210.6 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

stringzilla-3.10.7-cp312-cp312-musllinux_1_2_armv7l.whl (198.2 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl (223.5 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

stringzilla-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (203.2 kB view details)

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

stringzilla-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (231.5 kB view details)

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

stringzilla-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (228.1 kB view details)

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

stringzilla-3.10.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (295.3 kB view details)

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

stringzilla-3.10.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (209.5 kB view details)

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

stringzilla-3.10.7-cp312-cp312-macosx_11_0_arm64.whl (80.0 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

stringzilla-3.10.7-cp312-cp312-macosx_10_13_x86_64.whl (79.1 kB view details)

Uploaded CPython 3.12 macOS 10.13+ x86-64

stringzilla-3.10.7-cp312-cp312-macosx_10_13_universal2.whl (121.6 kB view details)

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

stringzilla-3.10.7-cp311-cp311-win_arm64.whl (67.2 kB view details)

Uploaded CPython 3.11 Windows ARM64

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

Uploaded CPython 3.11 Windows x86-64

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

Uploaded CPython 3.11 Windows x86

stringzilla-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl (289.1 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

stringzilla-3.10.7-cp311-cp311-musllinux_1_2_s390x.whl (204.6 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ s390x

stringzilla-3.10.7-cp311-cp311-musllinux_1_2_ppc64le.whl (229.0 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.7-cp311-cp311-musllinux_1_2_i686.whl (210.8 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

stringzilla-3.10.7-cp311-cp311-musllinux_1_2_armv7l.whl (197.5 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl (223.8 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

stringzilla-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (203.2 kB view details)

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

stringzilla-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (232.2 kB view details)

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

stringzilla-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (228.2 kB view details)

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

stringzilla-3.10.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (294.7 kB view details)

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

stringzilla-3.10.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (209.5 kB view details)

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

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

Uploaded CPython 3.11 macOS 11.0+ ARM64

stringzilla-3.10.7-cp311-cp311-macosx_10_11_x86_64.whl (78.9 kB view details)

Uploaded CPython 3.11 macOS 10.11+ x86-64

stringzilla-3.10.7-cp311-cp311-macosx_10_11_universal2.whl (121.2 kB view details)

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

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

Uploaded CPython 3.10 Windows ARM64

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

Uploaded CPython 3.10 Windows x86-64

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

Uploaded CPython 3.10 Windows x86

stringzilla-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl (285.9 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

stringzilla-3.10.7-cp310-cp310-musllinux_1_2_s390x.whl (201.4 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ s390x

stringzilla-3.10.7-cp310-cp310-musllinux_1_2_ppc64le.whl (225.9 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.7-cp310-cp310-musllinux_1_2_i686.whl (207.5 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

stringzilla-3.10.7-cp310-cp310-musllinux_1_2_armv7l.whl (194.5 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl (220.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

stringzilla-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (200.3 kB view details)

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

stringzilla-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (228.8 kB view details)

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

stringzilla-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (225.5 kB view details)

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

stringzilla-3.10.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (291.4 kB view details)

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

stringzilla-3.10.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (206.3 kB view details)

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

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

Uploaded CPython 3.10 macOS 11.0+ ARM64

stringzilla-3.10.7-cp310-cp310-macosx_10_11_x86_64.whl (78.9 kB view details)

Uploaded CPython 3.10 macOS 10.11+ x86-64

stringzilla-3.10.7-cp310-cp310-macosx_10_11_universal2.whl (121.2 kB view details)

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

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

Uploaded CPython 3.9 Windows ARM64

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

Uploaded CPython 3.9 Windows x86-64

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

Uploaded CPython 3.9 Windows x86

stringzilla-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl (284.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

stringzilla-3.10.7-cp39-cp39-musllinux_1_2_s390x.whl (200.2 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ s390x

stringzilla-3.10.7-cp39-cp39-musllinux_1_2_ppc64le.whl (224.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.7-cp39-cp39-musllinux_1_2_i686.whl (206.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

stringzilla-3.10.7-cp39-cp39-musllinux_1_2_armv7l.whl (193.4 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl (219.6 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

stringzilla-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (198.9 kB view details)

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

stringzilla-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (227.3 kB view details)

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

stringzilla-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (224.2 kB view details)

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

stringzilla-3.10.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (289.9 kB view details)

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

stringzilla-3.10.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (204.8 kB view details)

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

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

Uploaded CPython 3.9 macOS 11.0+ ARM64

stringzilla-3.10.7-cp39-cp39-macosx_10_11_x86_64.whl (78.9 kB view details)

Uploaded CPython 3.9 macOS 10.11+ x86-64

stringzilla-3.10.7-cp39-cp39-macosx_10_11_universal2.whl (121.2 kB view details)

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

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

Uploaded CPython 3.8 Windows x86-64

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

Uploaded CPython 3.8 Windows x86

stringzilla-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl (283.4 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

stringzilla-3.10.7-cp38-cp38-musllinux_1_2_s390x.whl (198.9 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ s390x

stringzilla-3.10.7-cp38-cp38-musllinux_1_2_ppc64le.whl (223.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ppc64le

stringzilla-3.10.7-cp38-cp38-musllinux_1_2_i686.whl (205.2 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

stringzilla-3.10.7-cp38-cp38-musllinux_1_2_armv7l.whl (192.3 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl (218.3 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

stringzilla-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (197.7 kB view details)

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

stringzilla-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (226.3 kB view details)

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

stringzilla-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (222.9 kB view details)

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

stringzilla-3.10.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (288.7 kB view details)

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

stringzilla-3.10.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (203.4 kB view details)

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

stringzilla-3.10.7-cp38-cp38-macosx_11_0_arm64.whl (79.8 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

stringzilla-3.10.7-cp38-cp38-macosx_10_11_x86_64.whl (78.9 kB view details)

Uploaded CPython 3.8 macOS 10.11+ x86-64

stringzilla-3.10.7-cp38-cp38-macosx_10_11_universal2.whl (121.2 kB view details)

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

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

Uploaded CPython 3.7m Windows x86-64

stringzilla-3.10.7-cp37-cp37m-win32.whl (68.3 kB view details)

Uploaded CPython 3.7m Windows x86

stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_x86_64.whl (281.8 kB view details)

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

stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_s390x.whl (197.5 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ s390x

stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_ppc64le.whl (221.6 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ppc64le

stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_i686.whl (203.3 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ i686

stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_armv7l.whl (190.0 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_aarch64.whl (216.0 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARM64

stringzilla-3.10.7-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (196.0 kB view details)

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

stringzilla-3.10.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (224.7 kB view details)

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

stringzilla-3.10.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (220.6 kB view details)

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

stringzilla-3.10.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (287.1 kB view details)

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

stringzilla-3.10.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (201.5 kB view details)

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

stringzilla-3.10.7-cp37-cp37m-macosx_10_11_x86_64.whl (78.8 kB view details)

Uploaded CPython 3.7m macOS 10.11+ x86-64

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

Uploaded CPython 3.6m Windows x86-64

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

Uploaded CPython 3.6m Windows x86

stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_x86_64.whl (281.2 kB view details)

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

stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_s390x.whl (197.1 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ s390x

stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_ppc64le.whl (221.1 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ppc64le

stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_i686.whl (202.8 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ i686

stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_armv7l.whl (189.6 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARMv7l

stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_aarch64.whl (215.3 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARM64

stringzilla-3.10.7-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl (195.2 kB view details)

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

stringzilla-3.10.7-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl (224.1 kB view details)

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

stringzilla-3.10.7-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (219.8 kB view details)

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

stringzilla-3.10.7-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (286.2 kB view details)

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

stringzilla-3.10.7-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (201.0 kB view details)

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

stringzilla-3.10.7-cp36-cp36m-macosx_10_11_x86_64.whl (78.6 kB view details)

Uploaded CPython 3.6m macOS 10.11+ x86-64

File details

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

File metadata

  • Download URL: stringzilla-3.10.7.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.7.tar.gz
Algorithm Hash digest
SHA256 0bcd1fe59b2f43467f4a0f6ad49c23c9567d540203838bf2081f98f94407ba55
MD5 544762fc64b14a5176b29c4115b50fbc
BLAKE2b-256 273d1cc573debb76f0abbdd66680b5cd5c5696964ae1b60ce2f24119941f84a1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 6755ef43820a9e2eed25dd02d2eafe78996375bc7b2a01a6aeee9014a7ed1b6f
MD5 31b3a914c6a604020a739b8cab5e7199
BLAKE2b-256 41edf082b4e9935f94838ca8099446f9abee87fde8375e3d6e5667821ee923da

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6c116be5c4ae1b0dcc74da74d0616210254fd9f612413869425b09146d900b4e
MD5 b4bc1a4d83bd4295bf0c279a345b2ad0
BLAKE2b-256 7af4b2f71fa0491e3637c452265a44a43cd8d845dbd95f96bd8236b11fdd16e1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 e2ad1235adf93a79e8ff4301616292e5a52849ad64160821d3eb17f8388ba8b9
MD5 e596c650288dda086b27ada4def83aa3
BLAKE2b-256 47153dfe510273987af05bf917977ef410dc1f63e43886f9caf4d8d429628501

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 71c2bbad83e0a65abb9085b41ad01b96a3f3cbdf3711a204cdf9156de00f3aea
MD5 c851045f74ec1036ebcf647481f5da90
BLAKE2b-256 c9c2f96420e1bcbe1d4e36072f4432c3c64593dc368306708f53f6d358b41024

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 689cc86541ff740bba2ec54f37fd54ab5c3eece4c1a005d3a5481cbeea99c7b2
MD5 bb85b75ba73acf85b3051f0753429453
BLAKE2b-256 a2c95c266b31821bab78dea671b9da96fccd6d283e73a25ec4b8aa66e24e1174

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 43bd4de3dd284b8c8f218cd5be594a26e82593c056d52505f139fad8e62691cd
MD5 5dbfe79a52ce55120ed8214489f9003a
BLAKE2b-256 0a48f0f1b6dc81f1dba10b580b400fca807ed7477292945a0b4a6c366c98c13a

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 020b58d42f4eba72dd3083e8682a9e001305cdc41ccb9696407550d733384307
MD5 a6478a6a0971068b05ee4912946d86b0
BLAKE2b-256 d642299c47455e4b955c06332b56c75ba2ef2b66b988279fc42882fbab914607

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 0d841e6e9bf3bde91568f212dfa3a2c132da5a42760906fe1a2015f18a9d9caa
MD5 8e0368854d444c391f3f0a6eb709291b
BLAKE2b-256 a87c9a5bd663adcec5a3974481b2490b56c885e7263d7e71eec89392931cf025

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 062a9dc2d665d7b2f1af730af95a5cbe20af6e2e3a7847c2c68989cb1004986e
MD5 bd78537484714668e87bd679ada3c4dd
BLAKE2b-256 978632af55c9977c010c122767559408e60ae53e838bdc9821913ba46bd48e2c

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 1033c3f61a48aad535ef0c0466733f206afee6f2b7c554961870f15139b60ff0
MD5 f35f598f2fc68bac6699bbe1aba2d515
BLAKE2b-256 e63de898d8479b92492a2031f5604b2e83affbf2c9a949bfed4fc7fdc84220a5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 b37be7f9f78dc6ae18950e07fede1c8d7a62d83acc2734d14e5153a3cdc18cb7
MD5 76f87c86b386113215ca367cc1257c46
BLAKE2b-256 a0110311598ada80e49ac6f4416b0e1db54ba576c29ff1ce9224e6de7297519e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3c56f1638927d7a34be467145f97a29f195b3a83a100d514711056242ecbed43
MD5 8084d7d1c3d2797b0d987643dabe3010
BLAKE2b-256 98db9fde9f578c752f60aa9b36d25ccd7b561211621abdb33289c2b5b79ee80a

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.7-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.7-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.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4b51ab23a622813b1be66bc73b1f891e6b3eef122bc203816a7c0c6d3d2072a4
MD5 235e042b91225a048e8f0b6413168909
BLAKE2b-256 2b411f009074106f9c3ee5407874cffc051d7d53580ccc87345cafc1a6f15d94

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 74c290da90c3b463fe8d9d02b280aa9de763d8615f3c7e2c9d9e5823ff00922a
MD5 cf9700e0e9944e7da1134fede9a3ffd9
BLAKE2b-256 b247dc188614e223dce4435c2fe33405193cc26dbb4322ad93d1bf4098adfe79

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 afaace5978e0e872adb51e295ac8f69f97a8d144a122474b3f946abd582586bb
MD5 dc249f713cbf248c612dfc4af00745bf
BLAKE2b-256 5690b20c8b39cdb53940ddc14052539bccdeb2974a2a361d3bf583c4e5c25055

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c57df29341f976875ef7326d240acf71989f52669bb2fb294eb2e0c70ed99f78
MD5 2bf2085ab89d811b22adfaac4d73ce63
BLAKE2b-256 17babd4d2b29cbac48e1d502a9e9553eb21cb106ad0b704a45ede0bdfdf6ed06

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 d6bb80551dc6a7ac3ac4d9469ae7f1dfa7b0eb55b2ee9eb23ea27b62760a44f0
MD5 fc97edb3928553997269105d3011c4da
BLAKE2b-256 c97d0192af2ca95eab0b6fdb405a618d4004a6415f9dc27ef10c69a39680dc2c

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 44ffd2a15d79a59a2ff9e206aa07b43f7f4c711f111df6985b1789c3c5123440
MD5 37d7bf0be8901764764f62d906f6c2c1
BLAKE2b-256 faedde3460d9c17421ad30409b236f39d39b63682c505db26dd7b847015040c1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 869d5837c32dec454affa4cf4bc715995a005237a7f0e78da942d09945ae8682
MD5 3a9defc071379551fc25bd1007e32481
BLAKE2b-256 73c3f323d314484ae6b3964acca60e503ffa861e9b9e8e9af271788672ec192b

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 bcc567d9b474444163dac6441d5425425e0e15ecc77170dc11b498c748819d3b
MD5 99945417fc9b777740dc3a9ccfc3b2f0
BLAKE2b-256 6ce57f170103e4db8904059fbef70421d8a92b867b56995a5c2d75e7c3180b6c

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6449bed6cec35e097baf9b9296e7a2fa8fe0360b726370902db751f64a815072
MD5 6fb844ee6abd54f56477eeddbf6d72cb
BLAKE2b-256 282afc10f1f9ae6ad9bd63510c7cd7deff467952022ff3fadb30de7828131c60

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 b54b5776fc414f8cfb9528ad8e7f370a6528a425840f3d62d7ef418f254b622b
MD5 e1dca5c486cba87166fbd3aa1161c1e4
BLAKE2b-256 ab24e20313cf37faa464426660d3e03ce2ab0e6356831577f79e7b008c1d2d6f

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 172d285fde4718110dc07630d35f9ae6ed7ed056f3780d5d20ee55b2f5f0f3cb
MD5 bd9824a24fc800b8607596b8b4934c15
BLAKE2b-256 b1728e3eac0b47305e42ca581ad7c35b99e74ccc78708bf876ef314983764ac5

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 58290ee3966818d68ea84a056a5be676ddf0aaa09b1e261c4f8c69a3be434199
MD5 3d49dc9f0caedc0b63ce46ca39428c78
BLAKE2b-256 9de55a56240a92309b0e9c25b05537d7d0a4b0e21feb3d68feb3ab16344a40da

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 b45d1a7d329c25cbc30a7936fa21ffd8f92c83a3be1c5b9260fcb8e2ee76547a
MD5 ce7ef018f3ab9e94aa2d17f009a132f3
BLAKE2b-256 ccc3281d65c38212cd12a15415850da8b849c27854df6f05945779d1034afea1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5eb5809283837f56f3022e2d6b9f602c289b436f079d2fa8a97b8046130c48a0
MD5 516f0b1424ad553c1d6d29532fb99e94
BLAKE2b-256 96367eb437a794d81c16cb21bc16af1651f29bb3818cd75af0b77ed30572fb61

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 a26c83ad67007301e29bc9c8d9952df11787e53a31eb12391dcf51864b2f406d
MD5 bc34bc0918b3d65b8540808dce3e8a1e
BLAKE2b-256 c6421ba46e9a6a93c16b5c8de1998031996dbf7dc9e81ad3d1215173f97c1408

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 f7a6f41d07379461eed7a7c98b6e468025c1164adc4c054376d6797b4c04168d
MD5 99d058a8a86f2145cbaeaf0eec32ebdc
BLAKE2b-256 44a108a521c9dddb8b56eab20813689f93d5d75bff9697ab3fd4052a9c04f399

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a92ec4854b097365195b9474d9da56e7cac4d68d6d0ca433fbd56a667ab7f685
MD5 f30cb8585769b75077def659194dc898
BLAKE2b-256 42ce51b8281c2850aff78a8c18783ad2303c42433ba9f2d77ca7bac298d62107

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.7-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.7-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.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da804d9b5d6e2796bacd37421da75f0c5efa7012a70ff473a96eb082380558c8
MD5 17ff70ae413be9c7c960d7207542fe02
BLAKE2b-256 7dd78a71e36c7d4d505690c4a1f92e5cbbcbfe0362237a31e55353a7a4ca5f9f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 cada1f0f08c774dd0fc4e7e8204d550456e0e61486c31a337d57243f01527a08
MD5 2dfa1a937c57a7599ab4c1dcc564463a
BLAKE2b-256 f2a5b5f19232e85e3270a5323f2c2b650e5218d60918ab1eb48b5c9f27bffc25

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 83e116afb08c116671043b255be377de2293566e0cf1c172d0fc28386b2e9388
MD5 545b31336fdb29ed053e4f7ac7e9d24c
BLAKE2b-256 2301668ca161b0fafbcfe23e39cc4439a90f9f16ca6541890ee4bbbed0515d7e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 7bbc6e39589a7e8dfab27ebc7f522a40b132abaf2d8f7ee5ebcf62d55ee767cd
MD5 b3abde9fe784bab8185f28b4d742a000
BLAKE2b-256 808c09cb2abf5fce7a7a969463d7346dd2c5132d3307a3fa2f3c5527817971bb

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp311-cp311-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 c81127c1e46c972b6181e3a6f3a611849c5dc8c3e3fc891452423886274f3072
MD5 439e9df825ee1d06b7dc1a5aa3b4d6d2
BLAKE2b-256 63f8358ae0dd8f4988e61c8a1e3bc8a7c8f40b2580c144fe9c5b9ee3d0bc3739

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 bbcf14099cbc05e3f4061c9dd38263420f4adeb4ea122acd67d410742c217125
MD5 81b12cd4280f627e3c3c9c029532201c
BLAKE2b-256 2b63266961686a61116995f8cb5c705c9214da90948f08355965d49933690a8c

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 292b8a0d616145227160eae239736c87ed20f4c269694b88bb6d3b0ebe7f422c
MD5 bba5a84ad8ce80436024c689ad6de5e5
BLAKE2b-256 523af060aa46b5676640b2ef26a951ca328e9f8cf7b2d41af1cff769158974d6

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 94cce7e324b8142e41a8ff9aa77b38ca413305958f01a619754691a6a25846d5
MD5 bedfe0f5f536739f8b2d351c5cd22e38
BLAKE2b-256 112764019405a47c696963b10d99469b2249db2ba5a058ea5c814ad5c574ed2f

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f8db25c5e299667ee0c7ea7130d9d70b69fb4aab1abf16aae224ad56f767eceb
MD5 65603d4c3555958f80a3ebf190af9fe4
BLAKE2b-256 23f8c2b1774977967337a99bb2aa48e131efc2ec01fca9e05208a9851c547c0d

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 252d947aeab9d89128af66bbe94d2e0a47ac2ce00ab037d7b336127fb2fdefcb
MD5 e66dbcf862a56860ea4c2dcdab641d1f
BLAKE2b-256 8bcdad1b16abbd9b4eb57099e1641133208c6accaeac8798e93eb88dae2af7c1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 a4a7328196dd0a298ae0a5ac8488e553980b42d8d5a19450c1dc43fa1aa9aec3
MD5 77d7b3a14e261668ea8af339769a34da
BLAKE2b-256 9a353fa2d7157a96cf96aaec874a88dc90ab449ce0722731128a3d29eebf35f6

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 a80347f48e49d576387124e12c57541d2296337cbdc0b2ff1a2876846fcfc91f
MD5 475d9ebcf1eda9a71b99873a809e1126
BLAKE2b-256 698cd993cbff72141e71e2be6ba8fb4ba5b23d79bee17754ddf95dee332ef2e5

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 290c8f056f94088ed36d2aa8fc31b2ba7bc060fb2b2a54dee28bb1fd58154293
MD5 1acbc0e46478176a13cec6672696d684
BLAKE2b-256 2dc475c7dab7d389df889a6debd6164a397d4637365e6ac26fc85d1af90d5cc8

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 96dfdda27590aaa9dff1bca1c54c213ead9166bd7f64dd3cc7e38154af00565f
MD5 5490b7a55e86fa53f092bdffb0b0b03b
BLAKE2b-256 b98dab116dac3f0ea2cf68b5bdaff2ec60b3cfa14549a7747cb92d04d6298479

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 f6cc6bc4f16d5273918c479b22b87265889f53cc00dc8b70dc9278b936465785
MD5 dfb21fa84b7c1ef21770a8ca06927f1c
BLAKE2b-256 e98190e399ed66addc52758bfd2c519c643e7a4e7ae7c38ba0045e95a3a8d68e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 e3adfa0b50ab3fb17d86506ada234a6b04984a6a7f01c6206f698c2837afa88b
MD5 df50f5085410ca1480164a4f49ec8596
BLAKE2b-256 8b56ceb1e202babc79f382ef94f5e88133993ab56cbeaa556cbf2eed6307fae7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9061ca9db7f827a0397e988b48e1efc242ae44b900373d1abe54355ea32961e5
MD5 60688573ba850b2b3017b840684a5f3f
BLAKE2b-256 a0894abc096b7ab426251f98004a244a5357fa97c5e043a3c30a9f784ccf9e4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.7-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.7-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.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b5571369bc31ae94a847861f38076e5ef60aee04d0c2b518e14153837e9cfc1c
MD5 a180121819fe2556c30cba1e8a481f51
BLAKE2b-256 fa700b8b3719afdb3660aa0c44817ed9e61deda10a32479710dd121699c3d2c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2bddc1914041da7c79f856cf03aabdab479fd430dc661be3e5e02fc3ec1f6ca5
MD5 3ade6d0b611f45ee137b504faa88d1f6
BLAKE2b-256 2480537f769f5308dea1ed97fa94eef5db35fbdc1563fef14c49845afddcf23f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 983a5ce5e2336854b1b4b63a09e86c5853b685f6303c66ab180b419ed152c444
MD5 3aeadf8379a096c0ffd4145834f3621a
BLAKE2b-256 b32133497208d8a61ea89549b5f7a3b49b2d952de5618b04ebb8fa2bb552fe12

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 ce2763f53c2bee2809c661cd290119b676753263f5a528c83789a9352c1e830a
MD5 8c698e61e87891d56eaaf54d94a1b6f6
BLAKE2b-256 ec8bf37bb83400d0968df18ddc0a84cdc95bef5a6cbddd484f383530840bcc6f

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp310-cp310-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 c6e3c0a19ee92e1bb99da2bb822677a6378f8a50cfe120e065c6e3256ea30444
MD5 9f5e2ceb2532a1673433a1fd510c340f
BLAKE2b-256 077920a5d0a2a005ceba38e962eda775878762fcc1722904c9ef18c29fe5ab9a

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 a18b4588afcf33fdef6933f64ba9a189d4979db8764e901f5ef13a5f3de98f8d
MD5 760082cb0bd7094f427699977ac184d4
BLAKE2b-256 0d21fc8c02ec985d3729b1912815566f4cfded10748883a9c5c7c9df9e42b08d

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f0e8e02c21126cb1d78f209f25bb9e4f95bf9122ebedbeaeb1145c037eac739d
MD5 0c6d48ab4557d5c3736157ae6f9ed7f7
BLAKE2b-256 6f034f9ba703088e757bf385f45b99395839a4128960927cbbcb1528b15525be

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

  • Download URL: stringzilla-3.10.7-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.7-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 26a9cb654f5564ffffa6e95e1533abcfdfba8b79768028f6094edcb087d773ca
MD5 dbb370ff64531a06186f3f132c987e76
BLAKE2b-256 c6a734a4b2dbef0eca3788a3ade13bafc70e4bac91095db7cdb26b4f27101093

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5a05bfab8eb4d28068d8f9e63d67feef794c3ade38b0484824b7de29ae985e3d
MD5 55fe227e917a3cb76d1b30fa627f0669
BLAKE2b-256 8eaa005360795bf5b45dbe82c744cbdce0af7bae926200f1f7b95c493b8a4690

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 557868f0b8187f3af1af663112782d5f56e852ff26e906ec4bfb772e2c2dba0d
MD5 44a99ef7348cd3fa8822fed6b2e8da19
BLAKE2b-256 6e3072d64c0cf95df7e20d8c0b9eca5b736e678dfcc943bc63011fb0bcc85dd8

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 a99eab6445d65f0dc124f735146342596cc26cd99604e52a6eeec791e70e6827
MD5 5a96721efce794b7fefb3b1264ea0e49
BLAKE2b-256 e29672c3f915ab067d9f696c1778415becfeae13506e8d6f25267f670b1a4110

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d7768f09aff0b66ae5650025330e6a7af7b5f6cb3bae70a4e6ce3c37f03ccac1
MD5 29e482c6aaeb89607aa2ca9312423620
BLAKE2b-256 0c9d0e875cb7ed8d3512b96ad5d8e72c46ff637bcbf1aa236192fd2226ec7494

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 c4a542f36525cf486fa13756d87d2e086e0a0223eea3c75c63a18a6baabf9e39
MD5 d13b431a283ea024ea60ac0bb5fb1d14
BLAKE2b-256 37b0d41757413165fad30c43dc8181ba0710e631abfb5d116b28a19bb48e0f2c

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 baca3a821aed4c0f9adf16abadb812f331f92f51f1e414e91122fd39bbde3ffb
MD5 0a26e657f0164e9fe5615af38a541728
BLAKE2b-256 decaa9d4cc568686bee7e92515dac2ea934bdea5171add4badc23c3aa544d457

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 860c3ab3aa637785380f7d85d207199989a5cb313556682dc3f98ccd70c50745
MD5 57402e66922fc4d7086ffbda710bdaf0
BLAKE2b-256 e45763a9aaf32a2cac5f0c1730e41db9cf03a4c397e20ac30768beaa06e077e3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 18537ca7c1cccd66b30656a7da41ce27efdf1c2495320e31c9ee3b153cec542c
MD5 3dcd976be16da549b75dd8ff3e82ee7f
BLAKE2b-256 f20b46087a247cd2893f62ef3f8e8bb8f693120a4433c2e20cae50bbd088af5d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4e467f9ae3f833817e693d9b0899b53881a7f5b16b6b135f202edd99335a3da2
MD5 270242ab7054529e491371da6525d630
BLAKE2b-256 11d8144b6457d9f4b45db507637bec4f88f3cf2cad5a6ad128346143d66c6002

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.7-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.7-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.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 79d2bde979559f32eede4e211f07c41361aa35c78cf401de04d2c19460e7a701
MD5 588cc8694266cdf53c6a9a70db36ffa3
BLAKE2b-256 d04ae4cb013ad150c9a7509a96776cc55aedc012e590068f0896d21dc1350b6f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f738ee21277133ed3c5b257c82cf654250828a87603ca4454a832cf52d27951d
MD5 86667e299628238f5878bbb95c415086
BLAKE2b-256 56fe1c360361be274ed4bf6ce146a484c8d89e147c859cd4228bc05a5d3b12d6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e002be1b01b2213653a9a2b4a68bf0a3d5e8359e43437fe34e5cfb0c9eede7fd
MD5 1b8b0f01467bea1e955ff5e97b1a515b
BLAKE2b-256 357a2058f56fda62b913287dab4a61b22b24dec86cbc83d7e17868a44763d08e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 26cc997ab0213cf31cd446348ef0559a183c4b48e7c0159677af3aba67e899ff
MD5 db45afa18562dba9a1e0e527c0181575
BLAKE2b-256 b05fc7b229f98a316178f0174b5c5ae1dd7b177680e2a1ff5cd38f99bec41754

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp39-cp39-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 d39dff736b8c04cc8ae0a1949066ffecd79df460e0193781a1f4a1afa30b1bf4
MD5 1dff6f5ac76118f9fa6493359a6aada6
BLAKE2b-256 e6e6974bb676ac99707138ab73824aca20c7e1f41a7c72824ed7384a827dc11f

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ab903ace5e1acd8d50ce4e9496ee10d924365e6d770a540965701f32e98b82b1
MD5 d1c017ccab8c17126f8f0a5bed28ee76
BLAKE2b-256 2813c16a83f97c7d2a4a7fa324728bede2ce058da4012ded88d1778c191b147d

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

  • Download URL: stringzilla-3.10.7-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.7-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 348bdf9f0af05935822a6b9d8f18ea59d97c72cd04021582d43322c06877aa73
MD5 64a5939117ec56983a6f50b982a77cc1
BLAKE2b-256 f2e5760a579f831046e3f841fd9a9d9060b9049d9ab64db50846dc075a91652b

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ced0254ebbcb6074389c3e3acd82206a441265113e2b0ec3c522fc2a3e0173b8
MD5 cdb52b96365fcb2c1b2d19f13d94f9d5
BLAKE2b-256 61a292189e6e376e88fbc3a6f05a1060fbae45d693084e932980055610837b1e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 27a1e7b872bcc105caf9185d4a5becaa4b2d0c63346598a7f2e3507204637f68
MD5 38c2bf6097941543d307aaf1add992d9
BLAKE2b-256 e88487921bfd216964c754ded9ce0225be6b75207cf0c49bb66bcdbff5e4f1d5

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 1a1c35aad0614737d0c425da179422078d849d66563a686437ce424f8ded102d
MD5 0048c67fd56ac9d8353e217568dfcd43
BLAKE2b-256 fd6ba2de041374949d97eb845d93ce7ee63665725c81b092c87d6ab9a8c034d9

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 1c8ec560929a6a344ee6ca14cf0d93099c7fb8899c6983e04a26d47e5a78b85d
MD5 54d47d6b5190990384fa9e235bb116d5
BLAKE2b-256 0f9c4ac4b4deeeb724463757eaff3764b69e969246ad0669a00348c5a4b7f182

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 30c89f648f6d68eff466e3c481cf78676091bf71bd85224bd3f9436baab578e8
MD5 8bd359a35ae1c3be9ba88dbdccabcf64
BLAKE2b-256 7fe0e6fee169f8ea843d90f89f5bce8fcdf1b56e10f746bdf49caf990a3bcb81

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3aeca51df168cb7b7cc049f9d78018cf81490e37bdb76e584e9b9eeccadd5ea0
MD5 fa87021b9e480cf65d11ffb93a13a8cd
BLAKE2b-256 7f9430ce993378ea8d409110c2a5decddfe9c93059955d66e2ea3ee3effd0876

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 a3b520e843a082842d405cac55fc8619a522b0ee4097dab1aa9934b9bd45a90c
MD5 5959dcd90e2e6cb3460f691106f3b5b6
BLAKE2b-256 d1cc2f4fbbdb1a419b732e13dedebfe12c49148d8f33e4a9bd66dea98da2a727

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 b3fe52d33768a0937aa03a5dc35fcd548bcfbde365f1e77b760e7cc353657f96
MD5 bc334ec6a7db133e7a59b07112944629
BLAKE2b-256 6a863e4891191ed2f0e79bd00f59451bb8783629719676cd0ef84f1bb3232b0b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 41757c4fe10a514031e98828f2eeefac277ae1f25c156b98cbb84082343a7064
MD5 90617514688552c6f87ad70e91644845
BLAKE2b-256 0e98ba4d3d42ba84b9ee1a1e9fe3f3cf062e0d4836b58be9a617fcee63c5e853

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.7-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.7-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.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a9b3850da84fea9cb87ad9053b43f897d46ecd29a8fa2e332c3aa88b452b7030
MD5 8271b2b9e64db003cdbd3c230b010abb
BLAKE2b-256 858d2f6d0fa57cfd0a348a9e92383a59259121188df8425f3881024d23717ede

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6fa587308fa9b41e3b5361fda076e54e416e12639df4b5deb690a3e70db6dbe2
MD5 9a92442cc397035af4ba3e124cee6b8b
BLAKE2b-256 a60d9fddc8ee19b891ee67313388dd0aca285a3d94e1f0e8b6895a8616b3cf69

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d89b01d0d90e78e8b9ccdd391912caf8a473e0a7d27993c19c546508f99752f7
MD5 9942607e1a5a1a69344e0a38b1eabd99
BLAKE2b-256 aa68a182339265ac6c40b385f032a1c1b265c34a6760f4cef7829d0109a614d8

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 ae7491493d017fb689219f4f0742aceaf3d91ed7827fcf04f3f7b30b5b50e4c6
MD5 193552e33885dc6ae671015e09f64604
BLAKE2b-256 53021e7679a82a5a535a8e999eedc1d87aacba50b911a4c0b23bb4fe4a4fe295

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp38-cp38-macosx_10_11_universal2.whl
Algorithm Hash digest
SHA256 e9ab1893d99162b16dc4cbe90b140a63e4b8da9c273a6fd89a4a9a130a00193c
MD5 25af1263b07bc96bb850be1711d9debb
BLAKE2b-256 a7f13edd9844926d536b0c8a46b0cd47284378c882ea2a39db52463a4df41da4

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 dd0b55f9dd36a8da2242c96a09fd6c3b6befe77098620a46e5c41f43431b61a1
MD5 febd95700c192897d19dc7351cfff974
BLAKE2b-256 52d9dbe43f32a36acd1a87514b68fac559e0ee1c283dfcca95b505e9c47f82d9

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

  • Download URL: stringzilla-3.10.7-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 68.3 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.7-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 8302f6f54f7dfa6da18920388a1607290d4d09ba2fec27212205b233adadb0ff
MD5 7e558ed035c5eaf69bf6a9f0d869f1eb
BLAKE2b-256 4aa67e515f2ae9843dd9846a5cbfd2a3bf2840eff73281540e1b520481abdea6

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bc951ae1dda5ed5ac6f1fd7bf22d90f6d0f055317441e645543d70d7ce9851cd
MD5 65ddbad094531a13188d9ede6711513f
BLAKE2b-256 05bdf0fbcc75dfcb6953800049fb28adfb08ecd808a97760d229980e00f4f952

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 aa343e886fecfba81df3c0b983fe588d5d51c151b8e1b28db3234ffc2bb85c7b
MD5 559aeb1a01c3cb7f57f1eb329cc79a9c
BLAKE2b-256 9041c7400942c98c4810209d2445bda4dff0fae6fc9c5077941cec73ae00984e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 32598a7586b31ee10905cdb0b966a24e6b4749ef573e24400184604caf86910a
MD5 92d76d3157bbc98d04d6e367b40e78ce
BLAKE2b-256 667eaeab1427318de1d3b5230b89c4c8e3b9d1b805373724a60535b8846a2461

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 4f0b38ea94456abfeb9c2704c624039d59dec3bce51e9b7ae8e99fb40e1c2225
MD5 c9550814ffd37f65909e514a12a5a83c
BLAKE2b-256 5400733909e418edbfcb56a024bf67116da3f18eb5ffb065f150985729f406c2

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 b3d588691268af7e7458f7be1974ac429307daad0d544be049110bb42f1b343c
MD5 7f0cc6341dfa9255fd9db410658527f8
BLAKE2b-256 6a668f90f995fdc67f42d8e6bf7ec2733520dad0d33d3b223c3970a6c2140f87

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f36e8e1988a62f35c2d20de3c270fbeb0968593ebfdf7d9dbafb9cb93ecf8288
MD5 55b52be8a0e594ed40e7aeca015018c9
BLAKE2b-256 414fe4266bd4b1703f06f5572b6c672bdce743592a13a4820ae079e1eca354f3

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 92806bea9984838989c1d2ea0abdddb90128e1a05c28dfb3f070ea749fc306e8
MD5 1569ff2d6ad11e311d18c7b1621f352a
BLAKE2b-256 afdba3a34760ad28fa1e2376fcbcffd6ad32031fd15b08372c5189c983739019

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 e0ce86f866bd0f080d4c98b1532f48e78de1f068ce0a1f1f4bd44a476df0b5b4
MD5 c035b599d59ce2fd595c7745d1c87586
BLAKE2b-256 d7fe51e3ca6612faf1c17e11abaf3e897dc6329b6accab782d7b71ef75be3eb7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e8f9a8dd68e725e80629cdbc2e68c5363cee43a5df2b5acfe55e6e8233a43ccc
MD5 eb88a8d6b52a2e99fbfb45e904b1f136
BLAKE2b-256 ba64c5a379eace37607d3bb2e6e672aa1f84b1f6c258a954d07aaead3166c051

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.7-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.7-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.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3ccfb6df488272eacee421b8ddbd1afd417b66561fa21f8416c07293cb218461
MD5 c6382e2b2e019e7e8bdfd08466936ec1
BLAKE2b-256 c67d63d0dae501c9fc2ca9683697a1e0045021ea964a5c333ead298a03d17518

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c34b68468d8ca633a430fa1e0735bf3a4299da264daa0e7ea179aa3c86ece766
MD5 4f9689a379df2d4507c90ae599522b4b
BLAKE2b-256 48b5d34c86a4a5b10f90c3b55da96f91db1dc33eb1ae25dfc708fef4c9c83515

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp37-cp37m-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 8fce288d1384df7e6051f92c24b27f9156e76a2495274a30f999976a29ac4fe8
MD5 45b8a4b86714dc9f02c71e84d477f829
BLAKE2b-256 14ff5535555d3f5ab599885c4cb15bbc90298fbf6adf98a832dd38eeff85ddbf

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 be67b21b99f74ce14083c0f555d6114bf23969ebcf28876d88e817de1093f46c
MD5 551bb6d3346c9e7cac816b492b7918a6
BLAKE2b-256 a9d822380991482a9fd27ed030c3a941540f105f04370499e73ebcaecfd6452d

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

  • Download URL: stringzilla-3.10.7-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.7-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 f6c54989b72b7cc156e11ae6b6b7a6d58b33482c66fdca3a147788639ef7b6c0
MD5 43f6e42d80411146eda1afde60e645c6
BLAKE2b-256 f091ca390274b4ffc3b5217fd0f72d0cf677740a28ec095cbdd98019c50521cb

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7e26e02a287f3f276c804eb8ecff7f8025b760916a666c9ee509e8db77ac9a45
MD5 04d235f6139a8149eb995fecf14b722c
BLAKE2b-256 43355e2ab112715b6fd1d564c6287bccd034484677ab0446896a21f82f7c5bd5

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 f21cbde2b1f390c04325e92c6a24e2cb0164bedd09297cf3ae3e9a11553a9dba
MD5 aefec533d25cb235ad77e6351ec3f3d6
BLAKE2b-256 1e55604a6b076c134d2597d6ddf4ee33b4c7de13b49f902772b378bb2a1466eb

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 bde14c28640258db3b0b62dfddae57dc4c3adcbbd9fb77df787dae08dbf6e11e
MD5 6d79e86e51de6ba2c15e822ebe460926
BLAKE2b-256 e1edfe3d8cf1754c4d27fa48ae436378f0f1ec17926c240891e3de9dda2a764e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 1b0f3caab6b2370fae285fb65778b63c05bd3391c86dd21dd96664e3740a1abe
MD5 c63b5262039e33c9e9455bf176df904f
BLAKE2b-256 ea96ff412caf9db0bfbfcbed999e88bd16c1dabfeab90039ab739668212fa107

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 15990fd7a42e7137696233213862abee1a1bb8f8ce00ca0d29777e4708e43fd7
MD5 c582bb84b571f7ed2e3fd2549856785f
BLAKE2b-256 240cf77339e324884389f921d31b62dba8ed412e97523f1e2db7487d35e3f52a

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 33c40128ad6cc5d4998cb76280baf15a98e9c1ef127597c229cfea1d59924a41
MD5 223a6fcc347a93286ce7d1b3c1114706
BLAKE2b-256 1a3247e98ed25f546cb746effd6c149992f001acd8f77d2bdc882fc76c302fdd

See more details on using hashes here.

Provenance

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

Publisher: release.yml on ashvardanian/StringZilla

Attestations:

File details

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 83e90ee6cbd8c9aeab4526ac4faadce848bf60055aa0b8e6ae5f16e9804c4906
MD5 5578e8fd68f5ac0504a227704de22add
BLAKE2b-256 2183cf7c4cf28c6c7505268d66fdc98bd04bdbe09dc77a2e3f8c291637795e47

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 bfc6b7741b9702ca784504bad01f5afb9bb451b323730a35b198726e73dd64e7
MD5 9567f8c4154e9fe48632548542f27ffe
BLAKE2b-256 848c8ce6752c5e7b59e38760b453b0ffb01bdffda1b28af2ad3498d9051f8e0e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bc7ab2fd389fbad36a8ca765681673cf804b4139702df367ed76f48f7df5dd42
MD5 5f1ce38e98c6e181ea2358bf0d49cf7d
BLAKE2b-256 c755b6edb75f6cbd13cebc11c4dd7e07713224b9efa21eea7bbd35f628b5c782

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringzilla-3.10.7-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.7-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.7-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 02efa2d3b291e7e9d4e21ba9cdc8cc2d073501b81ad6dc0648187d2601c798fa
MD5 201ecb70dfa0d69c985586619e6c2c51
BLAKE2b-256 dea854eef523e8568ae9230f94a50d17b24711a667c655b9c73d4b8ce072ec8c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0647c4293412fd2f7063bf345d7efab7b1ea8e8dfec3bf378b81fa33cf41690a
MD5 b0910ee51eb21398153efcabbeea8169
BLAKE2b-256 1dfe099abb0c99944e4ea664d38ac79c8bb8ff6f15c9d6aaf65e4e35bdf58cbf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for stringzilla-3.10.7-cp36-cp36m-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 4f07170e2cb216b691bfbf4c7e387fa02e9e64705138ae41bc6732bbebfc381f
MD5 970d267bbf58b5a37488e798f7ab8e37
BLAKE2b-256 9068100b7a70ef794b54851144ac7590e53be5137efeb5047bff2c95edf565ca

See more details on using hashes here.

Provenance

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