Skip to main content

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

Project description

StringZilla 🦖

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
  • 📚 Researcher? Jump to Algorithms & Design Decisions
  • 🤝 Want to benchmark or contribute? Jump to Contributing
  • Code in other languages? Let me know!

Who is this for?

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

Performance

StringZilla Cover

C C++ Python StringZilla
find the first occurrence of a random word from text, ≅ 5 bytes long
strstr 1
x86: 7.4 · arm: 2.0 GB/s
.find
x86: 2.9 · arm: 1.6 GB/s
.find
x86: 1.1 · arm: 0.6 GB/s
sz_find
x86: 10.6 · arm: 7.1 GB/s
find the last occurrence of a random word from text, ≅ 5 bytes long
.rfind
x86: 0.5 · arm: 0.4 GB/s
.rfind
x86: 0.9 · arm: 0.5 GB/s
sz_rfind
x86: 10.8 · arm: 6.7 GB/s
find the first occurrence of any of 6 whitespaces 2
strcspn 1
x86: 0.74 · arm: 0.29 GB/s
.find_first_of
x86: 0.25 · arm: 0.23 GB/s
re.finditer
x86: 0.06 · arm: 0.02 GB/s
sz_find_charset
x86: 0.43 · arm: 0.23 GB/s
find the last occurrence of any of 6 whitespaces 2
.find_last_of
x86: 0.25 · arm: 0.25 GB/s
sz_rfind_charset
x86: 0.43 · arm: 0.23 GB/s
Random string from a given alphabet, 20 bytes long 5
rand() % n
x86: 18.0 · arm: 9.4 MB/s
uniform_int_distribution
x86: 47.2 · arm: 20.4 MB/s
join(random.choices(...))
x86: 13.3 · arm: 5.9 MB/s
sz_generate
x86: 56.2 · arm: 25.8 MB/s
Get sorted order, ≅ 8 million English words 6
qsort_r
x86: 3.55 · arm: 5.77 s
std::sort
x86: 2.79 · arm: 4.02 s
numpy.argsort
x86: 7.58 · arm: 13.00 s
sz_sort
x86: 1.91 · arm: 2.37 s
Levenshtein edit distance, ≅ 5 bytes long
via jellyfish 3
x86: 1,550 · arm: 2,220 ns
sz_edit_distance
x86: 99 · arm: 180 ns
Needleman-Wunsch alignment scores, ≅ 10 K aminoacids long
via biopython 4
x86: 257 · arm: 367 ms
sz_alignment_score
x86: 73 · arm: 177 ms

StringZilla has a lot of functionality, most of which is covered by benchmarks across C, C++, Python and other languages. You can find those in the ./scripts directory, with usage notes listed in the CONTRIBUTING.md file. Notably, if the CPU supports misaligned loads, even the 64-bit SWAR backends are faster than either standard library.

Most benchmarks were conducted on a 1 GB English text corpus, with an average word length of 5 characters. The code was compiled with GCC 12, using glibc v2.35. The benchmarks performed on Arm-based Graviton3 AWS c7g instances and r7iz Intel Sapphire Rapids. Most modern Arm-based 64-bit CPUs will have similar relative speedups. Variance withing x86 CPUs will be larger. 1 Unlike other libraries, LibC requires strings to be NULL-terminated. 2 Six whitespaces in the ASCII set are: \t\n\v\f\r. Python's and other standard libraries have specialized functions for those. 3 Most Python libraries for strings are also implemented in C. 4 Unlike the rest of BioPython, the alignment score computation is implemented in C. 5 All modulo operations were conducted with uint8_t to allow compilers more optimization opportunities. The C++ STL and StringZilla benchmarks used a 64-bit Mersenne Twister as the generator. For C, C++, and StringZilla, an in-place update of the string was used. In Python every string had to be allocated as a new object, which makes it less fair. 6 Contrary to the popular opinion, Python's default sorted function works faster than the C and C++ standard libraries. That holds for large lists or tuples of strings, but fails as soon as you need more complex logic, like sorting dictionaries by a string key, or producing the "sorted order" permutation. The latter is very common in database engines and is most similar to numpy.argsort. Despite being faster than the standard libraries, current StringZilla solution can be at least 4x faster without loss of generality.

Functionality

StringZilla is compatible with most modern CPUs, and provides a broad range of functionality.

  • works on both Little-Endian and Big-Endian architectures.
  • works on 32-bit and 64-bit hardware architectures.
  • compatible with ASCII and UTF-8 encoding.

Not all features are available across all bindings. Consider contributing, if you need a feature that's not yet implemented.

Maturity C 99 C++ 11 Python Swift Rust
Substring Search 🌳
Character Set Search 🌳
Edit Distances 🧐
Small String Class 🧐
Sorting & Sequence Operations 🚧
Lazy Ranges, Compressed Arrays 🧐
Hashes & Fingerprints 🚧

🌳 parts are used in production. 🧐 parts are in beta. 🚧 parts are under active development, and are likely to break in subsequent releases. ✅ are implemented. ⚪ are considered. ❌ are not intended.

Quick Start: Python 🐍

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

Basic Usage

If you've ever used the Python str or bytes class, you'll know what to expect. StringZilla's Str class is a hybrid of those two, providing str-like interface to byte-arrays.

from stringzilla import Str, File

text_from_str = Str('some-string')
text_from_file = Str(File('some-file.txt'))

The File class memory-maps a file from persistent memory without loading its copy into RAM. The contents of that file would remain immutable, and the mapping can be shared by multiple Python processes simultaneously. A standard dataset pre-processing use case would be to map a sizeable textual dataset like Common Crawl into memory, spawn child processes, and split the job between them.

Basic Operations

  • Length: len(text) -> int
  • Indexing: text[42] -> str
  • Slicing: text[42:46] -> Str
  • String conversion: str(text) -> str
  • Substring check: 'substring' in text -> bool
  • Hashing: hash(text) -> int

Advanced Operations

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

Collection-Level Operations

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

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

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

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

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

Low-Level Python API

Aside from calling the methods on the Str and Strs classes, you can also call the global functions directly on str and bytes instances. Assuming StringZilla CPython bindings are implemented without any intermediate tools like SWIG or PyBind, the call latency should be similar to native classes.

import stringzilla as sz

contains: bool = sz.contains("haystack", "needle", start=0, end=9223372036854775807)
offset: int = sz.find("haystack", "needle", start=0, end=9223372036854775807)
count: int = sz.count("haystack", "needle", start=0, end=9223372036854775807, allowoverlap=False)

Edit Distances

assert sz.edit_distance("apple", "aple") == 1 # skip one ASCII character
assert sz.edit_distance("αβγδ", "αγδ") == 2 # skip two bytes forming one 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_append(&string, "_Hello_", 7, &allocator); // == sz_true_k
sz_string_append(&string, "world", 5, &allocator); // == sz_true_k
sz_string_erase(&string, 0, 1);

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

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

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

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

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

C++ Code Evaluation Result Invoked Signature
"Loose"s.replace(2, 2, "vath"s, 1) "Loathe" 🤢 (pos1, count1, str2, pos2)
"Loose"s.replace(2, 2, "vath", 1) "Love" 🥰 (pos1, count1, str2, count2)

StringZilla is designed to be a drop-in replacement for the C++ Standard Templates Library. That said, some of the design decisions of STL strings are highly controversial, error-prone, and expensive. Most notably:

  1. Argument order for replace, insert, erase and similar functions is impossible to guess.
  2. Bounds-checking exceptions for substr-like functions are only thrown for one side of the range.
  3. Returning string copies in substr-like functions results in absurd volume of allocations.
  4. Incremental construction via push_back-like functions goes through too many branches.
  5. Inconsistency between string and string_view methods, like the lack of remove_prefix and remove_suffix.

Check the following set of asserts validating the std::string specification. It's not realistic to expect the average developer to remember the 14 overloads of std::string::replace.

using str = std::string;

assert(str("hello world").substr(6) == "world");
assert(str("hello world").substr(6, 100) == "world"); // 106 is beyond the length of the string, but its OK
assert_throws(str("hello world").substr(100), std::out_of_range);   // 100 is beyond the length of the string
assert_throws(str("hello world").substr(20, 5), std::out_of_range); // 20 is beyond the length of the string
assert_throws(str("hello world").substr(-1, 5), std::out_of_range); // -1 casts to unsigned without any warnings...
assert(str("hello world").substr(0, -1) == "hello world");          // -1 casts to unsigned without any warnings...

assert(str("hello").replace(1, 2, "123") == "h123lo");
assert(str("hello").replace(1, 2, str("123"), 1) == "h23lo");
assert(str("hello").replace(1, 2, "123", 1) == "h1lo");
assert(str("hello").replace(1, 2, "123", 1, 1) == "h2lo");
assert(str("hello").replace(1, 2, str("123"), 1, 1) == "h2lo");
assert(str("hello").replace(1, 2, 3, 'a') == "haaalo");
assert(str("hello").replace(1, 2, {'a', 'b'}) == "hablo");

To avoid those issues, StringZilla provides an alternative consistent interface. It supports signed arguments, and doesn't have more than 3 arguments per function or The standard API and our alternative can be conditionally disabled with SZ_SAFETY_OVER_COMPATIBILITY=1. When it's enabled, the subjectively risky overloads from the Standard will be disabled.

