Skip to main content

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

Project description

StringZilla 🦖

StringZilla Python installs StringZilla Rust installs 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
  • 📚 Researcher? Jump to Algorithms & Design Decisions
  • 🤝 Want to benchmark or contribute? Jump to Contributing
  • Code in other languages? 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

StringZilla Cover

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
find the first occurrence of any of 6 whitespaces 2
strcspn 1
x86: 0.74 · arm: 0.29 GB/s
.find_first_of
x86: 0.25 · arm: 0.23 GB/s
re.finditer
x86: 0.06 · arm: 0.02 GB/s
sz_find_charset
x86: 0.43 · arm: 0.23 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
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
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 5 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. Despite being faster than the standard libraries, 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 🐍

  1. Install via pip: pip install stringzilla
  2. Import the classes you need: from stringzilla import Str, Strs, File

Basic Usage

If you've ever used the Python str or bytes 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')
text_from_file = Str(File('some-file.txt'))

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
  • String conversion: str(text) -> str
  • Substring check: 'substring' in text -> bool
  • Hashing: hash(text) -> int

Advanced Operations

  • text.contains('substring', start=0, end=9223372036854775807) -> bool
  • text.find('substring', start=0, end=9223372036854775807) -> int
  • text.count('substring', start=0, end=9223372036854775807, allowoverlap=False) -> int
  • text.splitlines(keeplinebreaks=False, separator='\n') -> Strs
  • text.split(separator=' ', maxsplit=9223372036854775807, keepseparator=False) -> Strs

Collection-Level Operations

Once split into a Strs object, you can sort, shuffle, and reorganize the slices.

lines: Strs = text.split(separator='\n') # 4 bytes per line overhead for under 4 GB of text
lines.sort() # explodes to 16 bytes per line overhead for any length text
lines.shuffle(seed=42) # reproducing dataset shuffling with a seed

Assuming superior search speed splitting should also work 3x faster than with native Python strings. Need copies?

sorted_copy: Strs = lines.sorted()
shuffled_copy: Strs = lines.shuffled(seed=42)

