Crunch multi-gigabyte strings with ease
Project description
StringZilla 🦖
StringZilla is the Godzilla of string libraries, splitting, sorting, and shuffling large textual datasets faster than you can say "Tokyo Tower" 😅
- ✅ Single-header pure C 99 implementation docs
- ✅ Direct CPython bindings with minimal call latency docs
- ✅ SWAR and SIMD acceleration on x86 (AVX2) and ARM (NEON)
- ✅ Radix-like sorting faster than C++
std::sort
- ✅ Memory-mapping to work with larger-than-RAM datasets
- ✅ Memory-efficient compressed arrays to work with sequences
- 🔜 JavaScript bindings are on their way.
This library saved me tens of thousands of dollars pre-processing large datasets for machine learning, even on the scale of a single experiment.
So if you want to process the 6 Billion images from LAION, or the 250 Billion web pages from the CommonCrawl, or even just a few million lines of server logs, and haunted by Python's open(...).readlines()
and str().splitlines()
taking forever, this should help 😊
Performance
StringZilla is built on a very simple heuristic:
If the first 4 bytes of the string are the same, the strings are likely to be equal. Similarly, the first 4 bytes of the strings can be used to determine their relative order most of the time.
Thanks to that it can avoid scalar code processing one char
at a time and use hyper-scalar code to achieve memcpy
speeds.
The implementation fits into a single C 99 header file and uses different SIMD flavors and SWAR on older platforms.
Substring Search
Backend \ Device | IoT | Laptop | Server |
---|---|---|---|
Speed Comparison 🐇 | |||
Python for loop |
4 MB/s | 14 MB/s | 11 MB/s |
C++ for loop |
520 MB/s | 1.0 GB/s | 900 MB/s |
C++ string.find |
560 MB/s | 1.2 GB/s | 1.3 GB/s |
Scalar StringZilla | 2 GB/s | 3.3 GB/s | 3.5 GB/s |
Hyper-Scalar StringZilla | 4.3 GB/s | 12 GB/s | 12.1 GB/s |
Efficiency Metrics 📊 | |||
CPU Specs | 8-core ARM, 0.5 W/core | 8-core Intel, 5.6 W/core | 22-core Intel, 6.3 W/core |
Performance/Core | 2.1 - 3.3 GB/s | 11 GB/s | 10.5 GB/s |
Bytes/Joule | 4.2 GB/J | 2 GB/J | 1.6 GB/J |
Split, Partition, Sort, and Shuffle
Coming soon.
Quick Start: Python 🐍
- Install via pip:
pip install stringzilla
- Import the classes you need:
from stringzilla import Str, Strs, File
Basic Usage
StringZilla offers two mostly interchangeable core classes:
from stringzilla import Str, File
text_from_str = Str('some-string')
text_from_file = Str(File('some-file.txt'))
The Str
is designed to replace long Python str
strings and wrap our C-level API.
On the other hand, the File
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')
lines.sort()
lines.shuffle(seed=42)
Need copies?
sorted_copy: Strs = lines.sorted()
shuffled_copy: Strs = lines.shuffled(seed=42)
Basic list
-like operations are also supported:
lines.append('Pythonic string')
lines.extend(shuffled_copy)
Low-Level Python API
The StringZilla CPython bindings implement vector-call conventions for faster calls.
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)
levenstein: int = sz.levenstein("needle", "nidl")
Quick Start: C 🛠️
There is an ABI-stable C 99 interface, in case you have a database, an operating system, or a runtime you want to integrate with StringZilla.
#include "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 character_count = sz_count_char(haystack.start, haystack.length, "a");
sz_size_t substring_position = sz_find_substring(haystack.start, haystack.length, needle.start, needle.length);
// Hash strings
sz_u32_t crc32 = sz_hash_crc32(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);
Contributing 👾
Future development plans include:
- Replace PyBind11 with CPython, blog
- Bindings for JavaScript
- Faster string sorting algorithm
- Reverse-order operations in Python
- Splitting with multiple separators at once
- Splitting CSV rows into columns
- UTF-8 validation.
- Arm SVE backend
- Bindings for Java and Rust
Here's how to set up your dev environment and run some tests.
Development
CPython:
# Clean up, install, and test!
rm -rf build && pip install -e . && pytest scripts/ -s -x
# Install without dependencies
pip install -e . --no-index --no-deps
NodeJS:
npm install && npm test
Benchmarking
To benchmark on some custom file and pattern combinations:
python scripts/bench.py --haystack_path "your file" --needle "your pattern"
To benchmark on synthetic data:
python scripts/bench.py --haystack_pattern "abcd" --haystack_length 1e9 --needle "abce"
Packaging
To validate packaging:
cibuildwheel --platform linux
Compiling C++ Tests
cmake -B ./build_release -DSTRINGZILLA_BUILD_TEST=1 && make -C ./build_release -j && ./build_release/stringzilla_test
On MacOS it's recommended to use non-default toolchain:
# Install dependencies
brew install libomp llvm
# Compile and run tests
cmake -B ./build_release \
-DCMAKE_C_COMPILER="/opt/homebrew/opt/llvm/bin/clang" \
-DCMAKE_CXX_COMPILER="/opt/homebrew/opt/llvm/bin/clang++" \
-DSTRINGZILLA_USE_OPENMP=1 \
-DSTRINGZILLA_BUILD_TEST=1 \
&& \
make -C ./build_release -j && ./build_release/stringzilla_test
License 📜
Feel free to use the project under Apache 2.0 or the Three-clause BSD license at your preference.
If you like this project, you may also enjoy USearch, UCall, UForm, UStore, SimSIMD, and TenPack 🤗
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for stringzilla-2.0.2-cp312-cp312-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97b6131798e9b996084def7e69b2f8cd6d324dda5422c031ce0adce49d87bc69 |
|
MD5 | 5ad1110d23c1b61dd0330605257a4f6c |
|
BLAKE2b-256 | 2da0b293921cf0ab6dfdb15c53992944801f587bbd600b51fde6ccdbf111d9fa |
Hashes for stringzilla-2.0.2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40c0eaffd660e2a35d500f06db9addd91b539a301463c33000b22ae08cf1ec5f |
|
MD5 | bf77a191b2882a7ef83a6a126efcb435 |
|
BLAKE2b-256 | 325e70a512f44dd8a4e8c297c21b3105ac5965a89a7fecb8a9e9ea356e8270ba |
Hashes for stringzilla-2.0.2-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa890af7efc5da3d8fbbba4fb02403e2785b4263d46ceaaf1c1b0eee2f2366a6 |
|
MD5 | 4803368be79c4158d682fad16e982947 |
|
BLAKE2b-256 | e797bb4bfa24fdba8f536656ae261f94fc9a65fd8c3f3e3a62fe80e8308ffaef |
Hashes for stringzilla-2.0.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 05260fea0cb576248d16be09ecedec75a28cf1c12d6c6a2650ea843bdb79b0a1 |
|
MD5 | f954ced99d633c3f9905fb08dd835b3b |
|
BLAKE2b-256 | 4545211a1eb9032a764aaf27bf7c98a376b034316ee5d915f7662158f447509b |
Hashes for stringzilla-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0eb52a12ec935e3842a2fc08e9496166967823ec9bdf43a3dad0017bba193abb |
|
MD5 | fcb73fd13c95cad6745868e4ef444142 |
|
BLAKE2b-256 | fbd46f1fd869cca27c431541cf0cfd087650311dcffaa1bb01f68958e487606d |
Hashes for stringzilla-2.0.2-cp312-cp312-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c341139c53f2edde50262c857df02875a18963759acb838f07d1192eb3d2480 |
|
MD5 | f891ba3d50581f55efddde44e98101ff |
|
BLAKE2b-256 | a274c208564672c19a6653429c2c661b6052780157b281a70dbd0d2e803d3ba9 |
Hashes for stringzilla-2.0.2-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 267d9388e1f76bca16f847f86e36d632758be6d5f4f5f6cee6b27f76e09c448b |
|
MD5 | c41462e4d125d7c5a389b77ab8ad9958 |
|
BLAKE2b-256 | 329275e77aa3b95b920b116cde2340877eb5c28b2b575a0d742c2cd573edcee6 |
Hashes for stringzilla-2.0.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | be504b41b55fd4ebf980d6c024c5a2cf6c39e01492228d73234af72da5592b5b |
|
MD5 | f8b27762ecdebe7501d93ca1fa76707c |
|
BLAKE2b-256 | 1ff1815a1f8736480cea4b6e9e5151c6a1a6a54cf33e1097ac42e2d98233cc78 |
Hashes for stringzilla-2.0.2-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e975de69386aa0ba5f46cb4b4c28254452eeed10dc22088e16c3c0f5c96d7836 |
|
MD5 | c0eae9f201412ea02b5779aa7891cc9c |
|
BLAKE2b-256 | b84cb5bd80bbd287bbf94473a0d84332039c6ae4743631a67d653757c2df458b |
Hashes for stringzilla-2.0.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 48b23c04263832b2d71b3236b77606ee1a34b92aaad0b15c4a1bbb4da5ec6a91 |
|
MD5 | bab37e0cc1998228109322c378737a8f |
|
BLAKE2b-256 | 8ad52e171fe8d46e1bdb79b5cc5eed93e0afa8c7f2ef16c9e7a074abcfd3e9e9 |
Hashes for stringzilla-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e259dc11c6e0b278336d701321a03c409533b61fc27615d0ddbe1482ee65353 |
|
MD5 | 6e0d3c92f8cc0a5aef3e29e2d35b7195 |
|
BLAKE2b-256 | cb4a846f3432b3a7e975889e5a9d2ae2d2f2735882551f9dd8298ee8a8c55362 |
Hashes for stringzilla-2.0.2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a11c0fd904fe1386dcd055ea35f84c213ed64356959681d06d9a734597217c1 |
|
MD5 | 7f288c7171b46119663a7b94291efecf |
|
BLAKE2b-256 | 65c3637e69cf4b91830f19a7692d7c8f01e2c8be3ec99d2462920504334193ba |
Hashes for stringzilla-2.0.2-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 795b5c8c88db673a25b979094f4f17025b06a6fffbb3b4163ce1a02efa2e82c4 |
|
MD5 | c7ab1397433453e15b4bf3fbdc92f05f |
|
BLAKE2b-256 | e439e2877ac72afdf54cf911ce09d77258e2cd187a228248c3784754c9c59047 |
Hashes for stringzilla-2.0.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ff52b46b070debd64a328144854c4044de5af3c25b58b7dceb647b8a2792613 |
|
MD5 | a2570bb1cc15574755d529b88fa0e0a7 |
|
BLAKE2b-256 | f0543ad984945de5e3cdf9cd7e1b65e7e1ea367ebd5742ae973e7953fbf4afeb |
Hashes for stringzilla-2.0.2-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 065587ec6df81897cb991c75e35fba60171629706edde5dc301a52ca1c75b530 |
|
MD5 | 168f1f26989ac4fa612aaaddd2560e40 |
|
BLAKE2b-256 | 4fb357b08eb1c14a1af9169b77951db1ee7f1a68fe9ccd8e527f5528fe981868 |
Hashes for stringzilla-2.0.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 39ab9b796a18cdb5ac4a6254b40dc67a46dc77e73f6a8e1800c8890127b6843d |
|
MD5 | 2175fbfec2484f15773fea0b8d7dca59 |
|
BLAKE2b-256 | f1b334d6de8bea90eb74ba862352a85f0d75158b31dc1c4b6ffb78a55f6ce257 |
Hashes for stringzilla-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e58cabc1cdc2557016623faed6a6ad6c7ed63a7698eeb99a18fe256cea33b6e2 |
|
MD5 | 47a73d6e58de6f2e0c4121162a035df0 |
|
BLAKE2b-256 | 7d5b3890524507e7cc7d15244ac26ef01bc6947fafe565c3d118d5f0f529494d |
Hashes for stringzilla-2.0.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f292f087a303ba14c2945d0f09ecaa38366c70efeeb8b4dcfd25ec73e56e11a3 |
|
MD5 | 91de6f95974dd9b91b16a597f1ea3118 |
|
BLAKE2b-256 | f97bdacb322a493c90063e4f4de601e46352dead198e89169c04cbf8bdbd1130 |
Hashes for stringzilla-2.0.2-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a6eff2a9f2087e11a13d33edfc5e552621239ad1bb95dd89ef8c06a839b6b35 |
|
MD5 | 894a1f39ad97ee7780243f98cb7b763e |
|
BLAKE2b-256 | 0a87da95881a66e150b657e8c8b112b98e3d4baa94131bf28032f067b3cd27e9 |
Hashes for stringzilla-2.0.2-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb2fa3afe004d54bef79ab4564dcdbc250e7a458a0144049e6fd676503d70272 |
|
MD5 | 707adb6d4e32185f1b976d1570418dcc |
|
BLAKE2b-256 | 1bb6a7955bf78d81297056c1222e3b362b83a406f14f0bd6505a8515bc295ea1 |
Hashes for stringzilla-2.0.2-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ecbfa1a3359d970c21c7d863c908c02999f73118487b2f0a1cdaa4902b13257 |
|
MD5 | 4bc84dd865fe91d393a35562a5968f3d |
|
BLAKE2b-256 | 032b02090f367857054a54a4662a111f9b28a92639c91643e7816dbbaceb0808 |
Hashes for stringzilla-2.0.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f248136017cf4024193261c022021d472140389f149e1cf9ebc4055f426a1c30 |
|
MD5 | 445ae77e8d165d7f984ef9c1a79be60f |
|
BLAKE2b-256 | 81e85df79ed2116d62d0f22f2e101c2d830ac0e6e693f37c940122c35ca48ba9 |
Hashes for stringzilla-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08bc1a54d5673a646e25a167785109267c4ebc66976735cb30337e69dd098041 |
|
MD5 | fd5334183f634fc23334607f3c940486 |
|
BLAKE2b-256 | 5f5913b4e6ef432603bdc167a71c2e45ce0a4bda2b211e45a82914cb34e53f42 |
Hashes for stringzilla-2.0.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a7f1f016a8606556da3d87bffc368282c39a3f4e46a21108fa395da5aae42d8c |
|
MD5 | 11d2d932d1dbc31e67bf1696cc264b16 |
|
BLAKE2b-256 | 2361277eb9ec317503ac6f92fc0acff534057e23ef9fb793312842a98f48262d |
Hashes for stringzilla-2.0.2-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cda28fdcf29df8a754eef7b1909b7ddeda31f343b28b061c581c3bd066deb620 |
|
MD5 | ff41c7d79fb6ca539918cd8fb213c2e4 |
|
BLAKE2b-256 | 7a96ab1fb6b528f0acbc376f353fcc41fc2c3a99d76da0ed28c6d3db4e60e156 |
Hashes for stringzilla-2.0.2-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6bbbbd25819f5be406b821415e4e28b1f3c8bfb1e89c77f6f286c0a6d6033f95 |
|
MD5 | ea84dcef890d080f96038773d4c2a653 |
|
BLAKE2b-256 | 47ea5d8a6c55939028b32ae33d86002e40932125eab390cfb0c832c7412bc92b |
Hashes for stringzilla-2.0.2-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | edf5560da8cb4b3c060ec0c46950d3eded115542511661fdde6bb71d008d5326 |
|
MD5 | 6adcd9b6e05d5a69fbc96b058cd62ab0 |
|
BLAKE2b-256 | 0fc20bc8e3fd5930702eeabc7acd9f24d194b13334971a2d5c04f5382879c90e |
Hashes for stringzilla-2.0.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d1f18493a6e4565fccb09bd123ce15df0867cccb50c514db892675bc03c5b0f6 |
|
MD5 | 7eb619f111f3e045b0d600d719f8dc09 |
|
BLAKE2b-256 | 8af3d6f20ebc494e3b398ac750255352892c859a641377c5e01547d844bee417 |
Hashes for stringzilla-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d76757f741bf6c5529e418487f50d28c017a5ca6029dca13ac5da38f00917d6 |
|
MD5 | 54034def5a603c56076a23bd958765f6 |
|
BLAKE2b-256 | 4ee07f57aadc4b845b14c1c15ad10e41643e100f992658993b506568be6d400b |
Hashes for stringzilla-2.0.2-cp38-cp38-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ebd914c498d5663f09c7d1892d3fe1c7b75846a1a2f44f3828f86991b54c5d14 |
|
MD5 | 4eece668c92c6224e7ec5a22f04b51fb |
|
BLAKE2b-256 | 5f96f6ba0bf0c7c3784317f2a1d77dff12ee252139000eb8095eda9f87347d90 |
Hashes for stringzilla-2.0.2-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c5cd5e7a49b9653a25e3d0871fb99003a72b31246fdd7c89f6c19cb28fbc2768 |
|
MD5 | 3a8d3d52f9b55452f1775ef5eab9550d |
|
BLAKE2b-256 | 13cdd4129c4e247957113590eeab0fbae9683d0372e2821023254cde6b2e6502 |
Hashes for stringzilla-2.0.2-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d4b9f1c6f3189bdbfad0ca7bc5abab4c514328752d0a67e5d9bb789b3fa2e2e8 |
|
MD5 | 3110a198fa0d6e670af7d8cb4fbfad1b |
|
BLAKE2b-256 | f8f0e04f7019d198135ca1575cdad8b1ce0ade9ed56d719c3037229df656270c |
Hashes for stringzilla-2.0.2-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | af79b6e7782272bad40c43c044066dc4e143de972eb1e9e1d70172abcecdd3f4 |
|
MD5 | 43083b6cc159fa6b3f1322a0ebefab2f |
|
BLAKE2b-256 | 50e33aaf3054a35c0bf85cd04f8ffdd723b389fc4807722bb69526ab60179b37 |
Hashes for stringzilla-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac1973289b46980b51c13e24bfd3f6b66dfe3881f9909f2fed8e78c20afa276f |
|
MD5 | adb49e7ab1868589ff653e1754ed953d |
|
BLAKE2b-256 | 6f4c8c52843b8973f30f29b5c327447c4bc18b7b70f7a551ed0a53443ddb52ac |
Hashes for stringzilla-2.0.2-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 025a62e49cd4e82407aa4912e85c0b6532129edcae5155be436e051ab4f00a7c |
|
MD5 | e6969b1736a93ee2d283623e9cd3874c |
|
BLAKE2b-256 | 9a12a2a886021634022b5b5dacbdc3c7b0e3a692aad46c5c7071a90ebc2134f5 |
Hashes for stringzilla-2.0.2-cp36-cp36m-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d283ce2ad67ca905264d943adcd280e362d53aa10441056b37bbd40fcc7ce36b |
|
MD5 | d60b53f5902dada41782a8644ffb049a |
|
BLAKE2b-256 | afe20af75adc064eae889ef0240a7b7a36bd45ece78462062fda41823a2e5527 |
Hashes for stringzilla-2.0.2-cp36-cp36m-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b853995305d374dec9d51f9ebf12c8b37151e4e6139e58472b0a690f4be4cb6 |
|
MD5 | eb05562c1370eb4f498e25bc324d8323 |
|
BLAKE2b-256 | e192bbe37b2088de702b1acdda198d3c73a597878bc673ed216be8aa0b9f7c26 |
Hashes for stringzilla-2.0.2-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cae9823a15e2b28912620f0ac56192b5971e0f207da3d10cea6d5e17148f6f53 |
|
MD5 | eaacfa5d540cea030175211fa067f83f |
|
BLAKE2b-256 | 00bda4dba6758a7ebae2babf29532d4a38ab4e6a75bfb9ea663cb111c0f6cd57 |