using str = sz::string;

str("a:b").front(1) == "a"; // no checks, unlike `substr`
str("a:b").back(-1) == "b"; // accepting negative indices
str("a:b").sub(1, -1) == ":"; // similar to Python's `"a:b"[1:-1]`
str("a:b").sub(-2, -1) == ":"; // similar to Python's `"a:b"[-2:-1]`
str("a:b").sub(-2, 1) == ""; // similar to Python's `"a:b"[-2:1]`
"a:b"_sz[{-2, -1}] == ":"; // works on views and overloads `operator[]`

Assuming StringZilla is a header-only library you can use the full API in some translation units and gradually transition to safer restricted API in others. Bonus - all the bound checking is branchless, so it has a constant cost and won't hurt your branch predictor.

Beyond the C++ Standard Library - Learning from Python

Python is arguably the most popular programming language for data science. In part, that's due to the simplicity of its standard interfaces. StringZilla brings some of that functionality to C++.

  • Content checks: isalnum, isalpha, isascii, isdigit, islower, isspace, isupper.
  • Trimming character sets: lstrip, rstrip, strip.
  • Trimming string matches: remove_prefix, remove_suffix.
  • Ranges of search results: splitlines, split, rsplit.
  • Number of non-overlapping substring matches: count.
  • Partitioning: partition, rpartition.

For example, when parsing documents, it is often useful to split it into substrings. Most often, after that, you would compute the length of the skipped part, the offset and the length of the remaining part. This results in a lot of pointer arithmetic and is error-prone. StringZilla provides a convenient partition function, which returns a tuple of three string views, making the code cleaner.

auto parts = haystack.partition(':'); // Matching a character
auto [before, match, after] = haystack.partition(':'); // Structure unpacking
auto [before, match, after] = haystack.partition(char_set(":;")); // Character-set argument
auto [before, match, after] = haystack.partition(" : "); // String argument
auto [before, match, after] = haystack.rpartition(sz::whitespaces); // Split around the last whitespace

Combining those with the split function, one can easily parse a CSV file or HTTP headers.

for (auto line : haystack.split("\r\n")) {
    auto [key, _, value] = line.partition(':');
    headers[key.strip()] = value.strip();
}

Some other extensions are not present in the Python standard library either. Let's go through the C++ functionality category by category.

Some of the StringZilla interfaces are not available even Python's native str class. Here is a sneak peek of the most useful ones.

text.hash(); // -> 64 bit unsigned integer 
text.ssize(); // -> 64 bit signed length to avoid `static_cast<std::ssize_t>(text.size())`
text.contains_only(" \w\t"); // == text.find_first_not_of(char_set(" \w\t")) == npos;
text.contains(sz::whitespaces); // == text.find(char_set(sz::whitespaces)) != npos;

// Simpler slicing than `substr`
text.front(10); // -> sz::string_view
text.back(10); // -> sz::string_view

// Safe variants, which clamp the range into the string bounds
using sz::string::cap;
text.front(10, cap) == text.front(std::min(10, text.size()));
text.back(10, cap) == text.back(std::min(10, text.size()));

// Character set filtering
text.lstrip(sz::whitespaces).rstrip(sz::newlines); // like Python
text.front(sz::whitespaces); // all leading whitespaces
text.back(sz::digits); // all numerical symbols forming the suffix

// Incremental construction
using sz::string::unchecked;
text.push_back('x'); // no surprises here
text.push_back('x', unchecked); // no bounds checking, Rust style
text.try_push_back('x'); // returns `false` if the string is full and the allocation failed

sz::concatenate(text, "@", domain, ".", tld); // No allocations

Splits and Ranges

One of the most common use cases is to split a string into a collection of substrings. Which would often result in StackOverflow lookups and snippets like the one below.

std::vector<std::string> lines = split(haystack, "\r\n"); // string delimiter
std::vector<std::string> words = split(lines, ' '); // character delimiter

Those allocate memory for each string and the temporary vectors. Each allocation can be orders of magnitude more expensive, than even serial for-loop over characters. To avoid those, StringZilla provides lazily-evaluated ranges, compatible with the Range-v3 library.

for (auto line : haystack.split("\r\n"))
    for (auto word : line.split(char_set(" \w\t.,;:!?")))
        std::cout << word << std::endl;

Each of those is available in reverse order as well. It also allows interleaving matches, if you want both inclusions of xx in xxx. Debugging pointer offsets is not a pleasant exercise, so keep the following functions in mind.

  • haystack.[r]find_all(needle, interleaving)
  • haystack.[r]find_all(char_set(""))
  • haystack.[r]split(needle)
  • haystack.[r]split(char_set(""))

For $N$ matches the split functions will report $N+1$ matches, potentially including empty strings. Ranges have a few convenience methods as well:

range.size(); // -> std::size_t
range.empty(); // -> bool
range.template to<std::set<std::sting>>(); 
range.template to<std::vector<std::sting_view>>(); 

Concatenating Strings without Allocations

Another common string operation is concatenation. The STL provides std::string::operator+ and std::string::append, but those are not very efficient, if multiple invocations are performed.

std::string name, domain, tld;
auto email = name + "@" + domain + "." + tld; // 4 allocations

The efficient approach would be to pre-allocate the memory and copy the strings into it.

std::string email;
email.reserve(name.size() + domain.size() + tld.size() + 2);
email.append(name), email.append("@"), email.append(domain), email.append("."), email.append(tld);

That's mouthful and error-prone. StringZilla provides a more convenient concatenate function, which takes a variadic number of arguments. It also overrides the operator| to concatenate strings lazily, without any allocations.

auto email = sz::concatenate(name, "@", domain, ".", tld);   // 0 allocations
auto email = name | "@" | domain | "." | tld;                // 0 allocations
sz::string email = name | "@" | domain | "." | tld;          // 1 allocations

Random Generation

Software developers often need to generate random strings for testing purposes. The STL provides std::generate and std::random_device, that can be used with StringZilla.

sz::string random_string(std::size_t length, char const *alphabet, std::size_t cardinality) {
    sz::string result(length, '\0');
    static std::random_device seed_source; // Too expensive to construct every time
    std::mt19937 generator(seed_source());
    std::uniform_int_distribution<std::size_t> distribution(0, cardinality);
    std::generate(result.begin(), result.end(), [&]() { return alphabet[distribution(generator)]; });
    return result;
}

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

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

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

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

Levenshtein Edit Distance and Alignment Scores

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

