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.3-cp312-cp312-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a77fe0d7771584a09d6988375e9fbbdb3f9c671312bdb06bfb85c5e957fdf307 |
|
MD5 | a30aa1a239e567dda908a97b1b4b8e7f |
|
BLAKE2b-256 | 4ccd38434297034ff83b8a91c7faace264f7d32faf36d6695f354830a6f7cd06 |
Hashes for stringzilla-2.0.3-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f8dbdfeacc2b2b08c8a6a97758702e39ee4c7c4eb7c14cdfea48122801d7fc2f |
|
MD5 | 844e8aa6678174b5a11d699fa4383e1b |
|
BLAKE2b-256 | c3dcf9dac9e2dcc8637f3ee2dd4a93d5d07743a25d6de3a2e681b07cab83bc09 |
Hashes for stringzilla-2.0.3-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d83361dc2bef2a8e7b9cfa59940df7f12a9bec17f6120ee7336d5dad5ba45abd |
|
MD5 | fa661834f235f51f59ac4e79c239807f |
|
BLAKE2b-256 | dc89e4e33642a3ec02d33aca1af3fe5ffa60fc68431461fe591a641e5af976e5 |
Hashes for stringzilla-2.0.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f295ad1ac572c5cf6c4e2ee1aef824110b028af7d0033203e51574ad67681644 |
|
MD5 | 3ef4cfdec1476bbc52cffc846e4ab021 |
|
BLAKE2b-256 | 2e00103f50a39482df563566e08261b3b40ed3fb2d36a20da15dfd1fbf55fda9 |
Hashes for stringzilla-2.0.3-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d21025695eb0cbc7e57f34f1349f40fd8e396c8ca682bf596ee3efb0da2c89b |
|
MD5 | 2db423389908ce523721a55189af1997 |
|
BLAKE2b-256 | cd8cbd181a7a34189f8d3a4db7c136690adbd64ecf3d0b327dc0c2dc510f32fd |
Hashes for stringzilla-2.0.3-cp312-cp312-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c4373e535c167ffb6e4c0fbeece4d3ae35d1cacb18191fd2f3508728967d7df6 |
|
MD5 | d43f7541d1fae138dab5783ac71bdf66 |
|
BLAKE2b-256 | cb4fb9330ea5e582bcaebfe243363fa50d59a46b6de5c9f512494cb88037cdc8 |
Hashes for stringzilla-2.0.3-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb8d5a7f97862a22edd5cfee84bddd186193cea70e08c7e82535adb15761a87a |
|
MD5 | 2bea214356e5a014fc217ac0212b5107 |
|
BLAKE2b-256 | 295fc8b24b2ea6fc64a4e4c8d8a7ef7193dfb1cdbbe108befba862214aa898c5 |
Hashes for stringzilla-2.0.3-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 89325d5de1228562c1833fe52f0c2cb9f515df72b5e5603858359a94ab524c11 |
|
MD5 | 335cbc870891ad0c5327fbeef0e745b1 |
|
BLAKE2b-256 | 7d765d8e89996be55f84775a79355666caa1b621adba7ac9c33611025eac1e3b |
Hashes for stringzilla-2.0.3-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4da7020eecd48651b27fd9d3a3a7856339b4d320e9aa4913699c0a8f3df6b998 |
|
MD5 | a0729567ed9e0b94e214461f92a0fd7f |
|
BLAKE2b-256 | 76182c5894c164cc7ecec471baa0e8971ddd6ebd1c2eb3440b7fbc1930eee193 |
Hashes for stringzilla-2.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01d30276447f46938110a712f3a296500faf48d9ddee7ef4947884ecb04baddf |
|
MD5 | 79ecc209f35520c4e674c8f2da37ee18 |
|
BLAKE2b-256 | d233c7d3013d7ab186eee2e86a348dd233aaaf1562917a6eeaea2d26c155072b |
Hashes for stringzilla-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27b8c264c9db09d4496046fd41fa34ee404d16ce11e4b7afd528b2737d7fa839 |
|
MD5 | 5f469435952a36073495b1cf031085ed |
|
BLAKE2b-256 | 367ed9b3b64f419e2896ead15938e27ae00b4b00d5542d66ec323bfdb2a98031 |
Hashes for stringzilla-2.0.3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60becbb8847ad46825917cd1814d7b2efcfba7de16fa105f76c05b891afd130a |
|
MD5 | db4d836c41023ffa741eb8cacdbe9ac8 |
|
BLAKE2b-256 | 7b9f2abfb450f34df4ec22867835fd5a0725495405ebe326ad2ba856b5fa3d79 |
Hashes for stringzilla-2.0.3-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 33348a1a75d283bf969eeba07c716b0615a0e1490ed98367a923769abf420f67 |
|
MD5 | 826dc641fdea235c42f67bf567d25182 |
|
BLAKE2b-256 | 13e25a0b1f01562d9f17f860d0c2d95c5a70a5002fea01640f601b8e6144766e |
Hashes for stringzilla-2.0.3-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d1a1cd6aee86fe6f56a8f6ef6eb180d09682a563cc81e7d4d0d58a96ffc2918b |
|
MD5 | 3e7beaf80dd17b6244171522ea15c897 |
|
BLAKE2b-256 | 9713943f0b03947d8bfa697a0c837cdafd423f6d14212c8f71c206dbbc4e1dff |
Hashes for stringzilla-2.0.3-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eec623ef70bda72a72837db145b2028839534e1b6662125dad9d4dcd89cc2f84 |
|
MD5 | 7edd26daa3abd4b5c8a3be770cc8d743 |
|
BLAKE2b-256 | 9ceca02570fe1919f71db24f3875b49eba654d772e873878d76fc72aa4097fbe |
Hashes for stringzilla-2.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e16d17fc484988fe55b91fcb1c3301b7fa4e3d012b03b5baa11041870b5898c6 |
|
MD5 | a63eb051f28bac6fa38361f55f6aa700 |
|
BLAKE2b-256 | b465cc7024f6e1d4313079589dd0d81d8f299d2b4f57cbfae8ecf73adaba532d |
Hashes for stringzilla-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a83888d808f8c99772d066e3d059cc2ad9afbaa6ee30559d80fc45c33e9736fa |
|
MD5 | f95158d2d3a7501bc22c28c72196ca97 |
|
BLAKE2b-256 | 48819fb94f76f5b7cca5866810158bb991a1570b96993e9a000f82ac237eef49 |
Hashes for stringzilla-2.0.3-cp310-cp310-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 478ff6111c83fd532460d1bae047789db8ce1e7c31fac3190d7b448253f5f9d9 |
|
MD5 | 8c835278c8f6cc71537e975746f76337 |
|
BLAKE2b-256 | c1cb202dac7437cf0a1c21181502d9cfe3653fc1b648f5ff8a4fe97c75363a94 |
Hashes for stringzilla-2.0.3-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 940c418252766932f893ea98a02d6967b8c8f1094e3e6d47dffa6ea3fc49eaff |
|
MD5 | 5fe0c9094653bcb7e5fa09685e526b41 |
|
BLAKE2b-256 | 911135e6cf3fba55adc37bd39c3398f431ff4a5e3501e3d53dec2e64e3b7dea4 |
Hashes for stringzilla-2.0.3-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b8190dd2b55cc2267e892882d50cee599eb16dc1be9359e9ea5d76134f4a167 |
|
MD5 | 2e06546d4d2cabe6ee201bd3b077e7d1 |
|
BLAKE2b-256 | 2fce182dd80319529df56ba98d90285f2d05a7aed32445d07113fbfa31f2db78 |
Hashes for stringzilla-2.0.3-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fd8bb64451871cbfa45297caf11140b7adf87a80a958a8f0f86ca224ab6ee02 |
|
MD5 | 923e6983b7416d6927f540ad62c7283a |
|
BLAKE2b-256 | 350823f9384b84ef7dd4563164523c86c4e061143275a6ef27d528daa91785c4 |
Hashes for stringzilla-2.0.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ec65ad0255f2d754e0b3a0f6cc28278011f9fe56be2d148c883a42afbacb318 |
|
MD5 | d2ce2060bb487016f4791032ca748e1b |
|
BLAKE2b-256 | becdcb04643c48bc9b5eb84c403ad67454768d279c702a40ce3a3a046cb3a600 |
Hashes for stringzilla-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4f8db4bbd0443e6df86c7a9aece7ca78eb23333c53dd59fa390c29c25bbe8cc |
|
MD5 | a539b63fa679918fc42455d13e371169 |
|
BLAKE2b-256 | cb1b10c642825ed506c1b43d30c4fef5b11e6590353a33073dbdcad7abc0b44e |
Hashes for stringzilla-2.0.3-cp39-cp39-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21bb5955e812fab7e4ad64517c6ed03023f8d4849f500342fc8a47a45cedbcff |
|
MD5 | 98fa8c69f648363029dff423cdd697ba |
|
BLAKE2b-256 | f2eae72c1f245bb1d6a3d7e80e2f7c7364b5bc8deff484eeb33a07a2ca84cdc1 |
Hashes for stringzilla-2.0.3-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01deca11fc69cc396fe4a907f573d438d43a2be90a6660d126fd323fc59f1e61 |
|
MD5 | fb187e381cab9898a332e42d96054149 |
|
BLAKE2b-256 | e18810c48abcf7d496738b03baebf8fd9ba37833376aff1902d9474d1094e89b |
Hashes for stringzilla-2.0.3-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d81f2be8e180a5ea0b27d625ae9833fd3fd799795185aa1ed116dc355d13df1 |
|
MD5 | d1fbec5005ac307fe97c7f6625a7400b |
|
BLAKE2b-256 | cc176103edf5ef8337c70b1ff8610eec8e790fb75be8f63f14015e222a8f2f1f |
Hashes for stringzilla-2.0.3-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8722e198357917c95bd05cfe5cc729ade8f303939cbc48d69d235d5fd24cedff |
|
MD5 | de4348da6f5a0aca7ab0b8910b90c64f |
|
BLAKE2b-256 | 2f2d38e68a251282e56d4e0b7e3df61e72b781e83b9e7a1dbc528280279af723 |
Hashes for stringzilla-2.0.3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ba60cfea1ae6ab0dd3a7d989724151e2d61b544b3875d549087fa7b07d5be31 |
|
MD5 | e9ddd84c6c965b60ee7fb612d2bb40b8 |
|
BLAKE2b-256 | c97a2d6593c0a4818fc2fcf4381009eb465f3bcdd4864a3d1f6e89903b1b7149 |
Hashes for stringzilla-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 168d559120207c4f058f9d280f95147b5f882b41d0ee1c4867bbae8014d9b616 |
|
MD5 | fa63a519c8b8ebdca6cbbdd7529805c1 |
|
BLAKE2b-256 | 4de63468cccf536e2817d9f97cf234fa415fe2de578494af186a4dc17f649a8f |
Hashes for stringzilla-2.0.3-cp38-cp38-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5183076499b8d938d2e7192e9996aea75a4d0af1d23bed3855e5ab387cea8fb5 |
|
MD5 | 2e1e277f387f8b88622873c8ecfb582a |
|
BLAKE2b-256 | c7595c018aabced2548a3f21860c3daf8dc7e20d8b64ab105ad3ba52e6fe8c3b |
Hashes for stringzilla-2.0.3-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9c56531516ea0a1f15d12c817fd264107558aa8840dd69fb761b621ca9c3a49 |
|
MD5 | a00dc487c991199ebd52620e5ed9419e |
|
BLAKE2b-256 | a55a002c4383638c9782105fe4a1cafff26c3cfa5e3cec7fa2703d4d7b2175ea |
Hashes for stringzilla-2.0.3-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c30b4c6a988786e4c4273aa0ec787952c521657ee3822fa781918c6e841716c |
|
MD5 | 44ada3fd5be6fa03d5b56bd66798cda3 |
|
BLAKE2b-256 | dea735451a3dc566a3380402454a104682489f47636fe1a5ddf4e29837cb3ca6 |
Hashes for stringzilla-2.0.3-cp37-cp37m-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 900ff950aa7ca975aecb06c926da82138be5012365e9ac14e9bcd404c919e6b6 |
|
MD5 | f094d87657f6c1a9dff5d1a14df67590 |
|
BLAKE2b-256 | af047853de6d40002b44db4e101d888fd2677daaba8b14dbc04b76cb1ebfb604 |
Hashes for stringzilla-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce1a0649f5ebc451a7f5d393f947692f85e22146544871ab47023e78fdeb0437 |
|
MD5 | 3b7edbcd5faf74f1fa21607817920143 |
|
BLAKE2b-256 | 98d5e0c4bc748c6cefe117c8395733c3d6f856320ba505464951a6db518efd75 |
Hashes for stringzilla-2.0.3-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e086fc7d331c739ce97df267da68640ed5c4e33c570c5f50ee004e5ce65a7b28 |
|
MD5 | f8dab34c53dc46df74a562bedd167132 |
|
BLAKE2b-256 | 5f43bf0b87a251009c545ba6685f52c24667ad7b6b28c6c2e68f0741e606b8b4 |
Hashes for stringzilla-2.0.3-cp36-cp36m-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c899459a91bc1b0355e5e6b788087ca2cc90401b6607ff19c0ea866b2a5c3c9 |
|
MD5 | f0d1a103746fa3d6d53bf8814fbf082c |
|
BLAKE2b-256 | 64fd6b8aa412b9591b18b69803233afcc55e9aca0b48fe615e724abfe6472f45 |
Hashes for stringzilla-2.0.3-cp36-cp36m-manylinux_2_28_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1669355daca7fd4d2c97cb9a2e9f9c35bb9cd7bf3bdcce3ce9a0b2296aab711e |
|
MD5 | 3899458c6a912a8b7eaa7fb62f1eace2 |
|
BLAKE2b-256 | a2b13d5553e01ad44ad9a15f328ec5537b6ca07eefbd1f02f719cea3b7080d03 |
Hashes for stringzilla-2.0.3-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 510717b1909a119ff95f5d33059133de53394749b97ce3b989f7f8b4ee4f3af8 |
|
MD5 | 850ea6a6ecc28d398d2feeeb5605980f |
|
BLAKE2b-256 | 59a74d4c7ec5c0db29fce261da894d36b753d59ec16b9b4b5d50d522f347173b |