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(0, cardinality);
    std::generate(result.begin(), result.end(), [&]() { return alphabet[distribution(generator)]; });
    return result;
}

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

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

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

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

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.2-cp312-cp312-win_arm64.whl (50.6 kB view details)

Uploaded CPython 3.12 Windows ARM64

stringzilla-3.1.2-cp312-cp312-win_amd64.whl (55.4 kB view details)

Uploaded CPython 3.12 Windows x86-64

stringzilla-3.1.2-cp312-cp312-win32.whl (52.4 kB view details)

Uploaded CPython 3.12 Windows x86

stringzilla-3.1.2-cp312-cp312-musllinux_1_2_x86_64.whl (218.1 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

stringzilla-3.1.2-cp312-cp312-musllinux_1_2_aarch64.whl (158.3 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

stringzilla-3.1.2-cp312-cp312-musllinux_1_1_s390x.whl (156.6 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ s390x

stringzilla-3.1.2-cp312-cp312-musllinux_1_1_ppc64le.whl (187.7 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.2-cp312-cp312-musllinux_1_1_i686.whl (176.4 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

stringzilla-3.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (221.3 kB view details)

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

stringzilla-3.1.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (154.0 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

stringzilla-3.1.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (179.1 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (160.5 kB view details)

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

stringzilla-3.1.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (165.8 kB view details)

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

stringzilla-3.1.2-cp312-cp312-macosx_11_0_arm64.whl (57.4 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

stringzilla-3.1.2-cp312-cp312-macosx_10_9_x86_64.whl (59.6 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

stringzilla-3.1.2-cp312-cp312-macosx_10_9_universal2.whl (91.3 kB view details)

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

stringzilla-3.1.2-cp311-cp311-win_arm64.whl (50.6 kB view details)

Uploaded CPython 3.11 Windows ARM64

stringzilla-3.1.2-cp311-cp311-win_amd64.whl (55.4 kB view details)

Uploaded CPython 3.11 Windows x86-64

stringzilla-3.1.2-cp311-cp311-win32.whl (52.3 kB view details)

Uploaded CPython 3.11 Windows x86

stringzilla-3.1.2-cp311-cp311-musllinux_1_2_x86_64.whl (217.8 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

stringzilla-3.1.2-cp311-cp311-musllinux_1_2_aarch64.whl (157.9 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

stringzilla-3.1.2-cp311-cp311-musllinux_1_1_s390x.whl (156.3 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ s390x

stringzilla-3.1.2-cp311-cp311-musllinux_1_1_ppc64le.whl (187.5 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.2-cp311-cp311-musllinux_1_1_i686.whl (176.2 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

stringzilla-3.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (220.4 kB view details)

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

stringzilla-3.1.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (153.1 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

stringzilla-3.1.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (178.7 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (159.9 kB view details)

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

stringzilla-3.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (165.4 kB view details)

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

stringzilla-3.1.2-cp311-cp311-macosx_11_0_arm64.whl (57.4 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

stringzilla-3.1.2-cp311-cp311-macosx_10_9_x86_64.whl (59.6 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

stringzilla-3.1.2-cp311-cp311-macosx_10_9_universal2.whl (91.1 kB view details)

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

stringzilla-3.1.2-cp310-cp310-win_arm64.whl (49.5 kB view details)

Uploaded CPython 3.10 Windows ARM64

stringzilla-3.1.2-cp310-cp310-win_amd64.whl (54.1 kB view details)

Uploaded CPython 3.10 Windows x86-64

stringzilla-3.1.2-cp310-cp310-win32.whl (52.3 kB view details)

Uploaded CPython 3.10 Windows x86

stringzilla-3.1.2-cp310-cp310-musllinux_1_2_x86_64.whl (216.8 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

stringzilla-3.1.2-cp310-cp310-musllinux_1_2_aarch64.whl (156.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

stringzilla-3.1.2-cp310-cp310-musllinux_1_1_s390x.whl (154.1 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ s390x

stringzilla-3.1.2-cp310-cp310-musllinux_1_1_ppc64le.whl (185.4 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.2-cp310-cp310-musllinux_1_1_i686.whl (174.1 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

stringzilla-3.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (219.4 kB view details)

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

stringzilla-3.1.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (151.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

stringzilla-3.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (177.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (158.8 kB view details)

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

stringzilla-3.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (164.3 kB view details)

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

stringzilla-3.1.2-cp310-cp310-macosx_11_0_arm64.whl (57.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

stringzilla-3.1.2-cp310-cp310-macosx_10_9_x86_64.whl (59.6 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

stringzilla-3.1.2-cp310-cp310-macosx_10_9_universal2.whl (91.1 kB view details)

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

stringzilla-3.1.2-cp39-cp39-win_arm64.whl (50.6 kB view details)

Uploaded CPython 3.9 Windows ARM64

stringzilla-3.1.2-cp39-cp39-win_amd64.whl (55.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

stringzilla-3.1.2-cp39-cp39-win32.whl (52.3 kB view details)

Uploaded CPython 3.9 Windows x86

stringzilla-3.1.2-cp39-cp39-musllinux_1_2_x86_64.whl (216.1 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

stringzilla-3.1.2-cp39-cp39-musllinux_1_2_aarch64.whl (156.0 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

stringzilla-3.1.2-cp39-cp39-musllinux_1_1_s390x.whl (152.8 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ s390x

stringzilla-3.1.2-cp39-cp39-musllinux_1_1_ppc64le.whl (184.1 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.2-cp39-cp39-musllinux_1_1_i686.whl (172.8 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

stringzilla-3.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (218.6 kB view details)

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

stringzilla-3.1.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (150.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

stringzilla-3.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (176.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (158.0 kB view details)

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

stringzilla-3.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (163.0 kB view details)

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

stringzilla-3.1.2-cp39-cp39-macosx_11_0_arm64.whl (57.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

stringzilla-3.1.2-cp39-cp39-macosx_10_9_x86_64.whl (59.5 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

stringzilla-3.1.2-cp39-cp39-macosx_10_9_universal2.whl (91.1 kB view details)

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

stringzilla-3.1.2-cp38-cp38-win_amd64.whl (54.1 kB view details)

Uploaded CPython 3.8 Windows x86-64

stringzilla-3.1.2-cp38-cp38-win32.whl (52.3 kB view details)

Uploaded CPython 3.8 Windows x86

stringzilla-3.1.2-cp38-cp38-musllinux_1_2_x86_64.whl (215.2 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

stringzilla-3.1.2-cp38-cp38-musllinux_1_2_aarch64.whl (154.9 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

stringzilla-3.1.2-cp38-cp38-musllinux_1_1_s390x.whl (152.6 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ s390x

stringzilla-3.1.2-cp38-cp38-musllinux_1_1_ppc64le.whl (184.0 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ ppc64le

stringzilla-3.1.2-cp38-cp38-musllinux_1_1_i686.whl (172.6 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

stringzilla-3.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (218.1 kB view details)

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

stringzilla-3.1.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (150.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

stringzilla-3.1.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (176.0 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (157.3 kB view details)

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

stringzilla-3.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (162.4 kB view details)

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

stringzilla-3.1.2-cp38-cp38-macosx_11_0_arm64.whl (57.4 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

stringzilla-3.1.2-cp38-cp38-macosx_10_9_x86_64.whl (59.6 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

stringzilla-3.1.2-cp38-cp38-macosx_10_9_universal2.whl (91.1 kB view details)

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

stringzilla-3.1.2-cp37-cp37m-win_amd64.whl (54.1 kB view details)

Uploaded CPython 3.7m Windows x86-64

stringzilla-3.1.2-cp37-cp37m-win32.whl (52.4 kB view details)

Uploaded CPython 3.7m Windows x86

stringzilla-3.1.2-cp37-cp37m-musllinux_1_2_x86_64.whl (214.1 kB view details)

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

stringzilla-3.1.2-cp37-cp37m-musllinux_1_2_aarch64.whl (153.2 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARM64

stringzilla-3.1.2-cp37-cp37m-musllinux_1_1_s390x.whl (152.2 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ s390x

stringzilla-3.1.2-cp37-cp37m-musllinux_1_1_ppc64le.whl (183.4 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ ppc64le

stringzilla-3.1.2-cp37-cp37m-musllinux_1_1_i686.whl (172.2 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

stringzilla-3.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (217.1 kB view details)

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

stringzilla-3.1.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (148.7 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

stringzilla-3.1.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (174.6 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (155.4 kB view details)

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

stringzilla-3.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (160.8 kB view details)

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

stringzilla-3.1.2-cp37-cp37m-macosx_10_9_x86_64.whl (59.5 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

stringzilla-3.1.2-cp36-cp36m-win_amd64.whl (54.1 kB view details)

Uploaded CPython 3.6m Windows x86-64

stringzilla-3.1.2-cp36-cp36m-win32.whl (52.3 kB view details)

Uploaded CPython 3.6m Windows x86

stringzilla-3.1.2-cp36-cp36m-musllinux_1_2_x86_64.whl (214.1 kB view details)

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

stringzilla-3.1.2-cp36-cp36m-musllinux_1_2_aarch64.whl (153.4 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARM64

stringzilla-3.1.2-cp36-cp36m-musllinux_1_1_s390x.whl (151.7 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ s390x

stringzilla-3.1.2-cp36-cp36m-musllinux_1_1_ppc64le.whl (183.0 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ ppc64le

stringzilla-3.1.2-cp36-cp36m-musllinux_1_1_i686.whl (171.7 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

stringzilla-3.1.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (217.1 kB view details)

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

stringzilla-3.1.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl (148.9 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ s390x

stringzilla-3.1.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (174.6 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ppc64le

stringzilla-3.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (155.4 kB view details)

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

stringzilla-3.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (160.7 kB view details)

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

stringzilla-3.1.2-cp36-cp36m-macosx_10_9_x86_64.whl (59.3 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 312a19aedba8f7a950b2873fed6823965c915f19a0f110fb956500e8387e9140
MD5 31232bf42d92b3030e163caf4750d949
BLAKE2b-256 3024c1afa389c5fc0b0579e96220b0ee5ec6161e60053d619d0f4d1bbf6181e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bef4159f50ab84cd58ebc5e7bb87bb129440181b5c16fec94f32151330709006
MD5 85885df4d0bade38dfb11c269d4e5efd
BLAKE2b-256 dc9b0444b27a32f516825989e12a5ccf4bdfa579d838d4e199d07f20f0c5a9b8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.2-cp312-cp312-win32.whl
  • Upload date:
  • Size: 52.4 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.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 25fff60b5f548f114fba7e5c4d3496f4cc8882afac0e852fa9275c0d5beee503
MD5 d00fb8037c20c524bd41f8550c76d2fa
BLAKE2b-256 8b52ddfab8f6dc590a0b8f072214fb0e5ca3d156e31496be81bcc303634e5749

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 844ecf00e91e34058eb853e5434289e7b8f7ecdfb7babfb2eeb30149140f16a2
MD5 0d8b49d738ac7dbcc925b059123e7098
BLAKE2b-256 cb3caba2a4b0e4972034d2c7e6fd16de15eb676a6e423826a49fa30cf2ab731e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 908542b0390baf46ae69baf5ba60a5baf7fdc81173fcf7206664b07c1e7ce5ef
MD5 151f1ac3e5ad14fdbeae474ece5accc6
BLAKE2b-256 65183b0d0f7a5c594ff3e60534095d2c870a88bfce947ce75572053eb4ba8dba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 621f4b2eaaddd25a91af2bd89c5673bdd22045ed77590c3d08febf46f4948b09
MD5 b45a4f98d39df1890a636e8b916e0a5c
BLAKE2b-256 ffa226bca059f5a54d8fac596cf86cf90720a6a8ce3974da745027d26f279f78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 b311d421b3d5102ec8d0344edc4aea1db937338b52963767d541abafebd72409
MD5 25e4e732c804e2c088929bd2d0c64f22
BLAKE2b-256 557aefc0543c93abd1b811d439deb6af55aca4a87f8ff6d6a86581b26cc6ad99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 cd0e10544822fa70aa1c183352f5270d9998d49e543a49102f554e4954d322e7
MD5 56e9e382c39a8d14fed4dade32e3fa79
BLAKE2b-256 bc43f59e0741b28dcdee876c9bcb9604fc9c6c0f11fd6064668d1e4611211636

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.2-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.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3437843c517cfd76c202b7affdacddefb4ef4b8f66aad60c5acfe2a44aa57f37
MD5 c36274e0cde228b0bb71b564df38dfb1
BLAKE2b-256 dfc588fe51b4a34d05540aa60565afa63ddecc576c3765095c364f7189be956e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 926cc73b10ce5fa7f14ee7afaf21391c66145a49a9bc5f5e65334a3631471cd0
MD5 b59e61af650484bd5c2f6ae76822f953
BLAKE2b-256 722da4c4c5b8de1dae4a4ea8745ac53cdadaf6e50e73015a3188e1409efa8b6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 f0ccdf075f7872077cf9b297e30337eafb624b1343c2fdd1671d7f73196d3564
MD5 057fbc0935846dcb93c7ab3dcc685b9f
BLAKE2b-256 d613314cd080d3021af118764329988cacc23f6bcb5af31728983c8e7ffccdb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9d548a46c0d6990ed4cd2527f116483070d429bde7f5e1c9fa7219e896eb7b1f
MD5 5a2865a44c111711d7d640cba7e67706
BLAKE2b-256 880dc6a9722cc3a4c935b387c04bfcdbe437fac6c5f219e02e23382d441792d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f35277b69f783571192d8727fcbcf4831409a3e97b9b6d15f23960e151a1346b
MD5 3a23b3ea828b9643628aa2833c343cb2
BLAKE2b-256 0957f7b812449e01f79b3766de80da519506045d6884eeafd4403d42c8e396e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9908cf5703246ecf84c56ce3d14dbb9a6e7b2fc1bee07f19ad4c7bf54f492c76
MD5 938c5ecd13021c2e90e7539c51906ae6
BLAKE2b-256 710106c2e081e1981b8ea1565915f65022f1697221916c3a9e6d07508b83647f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4636bc45ff02bba157c2d1e72194b38062df52a5bcacc7b315f67694ce4df34f
MD5 68b6abe75d45baf3abc1f0724b43645e
BLAKE2b-256 4303c0ae78b3bde4a434d8c3a73690ce16b8ae7308e9591d936abf662f08dbb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7f3397c696831b181a4ca61180f21506efc13630c14a6ef23100e07b2da2c8be
MD5 fc0c17759af96386933c7f932362d7b8
BLAKE2b-256 89439060e67dd970fbf5628a825a26dbbc037874d57d25e78070ab8cb298214f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 385e3f585f1c06b80b779198d1977fbb94bd45ed3016cb477752898a374341ea
MD5 03763987891a919a4a257457fced69b9
BLAKE2b-256 0b1d23f79586b6191de14390d57ce4beeaf9f0dc2ad5fed318eff653d18ffd8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6603f7f0aecd978e3d1a884aab98df8dabf545892d58c16c73004e743055415c
MD5 a22cda72370585eafbcda6cd73bd66f5
BLAKE2b-256 7a300dc24e65c518e83afeac984edf7e31cb8ffb6f1542d195c2499495ca5c1d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.2-cp311-cp311-win32.whl
  • Upload date:
  • Size: 52.3 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.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 d55d97fde2460cc80309e455e9392a4b91de4502b3ecc241728bde87b18018d8
MD5 058fdb6eeb684fd1cceea0d96c91bd3b
BLAKE2b-256 d123e3af6363ccb105655a74bc2f0a1cf7494cd9e4b393cce443c6d54a2497ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 20357e5adc17d935dd91d310ff589f710c22e15b13ac74c5797b5eaadb3f1bb1
MD5 e9664b7042512c5427c2fadd1b9a3fc2
BLAKE2b-256 d049b456a89b01ae11484591853e4db803454de65c2e6a0987a4e2115c0f4c93

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d4e073bb1936ecea5d9692dd808aa4eecfbec590f4d4eeebd139eb32aab54110
MD5 0e403d393d95dc9cf18ce3b1e1c43957
BLAKE2b-256 13b755c4c6551b183d4aa0db5b3b1c1dfc457e05d5d026244d5c4923c6948d9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 187060d9f8a61dcb088b3977af3243f99ce18bda471cd2d5915884fcb62627ce
MD5 5f4c81d307d03eed924917066e42b132
BLAKE2b-256 7c04ce3b78ff5712d0452d98e9e66ddc565db8d0268b144eefd17e6948dffe1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 cd8bf9096b145461524bc67744dfa6031142e7fd2a93c1bf246e6dd8b718636c
MD5 a6a41f19795705f88a4b6d7c38f066b8
BLAKE2b-256 91c15122d95f402167e8b79768c679b90161a11797bb0499c496138c303cadc9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 f749e0237bd8c90ed13a1efa7eb1261deee969eb178b1c16cc0df9cdf908b0c3
MD5 00aeaa8abae4d3f1095d96e45a46a946
BLAKE2b-256 5c4784da1fda02dd531820a7d0e7c58263488f03309d5badf0f3948a608232fc

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.2-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.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 deffc571f0596ffca510e1f08d2df18989b67eff2c89063dcfe2105bf8a6d902
MD5 1d1db0b4db673f754fa1361cd93f14c8
BLAKE2b-256 31d2d8dbae11a0f2fc0c1b0a9923457b23ce270301fcc1d6536b97dfba135005

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 d8984eac8a864815280d7e2394e022ecd7b40db9108f3991a717dba3f3fdbc57
MD5 bcbdfc1176aae7d516a8430dd51f71c3
BLAKE2b-256 f2e614f0af59051399de9f318537cea94d7ce5557c01a2ffc0738ebad15fd2ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 fd6092d2080c2a21686b667f8ec2e9a8a3c879d76b49a68eeafcdf1d390ac321
MD5 6f89a7c1a742a2c8f41777f0c4490417
BLAKE2b-256 857a9d30eb4dd5bc59e8e8a43a6ae3a4d174f362e13b701ded380bbd746791ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 33e242725e452fa1bf08aebd71f63d52bed8a4cb810e64aeb52409b33ff8ba3b
MD5 c00d290ddc24909174463ec93b1de80a
BLAKE2b-256 5b025895f9a5c45b228fd5efd0a65ba9692a7e19c3de1125d054d57dbb24806e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9cbd9a68ff55e14b699d5e25f9ea63deb4b258bc675e765081d49d16dc29cec7
MD5 4c812211d41956213e4f029d85257840
BLAKE2b-256 0dd2beeaa6c76061f93d89dc22decf54b53b84609d82802cdeaf654d9a8d142f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ae941015cda1f46609966a4689d7eca75395bdee4726694fa2be06227b358345
MD5 ef5ca8d20c16da623b20cb4e2e138649
BLAKE2b-256 121a4fa067ee0ef9db6214874cc69063da20027e7b6778486582689a515a7645

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c9608b4d895ef2cc2ef120721021b8c833195edcb50f7ace2134352899f6ea12
MD5 d53539c7e8bc69f8ff2d5d5dcd966996
BLAKE2b-256 ff9a744359163936fa2cc2cbba97add856935566362409fd35c24f014f1cfe56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 1a711ae9714684fc982906567b7e8a401ced5cf7b92bbe687781609205527d25
MD5 da005f85f28faf8dfe0811a770a571b2
BLAKE2b-256 e27dce27e5a9be8ec075c9a9558df11a761618c52f791fb0305dd410476a647f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 ffa095950f8c45cae7a82cc1bf92aa12340089f7fbf3ece537cdbf1824603c95
MD5 63eac51c663f1fdb445e9c5b2505eccd
BLAKE2b-256 0e6fdd6bab40f00eb70411a45f5020bae94b2e587340ac47c7c8fcd652a7d95a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a3578b0f06fac1c8553b3fc7cd191fc07d83b827dc416502d64ca7d10bd299c6
MD5 438b3244c5c2b6e9c4c8bbfac2ffe2d2
BLAKE2b-256 3918143385e7c9fe6d53ca16053878332104520f87bc40031921a6cfa529c257

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.2-cp310-cp310-win32.whl
  • Upload date:
  • Size: 52.3 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.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 70ce56fa733173ef3b219c57352404a0fa10fd0b2d9fab1eb5e1aed5d9569916
MD5 4e4b1f796994bc5163009120293febb7
BLAKE2b-256 df661a30384c850d1fe7010eab3eccabb8e3132e31dda840632925e723e4c98b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 784cc6fa7aa9ff4d09df60ac87f334e774d6240b31cd3cfb9614e6a14d6c4d6f
MD5 1f608e3259ad9522911374e70a934fbc
BLAKE2b-256 636394ea407f4f10ab6a1db8d03b54c65c43c8778746d7ffefff28c7901125a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f19349b01dcf0374d09709dddf8dfe4114c4c58c82b25724b2b0d6e1bfe426df
MD5 590d3cb702fe8480bb481d6c16efb08f
BLAKE2b-256 e458882d3f96e10ce648cc563523bfaf2b2286091948bccdd951ff40601a2082

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 d07c637cb252a9eacda1ae0c50d633eb2ddc9fdba1b656fd9d97f3d9c8dbd77e
MD5 7b0459722e1b772a103ab6401b515234
BLAKE2b-256 7aa0f4863d490e4a0885672e09eb47c078ffa5762f62db3c0f972b313e1976d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 ee3ed31148e3d5cc56490ed29011f504051a9d7e954f05d5a954b808a2c086da
MD5 ecf65d3f5a39058545de70d8faa4bf58
BLAKE2b-256 29c8677dd2a2712a0c06ba214412c22c2d1d8a72a31b924ea7c0fc7bccda3827

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 edff79d8f55b48c3c68a5f07f42a880cbf3588b8724c351fedbcac1dbb72bd81
MD5 c426dbc4e87ae5091ed2947e53e2eda4
BLAKE2b-256 9e0106c26eee8580094772764022426b50b0cd3bb52b80162621fe12defb1c0c

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.2-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.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3dcf232fd6cacf687074a2d50e664757f00ffc190779287f2b949e9687ef43f3
MD5 fee807398bcf7c6d94cd6b09cefa9202
BLAKE2b-256 5227be09ab030a22f8262f51aa4fb9422b1e643c8c4e0a1ee2f17d4803ec8b18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 36504e2fe4fd76f19271a7b2a8fa2fa6833c56f6cc27808f619a64a2e550ace4
MD5 b0147d261d7778ab51e535f98dbd214c
BLAKE2b-256 e0a3c196ffeb8b27f927f39db4be9b0a743b8e46b5fb5ca54799f164fd1c28f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1a0f50e9a84b7e6ba557677551e7ae6920d33394dbbea15b7da545d7024ec691
MD5 979d806423a4bf8b156d9603ab97439e
BLAKE2b-256 53892d0d4a469b999c92763e13f4fe7cb7dc77c91fe32eb8633897f1c5d8cc1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 724784abd425fdcf7165ef90d511bcb7ab68824e06706ef9443be578f1d10138
MD5 0735df26635129f9ed26d7116d2322e7
BLAKE2b-256 fb569050fcb575b6088bc128e54b8ea5806dc4313d0183647f767c48ab72f28a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1c24d7ab58290c3f310ba4fa734fd7f2e7a10e7a1efdc61344f8cab7dbf6133c
MD5 9e271bdc0acde8c41656c7d6742a0a37
BLAKE2b-256 7369e7bed780ff23673ed5d85094fcd6e5b2def5a623ac8cabec6e97d09ce9bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c7695f064f7d6f5eef3f9fe20abc4b53594c868e66768cb0b87e8e77bfac6101
MD5 3b2d7e0f46cbdc34ffd03d2a6331de7b
BLAKE2b-256 04d39d6a1bab5220843e4004185dd6deb5d5e217879264a4e2d27cd149b858fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 91d9afd889a4b847b136d7fb08efc7365b3bbdb8ce928afe026757fe340e37de
MD5 b7101829054efca35fa1499fc5771cd1
BLAKE2b-256 62f9154fc3c6066e139d473051e7cc189140586940faf3c8859dae1cd2e0c4c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 18037a31bc4f2a22c6a88e29b190dbbe90223d13f48ab44cc4a00dcf25b76037
MD5 c80863781cc79d1147ae5e74853f0331
BLAKE2b-256 f8fb612d573083a1e1ddd72629eee74bf0b9a7bcdd2141e543e52b14ee953796

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 626d4c3a615f11032787b48ae4bd2b08f21b1b9d4c0611da5e0ff47cd334727a
MD5 5836ce044f616cee18857355682367ca
BLAKE2b-256 f32bc9a16a454bcc29eb0100f0c1d197a2bc30b75975a4c3935963ba16c1fecc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 12877432ebc83efeead50d3f605ac1a74f99f5e234bb0ba88c033a791df2d20f
MD5 d253cb8def1898154048e3d027739017
BLAKE2b-256 02c6ef5fb4419af4facaec28e1ce764d4990bad891bed474c231eb076a11c2a1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.2-cp39-cp39-win32.whl
  • Upload date:
  • Size: 52.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.2-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 060df9f8a267526be49026818e83ef959aa8a491be80405e2b6657488398147b
MD5 fef1c77754b4e7c258f9a834f2cef07d
BLAKE2b-256 0a7446b7a41768fef274d04f5e8de4f99f436c293412c391e3889908bf356421

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 79fe3a4318de29d9c061a114f15613b6f4b7aeaaf5c6b58e42108cb08604e76a
MD5 544fcaf74885f4c65ec5dd9b7b5cdf61
BLAKE2b-256 210086e1bba88b9235ac192135b4056f0ad9f01873e94c36ce469314d6d2bf54

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9c03e190932c8b1bd20d1c053d9fa8b74b715d0ff832f0ffcbba96c5a16b4242
MD5 5b70e6830f9457b9ce0dba725af7bd00
BLAKE2b-256 73de5d4577d59e5ec7e80c4d47380706788e73652b01e12ce603574332f7ea81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 54edddf55596c446867145b807a06ef054f24cc9babdeed0c7a8b63746068d30
MD5 8d981ea6624eeefb7d839902f134ff88
BLAKE2b-256 e4eda9b349b029d7ee91e0c21bdac20aeb07eb2d7112557d68031d8d0b76a246

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 d0e9ac6c96fbcccb0b38c8d913ea35d925017a2637f467da3ea023f42b74f1e6
MD5 903fde588ee6b0738adfbf48db78cc0a
BLAKE2b-256 7b5f17c9de0c6d3a8762c12fde940ee92b38d1476a4205af00475c40b614a362

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 fca05bc56aee4318021aa72377798741bb571ff1bae511cad420abdc04eccf16
MD5 6a3897847cf9b7da0ac4960d5b205b48
BLAKE2b-256 a5cbbc87d80a90789e83cc61bb769609ddb0875e17a9e4eca1666892b9596706

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.2-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.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 22c766eb2a17145d30230d1e42a16d66b403f160880494e2c5bbdb59d93bff22
MD5 1f605165e42a35f88263bc1deedff97b
BLAKE2b-256 6bee44c8c6b73c8e1aa09f2cc3dd351d4fbdc24427f5fade51ecf77da25a7cab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 b531601d53fc03479fad331281bd7181cb26e39d8614eb1ecf3e06e3dbeea3b5
MD5 7afdc8ced4c5332d3b0f1c4f44522d49
BLAKE2b-256 635d018d1be92ae4c000244f323995c5bf5d9b747c72b211b61e9a002ab0038d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 3c9acbe9d9a0be2c11becb91a77f80f07105da4124da629b08eef5c10ef37032
MD5 b67012dcbc796d32245998dfa24d85da
BLAKE2b-256 9bace7b09798e1479d55bf22b9941e8ce667c394dd3fd3ac06b74d56841c4a5e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 777881dd86d762235474fec7d93f3802177831fbc0479a60bb0bec7920d6e6ef
MD5 836924fa72e7d3eab95b9fca59af6989
BLAKE2b-256 0653a894164d4076485fcfc80025ff5ee006c815b44433504e299c490ddb6155

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1e50c5634dfc00fbb40d72f7dce83e1a1301ec960a9b3b873eb5dcb4bfe7a27b
MD5 ef493511f1d65d30aee8eeff71bb7e8f
BLAKE2b-256 a1ac65880cfa0825f98dc9e3c2a93f76265e53b0c4ee49367677f3ae15d5b098

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1619255885831a153562d90268e03014f9a4c35f844f367d63588334e71fac19
MD5 d38995bb5f25c273158460fc5e46d19c
BLAKE2b-256 efebd477bd2943f0d94773ca7699fa80fdbd44f2d9d03332a8375d55486de93a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4dea06db2c4fffd80af3d63be4fa52843f0d454e7fb03c637cb3c567add16ff6
MD5 9dc8242ede2caf0c8c00666f088711b4
BLAKE2b-256 681b41b392b3ede06ae2efb00780889943b8cb2832545ad89accacbd897f5732

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f0f6613febb7f388c69466a2f2e65d50dd5345d76323c624851329a833a992a6
MD5 f0d42f6e7b0129810b1dc5a16b922ca3
BLAKE2b-256 32e2b16227d99f718a29f4baddc184b6483c2c3b8b1d479f54189b85d945a558

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 bb5d375b85725b14e40304ca6c5767652064817ca9ee427a23afde8b726f143a
MD5 eb6a2a443188f98a86325eecfe291384
BLAKE2b-256 6806d5ddfd5adec5de7546df392aa98eeef8d6f6c62342baabde3f15b7639ebd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.2-cp38-cp38-win32.whl
  • Upload date:
  • Size: 52.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.2-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 00fda2a5117b8b1dbe08ac6e8d3bc3144c4fe9b75e2a8d50b6cffdb266d40ce5
MD5 566631bb31fb54e389546539ca9e4a3b
BLAKE2b-256 e0a446747603b9beea27abea5c416ee8383e4f24f18f610dafcf148bb2e2258c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e87b0ffd9a8379fd5ffd41e2220ddf173c2ac6fb272622d2cdbf05302650a5c7
MD5 4079e765c260d438cf9f70e3a665fcb9
BLAKE2b-256 ad0cfece41d82a75c4eff6777c1dd62222bec37f268946e3ae54f68eb9047856

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 372593cffbf640e591420c64f95b30fe86b1e5468729406d6d4fa3293c996f0b
MD5 397cfe4a9c44fdf50df400e1a19fdfae
BLAKE2b-256 f9a43d2e3b1f195474b362d9bbb43ab9e27d87d5df9992603a6d307a2dd900c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 2ba1296b281d9efea86677eb351aca0ab8a2c5660c1bb87744f26b6f13459166
MD5 dd8c16a1332aac63387eeef55f364b29
BLAKE2b-256 b387dad5b21cbde443c2cb7c94b64ac5015ece26e31404b423c0fc1d50ff447d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 31f8074e28838bdb87279c297c5d012d0dea816eee09b4278bfc46d1bd36e520
MD5 1082c2f6e5c0dff431ef01db231f114b
BLAKE2b-256 e872cdbb303331b491fe9a8e0c2537d8fd839cb369d055f179697a7b7a3d6373

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0bf966ce61852acd0f63d175e76efdebd32ab3fff36fb3a554cf3767ddfea417
MD5 733d35a93e24086b194b5968ae849d04
BLAKE2b-256 0dede1ec3fe84116d006192d6077025cc27c141af9e96afc0bd98866bfcbf3c2

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.2-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.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4fc1042cbd08508acebb541c5e9227fc12bb388b3b345d7ac0044102146a8ae8
MD5 9d57cd788fdde738d724e65d306fbf1f
BLAKE2b-256 8ca1e332c7f8cc2f9273e2ff8797baafc9b76c099d43e8f2c6fb02f6d05b5d85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 6a5bf72d5b1cf690d73b327383a2927d30818e7b40a42d4f1df4a4523d3144ce
MD5 407e9212e9cd933699d6e44eaeb84531
BLAKE2b-256 076bc1f833b8ecba70038f143c77b9217f91071f018ff5eb61ec3a2e81ab381d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ca1c088931f454d25ccb17c276e9b1649eb38de7540d9eee43593ffd656b665b
MD5 32cb1eb9b5fb03a6ddf481a407f6a587
BLAKE2b-256 dd190d41dbc2bc1b2041e86d308db3c9245e6fbee929c44a08829e1631ea01b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d24065477a1b48664382e2d04ae00d13a895e528521ad413ef7cbdf2aa8c3226
MD5 7042e4587cfa9dd6ecdc62d860d3f418
BLAKE2b-256 c8bd276262cc9a9f84a9204703080d37ba768097962e5d0c346f2183a3dec679

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 73e256cbbb2459da99b2f10bbd8ace19f370748f5f172b0714bc4e214806ad88
MD5 3b8082314cbcede0ee82b8be287afdcc
BLAKE2b-256 4b551a5e7237fda06ea5d2900b66629d86b751aa12466d7ca6a8aa8e6caa4838

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7149362568413352249d6f25b292ed8778e284d4a518c71156c84fe7711d7971
MD5 5bb0e001a7057f2bfa4fa8d3233b2797
BLAKE2b-256 b0d0643d929961e3c2c666ad77baf438875d6e3000a361df443132bcbb928501

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f1523678802a1b0b2c5112c188bb123999568f6449bb7ec16b808f661ca2b317
MD5 5527053927693aea2e9a8105efee0bc8
BLAKE2b-256 0b18bef1d666fa2057ca3a68cb7e0991213c619e63a0f5d42f78f39de05c3609

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a12d58fc741c7262071fa30e3c9596c162141efcee737291fe5659df73243f28
MD5 6c3498f9f303fd8c2c1970533dad9233
BLAKE2b-256 ba4eb08d541c7c454400ed2061cb9410a720f33aafa1c6c841b630cdd5ede05e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 6c748112b9e9e0e77586a7256e1f3f98e8dba933f773dd349d37f87be47256d7
MD5 127ce57ecc52cbf2f4b254688bb38f84
BLAKE2b-256 adac81e7e1be3f4719f4d5793aa153e316344b080f73d7f9978083fa0fd5c5a6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.2-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 52.4 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.2-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 71036ecd9897311ed20e703bc962dc9e84c0e3a45bca6458afb2241132586ee2
MD5 c6471dd64d41e0c2b4b501360b7bd21a
BLAKE2b-256 22bf3f3a399bfd2180042609ac1b39bbfb9fa6cb7590142f7ce306199b3f835b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 03fb6fd13821ac358515cb196eac8e479794ed47f69a7b1a309513a77e462566
MD5 be911dc2034180e665fb5a44860825c0
BLAKE2b-256 f773d684ef6bbe6d699ae6eea82756b440590d6685310cb6d95951f4b88c095c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 416877907a1b737b9f33b5b69bf42aeedbe4dba635b239257764384c468f3fcf
MD5 d7a983a62574b1cda6a2a9c58023843b
BLAKE2b-256 daa412abdfdbaedd2da62e16d831afcf7c08408ee68c5ee61ca39cca9c3b15fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 4f889f64a9680b51f316907cf240c7620082807492859814e90e48af652cee40
MD5 85ba3c7371881f00d65e0008e90e15f1
BLAKE2b-256 0bf0d5bc959025930d4dff578c05410478133fda9608135374add1631f135019

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 afe5e030e7228e7f66ae8464e2f168cd7c6acee67651ccbf85b01e892fedd664
MD5 b5e2a0ad10aaee975dd5cb93af265e93
BLAKE2b-256 d982b8e384256d14c675d971b3a92962f2fbc0f0cf41dbea754f9c5d99ab0d82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 60f60228ec06a8dbd99e476ced3b365a37cba1c7f822270f2c5568b84a7ab13e
MD5 25ecabddeeed6a9597fd394f89d37b2d
BLAKE2b-256 f5b8d9f3c2f86e3debbc22e38dd0eae1dbb9444f775e8e7210ceaaeb40e1c143

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.2-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.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 428976553bce3a6b0cf80d67acfdd2c5f6c39c25f7828be1af44422c74007fa9
MD5 90d2ed12e5a13ef219d2adaee8e956e8
BLAKE2b-256 ee362533065b7e7670e909991a2b19bc4ef3f6755f4bb2433620a828f353f761

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 4b60fe632404fd1e8a764dfe2413474e13bde78c4869793c60a1c37a9d6e0206
MD5 af2f4e546c0979d6ac165cfbad1b18dc
BLAKE2b-256 c429dbe057b879905edaab1bfc5407e7d71545a0c4220ebf5552f1c822ec85dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ba7448d5aecb87d37699d991987151fbcab933a68f46a5ebfa808ff07e431f62
MD5 103a0f538bddef7a3ffd44aa1f19a7d4
BLAKE2b-256 e70b33435a502ad4c8b06b4cffa8c073d1c4597c8972df49c499c4d2bd35be1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c6adfa0295bfcfb441eada5f6e9bf54db2cc5e67a900e70d511bcb255b98881d
MD5 def6bd55514501535f117bae5f606255
BLAKE2b-256 c0116ad8243de59b90876c6af44b4285e3ab7b03ca38622ba828b260befaccc7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 51e2bf90746782a2a9eea269b74e2ff988cdf9d847c84ec8f1c4801e2cb4dc98
MD5 80d7a3943e36ccef7c9e2c57c4a6077b
BLAKE2b-256 1ea7ef405d87e6c2a98ba9b26962236f4a1c9f58a093351baf30b5a95774e963

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a7135e73820cc323cfa1825f9ae9be95529f4dc6965ad75a0d3e91c6b7efdaf2
MD5 04ef5d3efd7c31bed2914125edebb414
BLAKE2b-256 fd40f945e71060166dda076087988aba5663ed8baf326fa8ed2cdc4d451f0310

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 e3550c9d619dd6c1aba6d2f6ef9be2ecf89e6eb5328821b82b6643f629a6ee01
MD5 8a4e75e6c601e754dd89ea65a3f3b3f5
BLAKE2b-256 d93da7ecb29731117af156194d74469705af93cbb0b2de293b9c30602b54fcd4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.1.2-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 52.3 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.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 d433dbf301447ea9287391d1205ab4983c75a18921b691b1acd258ce216db1b7
MD5 e6e03b6507016d655de72a5fd755cecd
BLAKE2b-256 7b41549927e92d841d12ca32f9f60d5bc7b97010bfa548450e5aad2d7fa2489d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 971feeba5e5f84d60c2deacff616827492828ccf332a9c3f131159317902b53b
MD5 5d78b324447d4f34c930390cc4f69d37
BLAKE2b-256 e86ec94c2770e3222e631c78951b97d19c44530458de643aed03508cc2094414

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4a33115323ea23f3959dc7c1e00552adbe0a309ceb4473c6b180b6c514504f7b
MD5 fb46008d9dd890daf5e7d1df05e05f42
BLAKE2b-256 132cb30ab13a90858237fbcbed2e71c856f994d5a31bded1484e8adc55e86072

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 0933038b61a28e6065fbf63cca89fe9e50d19844499c67da1855ea8648a896d4
MD5 7a61a6a90c74494ea0c1db0195a1e79b
BLAKE2b-256 73dc4379ce494654ad2691ebe814d0424568ccf31bf579935b48efe6b50ef131

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 1064d6a838c179c2f62c70efae6ae71863c1aa14a7ea29d6843a7a3de84d1f40
MD5 f5d41a2c7ae95851a0230cdafce9b08d
BLAKE2b-256 f51ad4e9346de07467f2e8cf5b4323172fd72702d63351cb625d13b2dbd0afb3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 728cdd2d6b59a1060f8a924b513e547f6f2eadcbe458c6f818bd4bce1aa81030
MD5 f9785f21614f1ece1b93657dc2aea68f
BLAKE2b-256 a0eab31a339c3530d3caf24416fe5e11db3b8f9a4026e39132189a834d6fd42f

See more details on using hashes here.

File details

Details for the file stringzilla-3.1.2-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.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 27f02a2ed8dedbe6a36abe4ccabd27a9c7ec9effd41ad65c79b22fb529378827
MD5 294ff766bb0ab63cd2644facda0ffdda
BLAKE2b-256 cd6e2a8a2255f43b14a562943d0e934643af7fa278da1d27a161233bec0591f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 cc8708a74ec4edd7784f099e9524c6cfea5692465957ba6c413c590e4648fd0b
MD5 ae9c81b3b3d936b31437b3b22c42b62a
BLAKE2b-256 fcf8bd4ca4eec788ce1b28036e0b41b67a642c3e5f592452be11ecf0da964e18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 c4425f05766877a53199971902206f1d78815bc07fd354af16bb1cbc57376320
MD5 acda45d09d422001d46ddefb6611307b
BLAKE2b-256 4bf1149d4d0ef4808b5d40a119e2baf85fc0c7474cfe8ba4c565ab9045dbca9f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 45ec1144af7f0f8534affb7275699df07766a424e7a984e3f8e1dd59eb867d58
MD5 e9ad0889b13b5683da81c3aff078582b
BLAKE2b-256 5af4bf73b580b67991dbe1d99e7e0ce3c282204cf37e094a0651576dba8a7e9d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b12e8418cd77b1089d9ae2494590df6ec40ccb5f3b1cf48fb75cf75776814240
MD5 ef20b8fa3b6d5889e832159bfad295b8
BLAKE2b-256 291b6cb7839202cd6166d5bf310f07efe9dd7905d08caef952ae8f9d318c9581

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.1.2-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 84d91226fd99e4cd93a258bd8e8d1ee6d0f55a317cf508910f5402b84c9340f7
MD5 56d1e5d259d1b0f10f318326b9d002bb
BLAKE2b-256 b4e211079ac4964cfdde3298097c5077f210c05c3cb36abed26f0462533a0983

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