std::int8_t costs[256][256]; // Substitution costs matrix
sz::alignment_score(first, second, costs[, gap_score[, allocator]) -> std::ptrdiff_t;

Sorting in C and C++

LibC provides qsort and STL provides std::sort. Both have their quarks. The LibC standard has no way to pass a context to the comparison function, that's only possible with platform-specific extensions. Those have different arguments order on every OS.

// Linux: https://linux.die.net/man/3/qsort_r
void qsort_r(void *elements, size_t count, size_t element_width, 
    int (*compare)(void const *left, void const *right, void *context),
    void *context);
// MacOS and FreeBSD: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/qsort_r.3.html
void qsort_r(void *elements, size_t count, size_t element_width, 
    void *context,
    int (*compare)(void *context, void const *left, void const *right));
// Windows conflicts with ISO `qsort_s`: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/qsort-s?view=msvc-170
void qsort_s(id *elements, size_t count, size_t element_width, 
    int (*compare)(void *context, void const *left, void const *right),
    void *context);

C++ generic algorithm is not perfect either. There is no guarantee in the standard that std::sort won't allocate any memory. If you are running on embedded, in real-time or on 100+ CPU cores per node, you may want to avoid that. StringZilla doesn't solve the general case, but hopes to improve the performance for strings. Use sz_sort, or the high-level sz::sorted_order, which can be used sort any collection of elements convertible to sz::string_view.

std::vector<std::string> data({"c", "b", "a"});
std::vector<std::size_t> order = sz::sorted_order(data); //< Simple shortcut

// Or, taking care of memory allocation:
sz::sorted_order(data.begin(), data.end(), order.data(), [](auto const &x) -> sz::string_view { return x; });

Standard C++ Containers with String Keys

The C++ Standard Templates Library provides several associative containers, often used with string keys.

std::map<std::string, int, std::less<std::string>> sorted_words;
std::unordered_map<std::string, int, std::hash<std::string>, std::equal_to<std::string>> words;

The performance of those containers is often limited by the performance of the string keys, especially on reads. StringZilla can be used to accelerate containers with std::string keys, by overriding the default comparator and hash functions.

std::map<std::string, int, sz::string_view_less> sorted_words;
std::unordered_map<std::string, int, sz::string_view_hash, sz::string_view_equal_to> words;

Alternatively, a better approach would be to use the sz::string class as a key. The right hash function and comparator would be automatically selected and the performance gains would be more noticeable if the keys are short.

std::map<sz::string, int> sorted_words;
std::unordered_map<sz::string, int> words;

Compilation Settings and Debugging

SZ_DEBUG:

For maximal performance, the C library does not perform any bounds checking in Release builds. In C++, bounds checking happens only in places where the STL std::string would do it. If you want to enable more aggressive bounds-checking, define SZ_DEBUG before including the header. If not explicitly set, it will be inferred from the build type.

SZ_USE_X86_AVX512, SZ_USE_X86_AVX2, SZ_USE_ARM_NEON:

One can explicitly disable certain families of SIMD instructions for compatibility purposes. Default values are inferred at compile time.

SZ_DYNAMIC_DISPATCH:

By default, StringZilla is a header-only library. But if you are running on different generations of devices, it makes sense to pre-compile the library for all supported generations at once, and dispatch at runtime. This flag does just that and is used to produce the stringzilla.so shared library, as well as the Python bindings.

SZ_USE_MISALIGNED_LOADS:

By default, StringZilla avoids misaligned loads. If supported, it replaces many byte-level operations with word-level ones. Going from char-like types to uint64_t-like ones can significantly accelerate the serial (SWAR) backend. So consider enabling it if you are building for some embedded device.

SZ_AVOID_LIBC:

When using the C header-only library one can disable the use of LibC. This may affect the type resolution system on obscure hardware platforms.

SZ_AVOID_STL:

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

STRINGZILLA_BUILD_SHARED, STRINGZILLA_BUILD_TEST, STRINGZILLA_BUILD_BENCHMARK, STRINGZILLA_TARGET_ARCH for CMake users:

When compiling the tests and benchmarks, you can explicitly set the target hardware architecture. It's synonymous to GCC's -march flag and is used to enable/disable the appropriate instruction sets. You can also disable the shared library build, if you don't need it.

Quick Start: Rust 🦀

StringZilla is available as a Rust crate. It currently covers only the most basic functionality, but is planned to be extended to cover the full C++ API.

let my_string: String = String::from("Hello, world!");
let my_str = my_string.as_str();
let my_cow_str = Cow::from(&my_string);

// Use the generic function with a String
assert_eq!(my_string.sz_find("world"), Some(7));
assert_eq!(my_string.sz_rfind("world"), Some(7));
assert_eq!(my_string.sz_find_char_from("world"), Some(2));
assert_eq!(my_string.sz_rfind_char_from("world"), Some(11));
assert_eq!(my_string.sz_find_char_not_from("world"), Some(0));
assert_eq!(my_string.sz_rfind_char_not_from("world"), Some(12));

// Same works for &str and Cow<'_, str>
assert_eq!(my_str.sz_find("world"), Some(7));
assert_eq!(my_cow_str.as_ref().sz_find("world"), Some(7));

Quick Start: Swift 🍏

StringZilla is available as a Swift package. It currently covers only the most basic functionality, but is planned to be extended to cover the full C++ API.

var s = "Hello, world! Welcome to StringZilla. 👋"
s[s.findFirst(substring: "world")!...] // "world! Welcome to StringZilla. 👋")    
s[s.findLast(substring: "o")!...] // "o StringZilla. 👋")
s[s.findFirst(characterFrom: "aeiou")!...] // "ello, world! Welcome to StringZilla. 👋")
s[s.findLast(characterFrom: "aeiou")!...] // "a. 👋")
s[s.findFirst(characterNotFrom: "aeiou")!...] // "Hello, world! Welcome to StringZilla. 👋"
s.editDistance(from: "Hello, world!")! // 29

Algorithms & Design Decisions 📚

StringZilla aims to optimize some of the slowest string operations. Some popular operations, however, like equality comparisons and relative order checking, almost always complete on some of the very first bytes in either string. In such operations vectorization is almost useless, unless huge and very similar strings are considered. StringZilla implements those operations as well, but won't result in substantial speedups.

Exact Substring Search

Substring search algorithms are generally divided into: comparison-based, automaton-based, and bit-parallel. Different families are effective for different alphabet sizes and needle lengths. The more operations are needed per-character - the more effective SIMD would be. The longer the needle - the more effective the skip-tables are. StringZilla uses different exact substring search algorithms for different needle lengths and backends:

  • When no SIMD is available - SWAR (SIMD Within A Register) algorithms are used on 64-bit words.
  • Boyer-Moore-Horspool (BMH) algorithm with Raita heuristic variation for longer needles.
  • SIMD algorithms are randomized to look at different parts of the needle.

On very short needles, especially 1-4 characters long, brute force with SIMD is the fastest solution. On mid-length needles, bit-parallel algorithms are effective, as the character masks fit into 32-bit or 64-bit words. Either way, if the needle is under 64-bytes long, on haystack traversal we will still fetch every CPU cache line. So the only way to improve performance is to reduce the number of comparisons. The snippet below shows how StringZilla accomplishes that for needles of length two.

https://github.com/ashvardanian/StringZilla/blob/266c01710dddf71fc44800f36c2f992ca9735f87/include/stringzilla/stringzilla.h#L1585-L1637

Going beyond that, to long needles, Boyer-Moore (BM) and its variants are often the best choice. It has two tables: the good-suffix shift and the bad-character shift. Common choice is to use the simplified BMH algorithm, which only uses the bad-character shift table, reducing the pre-processing time. We do the same for mid-length needles up to 256 bytes long. That way the stack-allocated shift table remains small.

https://github.com/ashvardanian/StringZilla/blob/46e957cd4f9ecd4945318dd3c48783dd11323f37/include/stringzilla/stringzilla.h#L1774-L1825

In the C++ Standards Library, the std::string::find function uses the BMH algorithm with Raita's heuristic. Before comparing the entire string, it matches the first, last, and the middle character. Very practical, but can be slow for repetitive characters. Both SWAR and SIMD backends of StringZilla have a cheap pre-processing step, where we locate unique characters. This makes the library a lot more practical when dealing with non-English corpora.

https://github.com/ashvardanian/StringZilla/blob/46e957cd4f9ecd4945318dd3c48783dd11323f37/include/stringzilla/stringzilla.h#L1398-L1431

All those, still, have $O(hn)$ worst case complexity. To guarantee $O(h)$ worst case time complexity, the Apostolico-Giancarlo (AG) algorithm adds an additional skip-table. Preprocessing phase is $O(n+sigma)$ in time and space. On traversal, performs from $(h/n)$ to $(3h/2)$ comparisons. It however, isn't practical on modern CPUs. A simpler idea, the Galil-rule might be a more relevant optimizations, if many matches must be found.

Other algorithms previously considered and deprecated:

  • Apostolico-Giancarlo algorithm for longer needles. Control-flow is too complex for efficient vectorization.
  • Shift-Or-based Bitap algorithm for short needles. Slower than SWAR.
  • Horspool-style bad-character check in SIMD backends. Effective only for very long needles, and very uneven character distributions between the needle and the haystack. Faster "character-in-set" check needed to generalize.

§ Reading materials. Exact String Matching Algorithms in Java. SIMD-friendly algorithms for substring searching.

Levenshtein Edit Distance

Levenshtein distance is the best known edit-distance for strings, that checks, how many insertions, deletions, and substitutions are needed to transform one string to another. It's extensively used in approximate string-matching, spell-checking, and bioinformatics.

The computational cost of the Levenshtein distance is $O(n * m)$, where $n$ and $m$ are the lengths of the string arguments. To compute that, the naive approach requires $O(n * m)$ space to store the "Levenshtein matrix", the bottom-right corner of which will contain the Levenshtein distance. The algorithm producing the matrix has been simultaneously studied/discovered by the Soviet mathematicians Vladimir Levenshtein in 1965, Taras Vintsyuk in 1968, and American computer scientists - Robert Wagner, David Sankoff, Michael J. Fischer in the following years. Several optimizations are known:

  1. Space Optimization: The matrix can be computed in $O(min(n,m))$ space, by only storing the last two rows of the matrix.
  2. Divide and Conquer: Hirschberg's algorithm can be applied to decompose the computation into subtasks.
  3. Automata: Levenshtein automata can be effective, if one of the strings doesn't change, and is a subject to many comparisons.
  4. Shift-Or: Bit-parallel algorithms transpose the matrix into a bit-matrix, and perform bitwise operations on it.

The last approach is quite powerful and performant, and is used by the great RapidFuzz library. It's less known, than the others, derived from the Baeza-Yates-Gonnet algorithm, extended to bounded edit-distance search by Manber and Wu in 1990s, and further extended by Gene Myers in 1999 and Heikki Hyyro between 2002 and 2004.

StringZilla introduces a different approach, extensively used in Unum's internal combinatorial optimization libraries. The approach doesn't change the number of trivial operations, but performs them in a different order, removing the data dependency, that occurs when computing the insertion costs. This results in much better vectorization for intra-core parallelism and potentially multi-core evaluation of a single request.

Next design goals:

  • Generalize fast traversals to rectangular matrices.
  • Port x86 AVX-512 solution to Arm NEON.

§ Reading materials. Faster Levenshtein Distances with a SIMD-friendly Traversal Order.

Needleman-Wunsch Alignment Score for Bioinformatics

The field of bioinformatics studies various representations of biological structures. The "primary" representations are generally strings over sparse alphabets:

  • DNA sequences, where the alphabet is {A, C, G, T}, ranging from ~100 characters for short reads to 3 billion for the human genome.
  • RNA sequences, where the alphabet is {A, C, G, U}, ranging from ~50 characters for tRNA to thousands for mRNA.
  • Proteins, where the alphabet is made of 22 amino acids, ranging from 2 characters for dipeptide to 35,000 for Titin, the longest protein.

The shorter the representation, the more often researchers may want to use custom substitution matrices. Meaning that the cost of a substitution between two characters may not be the same for all pairs.

StringZilla adapts the fairly efficient two-row Wagner-Fisher algorithm as a baseline serial implementation of the Needleman-Wunsch score. It supports arbitrary alphabets up to 256 characters, and can be used with either BLOSUM, PAM, or other substitution matrices. It also uses SIMD for hardware acceleration of the substitution lookups. This however, does not yet break the data-dependency for insertion costs, where 80% of the time is wasted. With that solved, the SIMD implementation will become 5x faster than the serial one.

Random Generation

Generating random strings from different alphabets is a very common operation. StringZilla accepts an arbitrary Pseudorandom Number Generator to produce noise, and an array of characters to sample from. Sampling is optimized to avoid integer division, a costly operation on modern CPUs. For that a 768-byte long lookup table is used to perform 2 lookups, 1 multiplication, 2 shifts, and 2 accumulations.

https://github.com/ashvardanian/StringZilla/blob/266c01710dddf71fc44800f36c2f992ca9735f87/include/stringzilla/stringzilla.h#L2490-L2533

Sorting

For lexicographic sorting of strings, StringZilla uses a "hybrid-hybrid" approach with $O(n * log(n))$ and.

  1. Radix sort for first bytes exported into a continuous buffer for locality.
  2. IntroSort on partially ordered chunks to balance efficiency and worst-case performance.
    1. IntroSort begins with a QuickSort.
    2. If the recursion depth exceeds a certain threshold, it switches to a HeapSort.

Next design goals:

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

Hashing

[!WARNING] Hash functions are not cryptographically safe and are currently under active development. They may change in future minor releases.

Choosing the right hashing algorithm for your application can be crucial from both performance and security standpoint. In StringZilla a 64-bit rolling hash function is reused for both string hashes and substring hashes, Rabin-style fingerprints. Rolling hashes take the same amount of time to compute hashes with different window sizes, and are fast to update. Those are not however perfect hashes, and collisions are frequent. StringZilla attempts to use SIMD, but the performance is not yet satisfactory. On Intel Sapphire Rapids, the following numbers can be expected for N-way parallel variants.

  • 4-way AVX2 throughput with 64-bit integer multiplication (no native support): 0.28 GB/s.
  • 4-way AVX2 throughput with 32-bit integer multiplication: 0.54 GB/s.
  • 4-way AVX-512DQ throughput with 64-bit integer multiplication: 0.46 GB/s.
  • 4-way AVX-512 throughput with 32-bit integer multiplication: 0.58 GB/s.
  • 8-way AVX-512 throughput with 32-bit integer multiplication: 0.11 GB/s.

Next design goals:

  • Try gear-hash and other rolling approaches.

Why not CRC32?

Cyclic Redundancy Check 32 is one of the most commonly used hash functions in Computer Science. It has in-hardware support on both x86 and Arm, for both 8-bit, 16-bit, 32-bit, and 64-bit words. The 0x1EDC6F41 polynomial is used in iSCSI, Btrfs, ext4, and the 0x04C11DB7 in SATA, Ethernet, Zlib, PNG. In case of Arm more than one polynomial is supported. It is, however, somewhat limiting for Big Data usecases, which often have to deal with more than 4 Billion strings, making collisions unavoidable. Moreover, the existing SIMD approaches are tricky, combining general purpose computations with specialized instructions, to utilize more silicon in every cycle.

§ Reading materials. Comprehensive derivation of approaches Faster computation for 4 KB buffers on x86 Comparing different lookup tables Great open-source implementations. By Peter Cawley By Stephan Brumme

Other Modern Alternatives

MurmurHash from 2008 by Austin Appleby is one of the best known non-cryptographic hashes. It has a very short implementation and is capable of producing 32-bit and 128-bit hashes. The CityHash from 2011 by Google and the xxHash improve on that, better leveraging the super-scalar nature of modern CPUs and producing 64-bit and 128-bit hashes.

Neither of those functions are cryptographic, unlike MD5, SHA, and BLAKE algorithms. Most of cryptographic hashes are based on the Merkle-Damgård construction, and aren't resistant to the length-extension attacks. Current state of the Art, might be the BLAKE3 algorithm. It's resistant to a broad range of attacks, can process 2 bytes per CPU cycle, and comes with a very optimized official implementation for C and Rust. It has the same 128-bit security level as the BLAKE2, and achieves its performance gains by reducing the number of mixing rounds, and processing data in 1 KiB chunks, which is great for longer strings, but may result in poor performance on short ones.

All mentioned libraries have undergone extensive testing and are considered production-ready. They can definitely accelerate your application, but so may the downstream mixer. For instance, when a hash-table is constructed, the hashes are further shrunk to address table buckets. If the mixer looses entropy, the performance gains from the hash function may be lost. An example would be power-of-two modulo, which is a common mixer, but is known to be weak. One alternative would be the fastrange by Daniel Lemire. Another one is the Fibonacci hash trick using the Golden Ratio, also used in StringZilla.

Unicode, UTF-8, and Wide Characters

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

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

Contributing 👾

Please check out the contributing guide for more details on how to setup the development environment and contribute to this project. If you like this project, you may also enjoy USearch, UCall, UForm, and SimSIMD. 🤗

License 📜

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

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

Uploaded CPython 3.12 Windows ARM64

stringzilla-3.3.0-cp312-cp312-win_amd64.whl (59.6 kB view details)

Uploaded CPython 3.12 Windows x86-64

stringzilla-3.3.0-cp312-cp312-win32.whl (56.1 kB view details)

Uploaded CPython 3.12 Windows x86

stringzilla-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl (225.8 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

stringzilla-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl (164.3 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

stringzilla-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl (163.4 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ s390x

stringzilla-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl (194.1 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.0-cp312-cp312-musllinux_1_1_i686.whl (182.7 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

stringzilla-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (229.0 kB view details)

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

stringzilla-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (161.9 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

stringzilla-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (186.5 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (167.2 kB view details)

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

stringzilla-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (172.8 kB view details)

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

stringzilla-3.3.0-cp312-cp312-macosx_11_0_arm64.whl (61.5 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

stringzilla-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl (64.0 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

stringzilla-3.3.0-cp312-cp312-macosx_10_9_universal2.whl (96.4 kB view details)

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

stringzilla-3.3.0-cp311-cp311-win_arm64.whl (54.5 kB view details)

Uploaded CPython 3.11 Windows ARM64

stringzilla-3.3.0-cp311-cp311-win_amd64.whl (59.6 kB view details)

Uploaded CPython 3.11 Windows x86-64

stringzilla-3.3.0-cp311-cp311-win32.whl (56.0 kB view details)

Uploaded CPython 3.11 Windows x86

stringzilla-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl (225.5 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

stringzilla-3.3.0-cp311-cp311-musllinux_1_2_aarch64.whl (164.0 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

stringzilla-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl (163.3 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ s390x

stringzilla-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl (194.0 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.0-cp311-cp311-musllinux_1_1_i686.whl (182.6 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

stringzilla-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (228.2 kB view details)

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

stringzilla-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (161.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

stringzilla-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (186.1 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (166.7 kB view details)

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

stringzilla-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (172.5 kB view details)

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

stringzilla-3.3.0-cp311-cp311-macosx_11_0_arm64.whl (61.4 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

stringzilla-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl (64.0 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

stringzilla-3.3.0-cp311-cp311-macosx_10_9_universal2.whl (96.3 kB view details)

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

stringzilla-3.3.0-cp310-cp310-win_arm64.whl (53.4 kB view details)

Uploaded CPython 3.10 Windows ARM64

stringzilla-3.3.0-cp310-cp310-win_amd64.whl (58.2 kB view details)

Uploaded CPython 3.10 Windows x86-64

stringzilla-3.3.0-cp310-cp310-win32.whl (56.0 kB view details)

Uploaded CPython 3.10 Windows x86

stringzilla-3.3.0-cp310-cp310-musllinux_1_2_x86_64.whl (224.6 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

stringzilla-3.3.0-cp310-cp310-musllinux_1_2_aarch64.whl (163.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

stringzilla-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl (161.1 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ s390x

stringzilla-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl (191.9 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.0-cp310-cp310-musllinux_1_1_i686.whl (180.3 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

stringzilla-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (227.3 kB view details)

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

stringzilla-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (160.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

stringzilla-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (184.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (165.7 kB view details)

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

stringzilla-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (171.4 kB view details)

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

stringzilla-3.3.0-cp310-cp310-macosx_11_0_arm64.whl (61.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

stringzilla-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl (64.0 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

stringzilla-3.3.0-cp310-cp310-macosx_10_9_universal2.whl (96.3 kB view details)

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

stringzilla-3.3.0-cp39-cp39-win_arm64.whl (54.5 kB view details)

Uploaded CPython 3.9 Windows ARM64

stringzilla-3.3.0-cp39-cp39-win_amd64.whl (59.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

stringzilla-3.3.0-cp39-cp39-win32.whl (56.1 kB view details)

Uploaded CPython 3.9 Windows x86

stringzilla-3.3.0-cp39-cp39-musllinux_1_2_x86_64.whl (223.9 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

stringzilla-3.3.0-cp39-cp39-musllinux_1_2_aarch64.whl (162.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

stringzilla-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl (159.8 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ s390x

stringzilla-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl (190.6 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.0-cp39-cp39-musllinux_1_1_i686.whl (179.0 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

stringzilla-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (226.7 kB view details)

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

stringzilla-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (158.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

stringzilla-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (183.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (164.9 kB view details)

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

stringzilla-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (170.1 kB view details)

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

stringzilla-3.3.0-cp39-cp39-macosx_11_0_arm64.whl (61.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

stringzilla-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl (64.0 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

stringzilla-3.3.0-cp39-cp39-macosx_10_9_universal2.whl (96.3 kB view details)

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

stringzilla-3.3.0-cp38-cp38-win_amd64.whl (58.2 kB view details)

Uploaded CPython 3.8 Windows x86-64

stringzilla-3.3.0-cp38-cp38-win32.whl (56.1 kB view details)

Uploaded CPython 3.8 Windows x86

stringzilla-3.3.0-cp38-cp38-musllinux_1_2_x86_64.whl (222.8 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

stringzilla-3.3.0-cp38-cp38-musllinux_1_2_aarch64.whl (161.0 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

stringzilla-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl (159.4 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ s390x

stringzilla-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl (190.4 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ ppc64le

stringzilla-3.3.0-cp38-cp38-musllinux_1_1_i686.whl (178.8 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

stringzilla-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (225.6 kB view details)

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

stringzilla-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (157.4 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

stringzilla-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (182.4 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (163.5 kB view details)

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

stringzilla-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (168.8 kB view details)

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

stringzilla-3.3.0-cp38-cp38-macosx_11_0_arm64.whl (61.4 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

stringzilla-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl (64.0 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

stringzilla-3.3.0-cp38-cp38-macosx_10_9_universal2.whl (96.3 kB view details)

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

stringzilla-3.3.0-cp37-cp37m-win_amd64.whl (58.2 kB view details)

Uploaded CPython 3.7m Windows x86-64

stringzilla-3.3.0-cp37-cp37m-win32.whl (56.0 kB view details)

Uploaded CPython 3.7m Windows x86

stringzilla-3.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl (221.5 kB view details)

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

stringzilla-3.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl (159.0 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.2+ ARM64

stringzilla-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl (158.8 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ s390x

stringzilla-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl (189.8 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ ppc64le

stringzilla-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl (178.4 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

stringzilla-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (224.5 kB view details)

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

stringzilla-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (155.8 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

stringzilla-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (180.9 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (161.4 kB view details)

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

stringzilla-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (167.2 kB view details)

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

stringzilla-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl (63.9 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

stringzilla-3.3.0-cp36-cp36m-win_amd64.whl (58.1 kB view details)

Uploaded CPython 3.6m Windows x86-64

stringzilla-3.3.0-cp36-cp36m-win32.whl (56.0 kB view details)

Uploaded CPython 3.6m Windows x86

stringzilla-3.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl (221.6 kB view details)

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

stringzilla-3.3.0-cp36-cp36m-musllinux_1_2_aarch64.whl (159.3 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.2+ ARM64

stringzilla-3.3.0-cp36-cp36m-musllinux_1_1_s390x.whl (158.2 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ s390x

stringzilla-3.3.0-cp36-cp36m-musllinux_1_1_ppc64le.whl (189.5 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ ppc64le

stringzilla-3.3.0-cp36-cp36m-musllinux_1_1_i686.whl (177.8 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

stringzilla-3.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (224.5 kB view details)

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

stringzilla-3.3.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl (156.0 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ s390x

stringzilla-3.3.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (181.0 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ppc64le

stringzilla-3.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (161.5 kB view details)

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

stringzilla-3.3.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (167.1 kB view details)

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

stringzilla-3.3.0-cp36-cp36m-macosx_10_9_x86_64.whl (63.7 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 c062c8d14b483947383b254f0399a313e3b4d827764ac4a220e707c3f5622434
MD5 0e80d38a1000a2d07f91579c2017ed2b
BLAKE2b-256 5b1f2612e45a7f429a7994f11daae7ca81ec4d3bc55931560410749f595fb851

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6e2f66adb4764fe5066ae4439d8f74882a58c0aa86b692c08fa3b376a5ebb40b
MD5 2f546b9520916663e2fa00d0a413151d
BLAKE2b-256 4de1eae2a3fc5b28086278079226b2f5e73ab29b80f6ce903aa4c4c0014ae040

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 56.1 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.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 4b608960a1d2b468ef7cda5cb7e180c36591fd332268af6c87124478cd888a7b
MD5 519911c027e7b665529fd8659e28617a
BLAKE2b-256 7c165f0c510a4925d1e3d97c7081159426cadbcaa41518a95eb79169465a35fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 56df91d8fcaddc9ddde8cdc9571038d3f757592c7223d7db938cfb6e662e4bac
MD5 49b674474f08324c772bde09e5defc1b
BLAKE2b-256 b10e6b0a70e5ddf26e88abfa39ce9714ba8c1282931cb04e512afbdcba492112

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e87d839016430bd050dc49f8eb482064f3d602fe95545d6809070a7184094161
MD5 36a2c2c9973c4639a922e60670bc16c7
BLAKE2b-256 e9c088ddce7019879ea5946be7899469d424cd3e486873721feec3cd3db62297

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 46470e74f19d793a555e653203455b80b2be17c4d94be0cdb7bc0fb740899ca8
MD5 02d00e6502a9c5ba5adb3a47d0334e9b
BLAKE2b-256 751139894b9fbac6a009e603f8bfef956d8d352122035e05e7317aaf6c5318fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 c63142b859f01abb2e54095ded71b547bc8f89e2a7a43e0e6f720707d9e6d8b0
MD5 82ceee1ce54ca7b331af869a86de4d31
BLAKE2b-256 5181fca14ad725e5d6f11e6d278b47d4076850fb72fc3b96ef2e88ab6d7f0d81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 8ada2e861ef7d120c1d98b2d50921d009a6d298a496c8c5d5c51630ce9eaa68c
MD5 f8d61a4051be4fb70fade9e4554c0715
BLAKE2b-256 1d6daafb67839ad2cd0599bd3d70f4cb410125e9520d84de542ad37849afbcda

See more details on using hashes here.

File details

Details for the file stringzilla-3.3.0-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.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9ca870b3e69e6f8b183bce9f1a634fbfae7b16112043f984df27974c4d138cfc
MD5 dc087b31337931565fa0636716b0673b
BLAKE2b-256 e1202cb70df64cd043731734ce39e6e9190f522967ed95b7cd3d0bed579a8745

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 f1d2ec1dd2c140e839701cd631784b239751bdccb1f6a8a7625b37cdf2117d20
MD5 47e3f5b615da9ef8543ee6e5b29a083b
BLAKE2b-256 19686ef1a769a8e511d283387d5b6f67f72f10cf7ae6e9698d92c279175cfc33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 e8bf0fccd9a1cbf6a1083dbff25301afc7f91763a61e30fca1a51b2c22a087c3
MD5 d8c31db0deb861595b444ff287a2191d
BLAKE2b-256 f3b473ebbec54e2d47dd970ea56301fa82356a4f48b5b0ae434e04689a41cc91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d90fe2f3a6bc03bad16033ce8b9f3e5286570447302652141d5254c53ac2930b
MD5 101ceae927b18a673ea652979260583b
BLAKE2b-256 390dfd4b90def32f84cdc99d9d8ca85ea9dea933f438a5e24a851e9cdfe9c5e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 df61ac5d6c96de26b1a349cb7802dff52389d6ce644df8ed7ea03dd283c730de
MD5 27110ae71a7442891590e1fdb48ba82c
BLAKE2b-256 9f3b9525ee31509cae6d7b120f5292f30c250e143cbd2945978869caa757d958

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9b6ba27285ead3d9aeb251e6fe09e1ed6e0689ce752e6bed495c0b6685996be
MD5 3c334f7e85fee8df71ab3a601d77cb5d
BLAKE2b-256 fd3d7f1f9221a919ee76fb044ef4df674eecf167fe5d5934d7088d28fb931f74

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3776f466767995357dedb6fab87e22ba5bb06fc26dd2b57ea3aa646708997f08
MD5 b5a249ac9422b27b156e12456593a99b
BLAKE2b-256 0c6cf4131190af21a982d87d86e2482eab844049715891825ffbcb53a9269852

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 bd494e0e5345644138d3a4212b37cd834aabe693dcbe4b00a946475c70427e9c
MD5 e4fc6ad6709fd10bc51963eb25ce7ad4
BLAKE2b-256 3c7cc90a8d975c5d004a9bf4a2b15c0ee9561c9ca97578a7f6c2a48fb619361c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 f30da2ff75b3f64a6a192ba8e4ff8b09fead3c8ce9a7402d12ee030e14575b66
MD5 3ef29a9eb79b20deb64b1309fcab30ca
BLAKE2b-256 d98fb38137fe44173f19af8691adf287245bbdb229a0bfca9e0e7e51e9da99cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e47a9a6425265d60d533f43236bf174c5a7d5b2e339badbe684ca646f0207481
MD5 dd956a7c58ffc51d92c8e7d8da200a78
BLAKE2b-256 5909fb04a5012884205fc1b9bf41dfcb3b7a81003f4b6d1a6fcc7d5db8d421c3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 56.0 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.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 429cea8cb55e4510d2247cf44385ae847bada565321e488e4c43586a195aa588
MD5 171eff694abb203d40fe1c5a0f3aeba1
BLAKE2b-256 b14429a1be1f62ce1c17e979c715bfeec73e7d7d0fcd364766c8f53baad11a99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7f90e75fa99ad900a505c0a1e39786d6dc78c159e11ee0382d28b707eda7880f
MD5 0f1b34968c8485b030e1444a73f58d4f
BLAKE2b-256 e6cf3dd4c84c254ca00157db706997bfe89827e9c436a6e391cd008a4cd3264b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0eb79495ca00fc64e43d4b053951e457810d507cab67a36ae86f855830d0df16
MD5 9e24ef76e8bd3d8d9e1237f9a9e69856
BLAKE2b-256 fc807760da033d07df91108ee6c7ca8ed55d8875a88bec4f87f94cab999c3089

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 ef05914135fa2fbc73d07010e1bbabc75032fe65ffbe4f2af65849c63f3141da
MD5 375b6e3f81eecca5069e7a733e8431c2
BLAKE2b-256 de3dc90a9a436aa0b00f329513e9d9bb92f5f7be5b2ead65a1d7773a1900b8e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 f57447b26a62eae3680eb7cce52d75c3e9e2360c5e22a69c11321d8a04928cc6
MD5 04f57f114ed5e836d02a252b6e892725
BLAKE2b-256 946ebec17cb6b9025a3490ef642c78e2c5adb195477105b69fb9d64ea798b1fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 4f15e1c41d7e68c3c055f612b9e91f9e05c22829980cb6eae496038b742f1ae6
MD5 0388830b01327510bfaa9f54ae15f941
BLAKE2b-256 825ff9da7b114063b303c4e494cf01db9ae5059bdabf4574dec6b2d41374df12

See more details on using hashes here.

File details

Details for the file stringzilla-3.3.0-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.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 190e99200e40b7979187cd2b2c8c1476e5350ea6198843eb9b33b275d79a3cc7
MD5 74a0aa83a2ec7d17588e22b980143eaf
BLAKE2b-256 33d2fa19c1faf16da780392ebfbe25e222f380dd293fe9345ae8199beea4c108

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 a31642f1ef725a57fe5d4b48fa6b9bf5fdfd74017854111c84db069335de24d2
MD5 f00e195491835eb8114895cc56fee72f
BLAKE2b-256 dd51dc1c0240610421cd38830a17786648e2e0056cd8b0911bd77f091b7c25e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 0a64a2f8ba7888654d142b70aafebbc0417549bc3fe60e26b2086c471f05fad0
MD5 7084d09505307aaecd25f858453a000a
BLAKE2b-256 2d46a52aafd2a541adc02ff93a2c2c5e205d00561c4e3ee4257f8829b7c5acfa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7c5633eb3120a2f08b785610a29eabc1acd378dde9cbab018d5759be01bfafee
MD5 ae3366240dbdf3b5f4f66c51b2a67203
BLAKE2b-256 6562bf7f1fdc9ddb933aa22fa74440afce98f03da264a8765274e309dfeb162d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f2983b4f4c5c518a8deb7b5c6682dc00e499c1c405a7c7b70e8837ffac0264a4
MD5 3f60a4ca00d6c761cd0789b053b1b572
BLAKE2b-256 7a267a2ed14ade321b71ce6b096f6da64d8d9fd90288c9999377cc3cbb64c936

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 13ab05e8ee6f6618a3743850a0865dc16631a187669daa4026637781d576347e
MD5 d987feb43ccb01409b8adcd62aa0e2c9
BLAKE2b-256 5dcafcf27fb589897e74d4d02f14a27af1fcc0b985cf96cbc48a2796b49312d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 def7d7c303ddc4332ac2de6906a5cd1749940673bf84c0c6d49cd61a3a3ccd9e
MD5 dd85318b835ac0e3771999a4f4eeb8b7
BLAKE2b-256 049113dcdbc08a59aa63f77c5591bc6c1d4509433584f33a53ea16459343ca36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 82f654a5093c3bab09357500bcf3c0e71d79e7b2489d282faf6fabbe1c107cc3
MD5 93724e2829edb7aa3cb1ec5d1dae0442
BLAKE2b-256 d586c5a61a06485891163d92768f731b730580c3b91e72d43970dfa0c5473373

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 27194267e206e4681fba0591fab3e3d32c830128dc5f7176e766732f478dd58d
MD5 d3ba89024529c6ebe585c231ba86c9f8
BLAKE2b-256 f5bd0330f1f86f63bbce858bb75bc1bfa02b73999cd0ceeadc883c607b201b8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 566a80943d72f95ed576eee0bfa55c2169422dd26a0e42ce757a08299f61a8d7
MD5 b7d5635362d56d6679f5b54c3f6153b0
BLAKE2b-256 097baf469b20d4ad16c4ae901d4f7c4c4554d452170e88525f0787e22091d1c5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 56.0 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.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 bb6e8766e97c5f6c5b444b19dd2d3dc312458dc67dddeee1e363a544048dace1
MD5 3d34e312200e47437ecb655dc034088d
BLAKE2b-256 de1a70b2958bee4dca6a0a239965198dcd37018445af08dbffc0f632e695d4d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d550801ea9f89a673182a7e745c3507dc8ab33daaadaf72c8a3122f9051fd517
MD5 66ca4e8a9534bc0a5b6b71dbf146692a
BLAKE2b-256 be3b7fc60e8cf9bcbabe76c74a007ac5c3018bc2dc5963e3a0d93f7d1b66374e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 444799b3449a0d7f1568353d20789288a718ff8309bcb68e4d4e374d0c1eaa64
MD5 bb970947166237d34635819c28c83e7c
BLAKE2b-256 234b69a7c70a35cecbe84a84ba6189ba04009dd7063f1ae5f8e3eb4454d955b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 9b853809597605e0f963f8818c2ed38cddbbbbe46092415e978e962fe16d6f21
MD5 c36e4860f85dbe2d11b3f679479ac435
BLAKE2b-256 ef815bf0b595b7f4ccaeee1ab1279de4f7cb98ddba03c25c137e3d5bed3d9c10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 676407a348cbd46e9e9a6bfe284062d4cc7168bc8a2af841591bfef7b3e35e9c
MD5 7dcc79085f4991ee9bbaf053e013f58d
BLAKE2b-256 02fbedbfa52dd23b11d166252df83d8cf58d581478bc6b1bd9ae9b5c8ede65cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b11eb3c77e145f9be8bed6ed24e08329040a49fc2c8e375b3bafa6bf5c931c5d
MD5 c913f1ed9bc9ad03c0e528a009003a14
BLAKE2b-256 3cd3be0fe1126ce9f158d94349145e3771b1265a404913c0a794b7b3acfbaa21

See more details on using hashes here.

File details

Details for the file stringzilla-3.3.0-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.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 85620f07916a1275dca3d37d03f52210d5c3b8ad0bbaf235f2fa25390888e40a
MD5 d5e11159e6ce49350d00d728675e20b0
BLAKE2b-256 8dd1a335561e925b0775a336a826844227261fd12880560dc2921c80db6fbf40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 90a9ccd6656a82d518269bfc82e784ed3075021fd5e8ce333230d7466db19e25
MD5 9740cea863fd8615f8df762c144bb156
BLAKE2b-256 50d5fcac43b7b9b89a8fe375cdcc5d20534f1a09c9f980b187ad2b2eafb16187

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 67128e3cf62cf9f1925c56f7c7b4820ed533708e81a0ffb70afa602a98faee5c
MD5 cf10ad7d3a9a8c43b8ce6aba9f312c72
BLAKE2b-256 20091205d44d9c4e55ae96e3acf57e53170e3b30e0cb86b5bc1eee55d55af237

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 09736b3f6e376c6d63e3eddb61fffd15114e06fc28650e2ffbe40b4f2a83b2a7
MD5 f31fc6f716dd652fafc7e4e2f95b63e4
BLAKE2b-256 95c5d436d03f30819f2fd1a3b77f32054afd03de3ab36dcc619aada07ef474e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fb42bbc94c37af79082ffc4b6c0a3b9c12407414311fd59514efdb5010983f5e
MD5 b67e43b38addad555781d326e949bdbd
BLAKE2b-256 5d744167dd5f1f6eb478d445eb2d96bceafc5cabc5b8722d1da9c43dc6fadcd2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88fefe89dc4a3cd1253352e3825e719272f037419cee5cd75d6c076cd6f8f0a8
MD5 9321cc2e2af7522048234225b008701d
BLAKE2b-256 2df3658834e71f547ef0678f35503ba7c51ee8bd0613a00b6953fa3d39149aa4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5a8d7b773d155befcae241eff67326930661fe8e1c5c175586c484fe2f29a9f7
MD5 64a085d1596f29b8362f8114012f747a
BLAKE2b-256 a10335e4162bfae4bd2f44144c5d720154cc31a57f1f205967ef0707ce2f0045

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 eed514ff7249761658d3052fdb1edf60154de5d154b9741d81dba37658f89ed8
MD5 6adeb0d8c312703bd0f14b1d194967ae
BLAKE2b-256 cb4ef2fd6c53854eb7c5677df538527ea814fc851f189cc5bec6317443caa480

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 a9ada041d9b76bfa10c6fd2c5cf59857a364d5a89b1ba0934b10ffa9a1918ce2
MD5 1bcf9b52cf872606a1e6a6883b5b9b01
BLAKE2b-256 832c0051c9daeed39562e240b396b0603b8be4e180bdac9336885fcb4b564395

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4f75e1fa786aa9a6d9980b4fced60192867dc6ff704dc2a42d43a36d28d12d6f
MD5 79b8589c1b39613edc0583c51bee97d5
BLAKE2b-256 294f5453de89b527836dfe33f9089eb4f6d3d1c97dedb72049f0a794594b43a6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 56.1 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.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 6776741c1b2fe135d393e36271b5a3f6fe55972c21505bd908e51c31511b8312
MD5 1b990cb75936c6bc7c06a422ec3fe454
BLAKE2b-256 ae9a1605b30ca5502dfa399e40e462031d9cead4fd26a178731ccc756c4dd08b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 025147ae358a9e0f7f80f40d4c143e756ad3a28ed52076ec6fd73986eee2eba5
MD5 5c4b6e7e1cbe931ada0029c6d2c6856d
BLAKE2b-256 238747f17b41e163dd31575a77351da1ad955d0307c04f5e5d4f49ca7332bc23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d10e220ead17cdc2c29110c9b2c26075acddd4e857826dcb231b220fd9a60630
MD5 ac1ca4a1db7b1bcb0768bc47bf035c80
BLAKE2b-256 1e4276da4cc162896a3cde89051a47cfb72a3eff4eb622e7b22e98cbf6c4e5a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 20e7afe3fb09641683e241fc5bde1f980086757e66937927b52b1000009a618e
MD5 d1217e4173058d3b33dd97ecc4291075
BLAKE2b-256 2f494fc639355a78611b3cec2f249f8b9151c18c558d1c52dec1180c1c4ba72a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 01554d6568dfc4ab848be2d5880da44eb083d8f2c5b40ac8ab992a1d75711aa6
MD5 6fe3c12c671468e28f2307008ec3d583
BLAKE2b-256 4602fe9f2e355812d89a95042e8c23a9c83069b7143954ff70ad73a336306fb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 467f48a218bb71dc43506137e4cbbc1d837853b065dbd3da5bad036d239eb602
MD5 e56035e972f2cc01b30433f3e887df45
BLAKE2b-256 c3575ec6b2726261ceb87d2e8cac2c55bbbf6316fc2e79009a7aabb8fd9ea787

See more details on using hashes here.

File details

Details for the file stringzilla-3.3.0-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.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 46a692f9d3cee4e4cbfbd6874fd5d065d5cdc053ff6d1dffec54bee87e105263
MD5 e9a260cf7927c6079129635daefd7b0f
BLAKE2b-256 3b7c9ae1d0c2a9423adec6df1ebec3c2c9cbf0a54e6f41c7e7ccb69d1fabe18a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 9098d84f86b9f1b001bc24789ed9d56dc123f6bc3e4eaea3587c9f6c87aeaf39
MD5 86452e3d4587b0ea7ea6f4c280de6187
BLAKE2b-256 83d05d0eca616f8de0dad10b95f9228dec05a19311bb86cb203ba99025630e24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 870616787e1a431c9e76c43db26aba191a7f8ea1aea8d4fd4d3bd07f621692e3
MD5 f4462a8feaf8b092d0d617670937940c
BLAKE2b-256 195330e8df3c4ff374bcff5333246a02b055f5c8e69a9f9fe67c2dad2697d5e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d91f3b93789f24e1664747e48ccae880dd5962a01addbb3826981e669ce477c9
MD5 df8ea021b3655380bed79b391929a056
BLAKE2b-256 201efc7276473799b24b4d4c6968338899a57b9f3cf1919afe8e95a3ab6dc68e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 8b4c3755d94b5ed46e98ae27c7fd4f8d1de1f42dfa0ee91b7bee5027ac0e533d
MD5 f2addd5402b6cfe8cc8fee55e8c64595
BLAKE2b-256 a2654992c4e6d0078d6c423e11e29458636873ce53520e0bdbe710a67cd19306

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 45cebc4bb9d74965c5a4643b433f7d4f06837bd2788ee86302ed38deb1b15dac
MD5 1354ac84048bf202c7daaec56335980a
BLAKE2b-256 1bf83b12a0b82609905833485640e7e43d1e3e96a7bede5585fc063fe684c8ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 26027618968c5d57c7f58e12b877b5e1b677452bd7a34e6fb947ebd8d90d4dba
MD5 4220b1340eadc5b92747a43156223f39
BLAKE2b-256 b60e213d0b73d0597eb0b29d495dfd6492a65c64769e250cb1b0f361313772fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 1f3e0fd2be8a1a4c011f71fbdde4c81d71e31e5add0ea932bee777e7a52c694d
MD5 62296a8ced07e8ebf5624c3471b8cc2d
BLAKE2b-256 2203ff46f04329104cf48c8c4de56c43e68e247ed3b4c9027d75c9d02363c08c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 96b04138c76f1f48e47b7badfe673306a89d9372c1397d52b81a286556b5ed7e
MD5 7cb6323fed0a99f84cdcf48d67de161d
BLAKE2b-256 36ef2b7fb43c5c8f4e7653c445197fa50bda497aa39a7bdfa0d9cf3ea09f044c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 56.1 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.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 f22757352494d0add8a64b23d4da8cda27ce839e58bc8f9c00236a1a36e505b3
MD5 405e97627f03c38b64390ae18709bd39
BLAKE2b-256 9e8cdce2f6742c5fd522c5b4dfebeb68c1e45a4783829b4fa23fdb3b3e1d5d74

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 09331fb88322d9de3245104f102c0243b0d81b94bfa4bdf31ae9570305e2e02e
MD5 d2873d2d86c2e8bd70268ca98a91ca8e
BLAKE2b-256 50aee79938db42aa9d5b83b9c640868c78378a7aa2509e9c029ff62f04fceab4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3006aab480a49d2773491fe9cf46a05f67596aed8a44e830fe415b9794cdef91
MD5 e81288a80362c029294d67571473a721
BLAKE2b-256 21088b1f7f8157076c8cd4367286431b247eeda3c49512023448b67d74fb966c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 fde1a0b2f627e960b0eb4a68f4cb120b83f2f0abd6bd41cdfb4cf0715b7b23b8
MD5 ae42ceb80437239a33f217c38f427b46
BLAKE2b-256 efade098e7d6cbb19f1b9aa943b1294df8c766c30bfed48ac2b60337bcfc8e4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 f80caaf8441c6503126c8ad2c2546da6e650ed4e03c1fc0b4fe844c9c7e5f215
MD5 6bdf759d099d02555ab8a421d063e069
BLAKE2b-256 6be890a788253b0592de3a3f11be88f2c30b5ad71947e65b66e7af6009f71f32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 866d9713e5c829d46e1c56655399513af4f56d752431bf2bc27e929f21c5848e
MD5 f475e696d7e70d8fbffdda88d2ba8c2e
BLAKE2b-256 832f8de5f815ad93c19ee77ac598876918dcb06bee5f42db8acc5ed883399497

See more details on using hashes here.

File details

Details for the file stringzilla-3.3.0-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.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e0b5b725112bbfb3a31de89b7e67272679731bc5b9dfcfe9e120f343645015a1
MD5 9899c38bba8890fc6c7b1ba72402d84a
BLAKE2b-256 76672380166b2b35506f5149a9021445d998f579a1de1d8341b5f46136805dd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 05d8cbf2262b7523872e915d46b9fa03af1067ec1b8d297204b07ead914e2b84
MD5 c4f55084b9282a50eae28363a10a7267
BLAKE2b-256 3c82ed329df9d5f321dd62eb642e7d3af46e5461cb65a61fdb78a5f94aa54626

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 355b22b51267cd1d907cf0f55e066aab4fa3684a4893fd074fd059f8fc7e0e8d
MD5 b54c204e8030937d2ae1770134c6d401
BLAKE2b-256 567daa576b5471955de3f6cd230284a85b6fb1b33f650fa168ddae8d97849f03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 851390c5463f762e154a96ca1c9df8cb4f614bb63c1ec6882511b64717d56014
MD5 30ef281b1a948f141dc7e6c02ca14220
BLAKE2b-256 aeac71a77b5bdf3ac192b6ab3b08f9b27c909c307568181c27c0a21a1b71b122

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d69a52c6b47eeb5ce69b50396e140c001178c45a53669635cb733acca7083d0b
MD5 8d46f62fc67097ceceb43bc01633a3ed
BLAKE2b-256 d72a2ceafa6b63ca1b0711cbbbf1cad5a06c67fa61140b883790876bc928332c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b0475c774628963142f8943823017e664acb362b98df4939871116306b15a000
MD5 805f57beccb25a438cd178398c504a22
BLAKE2b-256 dba9e72d73e21a729457a3e62af482c389843eeb505bc2dfc0dbe7c16255d662

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 398731b4b71ba553869ec05ded8cfa72579e85001c7fe7c1cf814b898b624f32
MD5 09f80d07237592a87179ae80f9762d50
BLAKE2b-256 5fd61c71bfa811760a2f03b71bc05faf77d53a574691333441be42c2940d20a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a0f6de5cde7b226311db6a05f604871326bccd268e0948d2887da33565a68e2a
MD5 14c2e98de238d72f2bfbcdfe59616752
BLAKE2b-256 3aebf3bd9e31e7e5c8959c64a849f3c7c06b19719f16acacf7bec7f3b4212647

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 77e6693a4c624cf7aa228e42afefc580d7f59dabc6ab1ade2666cc21fca5dc68
MD5 b74f33de03468eaa412111bbc4f4fa0d
BLAKE2b-256 7d94db7334640a3bba79b9aed7c15ef1dfb7ed048c03ffb3aeb2ca8f82a16d77

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 56.0 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.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 2ed9a969db1c58e15bf64a26f64ba5eb3c4d4d7278a83106de49f9eae4a9a4f8
MD5 b5c9535483118d8340556d4095e3fdba
BLAKE2b-256 ecf59dcfd98713baeec5e9edab0b91072ef9771c1a411e68f49261c4ebd0e414

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 94041cf7167780062b6b08ca893f3af888d01f95f0065db150d9abaf4b25f95e
MD5 d12713f670642e94a203a466cab56108
BLAKE2b-256 5935b5f60ee3280fc5efcb8adfa82bbde756d267f3ce7548bcabba81bdb4f811

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 af2a11323c1e9feabd2ccd39e1b8f68eddc5ed3785e6af035d3de4d3d07d08ef
MD5 8b7c920fde250a844b5db5e7fdb886a9
BLAKE2b-256 84c78064dcd160d34d14e559a5e2e2e4d9046416b356e10cf36adcdddf1d43ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 13c9c4c52a31bc571ea30ad56c1611bf7b14c9865c1088455eadcc54227c0a35
MD5 150ea1ee54ec09c04845822bdfdfb4f3
BLAKE2b-256 55cd0f37dafe8020e1625fb076308626883589ca320f7712a15a529835d17767

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 629ccabe0684bb552f87fe182b1b91822180863ad928e2c3c05084e0bfbce206
MD5 2b86de1031b1303c27eced80922e5fdd
BLAKE2b-256 934210f015f693fb52b4a5b7df63ff2b76115331fc8a26f825aec42ea09e9775

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 cb07cb2c80887eb7d631887463faf467dc973d85b72e62b8e11beb220c50d6d3
MD5 ad0aaab18e6f62ee97b9b6a6eeee7e0b
BLAKE2b-256 85ce717823eef0527c6a9f46e7a0068f4d941a3cf2ee1f80045f0dcb7ea62134

See more details on using hashes here.

File details

Details for the file stringzilla-3.3.0-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.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 659ec7720a0420bf0e72f06a9a6353afafe6d886e46729ead98cfb51249b8357
MD5 76c8eb5f6c384e53f5e49641b1fea6d6
BLAKE2b-256 8a9e9e7640c0f60d3502e7fe93d9f83653746ba5290a489134651214276d44b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 2b7311d34a01243d6805694ae2f5dd3b9ba4a8115a435d6d74f38f173ed3e41f
MD5 456393bb49ce7847b58e701c76b2170c
BLAKE2b-256 cc1108284987105574aaf0767e730650f17c5618bd1d0068f70643b4766f8f39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 f055a54edb63932b52ddbc67f2c051f9244b75050448410db2a5533a31a64df5
MD5 1fe717de5eda3586bc50fbebcc032571
BLAKE2b-256 d02e7f0f4bb039f2a6fe70e326618cded35497b57d150db5413c7d91ba0392aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9fd9443b7a9dab5e9449896ed08fc501b10abdb6063cfadaddac7b52fd77751e
MD5 4a09f7b581fdf9fd20e7aefb0f9507e4
BLAKE2b-256 982ee192b249317532a7bf65a42b01e4f17c1cc7b6a95fb81cf58f0e2751c072

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9255988a5af91a6a63a9a9ede722157058adcd14d391ec5bf736eb5761fae974
MD5 04eaebddb98c3984405507661f8a5154
BLAKE2b-256 f8563c6427c56870f5d6833554507fe1a40de7c2908232a94ebd5b2beb6f7f28

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 704f1171ec9c7448fcd149b93df5349602eb4686cb4373909d2d63d4feebf180
MD5 f78ba1b0f419368326de544a6f562b4e
BLAKE2b-256 32b2148cd0a51bc1ced326a13163a01ce8e500b1b5c4cc5a12ec177866294917

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 e267e8eeb6828a1e12c32ca7f17ceaabae6249fc7266c5185523bf9202dabef4
MD5 99af85734f94d76fdff4062bb7484162
BLAKE2b-256 e2f5b10eb780f4f4646616648e85ead3889be2983b563c0c296ea8865fc1f8ed

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stringzilla-3.3.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 56.0 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.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 1251c223cc7181be128a4a0c835ecf2cbc39e39642fdc1c96bf2aee38a99366f
MD5 897f3304c82331319ccf4197e32d8f4c
BLAKE2b-256 ba702369a2ab23213719959a3f7ab07ea837767b3bbc49a8ce4265d7b7cea70c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fb1c4febe0f573318f3afe4790155fad901a20dcdb0999b1129abede93758092
MD5 dc57a416c5790a6817fb0ce7dc73eddc
BLAKE2b-256 46e25b02ff28696a265ddcc59eef5486ed9f18769160c899e0190767adcbc968

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e53b1b6194466e41090ae20ea66e85018a0c9a493338a9a75333bf1b18161c61
MD5 ef184777d2b1450c76820f7948772585
BLAKE2b-256 8adeb03e7445a252b44c25c93b20618e5e5c755075f48d07e2623a7808c6ccce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 71735af3441813971fd96d253f29ea4f7274a6cf20f9be0d2215c34babf06501
MD5 bc27051465b47b8f2412caaffb0ccff4
BLAKE2b-256 25678b48dcf831b145b462cb3ac363e00dda1cc84eb2877f9622eb327bf1572f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 d21b54eb49aab533a1105704992cecfe064e3788f5559370ba5e14cb18d7ee88
MD5 ca3f17e3570c13a6fea5a8c46f279112
BLAKE2b-256 8c65d9292fed3d182823c3042f215c14bf06478c55f8ca62ea0528ff786ae24b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 f1c8706c2c3ab7d05083e4534fd10719c87e61da08ae53a96d84709ef49895ca
MD5 00bb2a5fa31e26f803f5c2186e3ae88b
BLAKE2b-256 173436e79771a1e8ed860b2c514a5965693280bcba141b5f9bdc7116f66594a8

See more details on using hashes here.

File details

Details for the file stringzilla-3.3.0-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.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8eaa6a2de524805aba30d67a7916bbf3d68141766311b28abfc5b45bf60e9e40
MD5 db5b7389508024b47f1e060a39f8197a
BLAKE2b-256 7edbc6b432a743407b734ca186e06d9dfcb7aa7bf5bc8d5c14952b1a221f364e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 eab0f3ad18c0fb4d0f18d9462575d50a581e1964ac7b796a073ab262b444bbeb
MD5 6c61cd12e1ee2b56c83f1f2bec6f0be9
BLAKE2b-256 246b1dea0520a7ebd7ce942c9af524b4793a91ea8f1ec5f5a96a1a626c2a5e58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 602a07b1ad5c677a9cd93643da11616304814c86f5198793ea845ca96d8a49db
MD5 cf1fce7115e782dbabfe64f7809f5a31
BLAKE2b-256 8cdfe56baf16eee3e9f74898d29912fbc9746f3026a968a9caddaf1e333aac19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0104a1e36895037f29c43b1ca5f4a83dd2dbb7c2054e9fd3c1c40ae394f539c7
MD5 ef46cf17cc4e5f23bcdb4826c7b010bb
BLAKE2b-256 7550e3e2aa6e6cab96f9fda2d3848f71b4402c6809724f48b16ee5fbe6ae0478

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e5cfb68eaaa5eff57c38db6fe2de242a04f435341fced9743321c5f6e60503a8
MD5 47d2e8daa6e20a7330b600d5da2d1cb5
BLAKE2b-256 05315aef9b390d635e6a4a4c0339e73e2511813a61c293653ff01a37bc20cab1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for stringzilla-3.3.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 20622dbe16facc9701a0479e777e8a9f1dfe0003991fd8d328e639ee45cae8ee
MD5 442aad325b66acec3d02a260bffd0855
BLAKE2b-256 6a1b2fbce47aa4d0b34e3d796f14ce766d2b904965db5ae923e28018edde4fb1

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