Those collections of Strs are designed to keep the memory consumption low. If all the chunks are located in consecutive memory regions, the memory overhead can be as low as 4 bytes per chunk. That's designed to handle very large datasets, like RedPajama. To address all 20 Billion annotated english documents in it, one will need only 160 GB of RAM instead of Terabytes.

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=9223372036854775807)
offset: int = sz.find("haystack", "needle", start=0, end=9223372036854775807)
count: int = sz.count("haystack", "needle", start=0, end=9223372036854775807, 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 codepoint
assert sz.edit_distance_unicode("αβγδ", "αγδ") == 1 # one unicode codepoint

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

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(" \w\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_append(&string, "_Hello_", 7, &allocator); // == sz_true_k
sz_string_append(&string, "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?

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").back(-1) == "b"; // accepting negative indices
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(char_set(":;")); // Character-set argument
auto [before, match, after] = haystack.partition(" : "); // String argument
auto [before, match, after] = haystack.rpartition(sz::whitespaces); // 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(char_set(" \w\t")) == npos;
text.contains(sz::whitespaces); // == text.find(char_set(sz::whitespaces)) != 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).rstrip(sz::newlines); // like Python
text.front(sz::whitespaces); // all leading whitespaces
text.back(sz::digits); // 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(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(char_set(""))
  • haystack.[r]split(needle)
  • haystack.[r]split(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; // Too expensive to construct every time
    std::mt19937 generator(seed_source());
    std::uniform_int_distribution<std::size_t> distribution(1, 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

Levenshtein Edit Distance and Alignment Scores

sz::edit_distance(first, second[, upper_bound[, allocator]]) -> std::size_t;

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:

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.

SZ_AVOID_STL:

When using the C++ interface one can disable conversions from std::string to sz::string and back. If not needed, the <string> and <string_view> headers will be excluded, reducing compilation time.

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. It currently covers only the most basic functionality, but is planned to be extended to cover the full C++ API.

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

Quick Start: Swift 🍏

StringZilla is available as a Swift package. It 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.

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.

Next design goals:

  • Generalize to arrays with over 4 billion entries.
  • Algorithmic improvements may yield another 3x performance gain.
  • SIMD-acceleration for the Radix slice.

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

StringZilla does not yet implement any Unicode-specific algorithms. The content is addressed at byte-level, and the string is assumed to be encoded in UTF-8 or extended ASCII. Refer to simdutf for fast conversions and icu for character metadata.

This may introduce frictions, when binding to some programming languages. Namely, Java, JavaScript, Python 2, C#, and Objective-C use wide characters (wchar) - two byte long codes. This leads to all kinds of offset-counting issues when facing four-byte long Unicode characters.

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. 🤗

License 📜

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

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

stringzilla-3.1.1-cp312-cp312-win_arm64.whl (49.8 kB view details)

Uploaded CPython 3.12 Windows ARM64

stringzilla-3.1.1-cp312-cp312-win_amd64.whl (54.6 kB view details)

Uploaded CPython 3.12 Windows x86-64

stringzilla-3.1.1-cp312-cp312-win32.whl (51.3 kB view details)

Uploaded CPython 3.12 Windows x86

stringzilla-3.1.1-cp312-cp312-musllinux_1_2_x86_64.whl (203.8 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

stringzilla-3.1.1-cp312-cp312-musllinux_1_2_aarch64.whl (151.3 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

stringzilla-3.1.1-cp312-cp312-musllinux_1_1_s390x.whl (148.7 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ s390x

stringzilla-3.1.1-cp312-cp312-musllinux_1_1_ppc64le.whl (179.9 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.1-cp312-cp312-musllinux_1_1_i686.whl (160.8 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

stringzilla-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (206.8 kB view details)

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

stringzilla-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (145.4 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

stringzilla-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (170.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (153.1 kB view details)

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

stringzilla-3.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (152.2 kB view details)

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

stringzilla-3.1.1-cp312-cp312-macosx_11_0_arm64.whl (56.4 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

stringzilla-3.1.1-cp312-cp312-macosx_10_9_x86_64.whl (58.5 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

stringzilla-3.1.1-cp312-cp312-macosx_10_9_universal2.whl (89.0 kB view details)

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

stringzilla-3.1.1-cp311-cp311-win_arm64.whl (49.8 kB view details)

Uploaded CPython 3.11 Windows ARM64

stringzilla-3.1.1-cp311-cp311-win_amd64.whl (54.6 kB view details)

Uploaded CPython 3.11 Windows x86-64

stringzilla-3.1.1-cp311-cp311-win32.whl (51.2 kB view details)

Uploaded CPython 3.11 Windows x86

stringzilla-3.1.1-cp311-cp311-musllinux_1_2_x86_64.whl (203.4 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

stringzilla-3.1.1-cp311-cp311-musllinux_1_2_aarch64.whl (151.0 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

stringzilla-3.1.1-cp311-cp311-musllinux_1_1_s390x.whl (148.6 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ s390x

stringzilla-3.1.1-cp311-cp311-musllinux_1_1_ppc64le.whl (179.7 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.1-cp311-cp311-musllinux_1_1_i686.whl (160.7 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

stringzilla-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (206.0 kB view details)

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

stringzilla-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (144.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

stringzilla-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (170.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (152.5 kB view details)

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

stringzilla-3.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (151.7 kB view details)

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

stringzilla-3.1.1-cp311-cp311-macosx_11_0_arm64.whl (56.4 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

stringzilla-3.1.1-cp311-cp311-macosx_10_9_x86_64.whl (58.4 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

stringzilla-3.1.1-cp311-cp311-macosx_10_9_universal2.whl (88.9 kB view details)

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

stringzilla-3.1.1-cp310-cp310-win_arm64.whl (48.9 kB view details)

Uploaded CPython 3.10 Windows ARM64

stringzilla-3.1.1-cp310-cp310-win_amd64.whl (53.4 kB view details)

Uploaded CPython 3.10 Windows x86-64

stringzilla-3.1.1-cp310-cp310-win32.whl (51.2 kB view details)

Uploaded CPython 3.10 Windows x86

stringzilla-3.1.1-cp310-cp310-musllinux_1_2_x86_64.whl (202.4 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

stringzilla-3.1.1-cp310-cp310-musllinux_1_2_aarch64.whl (149.9 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

stringzilla-3.1.1-cp310-cp310-musllinux_1_1_s390x.whl (146.5 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ s390x

stringzilla-3.1.1-cp310-cp310-musllinux_1_1_ppc64le.whl (177.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.1-cp310-cp310-musllinux_1_1_i686.whl (158.5 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

stringzilla-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (204.9 kB view details)

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

stringzilla-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (143.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

stringzilla-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (169.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (151.6 kB view details)

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

stringzilla-3.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (150.6 kB view details)

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

stringzilla-3.1.1-cp310-cp310-macosx_11_0_arm64.whl (56.3 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

stringzilla-3.1.1-cp310-cp310-macosx_10_9_x86_64.whl (58.4 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

stringzilla-3.1.1-cp310-cp310-macosx_10_9_universal2.whl (88.9 kB view details)

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

stringzilla-3.1.1-cp39-cp39-win_arm64.whl (49.9 kB view details)

Uploaded CPython 3.9 Windows ARM64

stringzilla-3.1.1-cp39-cp39-win_amd64.whl (54.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

stringzilla-3.1.1-cp39-cp39-win32.whl (51.3 kB view details)

Uploaded CPython 3.9 Windows x86

stringzilla-3.1.1-cp39-cp39-musllinux_1_2_x86_64.whl (201.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

stringzilla-3.1.1-cp39-cp39-musllinux_1_2_aarch64.whl (149.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

stringzilla-3.1.1-cp39-cp39-musllinux_1_1_s390x.whl (145.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ s390x

stringzilla-3.1.1-cp39-cp39-musllinux_1_1_ppc64le.whl (176.7 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.1-cp39-cp39-musllinux_1_1_i686.whl (157.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

stringzilla-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (204.0 kB view details)

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

stringzilla-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (142.2 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

stringzilla-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (168.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (151.0 kB view details)

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

stringzilla-3.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (149.6 kB view details)

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

stringzilla-3.1.1-cp39-cp39-macosx_11_0_arm64.whl (56.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

stringzilla-3.1.1-cp39-cp39-macosx_10_9_x86_64.whl (58.4 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

stringzilla-3.1.1-cp39-cp39-macosx_10_9_universal2.whl (88.9 kB view details)

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

stringzilla-3.1.1-cp38-cp38-win_amd64.whl (53.4 kB view details)

Uploaded CPython 3.8 Windows x86-64

stringzilla-3.1.1-cp38-cp38-win32.whl (51.3 kB view details)

Uploaded CPython 3.8 Windows x86

stringzilla-3.1.1-cp38-cp38-musllinux_1_2_x86_64.whl (200.6 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

stringzilla-3.1.1-cp38-cp38-musllinux_1_2_aarch64.whl (148.3 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

stringzilla-3.1.1-cp38-cp38-musllinux_1_1_s390x.whl (145.1 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ s390x

stringzilla-3.1.1-cp38-cp38-musllinux_1_1_ppc64le.whl (176.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.1-cp38-cp38-musllinux_1_1_i686.whl (157.0 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

stringzilla-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (203.6 kB view details)

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

stringzilla-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (141.7 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

stringzilla-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (167.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (150.5 kB view details)

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

stringzilla-3.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (149.1 kB view details)

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

stringzilla-3.1.1-cp38-cp38-macosx_11_0_arm64.whl (56.4 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

stringzilla-3.1.1-cp38-cp38-macosx_10_9_x86_64.whl (58.4 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

stringzilla-3.1.1-cp38-cp38-macosx_10_9_universal2.whl (88.9 kB view details)

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

stringzilla-3.1.1-cp37-cp37m-win_amd64.whl (53.4 kB view details)

Uploaded CPython 3.7m Windows x86-64

stringzilla-3.1.1-cp37-cp37m-win32.whl (51.3 kB view details)

Uploaded CPython 3.7m Windows x86

stringzilla-3.1.1-cp37-cp37m-musllinux_1_2_x86_64.whl (199.4 kB view details)

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

stringzilla-3.1.1-cp37-cp37m-musllinux_1_2_aarch64.whl (146.4 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARM64

stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_s390x.whl (144.7 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ s390x

stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_ppc64le.whl (176.0 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ ppc64le

stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_i686.whl (156.7 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (202.3 kB view details)

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

stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (140.2 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (166.0 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (148.7 kB view details)

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

stringzilla-3.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (147.7 kB view details)

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

stringzilla-3.1.1-cp37-cp37m-macosx_10_9_x86_64.whl (58.3 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

stringzilla-3.1.1-cp36-cp36m-win_amd64.whl (53.4 kB view details)

Uploaded CPython 3.6m Windows x86-64

stringzilla-3.1.1-cp36-cp36m-win32.whl (51.2 kB view details)

Uploaded CPython 3.6m Windows x86

stringzilla-3.1.1-cp36-cp36m-musllinux_1_2_x86_64.whl (199.4 kB view details)

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

stringzilla-3.1.1-cp36-cp36m-musllinux_1_2_aarch64.whl (146.7 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARM64

stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_s390x.whl (144.0 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ s390x

stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_ppc64le.whl (175.4 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ ppc64le

stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_i686.whl (155.9 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (202.1 kB view details)

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

stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl (140.4 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ s390x

stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (165.9 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (148.9 kB view details)

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

stringzilla-3.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (147.7 kB view details)

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

stringzilla-3.1.1-cp36-cp36m-macosx_10_9_x86_64.whl (58.1 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 355fb61941734adf9bc6a084412757068db7ae3cad57c7557cb46f449b2bf954
MD5 8979ad43c04e09fe44dcb3af7f33bf3e
BLAKE2b-256 a148db7be518d2d9a1b2a1edb8076fedfebb4e2036fb885a64ee7afd9ee7cce8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2e861e6e5f1e2563b29a4c03a68ccc6fb96f8c955a705f078f18f719874dbe50
MD5 7a4bdfeccd113acb58a013fdddc623d7
BLAKE2b-256 41b1e92aaf24195983801c7374b7ea5cb5fdd60da15cbe6be2c1081209b4966f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.1-cp312-cp312-win32.whl
  • Upload date:
  • Size: 51.3 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 da489cd79b2d6e1e58daf4c9c0fb46edf61ffa5a15736c463eef8487a468fe4c
MD5 3470f9454e7658248476c826970af8c7
BLAKE2b-256 971629d2c74bba01bbfdb2151490b50b9eaedf6a37ea99973fd988dbbb6bc02d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 57c35807097033062022331244fc1bf6c4d876660c4a48f4b7c7c6641e3f2930
MD5 b16ca9edbc164a59db0c9105c03772a7
BLAKE2b-256 4218e399876d07adf1f722af9433a8adf3638b6704f6be8010de5ac50bfc5d4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1e99d17cb38ec548742bcca1d7998192d74b9ed164a9bd3aac4093b2a5328fcc
MD5 5be879f716a1330128eddbf11fd301a4
BLAKE2b-256 4fe40561d2254530a1ef4b55a58b2e164e470e7b6f35889c31ba3008e131505b

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp312-cp312-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 fa98dac6954d2e5ce89d6df4ea8c68a92f270da7a73e6dd53d1a741af085b0e8
MD5 640c22c06cd2a60a30da5e7149d39df2
BLAKE2b-256 1c3a5b79bc4e737aa7e694bc86912427804c9d819c524a56f49ef293e9ffe7fc

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp312-cp312-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 b39e7210ca1aec3e9b54cceed20f5b7ffa5ee26c9425441061be81ac7d3df05f
MD5 785d2bfb2451f91550f026394b44adb0
BLAKE2b-256 4c9719f8427c6604c2a7860eb14dcf16ad8d84c1fc367938d3de8e0a71ef55e9

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp312-cp312-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 2eeb2fef5ab00c553bf7b89cca767d0ec9d9ebb712e5de52d1ef74cf7131bb69
MD5 e4d1206e3568903691fcf94ff29c4d34
BLAKE2b-256 cab2c58fc34fce4b843326eb7444af170b034d70bb594eb10a6963be6785b8f9

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fe8a68950b587fd047647d7a7bf224e9234f565e796cf32dae37e0861b0766a5
MD5 a706e9d010d2f0132dd16d6a0875a1dd
BLAKE2b-256 e48afb029dbbf0df0c6455229f008bfabc8947388a1b46c32fdc155b9935be88

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 fb176a2f1d311d83ab29d2805e662eada0883d58bd03a328efc37cfc03377d96
MD5 fbd607046e838834b0f37762f5a2d315
BLAKE2b-256 2b4a4cbc1302099bd20bbb9cae1d95f214841a487c9266c772109c67a77e81be

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 4a75d8abdb0d781aece1718d6798af287e1dec349ad2ca0d4298679ac94045dc
MD5 2e266f2e34c069a59ba4119d11a548ff
BLAKE2b-256 abd5e4dc775c3d4e6dd5cc6fc6897679725f2da574c6c0b690d6fffffc812901

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2b80358bb35fe0b78492b649d9c230f7e4534eecc283b1d0633c0d468efcf0d7
MD5 cf467af0c0334bd3fb61732c28da69b8
BLAKE2b-256 fa9d9c8952ef81d2180d99e0b02fda762cd56b435ddadc7d84c4e449bd53c407

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9c9147e373b8c26e9730388a88be2d2cbbb0014cb70853005e78338a95a13311
MD5 dd417349a371093385a2c6475993f391
BLAKE2b-256 f23a0a833f2e3fd1c1ac91570a9fb241603be6ebb0b1d6d8ec4f2bb913a05f30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03d04f3980e6504252292f437b0f2b7a33d81389b376ae82a5d19b60b2b54048
MD5 25f2fac40f00d992beedd9f25abfbd67
BLAKE2b-256 6c8f5547762bdc16a9c29f04352a86d8b239a34014df741c68ea04788de52bfd

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 59db2698d20cb333c0e84671921988a69a94768dece74568878c12787b74da05
MD5 3b74dea46f2c51032216b36a961e2b1a
BLAKE2b-256 085d485fc65c70c21a9f44e3586fa17e0fc4bed3d2ed95fd4d7e22ff9c5a3881

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4741c680c23a614c02ffd58f188cfaf58f79266d4d2ed55179b6cb654a1d021d
MD5 ebedfa71e1024e3d36f5777ff65123c8
BLAKE2b-256 42f95d48c5280b59e34602da2b3ebeebf5287fc7a46a19fa55384727412a6a4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 689d013f754d1fbc299c4ad01a6decedde37570411728b58f07ecd0ccbf7c9c7
MD5 8b22a87969a48bd4783222f1cfd0a0e7
BLAKE2b-256 42125b3937f02b2ee82b67c2fef8ccdc7f80fc2275c1fa1d528fb37058914dbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b7a1839236c091cc6b442444dd3d7c963e87d8624382c1fd4727f6262e5388f3
MD5 897967220ad9b4c5710d803db21e6266
BLAKE2b-256 6d1d0cd41be7d02bc3dcf8b847910213247f2e8ebbc335326aafe011b5136d68

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.1-cp311-cp311-win32.whl
  • Upload date:
  • Size: 51.2 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 331c9c3f6161f00ae54b6b454e31ce28f415a58f10c82e056ab495bb474a3f5b
MD5 4021cbafe25fb7397cdcff6635a5ea86
BLAKE2b-256 e1ba10390c1b3d4db880e3896438b9b9a3cfbd07c72d95dcbf08662e069cd2ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0d1f228e6270a200d63b283304fa9fa6329b0104df67552b8a7c6d0823285b50
MD5 5c6af179f31a1edf73cebf45a7118f2d
BLAKE2b-256 9aa7490e99378ad28ab64bebf9f154007b461c9302f9de346bb198cdedfc816c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 320bffbbe499f085e6f4ad453889e564f854efc9be8742f422795811ccaa47c5
MD5 f4e79443b0add9ddae8aa029ddaa3ebc
BLAKE2b-256 aa0c379c25124f5f79f2fecfec5410854f27673d3b9bb8cfc626b6661a19343f

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp311-cp311-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 0647b9aa3b16b228572d1314279f6dcf0a00254e133fc41b29835da259980357
MD5 60f4beecec42996fdbac650a82af549b
BLAKE2b-256 36ad3eac517b3a1464993cfb4c40301afb50934a5112188a956f19e80ba8ad69

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp311-cp311-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 9ce819fd5f37a936ad3e270b3a89c652fa19af2ddc0775f7a52d4ae90ad7b624
MD5 0f567bf9722232431bf6910a1f3b83ca
BLAKE2b-256 fd8ef19cad35e58785c121b46f16360bc0ff7c79bb784291b99fee795eeb7572

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 1ad92793cbad909d311be575a3cdd263f247796a5f51d01981786d2c260b9c4a
MD5 f3be6853317917b52669d563b584dcc6
BLAKE2b-256 5d048dae19cf3fdceb8562267c0a55063d128797b8b59c53c93ed9ea91ab4fb4

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a6aef42e101ed8467ff7cad38a7c64a0f859963a6428d74c6f66e1c77a5f1c0
MD5 f0c900373182235beae35e125897dad2
BLAKE2b-256 524db5bf0e053a706aef934730c93e2226c31009b86025b579f5009f35dfe895

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 2d14f341a9c02715b80dce00a29a6a640368ac7683c7013d9290a5a3b240aa78
MD5 c99412a1621af0d476d46e7d3fb2f89d
BLAKE2b-256 b8c8ef8242dc8e505c75d26a61c94148cb08e236b9c91dc7b23a45c9351ff45a

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 8707ba6fab10886bbad41c711064bff0b978efd812ad8924fa0d5565082e4047
MD5 f96ca320d855d7e75e61bb933f0b01a7
BLAKE2b-256 007cde94b64a9cd96f22ae96d18d05aaca878ce748df71b46ef0c9444b60ee25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 61af025f393375dea70fc47a41896eb117cd11c5b4fc268f6556445eab727171
MD5 72d0ef294cecbe4c074c8bbd738aad54
BLAKE2b-256 bde2c14f5c392ed751faf257380dd1b4ad923996dc6fca53b382c8a0583f59ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 dfef39d3c49074c26d1dafa9ef976d83a4344331ecdf54b1ce1e639e576dcf28
MD5 94ef9b80f6c255c2d11769b322a43295
BLAKE2b-256 e6f5f388aef058f70c0475f3174434f761760aa064ee6eb71b902e2726426451

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ac95d1bf0f5e2b2ff64d3a8e536b638576818c080286cf826ffe5fa2f56d88e
MD5 bf002593d783744f795dea566e13e1a2
BLAKE2b-256 bc39c9f19b6a39a9c90e11cbb26169324bf3d43446b9d05321e1028ce261fee4

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c1db5ddfe812aff351ffbd92ac636d594c4951e0792d89d53bfe082415c296c6
MD5 5904e852201ceabe103894f0cc7396a3
BLAKE2b-256 628cfb315028cdd3f1eff5b046ed2c1ef2b4e46a74e8448ddf7602f8cef68825

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 da23b6ef0bb4d2ab5683379130a64c55ccdd853733d83b34e8028e4236acaa6b
MD5 4b0d184156977bb5aa10ccb6f4589de0
BLAKE2b-256 28b6c3602403114d60d678b0ba48e16eaef088c384329ec55d07b9be91312b9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 5ec5cf1c2d69000241e810be08e548e54376de3c14c8b7e062107d308ce5cc2f
MD5 18f306aaafd0e755e9eb8617b709175e
BLAKE2b-256 7682ec299289db08a91ebfac55320582e209b656d6392ca6b13bf5eae95b3eae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a9fdf8652c0d294c9cd85257c924f89e1430d8c1e440b6b14724fa3646ddd618
MD5 06e5408c38bc3568731a78c8a128ac10
BLAKE2b-256 3bd3524a76d093b725511883a6765bc844d0622490bc78bce6e5574f272715b1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.1-cp310-cp310-win32.whl
  • Upload date:
  • Size: 51.2 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 89984afaba8ef02b060409899504f21e299a6b26fa3c073a087bf882f2c72f46
MD5 9c732bd9fc9e0f0cf1adf9c8858ad745
BLAKE2b-256 66236a7bf1e36d61f8e376efcb898a68e1dd02e39c9c5fe465478c594729eb89

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5f3c2ff8111108cc2cf0741adeeeb7ab450d527e346b978a8a7426363e9a2f05
MD5 b6e8acc6b0a34063835f1d4cd9dcf404
BLAKE2b-256 b3dc7d77e4e0c98ee5ca6e05a85a00c65b0beb74c507ca388c4b9157b392f1d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f819e7e53708dc07c935afc11e08d7c6a51fddd5d90c9f59e17b588bc2cd694d
MD5 d4a9315d45a14240bc0caba9e6eb1646
BLAKE2b-256 4ff31be5c6d095f7dff6e73522f54acc0d2c4e7a72d4f97422a8dcda19990b56

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp310-cp310-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 0ef1c43e5bceb527ed930ec5063811b6699dc898b10931113f3487e7239e2c8a
MD5 7b0193c0243bd13ef4ac84ca472a67af
BLAKE2b-256 fddf3b10fcf9fec8d0f6094c59ee9fc7dc0833e9345da733fdab398d14b0e689

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp310-cp310-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 791cfdd73cbc2d40f355b4bdda8c3bb4c0559cbdd5d246af93ab5024966fea01
MD5 c9270a34cca32e5d4c7c865c00e3f688
BLAKE2b-256 2e223c31e7934c47c3928777dd4685dfe41d35179c696aa934c6ce6b3389cb50

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 f17edaf1e3fd780503b619b2e450d1d47765a2ce385fa71ee0fa1d4eec2f3078
MD5 ac9c128e5b5ea0bf2dc464863835776f
BLAKE2b-256 321c93be607bef7b5d9d821e8772b06cbb563d6f04d78026fc3fba77a19c6128

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fd142f7d92efba95e5513c059ea3362f12b0b98fe7cf55a9860a02d435119a65
MD5 01c2f935a97a1a8536a00978704f45c7
BLAKE2b-256 f376f7d0718e3e69d4294ec4ef17a010aae840fc63bf4f42d5736d5ec0c38b67

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 908635c12c24cf4a27bca135613ef84ba86803335be9b622f26456ae5e4fa302
MD5 d41a1d22f036701d9414f70e832014e1
BLAKE2b-256 0dafd7c9505158b4e3d0a262a5dcfe1de5b06773a8120b43301663e7407bcd34

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 fca5345f8fe3d0b8b01abed2b66f46cb5a3370408fe30e2bb02d6c42a746ef80
MD5 367d5b59359196a55b418247129bb3b7
BLAKE2b-256 4546f55fb266c2a3a0d59a942eadc40f100cca66bff67b50397ef20772d93858

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e2188fbac357d7b8ee9f746e2ed5fcc23fc88dfe2ec2179f67f9e8d0c5801129
MD5 a02fa79e11b88170da995e92d710f9db
BLAKE2b-256 dac7acab8a9d5016dafb0bc5923f9a6c1869862393e12ff885c88edb885f74aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ed514b46af16096a4210a4981650e1cfb42d85d4fc8720ed1f688c5c97d1dfc9
MD5 b460f34ed57a37998dbc5b4725cddc28
BLAKE2b-256 973e7282b2dd5b9a37fb64951db0b57bbe22575d9d27b5a7fd2db10f7a4b122a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59feac9dfb4c04a126dd2f353248e319f597681ee00107b2544b86b0a57129fd
MD5 e41075416d1a7cad155b713e5fc88ca6
BLAKE2b-256 8cf21760c16be741d60e48464d51f4c58151fdc340190fce92a8592f496658bd

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fe0f525048cca5856290dfdf4a4b935007135dda5f95d2fd22fb2a66198e4223
MD5 630382123e5868f33f625a0433003e2a
BLAKE2b-256 e847e592519112cd63f02528cac96734f3b03e348e89a39d5073e96441010473

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2bbeb8a9b5becbfe1199149438979416089997d69a00d2a950ddb329c3d657fa
MD5 af5053854e5801dbc7a06df67bb9a5be
BLAKE2b-256 cefe3265658264fa7b0c117353180dc9b8e65b0560a4f827f0a1f596004d94fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 c7a2bae765e61fc116a6b9d8b5ba7bac051bfe913228b6c0134bc97b6bdda20e
MD5 1a55d9d24c1aacef1285ff4dcdcf8372
BLAKE2b-256 3a9e0e90479ec79fa4d29fb4379ae6f06b2f0a0d5bc07491512bbf36c0730b93

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c6f77fcfe59806a10fa22ab208faf9b64325298267cbf3be5847e0b50cdb8bc7
MD5 b632590951e629599d21450294dc971f
BLAKE2b-256 e8c2cf34f344ef198b0a28571da6413f08ff2f3e05680458f69013b5f0f4a1ff

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.1-cp39-cp39-win32.whl
  • Upload date:
  • Size: 51.3 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 0f02c08402fef2618c2d2bc12298cb6ad7581487495ee03586601e956a316996
MD5 cda5ccf7f6238b690e7b1bcd9280bd93
BLAKE2b-256 381bd41d4da84fb7952ed591b6b45c824c29ca6544e4e31e57613090f2d8bb5a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 242ae4ca5700f9a8d60d362d18b4d9d0dfd780d1ac3c41867c34ce7f81fb4e95
MD5 e49c811e1e2ed1c36dc060bfac328a5a
BLAKE2b-256 6deb341af9f24a6a571b7740158e79d429c7e0186c5e1781a994994111bcdef6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7bb9364b539f63037efce2a9f971d06b02f58cc1fba5ad1fa939c539d0cbd87d
MD5 40053951e4b62847f23248c2cc41f759
BLAKE2b-256 c0fe04142f43e51129d28f50dd3a02056e2181b733998a2bbb7e681cdd357a41

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp39-cp39-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 b4d7785e58cf10e50ae1b41d744051ffc9cc92e915fab35204766e34b913b873
MD5 b9aac7f21d2f1d9a5c20b58ccd61d334
BLAKE2b-256 5c2a8fe2fbf74471d3997645b8f2d9002e8f03d9e895bfe5de599c044b1ccbdf

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp39-cp39-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 9c448dd739ba0e5ada54027d90cce7b5198fa801869471eac4c70930af4eeccc
MD5 96706d51b91f33c17baf759a96c497ba
BLAKE2b-256 3478f5006bf9a2de370557f6c2bba8bc54d7badfed016f91dc8ca4604766ff47

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 01ee897df1dc0753342a866455cf769f8ae610960f3fb6e5219e4bf9d6aef2ca
MD5 835fc2e99bf1a6c3317f9244e57bbf31
BLAKE2b-256 331e3fd428bdc7e6d992997d6a20fd5c85c7f2a06a3d11e48eb0b03a59668b8e

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 149c15155418117ab555e836c3048808d71e247c9ffaa192ac91ff7a69ce21c6
MD5 fa26e8a17b3e8c74662c6ef1ded61875
BLAKE2b-256 ec0c21f471b85619c6df2a2c18e13225b73f4ce9a9c6817c6cf5af747cb915a8

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 6fbcb21bd4101104caedbeea6c19de16c0ea5d75bea2c40f4b76f77ff91012d4
MD5 661c9bede701b37d48f68ead6cdef513
BLAKE2b-256 8577330e286959f48204aa729a7dbc4514ca4ffca186cb3a72917b3f909b47f5

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 26baa5ef4229f2a57ba7a17a7942c9a51fe9e893bf011cdd9ff9226280aaac31
MD5 9ed213eac2dad20043f6b473a0f48000
BLAKE2b-256 9ec1fd2126cdfef281f6de6c10dff6c3ddcde5449b244a4cb27b8e949e379ff8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 be24afb9369c9dcd168a4df943395b6dbda992fb86184647ec87e5627600e4c0
MD5 d9bb4982157c39edc5267d51b218b082
BLAKE2b-256 300a0dbf11bf65fa1da2ded8dc9953b9baf8a430d858e3bd68977d627a79db76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 87141d3eb1ffa1805ba821bc9b2dcde4b985f652ff4f6fa08afa7d0c5c7aba81
MD5 395d604d588e31d41c8f811df8538343
BLAKE2b-256 4923eb52e04f7c10a0ce07340fb731b81e37f742e61ffe63f89546c4c1a26581

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88a6147d8e56356bb6d235c327f4376fef68962adb28fca5890d2e9f2d030975
MD5 ee160d6a06cb1370c6fd9d83659ef998
BLAKE2b-256 dd5e295fd6a00884615fbed54926617b368ec9c8e194f4d59e5b9f6910ee7a88

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d57e10030411cabbda31d22205c0301783404174d357cbf5c5de8eece26dd73a
MD5 af87381e4ad33887a04e6c0993e53f90
BLAKE2b-256 598df4b8a7d31b774f83dc66a80d8943a32be3011c12b69344a89a955f8af9e9

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 440cf1669ea656fbf8f2d320eba621f89f0cf7822f8067a16d26dcaaf819f13f
MD5 bd0c9a777308ca6839d919894dce401e
BLAKE2b-256 ba8ef7e4145fc80bb1bdb73d68fab9b37e131d31110b7b8aaa9b9d87de95e7be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 86e9abd5bee75d6902d3c8b2816b98577b6d5c84118ad1716591bf7354092318
MD5 6c8118a01640f2c34e6a2cb3a0996c28
BLAKE2b-256 d1efc3054c52e1e12ba048594994f8496753d286cfc01bc64b29e87b92c10e34

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.1-cp38-cp38-win32.whl
  • Upload date:
  • Size: 51.3 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 3ef0e5feb6fdd46130aa42c5bd7a78f2fb943934571fb8d3c7d3fc83ca8b04bc
MD5 a38ce05f766caaae1eee96ec240bf505
BLAKE2b-256 94d8e4fa8580bd0bf1218a5a40aa921aeb5b13cc8c6d22212c67f4c7336f22af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a990edaae2eadddefaf308b3797368dfb76e6b92b6bc43d6825bc46276f15925
MD5 823c2d1be94edf17db82c4beb9098c9a
BLAKE2b-256 d0a69d8533ce177e25a6c543ded67063849d32d40ef851ff68e6c77d99d79644

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9cefd8bda1e995b167f0646b5f9982cc8c6ee54aca3ec8d800088adbc788185c
MD5 5dfd1f66feee50c6c12b94dc12c0619a
BLAKE2b-256 9fe022ebdeda0ae3d6facaee28c2128469da755c9a41d22bae925fcd596f2605

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp38-cp38-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 ee58b34732002d97bdc1c7eb0d8604e248e07e5a6ca3aff7eea34bc693c2fecc
MD5 803930e0bc32191b96b4412a9b73f30e
BLAKE2b-256 768f1c361d511eb683d99631ef968b7f956608b45a3449a4843fad5d629f38d5

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp38-cp38-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 c38c3d9db44fc6372e9261c54fc6596b8c5f58680b1e2cd35d697dc5c412df4f
MD5 fca60136e36164f4a064fa69c88bcbfa
BLAKE2b-256 251afb44a549881ce909bf4ddd0b13d46e251e112eb804bdd315d721073a63c8

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 1137527764cdee8715122c39625e4f7fe0fc8059ea6b2f19ce2b60dd1c406475
MD5 0643a27ecbf162ebbbd0628578a6d22a
BLAKE2b-256 f9ef24f1aae593828aacc6307c88b459b3336ad25509b52842bd97b397ecaa9f

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 686c7471205ed9a84f3ea99dd73259f0648b4c2025b5c11b66eacb3473427967
MD5 bb571f4fdf13b474399b851b5fc7846d
BLAKE2b-256 38bf5388d77ea498e4207b3a5e3e3ca0a9e17e63820c584dacbb75f1ad2eb055

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 08396a0cc8dd5c30443a9b6110878cd8329c78da3cae2eb3bb2fc72324db0558
MD5 3a98ec4df659d0cb23ff3e9a9fda68a4
BLAKE2b-256 66ca7fba24befe1a092a7f709d2e127f444becd59fbce7e214682834e574af68

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 2804e466470653a5a0a74b9da429e5847e9c45afb616884b1325777fc51f269d
MD5 f356b660080eaa2e4a07768cd1b9b7ed
BLAKE2b-256 8939d123e9eb8c3a4443169db9951619df1c2b7cd00d0558e051659e1c08cc97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f426311a31794cff8fdb6aa369f4df93a88a50b4eec54a5cbd8101a1015df3a7
MD5 41c3ea68b752a918fdc90b225f25e6b6
BLAKE2b-256 74019815e670f1de5a310100dd6ebe09967306b0ed7528d9c21401ad1e108f39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2aa7a97b3bea8b2c368cfb9f15802eef7e9691be888737642bfab1e320081376
MD5 7907d09c8718523a4094da2e8a184dc4
BLAKE2b-256 7839ad4b1eaaa2719c7ff9c8a6e131c8d49fbe981b5afc10e6829883285ae0a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b05956ab51084bb4716924350464d50a76764c830be629c83e7fb219af0ddfd3
MD5 45bf58827fe6e25d859429053bef34e7
BLAKE2b-256 760f84bf7925929082b5519615de437fb0fa77ee974e977c6d2b8d935d9649b5

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 74f2c2c26e898a58cc8d1547d71e48134074f3ee3fbbaba9ea63adf5a10bec5f
MD5 46988f02e1c47d74342d485a810e4ca3
BLAKE2b-256 ef31bbdfe6ae9ee5dabc3b4832336d1bc1e5c0519ba4ba0ce44f6246ac7ee865

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp38-cp38-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 0e5dd5d03c547b5237d00c7e5f4116bf3ea07866aaf03c15fc0d96a842390dd2
MD5 cacb827c94229ccb227e589d4a5e9203
BLAKE2b-256 aedd2fda2d1c1a99e73be1fd31dcd17761772abb3df86f880f550acae38a1505

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 68825413a5b4cfa23631f859d68203cab07d52e473bbe09841f133d55778daa3
MD5 c4ab6ecf8fca559b7f604d605b72c578
BLAKE2b-256 cd6f01a776aeee9fdc6efe3079b94897ce5476d4ba51b39bfc6d0b8e1fd4acb1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.1-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 51.3 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 7be6b32d5d12c58440a3cf8ece6d3e0d8181d06e935d5bcba1420cd5059ff7de
MD5 e6f8636e4f8c02bfd8daa328e686f0c1
BLAKE2b-256 31cbc7d7fad62bcc774a0dfd84d6288bdc3f980fcc2a06b3442194ba8c007bc4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cce1ce609440014e80e2041cd79200e90909132837824d6254ca78f79e4f32ed
MD5 d97501e0288c49b77c05941f748f1b23
BLAKE2b-256 246859e80facbb10e88f07860322c6434432fa114f12e80c9d85b8082a0d188c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4472cb5b13f26732f46f1d7c384f3b0335a32a6ac70738fbc510dfd302c09fa9
MD5 cef90a4e743a6cbc985a3dbb267c7ddf
BLAKE2b-256 198fc9906c9c28fb36d714c8ac455c80681e8c93eae8112372102e8435aaa4cb

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 88bf538e6b9052cee1ad2a45a74dbaf3f442e23b8eb28b368f0f9e4be3a52a14
MD5 654870b5f2b96087d3c05fd60aa5fb4a
BLAKE2b-256 3feeb447d9c4423c16d1313c20b0a8799952d8e6faec442d9943dc797237683e

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 73da194269daa5b19bf58d3b434f3fe5ad4525bc80d4f2c307c48b01344f7790
MD5 d0be00e9dfc4c9e3feeff69546d0f58e
BLAKE2b-256 039ce945b095d4545732a404b7d39aecc60decc99394c588f7b516a1fa38862d

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 dba8b3a6cc76f4e5a9ab4658220707c4838df8508fdf01d678295f4956fbfa8e
MD5 258bb5bebedfb4e0e5e29551eb8aa11f
BLAKE2b-256 359607396707fb815278e0820c0766bb4cb0f11b30b3603d5378d3eafae41548

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7d4ea967015eaa7e8def1ee9719074ff76c76d5fb2824eb9d220b1171436cdee
MD5 58a33a71c7abf5a44f58fb552242c72a
BLAKE2b-256 2e01b7c32845de8565eee4553c93669c8b362e5f54dfb11a092f998b47a65e1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 84220dcf2b21b545ad0def21a07cd1fb8389383643ad18db3118d30da2cce77f
MD5 f0a68e2c8da30243c025ff6a4e812e43
BLAKE2b-256 ceffee9cadafd40a8660749f03a836053128af5307895f2a11ea3fc0f6e5f821

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 b5c4ff89dc372a69c385644e3e336b83183d9e68c1c966d49e1b9d8fcc97c211
MD5 f7984634ef29bd5efc6f5bf00d50d7f9
BLAKE2b-256 84d6043a36792734a57764c1162da0d337a0bfe86cbf02ac7fb07324486a07aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 470891e270afbb48d8bf6e23f66ed9e1082210a82f80f26d2f54db50d7e56fab
MD5 cbfc83c5e216bb18bf30af2fab7904b4
BLAKE2b-256 28fe0c09d72188f6490995ae61a5477d7e936c260f5c430ccb1e7b730092ef3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a1a32cc67d2a2084c34aaccb2a967680b84bc307f99cd3a0a69fbc41e6811bc6
MD5 81feeb64a053bc875ed50664726c0118
BLAKE2b-256 0f364f68c7061f64ae668c6e70376ff2f092f4120e09271b0b0a828ad480255a

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 695f8610aa9baa98d6d27303fe88088c834fc12990c48e447b2d84c96731856e
MD5 f22dc52ca95080e61a6a616ba44e2cd1
BLAKE2b-256 a39da3fc37d090035bda67292eaf2a344753b0689b836ae809756d6497d13180

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 058eb94a32b4debe155fbcd6411c3743dbd29c45f92c7286450482eab0979647
MD5 c1135b2baf5f5f598bf3db7f08a3231b
BLAKE2b-256 a4d05c9ce8c78e07873c7dbe9ff822e4daf5480550772b8f22bb1c38c31c205e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.1-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 51.2 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 f450b6eeae0413dbea19230ef28b273a5801b6e4e075e872ac4adace0b76531b
MD5 461632c7aa769562c7d1dbf322b9a59a
BLAKE2b-256 e9b0bcb7d3c606fd1e869a30de872607978e6457522618d2717ab733e1f61dfb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e3ec12ba328f7ed02ff07429ed05033e091f1c68555af2790e76860d39dc96ae
MD5 2f87573ace962f4e44811834fa4eeca6
BLAKE2b-256 320d7fe4c59695b39ebcad218f5219a2e8e8a8ca87dabb06bedb4e1470f6c565

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 27898fed89b4733a1d4e16bec678dc1a0f1077c3c3d1aaf3a55cb1177542fec7
MD5 6e9a68527d3fcdebabb6efb17fba8b60
BLAKE2b-256 11399a0a533e4d17689edf445afc06cd1e9b6c7bd9e994ad7cd02dcb051732ca

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 8f7d1e00c80dc27530aa40987add64b0c8ef9257d6220a0e3fd67c2da2f2a001
MD5 c670df85f628593aa98321a3c97314a4
BLAKE2b-256 f569290bd0a4f4f564fed96520c2e3fb4b21ee3911626087970c4e1b3ffc2355

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 84f5f92216ccdbc22e402730e728f2c7d03a7642f0b9b016f25dbbcf312e74c7
MD5 ac47d7fcf9157ab5344b6070429e91a7
BLAKE2b-256 893d248f6d8e5896d5826bd26eb88e638057a94dd3e649fec18377a6f239e9d3

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 eedfe73914a4acb546f9e8d10f04227e127cbd1a46bce6b5fc75fb6a31791bf2
MD5 bf02341c23fbbcf591960eb45332fa08
BLAKE2b-256 c53f8b9c69192e7cd55530542186303c8c8cdc78fe28479819ff93155832ab8c

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 43b1a9d0ef360df19436c008a9270fcf6067c7dffdbe215c3322680b7b22790a
MD5 c8a13a2a2033a5f9117e02247ed19bcb
BLAKE2b-256 290c8dfb42dd4f00fdce7f963846ff9ce239546df8497648e8b3c219e354ec67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 bd718b41a0d841d9763edb0c0a8f6bda9eefe150dfc43dddf4dbf015e8036ee4
MD5 362f893af33bec8a183f10c0d015043f
BLAKE2b-256 92224bbfcef0b1e0bf99f39e37f5d86b03825c8d91d509dcb0200cfb9c903b17

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1717d718845dde2d0783db5380779a12e1d6401e27ce9598f7fb8db1ddfa55d8
MD5 8e8b6e183cafcbb69ffd283108cd6fce
BLAKE2b-256 d96c51d231afd373c42cb8c233824a5704299cdac7d487418d7fb15f8a4d3f48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 144f3ee361bff937bd5cded92cf8e6fce25e46c2ce762544ef13c9ea1dcb4f6e
MD5 76418841555e6a8af9225132ac2758a9
BLAKE2b-256 eab0a1bd4c8095c6c6796dbacc56e179fc26bd725a7fb93e5151f7053aff49e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 223faa6037f94d4f30bcdeebedc6cba109ccb7fca02238bc3514bd27853890ea
MD5 27d2afd4ca2318740d901bf7ffc91511
BLAKE2b-256 fcd3326c73a2d04cc12d62b0038bd74cc01b305f7730881c33559d19b6ba7170

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.1-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for stringzilla-3.1.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 27f3893154e8caa9a92267cc4191312787630ba0de5b0e46ebbf73286b0ee709
MD5 0da17d681e531544e597739bb5521275
BLAKE2b-256 08508ea8bb2a87139078f49775279eba122b807c45c9ed19a1addb02112c8399

See more details on using hashes here.

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