Skip to main content

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

Project description

StringZilla 🦖

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

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

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

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

Who is this for?

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

Performance

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 rune
assert sz.edit_distance_unicode("αβγδ", "αγδ") == 1 # one unicode rune

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

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

import numpy as np
import stringzilla as sz

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

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

Using the same proteins as for Levenshtein distance benchmarks:

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

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

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

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

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

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

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_expand(&string, 0, "_Hello_", 7, &allocator); // == sz_true_k
sz_string_expand(&string, SZ_SIZE_MAX, "world", 5, &allocator); // == sz_true_k
sz_string_erase(&string, 0, 1);

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

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

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

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

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

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

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

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

License 📜

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

Download files

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

Source Distributions

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

Built Distributions

stringzilla-3.3.1-cp312-cp312-win_arm64.whl (55.2 kB view details)

Uploaded CPython 3.12 Windows ARM64

stringzilla-3.3.1-cp312-cp312-win_amd64.whl (60.3 kB view details)

Uploaded CPython 3.12 Windows x86-64

stringzilla-3.3.1-cp312-cp312-win32.whl (56.8 kB view details)

Uploaded CPython 3.12 Windows x86

stringzilla-3.3.1-cp312-cp312-musllinux_1_2_x86_64.whl (226.6 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

stringzilla-3.3.1-cp312-cp312-musllinux_1_2_aarch64.whl (165.1 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

stringzilla-3.3.1-cp312-cp312-musllinux_1_1_s390x.whl (164.1 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ s390x

stringzilla-3.3.1-cp312-cp312-musllinux_1_1_ppc64le.whl (194.8 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.1-cp312-cp312-musllinux_1_1_i686.whl (183.4 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

stringzilla-3.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (229.7 kB view details)

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

stringzilla-3.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (162.6 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

stringzilla-3.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (187.2 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (167.9 kB view details)

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

stringzilla-3.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (173.6 kB view details)

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

stringzilla-3.3.1-cp312-cp312-macosx_11_0_arm64.whl (62.2 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

stringzilla-3.3.1-cp312-cp312-macosx_10_9_x86_64.whl (64.8 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

stringzilla-3.3.1-cp312-cp312-macosx_10_9_universal2.whl (97.2 kB view details)

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

stringzilla-3.3.1-cp311-cp311-win_arm64.whl (55.2 kB view details)

Uploaded CPython 3.11 Windows ARM64

stringzilla-3.3.1-cp311-cp311-win_amd64.whl (60.3 kB view details)

Uploaded CPython 3.11 Windows x86-64

stringzilla-3.3.1-cp311-cp311-win32.whl (56.7 kB view details)

Uploaded CPython 3.11 Windows x86

stringzilla-3.3.1-cp311-cp311-musllinux_1_2_x86_64.whl (226.3 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

stringzilla-3.3.1-cp311-cp311-musllinux_1_2_aarch64.whl (164.7 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

stringzilla-3.3.1-cp311-cp311-musllinux_1_1_s390x.whl (164.1 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ s390x

stringzilla-3.3.1-cp311-cp311-musllinux_1_1_ppc64le.whl (194.7 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.1-cp311-cp311-musllinux_1_1_i686.whl (183.3 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

stringzilla-3.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (228.9 kB view details)

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

stringzilla-3.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (162.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

stringzilla-3.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (186.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (167.4 kB view details)

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

stringzilla-3.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (173.3 kB view details)

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

stringzilla-3.3.1-cp311-cp311-macosx_11_0_arm64.whl (62.1 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

stringzilla-3.3.1-cp311-cp311-macosx_10_9_x86_64.whl (64.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

stringzilla-3.3.1-cp311-cp311-macosx_10_9_universal2.whl (97.0 kB view details)

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

stringzilla-3.3.1-cp310-cp310-win_arm64.whl (54.1 kB view details)

Uploaded CPython 3.10 Windows ARM64

stringzilla-3.3.1-cp310-cp310-win_amd64.whl (58.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

stringzilla-3.3.1-cp310-cp310-win32.whl (56.7 kB view details)

Uploaded CPython 3.10 Windows x86

stringzilla-3.3.1-cp310-cp310-musllinux_1_2_x86_64.whl (225.3 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

stringzilla-3.3.1-cp310-cp310-musllinux_1_2_aarch64.whl (163.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

stringzilla-3.3.1-cp310-cp310-musllinux_1_1_s390x.whl (161.8 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ s390x

stringzilla-3.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl (192.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.1-cp310-cp310-musllinux_1_1_i686.whl (181.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

stringzilla-3.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (228.1 kB view details)

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

stringzilla-3.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (160.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

stringzilla-3.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (185.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (166.4 kB view details)

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

stringzilla-3.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (172.2 kB view details)

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

stringzilla-3.3.1-cp310-cp310-macosx_11_0_arm64.whl (62.1 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

stringzilla-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl (64.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

stringzilla-3.3.1-cp310-cp310-macosx_10_9_universal2.whl (97.0 kB view details)

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

stringzilla-3.3.1-cp39-cp39-win_arm64.whl (55.2 kB view details)

Uploaded CPython 3.9 Windows ARM64

stringzilla-3.3.1-cp39-cp39-win_amd64.whl (60.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

stringzilla-3.3.1-cp39-cp39-win32.whl (56.8 kB view details)

Uploaded CPython 3.9 Windows x86

stringzilla-3.3.1-cp39-cp39-musllinux_1_2_x86_64.whl (224.6 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

stringzilla-3.3.1-cp39-cp39-musllinux_1_2_aarch64.whl (163.0 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

stringzilla-3.3.1-cp39-cp39-musllinux_1_1_s390x.whl (160.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ s390x

stringzilla-3.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl (191.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.1-cp39-cp39-musllinux_1_1_i686.whl (179.8 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

stringzilla-3.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (227.4 kB view details)

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

stringzilla-3.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (159.4 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

stringzilla-3.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (184.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (165.6 kB view details)

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

stringzilla-3.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (170.8 kB view details)

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

stringzilla-3.3.1-cp39-cp39-macosx_11_0_arm64.whl (62.1 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

stringzilla-3.3.1-cp39-cp39-macosx_10_9_x86_64.whl (64.7 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

stringzilla-3.3.1-cp39-cp39-macosx_10_9_universal2.whl (97.1 kB view details)

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

stringzilla-3.3.1-cp38-cp38-win_amd64.whl (58.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

stringzilla-3.3.1-cp38-cp38-win32.whl (56.8 kB view details)

Uploaded CPython 3.8 Windows x86

stringzilla-3.3.1-cp38-cp38-musllinux_1_2_x86_64.whl (223.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

stringzilla-3.3.1-cp38-cp38-musllinux_1_2_aarch64.whl (161.7 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

stringzilla-3.3.1-cp38-cp38-musllinux_1_1_s390x.whl (160.1 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ s390x

stringzilla-3.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl (191.1 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.1-cp38-cp38-musllinux_1_1_i686.whl (179.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

stringzilla-3.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (226.4 kB view details)

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

stringzilla-3.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (158.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

stringzilla-3.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (183.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (164.2 kB view details)

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

stringzilla-3.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (169.5 kB view details)

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

stringzilla-3.3.1-cp38-cp38-macosx_11_0_arm64.whl (62.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

stringzilla-3.3.1-cp38-cp38-macosx_10_9_x86_64.whl (64.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

stringzilla-3.3.1-cp38-cp38-macosx_10_9_universal2.whl (97.1 kB view details)

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

stringzilla-3.3.1-cp37-cp37m-win_amd64.whl (58.9 kB view details)

Uploaded CPython 3.7m Windows x86-64

stringzilla-3.3.1-cp37-cp37m-win32.whl (56.8 kB view details)

Uploaded CPython 3.7m Windows x86

stringzilla-3.3.1-cp37-cp37m-musllinux_1_2_x86_64.whl (222.3 kB view details)

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

stringzilla-3.3.1-cp37-cp37m-musllinux_1_2_aarch64.whl (159.8 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARM64

stringzilla-3.3.1-cp37-cp37m-musllinux_1_1_s390x.whl (159.5 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ s390x

stringzilla-3.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl (190.6 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ ppc64le

stringzilla-3.3.1-cp37-cp37m-musllinux_1_1_i686.whl (179.1 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

stringzilla-3.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (225.2 kB view details)

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

stringzilla-3.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (156.6 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

stringzilla-3.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (181.7 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (162.1 kB view details)

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

stringzilla-3.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (167.9 kB view details)

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

stringzilla-3.3.1-cp37-cp37m-macosx_10_9_x86_64.whl (64.6 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

stringzilla-3.3.1-cp36-cp36m-win_amd64.whl (58.8 kB view details)

Uploaded CPython 3.6m Windows x86-64

stringzilla-3.3.1-cp36-cp36m-win32.whl (56.7 kB view details)

Uploaded CPython 3.6m Windows x86

stringzilla-3.3.1-cp36-cp36m-musllinux_1_2_x86_64.whl (222.3 kB view details)

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

stringzilla-3.3.1-cp36-cp36m-musllinux_1_2_aarch64.whl (160.0 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARM64

stringzilla-3.3.1-cp36-cp36m-musllinux_1_1_s390x.whl (159.0 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ s390x

stringzilla-3.3.1-cp36-cp36m-musllinux_1_1_ppc64le.whl (190.2 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ ppc64le

stringzilla-3.3.1-cp36-cp36m-musllinux_1_1_i686.whl (178.5 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

stringzilla-3.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (225.2 kB view details)

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

stringzilla-3.3.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl (156.7 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ s390x

stringzilla-3.3.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (181.7 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (162.2 kB view details)

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

stringzilla-3.3.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (167.9 kB view details)

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

stringzilla-3.3.1-cp36-cp36m-macosx_10_9_x86_64.whl (64.4 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 af8e77e05a445c735f50011ba4705ce8296a9f33280b0a3c16a9d59ee04a99c1
MD5 c73028dc8087492f7f67f0e457c6414c
BLAKE2b-256 0e46534c70327e520eaaacd78ee5f575ad510ce5acf1925c4eaa98b4cae68ddd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 82ff518b1cc55e8341a6d7a4f6ec6f78900eb84c030fefb3403e17e615bcdd99
MD5 b9585767cf880041b8520791ac44e9c9
BLAKE2b-256 1ff928551537365f2b1e02dcb6fc8e7e79b23fe19a6e3410b01643681ed23a19

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.1-cp312-cp312-win32.whl
  • Upload date:
  • Size: 56.8 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.3.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 748334463eec5d265e0765a7cec739ae0313fbedeb8dd69f237b5263f4666bbb
MD5 d6730eadcab7d4648113e38b429177da
BLAKE2b-256 2e0ef094164960ad693e164a393af3b8dd9a22c3dd9af97f0c93b84487f31c7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b5d4075e076bf3ec0deed901021b5686f81f9705f4d2d9b26039134730c7b777
MD5 aec0c76a434b68fdebb77f8ce1ce918d
BLAKE2b-256 b3d5aff27b08e21a113f12f1a1f9a1ababf45f134dc870446c6283b7ff2933dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 165315a16b985443e9045e2e74747e533d165b4536c23f51bd66e87e6eea15d4
MD5 377a044b161d7fb466229c8d3c5482ea
BLAKE2b-256 ab432dfca6ddb31b7aa357940f06d18bacd301390cb10a690370f4f9694f58c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 fefbe91ccce9e0d7ebcaff9c65c62dfb3ddc58cb4bf0de3b4c7ccb0c8f381337
MD5 f866eac1cef1b27d4f2e9b0212ad5833
BLAKE2b-256 4d7411b55ab927699dd3fd4359b0f2a018afc2fe64867827dca7ccdc9ac254fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 5c5da1c9b852c4bf2b8f11b01e079d05293133eb1423adc8a715025f8cb6d832
MD5 54f0fc83f840513c1f7d473e8ed2e8dc
BLAKE2b-256 95ccc03313d8c31e4f76388eba8dedc3ef068535761f0958b2b666184f60e1a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 aac7c12fc62741b1c2e3165d0ccf275d1df09fa0a392729ed5355085a5253ce9
MD5 b143b1165e179155b022d35337dc1978
BLAKE2b-256 0693580fd6ebcacd41b973cb073512d97a9687240392309065c522f4c3984004

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 aa5f5ce360fc35aef3bbc741c355693f0c5c80abfc410fa0de955f0f1ad230c8
MD5 b6eb66d0781ae170cace41dae01b847a
BLAKE2b-256 e3b86b01af60899b27681fd568a50656f46a2c3074ac4e70f7c8487fd3b0d2b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c919e370770ebd22b565385ee0ee10c9871933c3a59454b55b014a679ff75014
MD5 dffdf94ca84da67a9324a568e4b1653e
BLAKE2b-256 8d3e3944bc981f609507b4804f66b768f513d7711746c1ec98a1194c6082acee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 9bd0096cb4c66893001619d7b3ef569e655ce2c197b1e0c26ed8a2a4f7cf9c8f
MD5 db0e04679dba9c23ed1c128aaf54e25b
BLAKE2b-256 ef17d8b653691d5447438cf2f1b3650ea9b5c353029a7d0a73cb5b3e84873d4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a1109536dc52e7e906c0f9cea6f8a32da5fde99bad1bf270d411b030f339b434
MD5 bbbc1c19d43edb325d7491532160840f
BLAKE2b-256 2483d0ca97fc228b78b9718d2fc53bd2205b451cdcfaf41966d6cc3fff207623

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 478a5308ce76df2afbeea3059e0ce31786c36470d2eddf696904eb7913479c79
MD5 835f2b7208e110bb16036d06306c378b
BLAKE2b-256 3423a26c5e67a1ce8b44d25796c32f710b291bb9e430830be8c170d8596345ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ac25b15e7e761fbe6f56a8c857c5212741f9479c5b180f31be2e63bdddf4029
MD5 543552654f0a6fc54992c9cfaabe72b5
BLAKE2b-256 867011f78467a9d246bbdc7ab33e4879a1f490aff68440f74fd3950529ee65ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 602756878c4f480060a6692f497d6c9e74de27d2f05192b0cde8e8308931312b
MD5 d4ebbc564924c3ae7119ebd75760c41b
BLAKE2b-256 db33c128c0ea04d9ec028fdcfd27b54602e194b912233e3daae1a700882c3d1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7613ce2b8781ab27693cdf95abb6521d478e32362ece9f503a8055e7f69a9d76
MD5 e0dd32c61c3a3866dddf8e5d87a66851
BLAKE2b-256 be75b6222fbc6eef2ce810e5b7733415e614280cb1b7797f14b78d0d315edc7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 5d1e74ad7cf3f036f2cd21f403bf6cff826a88b8292bec09304552ea9531ab95
MD5 5bafa228d483b321b7ccdcf0f333bf13
BLAKE2b-256 c7fc0c3a3ec07ae0a8f98605276bb2982cb0da3cb4c85d4828bb999f185767bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b373721c2614742bf2cd73899dfd039fc5c5f1a381991068908c26d9d77b65ff
MD5 d91620f79d0a75e9266e13327b3728cf
BLAKE2b-256 305edd75164e3ee0b8b2e663d3d770c00e7a58a260aeec7176684755d1ee1d38

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.1-cp311-cp311-win32.whl
  • Upload date:
  • Size: 56.7 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.3.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 b07cac5174187d56a7bd1fb8d97b71a1896638da5decdf40cdc886b607123559
MD5 86049d2d5cc550b4fa135590ccc20de6
BLAKE2b-256 41a73e29823aea6d8437e62b19dab18095326c54264f3200a76015161595045b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 14c3bfac42f005f3b223bd68c8204dc901310792e7a9529075cd291cc52277a1
MD5 2a08623069198a956ea20085d207632d
BLAKE2b-256 05d774238bb53e4241e8ffdfae63b8ccad6fe01742b243b7d73bb2a8934a477d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6dfe4b25d6b9acaa99e729188166c6d8b72bd0ee968a81cdb6ebf8a49d4d74fb
MD5 ffdf5bbbd3f855b03fa98f88fe4366f4
BLAKE2b-256 01221a0a55f9bfc0efedcf1700f517e69e3fe71031091dea2b9e2e9133c7d9da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 61bb371a2955c87fe7e293a4dab4762a1d262504f1e13b77e40659337ff9ec6c
MD5 0ca83214d73e35e2f6df547025a1f126
BLAKE2b-256 dce0c0f738cf30af6097d77088a3a8f5979307549e68772cf92f3432353a4934

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 bd581e4505ca2c119b85577fe2089e9acb43f57def4240d322fdc4aaa0327f92
MD5 3d6cc1f8e79c8a99d9a5979a2ccada87
BLAKE2b-256 1985668b484ad8c669b163c343268d8c16bf5187cb2793eff59e8000d95a0534

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 e25f081aa6c3a9849a7b2a68bad033d8829f7422523250f635dd4fdf48c631a2
MD5 dfa735c8aea6b3ca3989bcbada50aa4d
BLAKE2b-256 1f7d33d13636958d2bac5f6a58b1cae5bf93b66990478a1120af3b58624ea72c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 12cefa6ffe74968d0951898ac15ed6eea4c83617508fa000ebc179fdd1d801d5
MD5 c6e4a45101d6ae40ebd6f7dd2020c110
BLAKE2b-256 13c1ee7f8c9a694688ea387812d10385c575793eeeb30b8a3abe38bbfc9eab35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 06f8e9dee3f16618082613377f393ecfc0e7c74bbeb6babff6dcd2445793069d
MD5 8cda91a312ccdcb3ee2c962855e133e4
BLAKE2b-256 e518416f35902fa19d210c6c76e705e69b4fe8a5727935d883909e25f98c3144

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 3845512c329df6bd72822510e3498ff63c658703f43aabbd1db5b5c24fdb1a61
MD5 0d2f112ffcf501bc40254e556a6fd5d1
BLAKE2b-256 172cc05ff02d0daf07d6f0421cd37032c6d8027033f2feb42a834b09e2d09183

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 da895739bdbe7c93f9889553027e2d38fae22caa3dd2a376c3f2389d4e13bbe2
MD5 734828a9feb2b641efc21783b490056c
BLAKE2b-256 28936d4fe6a81faf7a82b52f0774dc362056d829a1081e9f1ef8beb84cc19721

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 82b61267f54e640a78115f6a89b2311c3bf04b9dcbab0d940bdb87595d54d507
MD5 92d223653f46be81f8350280a7737fbf
BLAKE2b-256 9919348f40a64e5c04148510807d51ddfccee7e6550f51f1ade8b1ffbaf2b2f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0e711e2266707aff962f93c814bc3fdd6b792d202d143e9f8dc4a7c67871cc1d
MD5 835619e25b6474f9725ad5adf4abcba0
BLAKE2b-256 b23fae23f42801878aa5036cc224da495f92e88fdb67f542e40f7ccc5f5c8ca9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 28975f7aed2a88024fe57883a1f10feadb1470f46aa641ebd31b45d88cf2ca40
MD5 cf8b629df84ec41eae5321a431083fad
BLAKE2b-256 1f333c7271acddd0920ab96f014dc4c62f092b8da94eed2ac03f3f2ee11bad83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 fa341bdc8472a67d882132ecc548dfad3344d48a933b7e61b390df4216537e6a
MD5 8a29fd50294c8438b702cd6f0772c6ed
BLAKE2b-256 f357fd8a0fb5eceeaff2538e41b18b99114fca48e7042d22a4fa35ffac3d4c94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 6380185d3d7461c51ccbc4ccf60a2cf91e0642ef1e5d83ada311b818da604c52
MD5 0c60bfbe273a6eac8e52e8a832728f46
BLAKE2b-256 ec2569abfe439e7dbe6c4ea578ab0cf19cd2c72213f5532e9a9414c151d03774

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0b85cd9e2ddbbd779002d1ae19ffc87023ba0a2b91ea5e268bac151bb3627856
MD5 0955f1104c2318df58da72eee523f933
BLAKE2b-256 35b50b9a8f569f2d4a16bb956df24af3e92411d65d985b46b93291c0ef556440

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.1-cp310-cp310-win32.whl
  • Upload date:
  • Size: 56.7 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.3.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 5bdc52c450842a8911183471e9ede2aa2b362af9f534662eb425a652ebaa7258
MD5 9dc6f783d35af13d1a29ce4d9e7db05f
BLAKE2b-256 862c48985f33f75c27455d063eb8d8f13d64efce05ab61d0b45df4dfef5f541d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6d2243cbdeda9c0041ef991ac0ae479053b9a256681402cf4e45f343e769a8c5
MD5 d6569dc5a39205c02c1f757d029e9c35
BLAKE2b-256 59a34b4b6c1eba40c93c795c11199fece7a7066017a81758908af456a7ca5421

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8f6cce00207893e9af6db29635d2935e43c81b7c31eb675bd7c87b73423fc992
MD5 9b4be34fe404f7a802169d8b74a364f9
BLAKE2b-256 2ebee8b4310a9f58ac4593cd30832b716d32f794668644c52471eeb2c8f0ebd8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 dcb92b8a51ebab7d6f53503101949e5a0f934c6379b09616dc9d4078ba3f4f79
MD5 0e28ff8c4e88abbf9b5cae81c24216f2
BLAKE2b-256 1dd16de5832e610bc677dee8dc486552ea457668fc59b21d379665b72b8571e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 3573e2eac38f110e3dd46df656e2325ea266ae9a1499df88471a46e57816f87c
MD5 09836e5d740f7be41f39cbddf9e65c26
BLAKE2b-256 b05fc54135d425f8359aa7f6074869f45314851e78ea193329fa815c74124a6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 9a52b1ce5640a9d954c779cab19b22b617e2ab0c96eaad6402fb30d55f7f37ed
MD5 b20d6f24975c8dbadb36eff079a454d4
BLAKE2b-256 abc27c6e96e9b243f97546e2b22f270e9e2747fc77b178688acfea6eaffbb6ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4eb45b7b22d73ea364ab000196aca4965fea7f54431b829160633de5beeced01
MD5 c841ae382fdfa64f1939ed6a13ed73ba
BLAKE2b-256 1cc54174d86831fa1734e9c8a80687473d4673a42521911ae541a1127599544f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 101b0282bdefdc9722e5ff14563281b77a4239e7f6ddb89ddce0e9ab73ce5c3c
MD5 9940fb6ac53a1693dbf045563fa63a00
BLAKE2b-256 8ccd7727e652b7a68c712eca90c6b2dad820b3ed2f3567564ea57005400880e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 db926dd2b92fdd3a9331989ed1c3f10f18fdd9c8394d687ccd17d6163db66210
MD5 a8be22f0191fe6e2f604ebe675a274ad
BLAKE2b-256 1c08e8db91983f7a92f3538478a2f481d658993184790426801baa4543cff17a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1baac108afe04fb8059b562c9da0172fbafa813e8aa5c7b3c5318b9bafc62419
MD5 b8a08a58554f28b90b5d07ef1ff7864b
BLAKE2b-256 7e8239d932fd8fd10f327b2bb16c76f7619227d5ad6971be20b390b2bb7a66a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 60a7ca2e51222cb751c70a58cddddfa8bc69da0b3aace35d59fa0914667caf9f
MD5 4c9fda178e06d48a129047487a6b4651
BLAKE2b-256 84223c1ab3bfea724f219035d3482c2736b20456d7038377cff1a41ac8e3ce23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 822701cc6623d4f00606f57cd8e091943c89f66867a8f17c980bb8380e159506
MD5 b7b31d18c87331dc29e19fc36e82e3c3
BLAKE2b-256 67f625621919e42b32806ac2792d7c81e1d953e0a04e8f0c802899dd2070749b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 350435f745dae98380bf3ee503fa2cdddb6cfacdafca913f522c1eaa04822f80
MD5 87d2775d1fdd37c78160ba8e1603bd2e
BLAKE2b-256 26e04bb54d7e1ab0a6d1255ae0e50c3f4510910aa4e9f7464223e3ca5dd11a85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 209c3e3224975bb75a46f549f4dca7798854c722fe7342cf995326a0fd384162
MD5 a7a6b2fbbad3af6d3af203be6d57c3f9
BLAKE2b-256 275c10e6d3bff7ba4aa6e2ddf2ca6c7d6bd99970226e39db820c874ab6bf64b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 e64e83e4b6c7d8449ae21a5b8f5593693ba0bbed2ee4aee04aca58241da2ff50
MD5 61b0e41501edf2e21bf45c10793c5092
BLAKE2b-256 a77de7463c94d193a8a84038ce7d8eee830d2fb676b6e345227e500ca8089a0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 e365b7bb7f4c94585c058459f32b6e7a432d3508323f2aab077a0c615a22bc95
MD5 154fe63afb14968ac83ae79593e53d7d
BLAKE2b-256 208404b3b4d1e6c6cde79427c4bbee0c54c297527455616284408583314e9c04

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.1-cp39-cp39-win32.whl
  • Upload date:
  • Size: 56.8 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.3.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 11a2c960107992129be8fd4e1030c285d041aff3fe239a4b7bf6af023728852e
MD5 76d7ea09b2f4c98bf6646ee77c8ff603
BLAKE2b-256 3874eb4a07e36857e74a832f57adc8f8b3fd5885ab7d9804b21276cdddf6e650

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 99fc22fa3230134e261ef9fe88cabae572ec0a25d301303d49e6a407ef3272df
MD5 c90844ea4ff238451c55de9ed47fd17e
BLAKE2b-256 39bed215d40e38ced131b77803fa0f415c37c535e690d14e0dbe998a028bf88b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b830d17911f8b21a8ef3c32202a264502baa3a9103a05e977a480ad5d7b1b93b
MD5 063dce93e9a15c75d73ed00805b007c5
BLAKE2b-256 e3a043f2c35a3e2321f9c87260b4a42fad60786f5e158ea8cac2e9b1159fec84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 9c9002771aaa90c715a82d314fbb8e0a4f36478523b3aa523718603087db985c
MD5 8f48fc13b4dac9205baee0292a31303e
BLAKE2b-256 236feb26d37ecfde57351f52c97fefc5c666e636f3b462ae4ee06aefc5544695

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 976c7ff3fd7435b18e0338f6e202204e79e4514069d18a77ad33bcdb97ef6690
MD5 d21d8765c42fc1efdb9c35782c68d1a1
BLAKE2b-256 6fc677c21d63713f958f2ae9849277966bce5e86eb2ebc298088c7d0c8e70295

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 6dc3ce1e8cd92c3a4aa98d5d12f35f257cf35215f9a44650c83bfc3e48234326
MD5 9f1680a45a27fc225b9ce57398df40cf
BLAKE2b-256 b6d4c502049a9cdc3cbc7be5d9403a981a6717ede5c922c4eadfeb76521658ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c6bc57338ce5c61b6191490aa56cd9b81b6f833600e8b0f712c0c17865469444
MD5 a7023e9fc532059164a97375c49779c4
BLAKE2b-256 568fa2d1a8ba6697d1e441a10e095f2ccb035ab9c1be913ca6893366fca6ee3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c0e2030d0d03dd2dbbf51031ebbcc1ede354cabc2785c584a8223840983448e4
MD5 1d1ad7c8a5eef1d65ceed09428d43c1f
BLAKE2b-256 398d13d82de507bfe63bfbb34a99d64d85225c7db724e1a37892d73657887476

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 547eb85c929731dd5d52e00e150952e9851fafc0da5df5d899cdf3ef9cd00e99
MD5 6e7721312f6bc727fe90a8fb9f071eae
BLAKE2b-256 77d2d0cee340a244d36d41dfa0f22b43a1ead5ef192aba3c79e7e85dea8cb8bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a20f807acf327bc01fad46e83af9c31e36d99c9fc74f7695a69462c5e28aeb37
MD5 d6d459a5fd7e6d844fcf6af14b0a9342
BLAKE2b-256 c6133e0ffed67ca372d30440808f978c08f2bc64f6399f3a0a20f68e06aff674

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 17fd9bf4a44da816af53c68b009bbc1d627e6244e5e21207eb082a10c7438537
MD5 b0545e351667ef03c7aed10a4ba85788
BLAKE2b-256 deeda16f516fc5681fdc5f4628f8189de092b31d132a269ad0a0461f47df58b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b4a04d18cce9b83d8bfb8a5b5029000f913b09d1315d8c99854be723f315408
MD5 b66ec2179ef343b628b92bffb9bcae38
BLAKE2b-256 bcb6909606e031ba5c911a76c5a7c592bd0f39c8fec9c1ca4c424a310045694e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 91b64c6dc2bfe5578003ddb7a3b60e4564e393837289fe5ba55311af0198a8ac
MD5 ad98c6dce6a221cd1c1e8624fc78afe4
BLAKE2b-256 6f808dccd5056f1adf23f03b94f1648733d5be82fc177b074f8b73aa24b4f9f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f785f2bc90616e03fb0f7a4a8beab5d43699a6ba0fe1ab08f091ea03b1e366cd
MD5 71763528b3706188dbb998e6063e65d5
BLAKE2b-256 5dcbd0713028e36a2ddad6f9a92b5005b5e1d9771cd2adb5e024af4a9dc84151

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 9a1e13583ca1756e6e156aa7b21fd56563d2a901611a1399d34e9d8ec3062277
MD5 dd1d6f9a0f47f82d3685e77dadd786c8
BLAKE2b-256 aa0e4789178d9cc4869b4c9f9d01999fedc5fa44b555903115362817e1c2450e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.1-cp38-cp38-win32.whl
  • Upload date:
  • Size: 56.8 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.3.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 5bba800b4ba531908255e67cc9a877f6b984312c087e1d48575aa77368054604
MD5 e82fa4986d3d36853920570be92c0284
BLAKE2b-256 490279e1eea9be69c28b9fb2391a1db29676dd91f1b7c3c6eb88e410cff26209

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 69fb4509671ba4bcd1c1765d5592608b6a27a7d32fbd6f819a82c45d2d469e0c
MD5 c38e76fa83080d5b279ae532e742d899
BLAKE2b-256 9dc4717808d05898afd6ef334075633beed3ba03e48d3f162eff33edda344309

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 274ae361bcdffbd6305f79064d2fed05eb3bee8ba99cd6f1ccfd93633e4692ec
MD5 dfc1ce09806d157ed042d887e39115a7
BLAKE2b-256 cf3411a24e97bcbd0abf3f587c2b73dcc060b6de06e959b26abb19a2423ca732

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 dd7f50a9ba936d388e6e42ef898bab0024d4dab73a95f0d89ba122710a414e57
MD5 7f097464f477d148f3ccf8a6a8680833
BLAKE2b-256 44469488e0da4a46f9b2177d9dadb73f4a63bb85bd565e63eabcf81cfb646b5d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 f355f06c32cf88d9da61081d9cb6b844ee39546d73b7f4c8822f4ece550e81a7
MD5 2447373cfc4f529ffcfeac64d2cb0a6d
BLAKE2b-256 6d0db9be4c6a9a75ab0433d83fd7073ee2ca40870d40c30761b7cb96be8b4356

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b9fff99be2ac79d4028bf2aaca7d1c517664f34767855729eef8e890af7f446f
MD5 c97f006eefe78d27c89b65283cecd0b4
BLAKE2b-256 89073a1944f2c4d8c40e70b7e837bd93c6899d3326a546f48e803f6544b3d368

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 944450023f2b79ce4ff6ef35a5f5aa636d0ab9a95ac0939ded310cb089bd32f9
MD5 20ff388ed3ade2c21dad39bb0bb11a53
BLAKE2b-256 711e4fb4e2839927d1a086e8cd30654ab3d9505300b407a3cbc18f320545bb4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 849a6bc8bd931997bc8a03bd8cafe3bdef41b86c205b970a6b076645a8874b46
MD5 3c000ccac7836b1206e21e1196b451fa
BLAKE2b-256 b4f1f950f1f75da51693d8e8f17662bc01c29a4951ccabb7c16e7c6dad11d8f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ef1b07d90ef63fff9cc77be10dc6307a362db72b7afab338a4a43dc708433af1
MD5 d822cfc71ab40ec8f35f3af1fa510ccb
BLAKE2b-256 2ddf72c6fffa48c449754520711cbab3fd97665724a22d1fc0fd902722966f3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b89030351255414b1c67c09ab361503ad664fb47b8962eeff97c81944af9ee92
MD5 fcc897ae882536ea850bf9d10e927758
BLAKE2b-256 4e10bc660ed454b0358b5d0553f8e0ff3aacb013bc4390a0b6381661c61505e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 31c0c6ebc20442fae1aaa1ef21719e9473dd2d11a7424c8423a638c600c165d2
MD5 d0dfbe997af1064b411fb5fe8b1d4e41
BLAKE2b-256 b6170596c00940a8439d886640dc94c99424bd9987baa862cab9bc09bf36b614

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e4b03568e8cf17ff534830d86c1e2e2e498843994f5662e72bad2e9e32ca899
MD5 9c8d1b064202388b99816a27f91fb39c
BLAKE2b-256 dd398c63d46c2c2f0504c525a7be0dba3a3786eef0c8581b770cd527fea91823

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 398136271b612b17043c79ece0e2245776ac97150c15dbaad6234f8537da2f83
MD5 7ae67eab66852af38a130b375c88cc4e
BLAKE2b-256 7cf29e8b7fd9485734f57e416e33424a3ecc37d6f7bd9e234f1262e42ed06057

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 db1c5873aeb6dc48ff34b2bb414d11aaa98aca62ce55f35cd42189c23f46b6b8
MD5 4dfefb2a47c5c36ca24719f35ce49a9d
BLAKE2b-256 5413144a76fc4ad8fc03392c39bb8e72c396fb941376c5b87a3454a654530ec3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c8097b50319ce5ddd8efb937783116a2a3784f06148af4d1c44dd0eab8995da7
MD5 26750cfce6a6c2e51e8071628e421de4
BLAKE2b-256 dfca4735bd9b1257e140d64c0a89fb2778144140c6992f487e663d0f6b03a777

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.1-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 56.8 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.3.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 dfd4462d953e54d84d3b8968ccc2427d71678f5db653d9157ed25ba0c299f1c7
MD5 b878bcf34e4446f8464bf2360fa1cd53
BLAKE2b-256 e41678b1b744d1031d35a99329e7d918a8202339d614c91b91b3d9bec259f9e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0e84639d2cbeee601464902940e200f64b9a3aefd34c8472a5190fe278bd915d
MD5 3ea29e232c77d60b7992162e39403c46
BLAKE2b-256 d601ed6f97a9c6c04538aca41a1fa64e3a5eb7f1e565e709cb5b7e0963d22bc7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8818ddaa67067d3790d772442e650ce1f6a9a76d6a812fb0fb87902421008cce
MD5 6a22669f8040b03573482627d036385e
BLAKE2b-256 1294e3f4a4681448320c489d2f1c7d09b3d948491b9f39ed9cee4b2afd6ea243

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 a4e75e2214c893d8ee2d52833d03c274ecdab6bf3d4049b080f4f1a94999d6e2
MD5 470ff748ec329edf267dab99ebd741ee
BLAKE2b-256 f2ed500df26187aeef14a790b89d2cee3a35db4b14fe195414fc1feab4febb65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 8a8aa9edba9825e1588d97771c08994e56dc738caf57cfc9292ac135caddf436
MD5 c5428083c706ac16d70c27cbaa4cdc5b
BLAKE2b-256 dec712bc3165ccfadcf3cb40ec8d02d7275a056cda0496a4acbec248bfa7a8f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 f1b8a74fa9b859ec253c0914ca2f8d469b57d9d2296439fcd39379498e025882
MD5 0d2cbd78dfcb8e955725a3f497df81c9
BLAKE2b-256 56ab3f808852d381f8319b9ba66211d6037a6ec828e0ae33b60db6cc1afb6f3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1d3ab379f597b30fcb5e3053d2e8bf311f6a4d4a3d4aa1b009bf088a3b80e5e5
MD5 f78c1a8ddbe9007547c0df2f409009e3
BLAKE2b-256 a18dd61acbba64f4cee27f0d2f1da0dda275a02d7e5e6879a69cee7afb87efd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 66e69fe04b552fe0689390300dc3598362ffa6fd7f14b0dbcb6dc198c5d6e88e
MD5 00233d2641e49758683b7597e0d12812
BLAKE2b-256 19538b5115604d8c24014c945f6d504ad6c709f760edcc9bdcbb13fedd408897

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 b321393617144cecf7d22bfa4efc7c5daadf19a16d18269f35c844be19b81f4e
MD5 b192d8e6fd3f61978ad9444fc5f6301f
BLAKE2b-256 0f4195354408c8f36edd27cd1564c70af461939b0f4db673c30d03e20d806916

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3fdfbfbe4c6dddc8de1ab3e5efaddaa2b31a9b5a2e0edc87d64a638f94f1e248
MD5 05810c5f59a910d1355d94094a2c35d5
BLAKE2b-256 7c684fe3c8cca304e9f0bec233fd6f35ee01b82e190e77493ae43ceb98de33c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 07248391f536f1e8251a76e7865e5bf83a3418e8f06cf8e0f02ce558b2765bdb
MD5 36f39478a617065a4deda327b3ab173b
BLAKE2b-256 88824a0d3aca56cf832a99f7e19e29fa98f857946510d6bdbd02e20446d3c8a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4fc3c715f2da61c8faf9a679ba606ec95f4d23e49e44cc7f75090e861d2cbc1
MD5 e499848407e73516169da14b7422422c
BLAKE2b-256 7039e1b045846fe9f26c68c76a44211c8d697427ae839431138dd78efabc4569

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 543cf465f16f879e8d10419ae5b67a8799ec3b853f7f4143a0dbcaeaaeec0eb4
MD5 934abc52aa4e030c226fc2e89132d6bd
BLAKE2b-256 daa6c917b8815a3d83df107be0eb38569463a9e7fe0cef89c9f3484bdb8a9f89

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.1-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 56.7 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.3.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 1c7efa47ff8777480ff760f749b86b4bedbb29a59818d64bc4ef01362ab946f0
MD5 61e12e9b5e8db378d7feccaf7234fb9b
BLAKE2b-256 8604d38afcff96c4778a9d3175c9c892d13a78985980d87838d537dc9ed53037

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b41390f32d63c20bb7760db03d79aa5c8f1aea6822f19af803caad9d58c256be
MD5 5eab2e8eeb5e2d1b878426c3221acf03
BLAKE2b-256 dc82250bc80c9a4c60c40f1248627d9e729a77f89e0ae6a21bb787c291910c74

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a4f35c669db18fb2028a9ceb59dade8a78f32530d1d4ffaf20ea5ab698532944
MD5 74ee96ac7b54bda86a5263a933352016
BLAKE2b-256 09404bcad1c97af781dd221251c8ec2dd23d12c94110e72bca3b1ac8d73139c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 6b970bda9e6c35f84b5ca70834e85ca2fe3cc0e2ee9daf54b9c14d825f94c4c2
MD5 71cc0574a23ce28e8ddf3c2a0a86c374
BLAKE2b-256 ee6a95a84271ce79ea62ab00ac07b87e657d26b4d4a9cea8faded86dedae7dce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 6cf9942b65c06af048888e608c09d01d9cc7e24011e2c9417755aa4d39a118f3
MD5 0612ef74370aa191d9db0cbf402fed58
BLAKE2b-256 0efb18c60fdce73987e7f870f0ede424e5bd7791951f4bdb500719c355a22f8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 e0a45650c299f0237b52622d653e49e0e5e3efe7433484ff0cee34f04f1d2c2b
MD5 1184b2031961398118c8a7ce5f3d3ffe
BLAKE2b-256 f884d28d7182b095da02930c4d7d77bb5fdd861f275a65c32debe7c0490d0df7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c751dfd8194d6b30dcea42dcbc40bb2e747b1c5ee40066ee080b250955b5bed
MD5 7f60fbc6787e7520b6c1ebe2cc924237
BLAKE2b-256 0f7146a943f59df068fd56f639e47d4b1819a9fe0cdc925567eb7f252ca65f11

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 07ce07eec40340413cce2a848c3817324344a64dd901f2726b63a3d0b345b720
MD5 bf2f55d2db66d41b686ba563a96f53b3
BLAKE2b-256 3037a0dae5af3be0ec331d62082ae8dda8b847435b134ba84b64639faf58bead

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 81858eab64428a5533e402b88b035c4d49bc69450b733062b0bf4bc7f99a8a2f
MD5 eca9e56565213d56bb7d327eb92894db
BLAKE2b-256 d122f39338b050d4ce28b1ab5a5e327c31534c9c51a852a3554e94afcfd7b591

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f4820e88ffd94b1a57e71a32544c805285134ed44f8decefd14e489212573068
MD5 375b6b779d82c5e24441c189f0414e41
BLAKE2b-256 1ddfcea2d88aa943637e829534ae706d68cd068bb92ac2e99f50f0dfcf0c1b50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d627877571eb280c941a46150ba85502bb29d004c84cf5f5bb9a7f8d3294151b
MD5 abf3a98b8e20c7123918e24bd0c2dd7b
BLAKE2b-256 5030e9d8d2264c56e67c2ee976f4dabca54ab87af65463e71ae70e1764b48e43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f6c7dc94e683f1d2a35d1ac7b39535d5dcaab896f5ea78fd66e9bdb54519b939
MD5 d91fa083d848da3b32e0e50e8f2cb71b
BLAKE2b-256 0f75fc66006c689a47227b7dd261507de2d3e3c81e41b0fc4f931cff4ab9a438

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