Name | rapidgzip JSON |
Version |
0.14.3
JSON |
| download |
home_page | None |
Summary | Parallel random access to gzip files |
upload_time | 2024-10-14 20:24:42 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.7 |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<div align="center">
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/python/rapidgzip/rapidgzip.svg)
# Rapidgzip: Parallelized Decompression of Gzip Files with Support for Fast Random Access
[![PyPI version](https://badge.fury.io/py/rapidgzip.svg)](https://badge.fury.io/py/rapidgzip)
[![Python Version](https://img.shields.io/pypi/pyversions/rapidgzip)](https://pypi.org/project/rapidgzip/)
[![PyPI Platforms](https://img.shields.io/badge/pypi-linux%20%7C%20macOS%20%7C%20Windows-brightgreen)](https://pypi.org/project/rapidgzip/)
[![Downloads](https://static.pepy.tech/badge/rapidgzip/month)](https://pepy.tech/project/rapidgzip)
<br>
[![Changelog](https://img.shields.io/badge/Changelog-Markdown-blue)](https://github.com/mxmlnkn/indexed_bzip2/blob/master/python/rapidgzip/CHANGELOG.md)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://opensource.org/licenses/MIT)
[![C++ Code Checks](https://github.com/mxmlnkn/indexed_bzip2/actions/workflows/test-cpp.yml/badge.svg)](https://github.com/mxmlnkn/indexed_bzip2/actions/workflows/test-cpp.yml)
[![codecov](https://codecov.io/gh/mxmlnkn/indexed_bzip2/branch/master/graph/badge.svg?token=94ZD4UTZQW)](https://codecov.io/gh/mxmlnkn/rapidgzip)
![C++17](https://img.shields.io/badge/C++-17-blue.svg)
[![Discord](https://img.shields.io/discord/783411320354766878?label=discord)](https://discord.gg/Wra6t6akh2)
[![Telegram](https://img.shields.io/badge/Chat-Telegram-%2330A3E6)](https://t.me/joinchat/FUdXxkXIv6c4Ib8bgaSxNg)
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/asciinema/rapidgzip-comparison.gif)
</div>
This repository contains the command line tool `rapidgzip`, which can be used for parallel decompression of almost any gzip file. Other tools, such as [bgzip](http://www.htslib.org/doc/bgzip.html), can only parallelize decompression of gzip files produced by themselves. `rapidgzip` works with all files, especially those produced by the usually installed [GNU gzip](https://www.gzip.org/). How this works can be read in the [pugz paper](https://arxiv.org/abs/1905.07224) or in the [rapidgzip paper](https://arxiv.org/abs/2308.08955), which builds upon the former.
The Python module provides a `RapidgzipFile` class, which can be used to seek inside gzip files without having to decompress them first.
Alternatively, you can use this simply as a **parallelized** gzip decoder as a replacement for Python's builtin `gzip` module in order to fully utilize all your cores.
The random seeking support is the same as provided by [indexed_gzip](https://github.com/pauldmccarthy/indexed_gzip) but further speedups are realized at the cost of higher memory usage thanks to a least-recently-used cache in combination with a parallelized prefetcher.
[This](https://github.com/mxmlnkn/rapidgzip) repository is a light-weight fork of the [indexed_bzip2](https://github.com/mxmlnkn/indexed_bzip2) repository, in which the main development takes place.
This repository was created for visibility reasons and in order to keep indexed_bzip2 and rapidgzip releases separate.
It will be updated at least for each release.
Issues regarding rapidgzip should be opened [here](https://github.com/mxmlnkn/rapidgzip/issues).
# Table of Contents
1. [Installation](#installation)
2. [Performance](#performance)
1. [Scaling Benchmarks on 2xAMD EPYC CPU 7702 (2x64 cores)](#scaling-benchmarks-on-2xamd-epyc-cpu-7702-2x64-cores)
2. [Scaling Benchmarks on Ryzen 3900X](#scaling-benchmarks-on-ryzen-3900x)
3. [Benchmarks for Different Compressors](#benchmarks-for-different-compressors)
4. [Benchmarks for Different Decompressors](#benchmarks-for-different-decompressors)
3. [Usage](#usage)
1. [Command Line Tool](#command-line-tool)
2. [Python Library](#python-library)
3. [Via Ratarmount](#via-ratarmount)
4. [C++ Library](#c-library)
4. [Citation](#citation)
5. [About](#about)
6. [Internal Architecture](#internal-architecture)
7. [Tracing the Decoder](#tracing-the-decoder)
# Installation
You can simply install it from PyPI:
```
python3 -m pip install --upgrade pip # Recommended for newer manylinux wheels
python3 -m pip install rapidgzip
rapidgzip --help
```
<details>
<summary>Advanced Installations</summary>
The latest unreleased development version can be tested out with:
```bash
python3 -m pip install --force-reinstall 'git+https://github.com/mxmlnkn/indexed_bzip2.git@master#egginfo=rapidgzip&subdirectory=python/rapidgzip'
```
And to build locally, you can use `build` and install the wheel:
```bash
cd python/rapidgzip
rm -rf dist
python3 -m build .
python3 -m pip install --force-reinstall --user dist/*.whl
```
</details>
# Performance
Following are benchmarks showing the decompression bandwidth over the number of used cores.
There are two rapidgzip variants shown: `(index)` and `(no index)`.
Rapidgzip is generally faster when given an index with `--import-index` because it can delegate the decompression to ISA-l or zlib while it has to use its own custom-written gzip decompression engine when no index exists yet.
Furthermore, decompression can be parallelized more evenly and more effectively when an index exists because the serializing window propagation step is not necessary.
The violin plots show 20 repeated measurements as a single "blob".
Thin blobs signal very reproducible timings while thick blobs signal a large variance.
## Scaling Benchmarks on 2xAMD EPYC CPU 7702 (2x64 cores)
### Decompression of Silesia Corpus
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-0.9.0-scaling-benchmarks-2023-08-30/plots/result-parallel-decompression-silesia-dev-null-bandwidths-number-of-threads.png)
This benchmark uses the [Silesia corpus](https://sun.aei.polsl.pl//~sdeor/index.php?page=silesia) compressed as a .tar.gz file to show the decompression performance.
However, the compressed dataset is only ~69 MB, which is not sufficiently large to show parallelization over 128 cores.
That's why the TAR file is repeated as often as there are number of cores in the benchmark times 2 and then compressed into a single large gzip file, which is ~18 GB compressed and 54 GB uncompressed for 128 cores.
Rapidgzip achieves up to 24 GB/s with an index and 12 GB/s without.
Pugz is not shown as comparison because it is not able to decompress the Silesia dataset because it contains binary data, which it cannot handle.
<details>
<summary>More Benchmarks</summary>
### Decompression of Gzip-Compressed Base64 Data
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-0.9.0-scaling-benchmarks-2023-08-30/plots/result-parallel-decompression-base64-dev-null-bandwidths-number-of-threads.png)
This benchmarks uses random data, that has been base64 encoded and then gzip-compressed.
This is the next best case for rapidgzip after the trivial case of purely random data, which cannot be compressed and therefore can be decompressed with a simple memory copy.
This next best case results in mostly Huffman-coding compressed data with only very few LZ77 back-references.
Without LZ77 back-references, parallel decompression can be done more independently and therefore faster than in the case of many LZ77 back-references.
### Decompression of Gzip-Compressed FASTQ Data
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-0.9.0-scaling-benchmarks-2023-08-30/plots/result-parallel-decompression-fastq-dev-null-bandwidths-number-of-threads.png)
This benchmarks uses gzip-compressed [FASTQ data](http://ftp.sra.ebi.ac.uk/vol1/fastq/SRR224/085/SRR22403185/SRR22403185_2.fastq.gz).
That's why the TAR file is repeated as often as there are number of cores in the benchmark to hold the decompression times roughly constant in order to make the benchmark over this large a range feasible.
This is almost the worst case for rapidgzip because it contains many LZ77 back-references over very long ranges.
This means that a fallback to ISA-L is not possible and it means that the costly two-staged decoding has to be done for almost all the data.
This is also the reason why if fails to scale above 64 cores, i.e, to the second CPU socket.
The first and second decompression stages are completely independently submitted to a thread pool, which on this NUMA architecture means, that data needs to be costly transferred from one processor socket to the other if the second step for a chunk is not done on the same processor as the first.
This should be fixable by making the ThreadPool NUMA-aware.
These three scaling plots were created with rapidgzip 0.9.0 while the ones in the [paper](<results/paper/Knespel, Brunst - 2023 - Rapidgzip - Parallel Decompression and Seeking in Gzip Files Using Cache Prefetching.pdf>) were created with 0.5.0.
## Scaling Benchmarks on Ryzen 3900X
These benchmarks on my local workstation with a Ryzen 3900X only has 12 cores (24 virtual cores) but the base frequency is much higher than the 2xAMD EPYC CPU 7702.
### Decompression With Existing Index
| | 4GiB-base64 | 4GiB-base64 | | 20x-silesia | 20x-silesia
|------------------------|------------------------------|-----------------|-|-------------------------------|---------
| Uncompressed Size | 4 GiB | | | 3.95 GiB |
| Compressed Size | 3.04 GiB | | | 1.27 GiB |
| **Module** | **Bandwidth <br/> / (MB/s)** | **Speedup** | | **Bandwidth <br/> / (MB/s)** | **Speedup**
| gzip | 250 | 1 | | 293 | 1
| rapidgzip (0 threads) | 5179 | 20.6 | | 5640 | 18.8
| rapidgzip (1 threads) | 488 | 1.9 | | 684 | 2.3
| rapidgzip (2 threads) | 902 | 3.6 | | 1200 | 4.0
| rapidgzip (6 threads) | 2617 | 10.4 | | 3250 | 10.9
| rapidgzip (12 threads) | 4463 | 17.7 | | 5600 | 18.7
| rapidgzip (24 threads) | 5240 | 20.8 | | 5750 | 19.2
| rapidgzip (32 threads) | 4929 | 19.6 | | 5300 | 17.7
### Decompression From Scratch
| | 4GiB-base64 | 4GiB-base64 | | 20x-silesia | 20x-silesia
|------------------------|------------------------------|-----------------|-|-------------------------------|---------
| Uncompressed Size | 4 GiB | | | 3.95 GiB |
| Compressed Size | 3.04 GiB | | | 1.27 GiB |
| **Module** | **Bandwidth <br/> / (MB/s)** | **Speedup** | | **Bandwidth <br/> / (MB/s)** | **Speedup**
| gzip | 250 | 1 | | 293 | 1
| rapidgzip (0 threads) | 5060 | 20.1 | | 2070 | 6.9
| rapidgzip (1 threads) | 487 | 1.9 | | 630 | 2.1
| rapidgzip (2 threads) | 839 | 3.3 | | 694 | 2.3
| rapidgzip (6 threads) | 2365 | 9.4 | | 1740 | 5.8
| rapidgzip (12 threads) | 4116 | 16.4 | | 1900 | 6.4
| rapidgzip (24 threads) | 4974 | 19.8 | | 2040 | 6.8
| rapidgzip (32 threads) | 4612 | 18.3 | | 2580 | 8.6
## Benchmarks for Different Compressors
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-comparison-benchmarks-2023-09-05T20-45-10/rapidgzip-compressor-comparison.png)
This benchmarks compresses the enlarged Silesia TAR with different gzip implementations, each with different compression levels.
Rapidgzip is then used to decompress the resulting files with 128 cores.
Rapidgzip can parallelize decompression for almost all tested cases.
The only exception are files compressed with `igzip -0`, because these files conain only a single several gigabytes large deflate block.
This is the only known tool to produce such a pathological deflate block.
The decompression bandwidth for the other compressors, varies quite a lot.
The fastest decompression is reached with 22 GB/s for bgzip-compressed files because the bgzip format is directly supported, which enabled rapidgzip to avoid the two-staged decompression method and also enables rapidgzip to offload all of the work to ISA-L.
Files compressed with `bgzip -l 0` decompress slightly slower with "only" 18 GB/s, because it creates a fully non-compressed gzip stream and therefore is more I/O bound than the other bgzip-generated files.
Decompression of pigz-generated files is the slowest with 6 GB/s as opposed to 10-14 GB/s for gzip and igzip.
It is not clear why that is.
It might be because `pigz` generates small deflate blocks and adds flush markers.
The values in this chart are higher than in table 3 in the [paper](#citation) because the measurements were done with rapidgzip 0.10.1 instead of version 0.5.0.
## Benchmarks for Different Decompressors
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-comparison-benchmarks-2023-09-05T20-45-10/rapidgzip-compression-format-comparison.png)
This benchmarks uses different compressors and different decompressors to show multiple things:
- Single-core decompression of rapidgzip is close to `igzip` and roughly twice as fast as `bgzip`, which uses zlib.
- Decompression bandwidth with ISA-L can somewhat compete with zstd and is only 25% slower.
- Both, `bgzip` and `pzstd` can only parallelize decompression of files compressed with `bgzip` / `pzstd`.
This especially means, that files compressed with the standard `zstd` tool cannot be decompressed in parallel and tops out at ~800 MB/s.
- Even for bgzip-compressed files, rapidgzip is always faster than `bgzip` for decompression, thanks to ISA-L and better multi-threading.
- Rapidgzip scales higher than pzstd for decompression with many cores, and can be more than twice as fast when an index exists: 24.3 GB/s vs. 9.5 GB/s.
The values in this chart are higher than in table 4 in the [paper](#citation) because the measurements were done with rapidgzip 0.10.1 instead of [version 0.5.0](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-comparison-benchmarks-2023-09-05T20-45-10/rapidgzip-0.5.0-compression-format-comparison.png).
</details>
# Usage
## Command Line Tool
```bash
rapidgzip --help
# Parallel decoding: 1.7 s
time rapidgzip -d -c -P 0 sample.gz | wc -c
# Serial decoding: 22 s
time gzip -d -c sample.gz | wc -c
```
<details>
<summary>Help Output</summary>
```
A gzip decompressor tool based on the rapidgzip backend from ratarmount
Usage:
rapidgzip [OPTION...] positional parameters
Actions options:
-d, --decompress Force decompression. Only for compatibility. No
compression supported anyways.
--import-index arg Uses an existing gzip index.
--export-index arg Write out a gzip index file.
--count Prints the decompressed size.
-l, --count-lines Prints the number of newline characters in the
decompressed data.
--analyze Print output about the internal file format
structure like the block types.
Advanced options:
--chunk-size arg The chunk size decoded by the parallel workers
in KiB. (default: 4096)
--verify Verify CRC32 checksum. Will slow down
decompression and there are already some
implicit and explicit checks like whether the
end of the file could be reached and whether
the stream size is correct.
--no-verify Do not verify CRC32 checksum. Might speed up
decompression and there are already some
implicit and explicit checks like whether the
end of the file could be reached and whether
the stream size is correct.
--io-read-method arg Option to force a certain I/O method for
reading. By default, pread will be used when
possible. Possible values: pread, sequential,
locked-read (default: pread)
--index-format arg Option to select an output index format.
Possible values: gztool, gztool-with-lines,
indexed_gzip. (default: indexed_gzip)
Decompression options:
-c, --stdout Output to standard output. This is the
default, when reading from standard input.
-f, --force Force overwriting existing output files.
Also forces decompression even when piped
to /dev/null.
-o, --output arg Output file. If none is given, use the
input file name with '.gz' stripped or
'<input file>.out'. If no input is read
from standard input and not output file is
given, then will write to standard output.
-k, --keep Keep (do not delete) input file. Only for
compatibility. This tool will not delete
anything automatically!
-P, --decoder-parallelism arg
Use the parallel decoder. If an optional
integer >= 1 is given, then that is the
number of decoder threads to use. Note that
there might be further threads being
started with non-decoding work. If 0 is
given, then the parallelism will be
determined automatically. (default: 0)
--ranges arg Decompress only the specified byte ranges.
Example: 10@0,1KiB@15KiB,5L@20L to
decompress the first 10 bytes, 1024 bytes
at offset 15 KiB, as well as the 5 lines
after skipping the first 20 lines.
Output options:
-h, --help Print this help message.
-q, --quiet Suppress noncritical error messages.
-v, --verbose Print debug output and profiling statistics.
-V, --version Display software version.
--oss-attributions Display open-source software licenses.
--oss-attributions-yaml Display open-source software licenses in
YAML format for use with Conda.
If no file names are given, rapidgzip decompresses from standard input to standard output.
If the output is discarded by piping to /dev/null, then the actual decoding step might
be omitted if neither -l nor -L nor --force are given.
Examples:
Decompress a file:
rapidgzip -d file.gz
Decompress a file in parallel:
rapidgzip -d -P 0 file.gz
List information about all gzip streams and deflate blocks:
rapidgzip --analyze file.gz
```
</details>
## Python Library
### Simple open, seek, read, and close
```python3
from rapidgzip import RapidgzipFile
file = RapidgzipFile("example.gz", parallelization=os.cpu_count())
# You can now use it like a normal file
file.seek(123)
data = file.read(100)
file.close()
```
The first call to seek will ensure that the block offset list is complete and therefore might create them first.
Because of this the first call to seek might take a while.
### Use with context manager
```python3
import os
import rapidgzip
with rapidgzip.open("example.gz", parallelization=os.cpu_count()) as file:
file.seek(123)
data = file.read(100)
```
### Storing and loading the block offset map
The creation of the list of gzip blocks can take a while because it has to decode the gzip file completely.
To avoid this setup when opening a gzip file, the block offset list can be exported and imported.
### Open a pure Python file-like object for indexed reading
```python3
import io
import os
import rapidgzip as rapidgzip
with open("example.gz", "rb") as file:
in_memory_file = io.BytesIO(file.read())
with rapidgzip.open(in_memory_file, parallelization=os.cpu_count()) as file:
file.seek(123)
data = file.read(100)
```
## Via Ratarmount
`rapidgzip` is the default backend in ratarmount since version 0.14.0.
Then, you can use [ratarmount](https://github.com/mxmlnkn/ratarmount) to mount single gzip files easily.
```bash
base64 /dev/urandom | head -c $(( 4 * 1024 * 1024 * 1024 )) | gzip > sample.gz
# Serial decoding: 23 s
time gzip -c -d sample.gz | wc -c
python3 -m pip install --user ratarmount
ratarmount sample.gz mounted
# Parallel decoding: 3.5 s
time cat mounted/sample | wc -c
# Random seeking to the middle of the file and reading 1 MiB: 0.287 s
time dd if=mounted/sample bs=$(( 1024 * 1024 )) \
iflag=skip_bytes,count_bytes skip=$(( 2 * 1024 * 1024 * 1024 )) count=$(( 1024 * 1024 )) | wc -c
```
# C++ library
Because it is written in C++, it can of course also be used as a C++ library.
In order to make heavy use of templates and to simplify compiling with Python `setuptools`, it is mostly header-only so that integration it into another project should be easy.
The license is also permissive enough for most use cases.
I currently did not yet test integrating it into other projects other than simply manually copying the source in `src/core`, `src/rapidgzip`, and if integrated zlib is desired also `src/external/zlib`.
If you have suggestions and wishes like support with CMake or Conan, please open an issue.
# Citation
A paper describing the implementation details and showing the scaling behavior with up to 128 cores has been submitted to and [accepted](https://www.hpdc.org/2023/program/technical-sessions/) in [ACM HPDC'23](https://www.hpdc.org/2023/), The 32nd International Symposium on High-Performance Parallel and Distributed Computing.
The paper can also be accessed [on ACM DL](https://doi.org/10.1145/3588195.3592992) or [Arxiv](https://arxiv.org/abs/2308.08955).
The accompanying presentation can be found [here](results/Presentation-2023-06-22.pdf).
If you use this software for your scientific publication, please cite it as:
```bibtex
@inproceedings{rapidgzip,
author = {Knespel, Maximilian and Brunst, Holger},
title = {Rapidgzip: Parallel Decompression and Seeking in Gzip Files Using Cache Prefetching},
year = {2023},
isbn = {9798400701559},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3588195.3592992},
doi = {10.1145/3588195.3592992},
abstract = {Gzip is a file compression format, which is ubiquitously used. Although a multitude of gzip implementations exist, only pugz can fully utilize current multi-core processor architectures for decompression. Yet, pugz cannot decompress arbitrary gzip files. It requires the decompressed stream to only contain byte values 9–126. In this work, we present a generalization of the parallelization scheme used by pugz that can be reliably applied to arbitrary gzip-compressed data without compromising performance. We show that the requirements on the file contents posed by pugz can be dropped by implementing an architecture based on a cache and a parallelized prefetcher. This architecture can safely handle faulty decompression results, which can appear when threads start decompressing in the middle of a gzip file by using trial and error. Using 128 cores, our implementation reaches 8.7 GB/s decompression bandwidth for gzip-compressed base64-encoded data, a speedup of 55 over the single-threaded GNU gzip, and 5.6 GB/s for the Silesia corpus, a speedup of 33 over GNU gzip.},
booktitle = {Proceedings of the 32nd International Symposium on High-Performance Parallel and Distributed Computing},
pages = {295–307},
numpages = {13},
keywords = {gzip, decompression, parallel algorithm, performance, random access},
location = {Orlando, FL, USA},
series = {HPDC '23},
}
```
# About
This tool originated as a backend for [ratarmount](https://github.com/mxmlnkn/ratarmount).
After writing the bzip2 backend for [ratarmount](https://github.com/mxmlnkn/indexed_bzip2), my hesitation about reimplementing custom decoders for existing file formats has vastly diminished.
And, while random access to gzip files did exist with [indexed_gzip](https://github.com/pauldmccarthy/indexed_gzip), it did not support parallel decompression neither for the index creation nor when the index already exists.
The latter of which is trivial, when ignoring load balancing issues, but parallelizing even the index creation is vastly more complicated because decompressing data requires the previous 32 KiB of decompressed data to be known.
After implementing a production-ready version by improving upon the algorithm used by [pugz](https://github.com/Piezoid/pugz), I submitted a [paper](Citation).
The review process was double-blind and I was unsure whether to pseudonymize Pragzip because it has already been uploaded to Github.
In the end, I used "rapidgzip" during the review process and because I was not sure, which form fields should be filled with the pseudonymized title, I simply stuck with it.
Rapidgzip was chosen for similar reason to pragzip, namely the P and RA are acronyms for Parallel and Random Access.
As rapgzip, did not stick, I used rapidgzip, which now also contains the foremost design goal in its name: being rapidly faster than single-threaded implementations.
Furthermore, the additional ID could be interpreted to stand for Index and Decompression, making "rapid" a partial backronym.
# Internal Architecture
The main part of the [internal architecture](https://github.com/mxmlnkn/indexed_bzip2/tree/master/python/indexed_bzip2#internal-architecture) used for parallelizing is the same as used for [indexed_bzip2](https://github.com/mxmlnkn/indexed_bzip2).
# Tracing the Decoder
Performance profiling and tracing is done with [Score-P](https://www.vi-hps.org/projects/score-p/) for instrumentation and [Vampir](https://vampir.eu/) for visualization.
This is one way, you could install Score-P with most of the functionalities on Ubuntu 22.04.
## Installation of Dependencies
<details>
<summary>Installation steps for Score-P</summary>
```bash
sudo apt-get install libopenmpi-dev openmpi-bin gcc-11-plugin-dev llvm-dev libclang-dev libunwind-dev \
libopen-trace-format-dev otf-trace libpapi-dev
# Install Score-P (to /opt/scorep)
SCOREP_VERSION=8.0
wget "https://perftools.pages.jsc.fz-juelich.de/cicd/scorep/tags/scorep-${SCOREP_VERSION}/scorep-${SCOREP_VERSION}.tar.gz"
tar -xf "scorep-${SCOREP_VERSION}.tar.gz"
cd "scorep-${SCOREP_VERSION}"
./configure --with-mpi=openmpi --enable-shared --without-llvm --without-shmem --without-cubelib --prefix="/opt/scorep-${SCOREP_VERSION}"
make -j $( nproc )
make install
# Add /opt/scorep to your path variables on shell start
cat <<EOF >> ~/.bashrc
if test -d /opt/scorep; then
export SCOREP_ROOT=/opt/scorep
export PATH=$SCOREP_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$SCOREP_ROOT/lib:$LD_LIBRARY_PATH
fi
EOF
echo -1 | sudo tee /proc/sys/kernel/perf_event_paranoid
# Check whether it works
scorep --version
scorep-info config-summary
```
</details>
## Tracing
### Results for a version from 2023-02-04
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/Screenshot_2023-01-28_17-16-49.png)
### Comparison without and with rpmalloc preloaded
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/malloc/Summary_Timeline_scorep-pragzip-2023-02-04-without-rpmalloc.png)
![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/malloc/Summary_Timeline_scorep-pragzip-2023-02-04-with-rpmalloc.png)
Raw data
{
"_id": null,
"home_page": null,
"name": "rapidgzip",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Maximilian Knespel <mxmlnkn@github.de>",
"download_url": "https://files.pythonhosted.org/packages/0b/ac/0eee3d3279618a3c3810ac6b012b8ee7c1a9f239c9fa37529e619a31bb93/rapidgzip-0.14.3.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/python/rapidgzip/rapidgzip.svg)\n\n# Rapidgzip: Parallelized Decompression of Gzip Files with Support for Fast Random Access\n\n[![PyPI version](https://badge.fury.io/py/rapidgzip.svg)](https://badge.fury.io/py/rapidgzip)\n[![Python Version](https://img.shields.io/pypi/pyversions/rapidgzip)](https://pypi.org/project/rapidgzip/)\n[![PyPI Platforms](https://img.shields.io/badge/pypi-linux%20%7C%20macOS%20%7C%20Windows-brightgreen)](https://pypi.org/project/rapidgzip/)\n[![Downloads](https://static.pepy.tech/badge/rapidgzip/month)](https://pepy.tech/project/rapidgzip)\n<br>\n[![Changelog](https://img.shields.io/badge/Changelog-Markdown-blue)](https://github.com/mxmlnkn/indexed_bzip2/blob/master/python/rapidgzip/CHANGELOG.md)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://opensource.org/licenses/MIT)\n[![C++ Code Checks](https://github.com/mxmlnkn/indexed_bzip2/actions/workflows/test-cpp.yml/badge.svg)](https://github.com/mxmlnkn/indexed_bzip2/actions/workflows/test-cpp.yml)\n[![codecov](https://codecov.io/gh/mxmlnkn/indexed_bzip2/branch/master/graph/badge.svg?token=94ZD4UTZQW)](https://codecov.io/gh/mxmlnkn/rapidgzip)\n![C++17](https://img.shields.io/badge/C++-17-blue.svg)\n[![Discord](https://img.shields.io/discord/783411320354766878?label=discord)](https://discord.gg/Wra6t6akh2)\n[![Telegram](https://img.shields.io/badge/Chat-Telegram-%2330A3E6)](https://t.me/joinchat/FUdXxkXIv6c4Ib8bgaSxNg)\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/asciinema/rapidgzip-comparison.gif)\n\n</div>\n\nThis repository contains the command line tool `rapidgzip`, which can be used for parallel decompression of almost any gzip file. Other tools, such as [bgzip](http://www.htslib.org/doc/bgzip.html), can only parallelize decompression of gzip files produced by themselves. `rapidgzip` works with all files, especially those produced by the usually installed [GNU gzip](https://www.gzip.org/). How this works can be read in the [pugz paper](https://arxiv.org/abs/1905.07224) or in the [rapidgzip paper](https://arxiv.org/abs/2308.08955), which builds upon the former.\n\nThe Python module provides a `RapidgzipFile` class, which can be used to seek inside gzip files without having to decompress them first.\nAlternatively, you can use this simply as a **parallelized** gzip decoder as a replacement for Python's builtin `gzip` module in order to fully utilize all your cores.\n\nThe random seeking support is the same as provided by [indexed_gzip](https://github.com/pauldmccarthy/indexed_gzip) but further speedups are realized at the cost of higher memory usage thanks to a least-recently-used cache in combination with a parallelized prefetcher.\n\n[This](https://github.com/mxmlnkn/rapidgzip) repository is a light-weight fork of the [indexed_bzip2](https://github.com/mxmlnkn/indexed_bzip2) repository, in which the main development takes place.\nThis repository was created for visibility reasons and in order to keep indexed_bzip2 and rapidgzip releases separate.\nIt will be updated at least for each release.\nIssues regarding rapidgzip should be opened [here](https://github.com/mxmlnkn/rapidgzip/issues).\n\n\n# Table of Contents\n\n1. [Installation](#installation)\n2. [Performance](#performance)\n 1. [Scaling Benchmarks on 2xAMD EPYC CPU 7702 (2x64 cores)](#scaling-benchmarks-on-2xamd-epyc-cpu-7702-2x64-cores)\n 2. [Scaling Benchmarks on Ryzen 3900X](#scaling-benchmarks-on-ryzen-3900x)\n 3. [Benchmarks for Different Compressors](#benchmarks-for-different-compressors)\n 4. [Benchmarks for Different Decompressors](#benchmarks-for-different-decompressors)\n3. [Usage](#usage)\n 1. [Command Line Tool](#command-line-tool)\n 2. [Python Library](#python-library)\n 3. [Via Ratarmount](#via-ratarmount)\n 4. [C++ Library](#c-library)\n4. [Citation](#citation)\n5. [About](#about)\n6. [Internal Architecture](#internal-architecture)\n7. [Tracing the Decoder](#tracing-the-decoder)\n\n\n# Installation\n\nYou can simply install it from PyPI:\n\n```\npython3 -m pip install --upgrade pip # Recommended for newer manylinux wheels\npython3 -m pip install rapidgzip\nrapidgzip --help\n```\n\n<details>\n<summary>Advanced Installations</summary>\n\nThe latest unreleased development version can be tested out with:\n\n```bash\npython3 -m pip install --force-reinstall 'git+https://github.com/mxmlnkn/indexed_bzip2.git@master#egginfo=rapidgzip&subdirectory=python/rapidgzip'\n```\n\nAnd to build locally, you can use `build` and install the wheel:\n\n```bash\ncd python/rapidgzip\nrm -rf dist\npython3 -m build .\npython3 -m pip install --force-reinstall --user dist/*.whl\n```\n\n</details>\n\n\n# Performance\n\nFollowing are benchmarks showing the decompression bandwidth over the number of used cores.\n\nThere are two rapidgzip variants shown: `(index)` and `(no index)`.\nRapidgzip is generally faster when given an index with `--import-index` because it can delegate the decompression to ISA-l or zlib while it has to use its own custom-written gzip decompression engine when no index exists yet.\nFurthermore, decompression can be parallelized more evenly and more effectively when an index exists because the serializing window propagation step is not necessary.\n\nThe violin plots show 20 repeated measurements as a single \"blob\".\nThin blobs signal very reproducible timings while thick blobs signal a large variance.\n\n\n## Scaling Benchmarks on 2xAMD EPYC CPU 7702 (2x64 cores)\n\n### Decompression of Silesia Corpus\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-0.9.0-scaling-benchmarks-2023-08-30/plots/result-parallel-decompression-silesia-dev-null-bandwidths-number-of-threads.png)\n\nThis benchmark uses the [Silesia corpus](https://sun.aei.polsl.pl//~sdeor/index.php?page=silesia) compressed as a .tar.gz file to show the decompression performance.\nHowever, the compressed dataset is only ~69 MB, which is not sufficiently large to show parallelization over 128 cores.\nThat's why the TAR file is repeated as often as there are number of cores in the benchmark times 2 and then compressed into a single large gzip file, which is ~18 GB compressed and 54 GB uncompressed for 128 cores.\n\nRapidgzip achieves up to 24 GB/s with an index and 12 GB/s without.\n\nPugz is not shown as comparison because it is not able to decompress the Silesia dataset because it contains binary data, which it cannot handle.\n\n\n<details>\n<summary>More Benchmarks</summary>\n\n### Decompression of Gzip-Compressed Base64 Data\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-0.9.0-scaling-benchmarks-2023-08-30/plots/result-parallel-decompression-base64-dev-null-bandwidths-number-of-threads.png)\n\nThis benchmarks uses random data, that has been base64 encoded and then gzip-compressed.\nThis is the next best case for rapidgzip after the trivial case of purely random data, which cannot be compressed and therefore can be decompressed with a simple memory copy.\nThis next best case results in mostly Huffman-coding compressed data with only very few LZ77 back-references.\nWithout LZ77 back-references, parallel decompression can be done more independently and therefore faster than in the case of many LZ77 back-references.\n\n\n### Decompression of Gzip-Compressed FASTQ Data\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-0.9.0-scaling-benchmarks-2023-08-30/plots/result-parallel-decompression-fastq-dev-null-bandwidths-number-of-threads.png)\n\nThis benchmarks uses gzip-compressed [FASTQ data](http://ftp.sra.ebi.ac.uk/vol1/fastq/SRR224/085/SRR22403185/SRR22403185_2.fastq.gz).\nThat's why the TAR file is repeated as often as there are number of cores in the benchmark to hold the decompression times roughly constant in order to make the benchmark over this large a range feasible.\nThis is almost the worst case for rapidgzip because it contains many LZ77 back-references over very long ranges.\nThis means that a fallback to ISA-L is not possible and it means that the costly two-staged decoding has to be done for almost all the data.\nThis is also the reason why if fails to scale above 64 cores, i.e, to the second CPU socket.\nThe first and second decompression stages are completely independently submitted to a thread pool, which on this NUMA architecture means, that data needs to be costly transferred from one processor socket to the other if the second step for a chunk is not done on the same processor as the first.\nThis should be fixable by making the ThreadPool NUMA-aware.\n\nThese three scaling plots were created with rapidgzip 0.9.0 while the ones in the [paper](<results/paper/Knespel, Brunst - 2023 - Rapidgzip - Parallel Decompression and Seeking in Gzip Files Using Cache Prefetching.pdf>) were created with 0.5.0.\n\n\n## Scaling Benchmarks on Ryzen 3900X\n\nThese benchmarks on my local workstation with a Ryzen 3900X only has 12 cores (24 virtual cores) but the base frequency is much higher than the 2xAMD EPYC CPU 7702.\n\n### Decompression With Existing Index\n\n| | 4GiB-base64 | 4GiB-base64 | | 20x-silesia | 20x-silesia\n|------------------------|------------------------------|-----------------|-|-------------------------------|---------\n| Uncompressed Size | 4 GiB | | | 3.95 GiB |\n| Compressed Size | 3.04 GiB | | | 1.27 GiB |\n| **Module** | **Bandwidth <br/> / (MB/s)** | **Speedup** | | **Bandwidth <br/> / (MB/s)** | **Speedup**\n| gzip | 250 | 1 | | 293 | 1\n| rapidgzip (0 threads) | 5179 | 20.6 | | 5640 | 18.8\n| rapidgzip (1 threads) | 488 | 1.9 | | 684 | 2.3\n| rapidgzip (2 threads) | 902 | 3.6 | | 1200 | 4.0\n| rapidgzip (6 threads) | 2617 | 10.4 | | 3250 | 10.9\n| rapidgzip (12 threads) | 4463 | 17.7 | | 5600 | 18.7\n| rapidgzip (24 threads) | 5240 | 20.8 | | 5750 | 19.2\n| rapidgzip (32 threads) | 4929 | 19.6 | | 5300 | 17.7\n\n\n### Decompression From Scratch\n\n| | 4GiB-base64 | 4GiB-base64 | | 20x-silesia | 20x-silesia\n|------------------------|------------------------------|-----------------|-|-------------------------------|---------\n| Uncompressed Size | 4 GiB | | | 3.95 GiB |\n| Compressed Size | 3.04 GiB | | | 1.27 GiB |\n| **Module** | **Bandwidth <br/> / (MB/s)** | **Speedup** | | **Bandwidth <br/> / (MB/s)** | **Speedup**\n| gzip | 250 | 1 | | 293 | 1\n| rapidgzip (0 threads) | 5060 | 20.1 | | 2070 | 6.9\n| rapidgzip (1 threads) | 487 | 1.9 | | 630 | 2.1\n| rapidgzip (2 threads) | 839 | 3.3 | | 694 | 2.3\n| rapidgzip (6 threads) | 2365 | 9.4 | | 1740 | 5.8\n| rapidgzip (12 threads) | 4116 | 16.4 | | 1900 | 6.4\n| rapidgzip (24 threads) | 4974 | 19.8 | | 2040 | 6.8\n| rapidgzip (32 threads) | 4612 | 18.3 | | 2580 | 8.6\n\n\n## Benchmarks for Different Compressors\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-comparison-benchmarks-2023-09-05T20-45-10/rapidgzip-compressor-comparison.png)\n\nThis benchmarks compresses the enlarged Silesia TAR with different gzip implementations, each with different compression levels.\nRapidgzip is then used to decompress the resulting files with 128 cores.\n\nRapidgzip can parallelize decompression for almost all tested cases.\nThe only exception are files compressed with `igzip -0`, because these files conain only a single several gigabytes large deflate block.\nThis is the only known tool to produce such a pathological deflate block.\n\nThe decompression bandwidth for the other compressors, varies quite a lot.\nThe fastest decompression is reached with 22 GB/s for bgzip-compressed files because the bgzip format is directly supported, which enabled rapidgzip to avoid the two-staged decompression method and also enables rapidgzip to offload all of the work to ISA-L.\nFiles compressed with `bgzip -l 0` decompress slightly slower with \"only\" 18 GB/s, because it creates a fully non-compressed gzip stream and therefore is more I/O bound than the other bgzip-generated files.\n\nDecompression of pigz-generated files is the slowest with 6 GB/s as opposed to 10-14 GB/s for gzip and igzip.\nIt is not clear why that is.\nIt might be because `pigz` generates small deflate blocks and adds flush markers.\n\nThe values in this chart are higher than in table 3 in the [paper](#citation) because the measurements were done with rapidgzip 0.10.1 instead of version 0.5.0.\n\n\n## Benchmarks for Different Decompressors\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-comparison-benchmarks-2023-09-05T20-45-10/rapidgzip-compression-format-comparison.png)\n\nThis benchmarks uses different compressors and different decompressors to show multiple things:\n\n - Single-core decompression of rapidgzip is close to `igzip` and roughly twice as fast as `bgzip`, which uses zlib.\n - Decompression bandwidth with ISA-L can somewhat compete with zstd and is only 25% slower.\n - Both, `bgzip` and `pzstd` can only parallelize decompression of files compressed with `bgzip` / `pzstd`.\n This especially means, that files compressed with the standard `zstd` tool cannot be decompressed in parallel and tops out at ~800 MB/s.\n - Even for bgzip-compressed files, rapidgzip is always faster than `bgzip` for decompression, thanks to ISA-L and better multi-threading.\n - Rapidgzip scales higher than pzstd for decompression with many cores, and can be more than twice as fast when an index exists: 24.3 GB/s vs. 9.5 GB/s.\n\nThe values in this chart are higher than in table 4 in the [paper](#citation) because the measurements were done with rapidgzip 0.10.1 instead of [version 0.5.0](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/rapidgzip-comparison-benchmarks-2023-09-05T20-45-10/rapidgzip-0.5.0-compression-format-comparison.png).\n\n</details>\n\n\n# Usage\n\n## Command Line Tool\n\n```bash\nrapidgzip --help\n\n# Parallel decoding: 1.7 s\ntime rapidgzip -d -c -P 0 sample.gz | wc -c\n\n# Serial decoding: 22 s\ntime gzip -d -c sample.gz | wc -c\n```\n\n<details>\n<summary>Help Output</summary>\n\n```\nA gzip decompressor tool based on the rapidgzip backend from ratarmount\nUsage:\n rapidgzip [OPTION...] positional parameters\n\n Actions options:\n -d, --decompress Force decompression. Only for compatibility. No\n compression supported anyways.\n --import-index arg Uses an existing gzip index.\n --export-index arg Write out a gzip index file.\n --count Prints the decompressed size.\n -l, --count-lines Prints the number of newline characters in the\n decompressed data.\n --analyze Print output about the internal file format\n structure like the block types.\n\n Advanced options:\n --chunk-size arg The chunk size decoded by the parallel workers\n in KiB. (default: 4096)\n --verify Verify CRC32 checksum. Will slow down\n decompression and there are already some\n implicit and explicit checks like whether the\n end of the file could be reached and whether\n the stream size is correct.\n --no-verify Do not verify CRC32 checksum. Might speed up\n decompression and there are already some\n implicit and explicit checks like whether the\n end of the file could be reached and whether\n the stream size is correct.\n --io-read-method arg Option to force a certain I/O method for\n reading. By default, pread will be used when\n possible. Possible values: pread, sequential,\n locked-read (default: pread)\n --index-format arg Option to select an output index format.\n Possible values: gztool, gztool-with-lines,\n indexed_gzip. (default: indexed_gzip)\n\n Decompression options:\n -c, --stdout Output to standard output. This is the\n default, when reading from standard input.\n -f, --force Force overwriting existing output files.\n Also forces decompression even when piped\n to /dev/null.\n -o, --output arg Output file. If none is given, use the\n input file name with '.gz' stripped or\n '<input file>.out'. If no input is read\n from standard input and not output file is\n given, then will write to standard output.\n -k, --keep Keep (do not delete) input file. Only for\n compatibility. This tool will not delete\n anything automatically!\n -P, --decoder-parallelism arg\n Use the parallel decoder. If an optional\n integer >= 1 is given, then that is the\n number of decoder threads to use. Note that\n there might be further threads being\n started with non-decoding work. If 0 is\n given, then the parallelism will be\n determined automatically. (default: 0)\n --ranges arg Decompress only the specified byte ranges.\n Example: 10@0,1KiB@15KiB,5L@20L to\n decompress the first 10 bytes, 1024 bytes\n at offset 15 KiB, as well as the 5 lines\n after skipping the first 20 lines.\n\n Output options:\n -h, --help Print this help message.\n -q, --quiet Suppress noncritical error messages.\n -v, --verbose Print debug output and profiling statistics.\n -V, --version Display software version.\n --oss-attributions Display open-source software licenses.\n --oss-attributions-yaml Display open-source software licenses in\n YAML format for use with Conda.\n\nIf no file names are given, rapidgzip decompresses from standard input to standard output.\nIf the output is discarded by piping to /dev/null, then the actual decoding step might\nbe omitted if neither -l nor -L nor --force are given.\n\nExamples:\n\nDecompress a file:\n rapidgzip -d file.gz\n\nDecompress a file in parallel:\n rapidgzip -d -P 0 file.gz\n\nList information about all gzip streams and deflate blocks:\n rapidgzip --analyze file.gz\n```\n\n</details>\n\n\n## Python Library\n\n### Simple open, seek, read, and close\n\n```python3\nfrom rapidgzip import RapidgzipFile\n\nfile = RapidgzipFile(\"example.gz\", parallelization=os.cpu_count())\n\n# You can now use it like a normal file\nfile.seek(123)\ndata = file.read(100)\nfile.close()\n```\n\nThe first call to seek will ensure that the block offset list is complete and therefore might create them first.\nBecause of this the first call to seek might take a while.\n\n\n### Use with context manager\n\n```python3\nimport os\nimport rapidgzip\n\nwith rapidgzip.open(\"example.gz\", parallelization=os.cpu_count()) as file:\n file.seek(123)\n data = file.read(100)\n```\n\n\n### Storing and loading the block offset map\n\nThe creation of the list of gzip blocks can take a while because it has to decode the gzip file completely.\nTo avoid this setup when opening a gzip file, the block offset list can be exported and imported.\n\n\n### Open a pure Python file-like object for indexed reading\n\n```python3\nimport io\nimport os\nimport rapidgzip as rapidgzip\n\nwith open(\"example.gz\", \"rb\") as file:\n in_memory_file = io.BytesIO(file.read())\n\nwith rapidgzip.open(in_memory_file, parallelization=os.cpu_count()) as file:\n file.seek(123)\n data = file.read(100)\n```\n\n\n## Via Ratarmount\n\n`rapidgzip` is the default backend in ratarmount since version 0.14.0.\nThen, you can use [ratarmount](https://github.com/mxmlnkn/ratarmount) to mount single gzip files easily.\n\n```bash\nbase64 /dev/urandom | head -c $(( 4 * 1024 * 1024 * 1024 )) | gzip > sample.gz\n# Serial decoding: 23 s\ntime gzip -c -d sample.gz | wc -c\n\npython3 -m pip install --user ratarmount\nratarmount sample.gz mounted\n\n# Parallel decoding: 3.5 s\ntime cat mounted/sample | wc -c\n\n# Random seeking to the middle of the file and reading 1 MiB: 0.287 s\ntime dd if=mounted/sample bs=$(( 1024 * 1024 )) \\\n iflag=skip_bytes,count_bytes skip=$(( 2 * 1024 * 1024 * 1024 )) count=$(( 1024 * 1024 )) | wc -c\n```\n\n\n# C++ library\n\nBecause it is written in C++, it can of course also be used as a C++ library.\nIn order to make heavy use of templates and to simplify compiling with Python `setuptools`, it is mostly header-only so that integration it into another project should be easy.\nThe license is also permissive enough for most use cases.\n\nI currently did not yet test integrating it into other projects other than simply manually copying the source in `src/core`, `src/rapidgzip`, and if integrated zlib is desired also `src/external/zlib`.\nIf you have suggestions and wishes like support with CMake or Conan, please open an issue.\n\n\n# Citation\n\nA paper describing the implementation details and showing the scaling behavior with up to 128 cores has been submitted to and [accepted](https://www.hpdc.org/2023/program/technical-sessions/) in [ACM HPDC'23](https://www.hpdc.org/2023/), The 32nd International Symposium on High-Performance Parallel and Distributed Computing.\nThe paper can also be accessed [on ACM DL](https://doi.org/10.1145/3588195.3592992) or [Arxiv](https://arxiv.org/abs/2308.08955).\nThe accompanying presentation can be found [here](results/Presentation-2023-06-22.pdf).\n\nIf you use this software for your scientific publication, please cite it as:\n\n```bibtex\n@inproceedings{rapidgzip,\n author = {Knespel, Maximilian and Brunst, Holger},\n title = {Rapidgzip: Parallel Decompression and Seeking in Gzip Files Using Cache Prefetching},\n year = {2023},\n isbn = {9798400701559},\n publisher = {Association for Computing Machinery},\n address = {New York, NY, USA},\n url = {https://doi.org/10.1145/3588195.3592992},\n doi = {10.1145/3588195.3592992},\n abstract = {Gzip is a file compression format, which is ubiquitously used. Although a multitude of gzip implementations exist, only pugz can fully utilize current multi-core processor architectures for decompression. Yet, pugz cannot decompress arbitrary gzip files. It requires the decompressed stream to only contain byte values 9\u2013126. In this work, we present a generalization of the parallelization scheme used by pugz that can be reliably applied to arbitrary gzip-compressed data without compromising performance. We show that the requirements on the file contents posed by pugz can be dropped by implementing an architecture based on a cache and a parallelized prefetcher. This architecture can safely handle faulty decompression results, which can appear when threads start decompressing in the middle of a gzip file by using trial and error. Using 128 cores, our implementation reaches 8.7 GB/s decompression bandwidth for gzip-compressed base64-encoded data, a speedup of 55 over the single-threaded GNU gzip, and 5.6 GB/s for the Silesia corpus, a speedup of 33 over GNU gzip.},\n booktitle = {Proceedings of the 32nd International Symposium on High-Performance Parallel and Distributed Computing},\n pages = {295\u2013307},\n numpages = {13},\n keywords = {gzip, decompression, parallel algorithm, performance, random access},\n location = {Orlando, FL, USA},\n series = {HPDC '23},\n}\n```\n\n# About\n\nThis tool originated as a backend for [ratarmount](https://github.com/mxmlnkn/ratarmount).\nAfter writing the bzip2 backend for [ratarmount](https://github.com/mxmlnkn/indexed_bzip2), my hesitation about reimplementing custom decoders for existing file formats has vastly diminished.\nAnd, while random access to gzip files did exist with [indexed_gzip](https://github.com/pauldmccarthy/indexed_gzip), it did not support parallel decompression neither for the index creation nor when the index already exists.\nThe latter of which is trivial, when ignoring load balancing issues, but parallelizing even the index creation is vastly more complicated because decompressing data requires the previous 32 KiB of decompressed data to be known.\n\nAfter implementing a production-ready version by improving upon the algorithm used by [pugz](https://github.com/Piezoid/pugz), I submitted a [paper](Citation).\nThe review process was double-blind and I was unsure whether to pseudonymize Pragzip because it has already been uploaded to Github.\nIn the end, I used \"rapidgzip\" during the review process and because I was not sure, which form fields should be filled with the pseudonymized title, I simply stuck with it.\nRapidgzip was chosen for similar reason to pragzip, namely the P and RA are acronyms for Parallel and Random Access.\nAs rapgzip, did not stick, I used rapidgzip, which now also contains the foremost design goal in its name: being rapidly faster than single-threaded implementations.\nFurthermore, the additional ID could be interpreted to stand for Index and Decompression, making \"rapid\" a partial backronym.\n\n\n# Internal Architecture\n\nThe main part of the [internal architecture](https://github.com/mxmlnkn/indexed_bzip2/tree/master/python/indexed_bzip2#internal-architecture) used for parallelizing is the same as used for [indexed_bzip2](https://github.com/mxmlnkn/indexed_bzip2).\n\n\n# Tracing the Decoder\n\n\nPerformance profiling and tracing is done with [Score-P](https://www.vi-hps.org/projects/score-p/) for instrumentation and [Vampir](https://vampir.eu/) for visualization.\nThis is one way, you could install Score-P with most of the functionalities on Ubuntu 22.04.\n\n## Installation of Dependencies\n\n<details>\n<summary>Installation steps for Score-P</summary>\n\n```bash\nsudo apt-get install libopenmpi-dev openmpi-bin gcc-11-plugin-dev llvm-dev libclang-dev libunwind-dev \\\n libopen-trace-format-dev otf-trace libpapi-dev\n\n# Install Score-P (to /opt/scorep)\nSCOREP_VERSION=8.0\nwget \"https://perftools.pages.jsc.fz-juelich.de/cicd/scorep/tags/scorep-${SCOREP_VERSION}/scorep-${SCOREP_VERSION}.tar.gz\"\ntar -xf \"scorep-${SCOREP_VERSION}.tar.gz\"\ncd \"scorep-${SCOREP_VERSION}\"\n./configure --with-mpi=openmpi --enable-shared --without-llvm --without-shmem --without-cubelib --prefix=\"/opt/scorep-${SCOREP_VERSION}\"\nmake -j $( nproc )\nmake install\n\n# Add /opt/scorep to your path variables on shell start\ncat <<EOF >> ~/.bashrc\nif test -d /opt/scorep; then\n export SCOREP_ROOT=/opt/scorep\n export PATH=$SCOREP_ROOT/bin:$PATH\n export LD_LIBRARY_PATH=$SCOREP_ROOT/lib:$LD_LIBRARY_PATH\nfi\nEOF\n\necho -1 | sudo tee /proc/sys/kernel/perf_event_paranoid\n\n# Check whether it works\nscorep --version\nscorep-info config-summary\n```\n\n</details>\n\n## Tracing\n\n### Results for a version from 2023-02-04\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/Screenshot_2023-01-28_17-16-49.png)\n\n### Comparison without and with rpmalloc preloaded\n\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/malloc/Summary_Timeline_scorep-pragzip-2023-02-04-without-rpmalloc.png)\n![](https://raw.githubusercontent.com/mxmlnkn/indexed_bzip2/master/results/benchmarks/malloc/Summary_Timeline_scorep-pragzip-2023-02-04-with-rpmalloc.png)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Parallel random access to gzip files",
"version": "0.14.3",
"project_urls": {
"Homepage": "https://github.com/mxmlnkn/rapidgzip"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "24b49c6bcf81e3d3e0c618f314eb5da432694c940a9112fcb2e5daf903a0d583",
"md5": "0ac727efc2e69acc0bb39b5a51a69720",
"sha256": "478951662b8d4fb74d2dd4cac9faa76afec70395ff5a3b34feba1d385148d76c"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp310-cp310-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "0ac727efc2e69acc0bb39b5a51a69720",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 1097342,
"upload_time": "2024-10-14T20:15:21",
"upload_time_iso_8601": "2024-10-14T20:15:21.461276Z",
"url": "https://files.pythonhosted.org/packages/24/b4/9c6bcf81e3d3e0c618f314eb5da432694c940a9112fcb2e5daf903a0d583/rapidgzip-0.14.3-cp310-cp310-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3aabd2118a7684aa5fadb1193a5b8a8e79ec3605df7d6a946ba2aca745ebd268",
"md5": "5b4764ca4f28f4cce0bd08ecb6f2816a",
"sha256": "efdec51cc42f7f768482bcda900fe6e6e0a19cea2dfc62dea8780b031afdcb61"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "5b4764ca4f28f4cce0bd08ecb6f2816a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 1022538,
"upload_time": "2024-10-14T20:03:09",
"upload_time_iso_8601": "2024-10-14T20:03:09.316562Z",
"url": "https://files.pythonhosted.org/packages/3a/ab/d2118a7684aa5fadb1193a5b8a8e79ec3605df7d6a946ba2aca745ebd268/rapidgzip-0.14.3-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6ec84aa76dc4247b698160afd93ebc12d09534cbf856af7fa61287305dc23218",
"md5": "f3ffe10ec4d4ed0e8822a759d313ac3e",
"sha256": "7aa1989fedbf7e9b7aabe58af0149fe357ad4cfa13ac6daeafe5fddd382a5979"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "f3ffe10ec4d4ed0e8822a759d313ac3e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 8915833,
"upload_time": "2024-10-14T20:24:45",
"upload_time_iso_8601": "2024-10-14T20:24:45.179191Z",
"url": "https://files.pythonhosted.org/packages/6e/c8/4aa76dc4247b698160afd93ebc12d09534cbf856af7fa61287305dc23218/rapidgzip-0.14.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b4ee609eadfe8e023df7d99e9cb347b3f8dc43afb87d24238dca69fa959d028e",
"md5": "6a1030894ab8c678d23f347e2b15424a",
"sha256": "c748a6fd0b5f042f6a50b336943704d0537bd6f7e397d7c516ea574b1ef5682a"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "6a1030894ab8c678d23f347e2b15424a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 9268581,
"upload_time": "2024-10-14T20:30:04",
"upload_time_iso_8601": "2024-10-14T20:30:04.457191Z",
"url": "https://files.pythonhosted.org/packages/b4/ee/609eadfe8e023df7d99e9cb347b3f8dc43afb87d24238dca69fa959d028e/rapidgzip-0.14.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f0196201157b22cd24df904eebd2f86b8ea2ca81ed0d039ab50e382f2cf925f6",
"md5": "e7a1bdeb3be13b6d368da40264d96381",
"sha256": "60c3c7bff0d99fea1ce37b9a57f2971ef15690777e6bd0a6dae0efeb0764efcd"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "e7a1bdeb3be13b6d368da40264d96381",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 9196980,
"upload_time": "2024-10-14T20:24:21",
"upload_time_iso_8601": "2024-10-14T20:24:21.031176Z",
"url": "https://files.pythonhosted.org/packages/f0/19/6201157b22cd24df904eebd2f86b8ea2ca81ed0d039ab50e382f2cf925f6/rapidgzip-0.14.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "065f3dd885ccde204211c8b04ca85a2e0e27def1b99ae3c49fe6fab394288208",
"md5": "8537ec5c22eeb0f84c69e3a978963e5f",
"sha256": "9d074455bd7ee25eed4498ad57bc9077a989af92b6a3c3899ea27b545b21a18b"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp310-cp310-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "8537ec5c22eeb0f84c69e3a978963e5f",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 9226747,
"upload_time": "2024-10-14T20:24:48",
"upload_time_iso_8601": "2024-10-14T20:24:48.120628Z",
"url": "https://files.pythonhosted.org/packages/06/5f/3dd885ccde204211c8b04ca85a2e0e27def1b99ae3c49fe6fab394288208/rapidgzip-0.14.3-cp310-cp310-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "743991cacd4d11d7cf656cd54b0e49fb643a7857e062d61c019587b64b3c5921",
"md5": "60a19ff3e487df3110c01c5b87fac477",
"sha256": "727c30203365ae3ae81dad2b2a86d84916e528db4e470c7e4746686ee2edc4e2"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "60a19ff3e487df3110c01c5b87fac477",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 9408396,
"upload_time": "2024-10-14T20:24:23",
"upload_time_iso_8601": "2024-10-14T20:24:23.633741Z",
"url": "https://files.pythonhosted.org/packages/74/39/91cacd4d11d7cf656cd54b0e49fb643a7857e062d61c019587b64b3c5921/rapidgzip-0.14.3-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7e65428710d2d12220fae3cad1f5144c526a33148198837fd16f702948b8b742",
"md5": "d1ebd784b68737c3045231a7267006e4",
"sha256": "25c32234047d538dc003e9da87809b5159cc8fa08ff020a90db647ed86b5c822"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "d1ebd784b68737c3045231a7267006e4",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 835508,
"upload_time": "2024-10-14T20:12:55",
"upload_time_iso_8601": "2024-10-14T20:12:55.407126Z",
"url": "https://files.pythonhosted.org/packages/7e/65/428710d2d12220fae3cad1f5144c526a33148198837fd16f702948b8b742/rapidgzip-0.14.3-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "16fb18e4173071ec892c2fb31f6ed6c4eb3676fafb39dfbb298dda90f5a7887d",
"md5": "2c6bf6ce3b2d718ebd232511c039b76d",
"sha256": "e343884400857b2bb8d723f8369f47f2d21af79f3755eccc9584e01b455ad6c6"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp311-cp311-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "2c6bf6ce3b2d718ebd232511c039b76d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 1099348,
"upload_time": "2024-10-14T20:15:22",
"upload_time_iso_8601": "2024-10-14T20:15:22.818748Z",
"url": "https://files.pythonhosted.org/packages/16/fb/18e4173071ec892c2fb31f6ed6c4eb3676fafb39dfbb298dda90f5a7887d/rapidgzip-0.14.3-cp311-cp311-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dd296a08f7e803885de65ac2728b1e2d00a5958694e4085b7358ebd79ff0f35b",
"md5": "d486a42c4d708de0142cb02859816437",
"sha256": "ec58b579f192e59c6251b036c3c63a13cdb2eb1da1125534af7d133e0a4b1562"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "d486a42c4d708de0142cb02859816437",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 1024277,
"upload_time": "2024-10-14T20:03:11",
"upload_time_iso_8601": "2024-10-14T20:03:11.554258Z",
"url": "https://files.pythonhosted.org/packages/dd/29/6a08f7e803885de65ac2728b1e2d00a5958694e4085b7358ebd79ff0f35b/rapidgzip-0.14.3-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "06fb0c160a23740bb86405cedfad4013f6b777d074be0318a34c8902f689adcc",
"md5": "adafcf2947f564fc55b98be7929f5a04",
"sha256": "d0cf045b143d903c32b6485e2833dc2dd9b0f2634652b730259f02fa96983665"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "adafcf2947f564fc55b98be7929f5a04",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 8950310,
"upload_time": "2024-10-14T20:24:52",
"upload_time_iso_8601": "2024-10-14T20:24:52.700691Z",
"url": "https://files.pythonhosted.org/packages/06/fb/0c160a23740bb86405cedfad4013f6b777d074be0318a34c8902f689adcc/rapidgzip-0.14.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "30e6ccf51e60d1efa4bbc079f3ebf0a5bdf25d1a4c59fdda963a1cbeda2f5599",
"md5": "7cf59733547e0193e24222e228995c8b",
"sha256": "6bebac5d94730f7199c10387ccbe24df0fe26e53a4a2156661b0e2b908fa6a77"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "7cf59733547e0193e24222e228995c8b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 9309490,
"upload_time": "2024-10-14T20:30:08",
"upload_time_iso_8601": "2024-10-14T20:30:08.540346Z",
"url": "https://files.pythonhosted.org/packages/30/e6/ccf51e60d1efa4bbc079f3ebf0a5bdf25d1a4c59fdda963a1cbeda2f5599/rapidgzip-0.14.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "234cb5b9857e38d88eff7ab66e6b6a04cad09265c0d70f9a39986696b9d5b6de",
"md5": "9c7cda9f71a1d36a8b4e41125aebbc0c",
"sha256": "0203cf652bab8b6df926182590c6fd0baa5a622c1d7b5028d377c718094c34c7"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "9c7cda9f71a1d36a8b4e41125aebbc0c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 9229944,
"upload_time": "2024-10-14T20:24:25",
"upload_time_iso_8601": "2024-10-14T20:24:25.672680Z",
"url": "https://files.pythonhosted.org/packages/23/4c/b5b9857e38d88eff7ab66e6b6a04cad09265c0d70f9a39986696b9d5b6de/rapidgzip-0.14.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "483138b5f21ccf3bfbf7ae2052b493dd2101eda34d65270d90787b9f44a3429a",
"md5": "7362795124e2d104ba044b2922ca02c4",
"sha256": "f6f446f3727e6910e542c528eacbdb39a1f74b2031fe72aa612e5f17d4af5e2c"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp311-cp311-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "7362795124e2d104ba044b2922ca02c4",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 9252788,
"upload_time": "2024-10-14T20:24:56",
"upload_time_iso_8601": "2024-10-14T20:24:56.781273Z",
"url": "https://files.pythonhosted.org/packages/48/31/38b5f21ccf3bfbf7ae2052b493dd2101eda34d65270d90787b9f44a3429a/rapidgzip-0.14.3-cp311-cp311-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "45414eaaf0cab1d7defe608502fdde2a207d05d59cba4ec6639d107adc6c459c",
"md5": "bac3bfb409fc6f8e90a3e71004a8d555",
"sha256": "d984ba9dedc64a39a6ea24e145e43ede18b93d6c9e52ae9e16b46f876f750f32"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "bac3bfb409fc6f8e90a3e71004a8d555",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 9437491,
"upload_time": "2024-10-14T20:24:29",
"upload_time_iso_8601": "2024-10-14T20:24:29.216226Z",
"url": "https://files.pythonhosted.org/packages/45/41/4eaaf0cab1d7defe608502fdde2a207d05d59cba4ec6639d107adc6c459c/rapidgzip-0.14.3-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "27518d5514ddb97c5fa4d9a7b2fc58827b7d1f3f27731d3d2534e5755dbc3043",
"md5": "eefd8b165872f70fff2565f568a4e466",
"sha256": "e830ecb1c59ca4870fa6cefec3d2a212dd068a835e34c33ecf4cf5039641d038"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "eefd8b165872f70fff2565f568a4e466",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 836229,
"upload_time": "2024-10-14T20:12:57",
"upload_time_iso_8601": "2024-10-14T20:12:57.144560Z",
"url": "https://files.pythonhosted.org/packages/27/51/8d5514ddb97c5fa4d9a7b2fc58827b7d1f3f27731d3d2534e5755dbc3043/rapidgzip-0.14.3-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e9287f01df27f54676d5e595a31585762b832b311c78834fea0e52b10753d334",
"md5": "3936948aa40a52c63640700232c33324",
"sha256": "eb5904e7dfde6b6dfd8a3700b32554001b638f7708bcc4d22bdabebcad87eaf0"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp312-cp312-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "3936948aa40a52c63640700232c33324",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 1102614,
"upload_time": "2024-10-14T20:15:25",
"upload_time_iso_8601": "2024-10-14T20:15:25.340437Z",
"url": "https://files.pythonhosted.org/packages/e9/28/7f01df27f54676d5e595a31585762b832b311c78834fea0e52b10753d334/rapidgzip-0.14.3-cp312-cp312-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3cab0e2cc229aaf229cbae642be19d530132bf2d5f5c4ddef2c0cb4d145c4d47",
"md5": "f38aa691f6516689046fd8008ce65ad9",
"sha256": "c94d1d65fc2c060ccc6c235e34b245c51826fba08a970cb357a87ab5f7b078d0"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f38aa691f6516689046fd8008ce65ad9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 1025511,
"upload_time": "2024-10-14T20:03:13",
"upload_time_iso_8601": "2024-10-14T20:03:13.558161Z",
"url": "https://files.pythonhosted.org/packages/3c/ab/0e2cc229aaf229cbae642be19d530132bf2d5f5c4ddef2c0cb4d145c4d47/rapidgzip-0.14.3-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0ae4919bab0f0f9350fd6bed58ad4147318c9deca4a687704cc8877c1a1172fd",
"md5": "3c0371a4ea681c2354a925b36285a2db",
"sha256": "a369e95b00d1300d6162fa8aa3bf97e86d1d40e754f297367a7dd9346cc74f42"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "3c0371a4ea681c2354a925b36285a2db",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 8917808,
"upload_time": "2024-10-14T20:25:01",
"upload_time_iso_8601": "2024-10-14T20:25:01.192689Z",
"url": "https://files.pythonhosted.org/packages/0a/e4/919bab0f0f9350fd6bed58ad4147318c9deca4a687704cc8877c1a1172fd/rapidgzip-0.14.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4a56c910dea7d6a45e07e305446efed9a529827cb89745d9a832166b306e8ab1",
"md5": "7876bde26d056cafb7e31958752724f2",
"sha256": "e561a2f373baa18b5f0bb83a8cbf315aa5f45272d14d82315c337cfbf2b63212"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "7876bde26d056cafb7e31958752724f2",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 9291381,
"upload_time": "2024-10-14T20:30:14",
"upload_time_iso_8601": "2024-10-14T20:30:14.178291Z",
"url": "https://files.pythonhosted.org/packages/4a/56/c910dea7d6a45e07e305446efed9a529827cb89745d9a832166b306e8ab1/rapidgzip-0.14.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d30307c11efa66b6c5862740607f0c3fd3fce905fcadad03125f7e8ce5d377bf",
"md5": "93dc480f830969398321a55c4a903744",
"sha256": "8d2b5f93b50d97e8bbb55c745015568304e6a1c23752b9bdd7e96fd3e3de85e0"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "93dc480f830969398321a55c4a903744",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 9222062,
"upload_time": "2024-10-14T20:24:31",
"upload_time_iso_8601": "2024-10-14T20:24:31.378417Z",
"url": "https://files.pythonhosted.org/packages/d3/03/07c11efa66b6c5862740607f0c3fd3fce905fcadad03125f7e8ce5d377bf/rapidgzip-0.14.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2997409b6b594f410721d0d0303379ef4c1664cd8779ac0f4975a7b94867babe",
"md5": "a8c3d0cdab833e497bd3da3188544f91",
"sha256": "1794e12e30f0eadd72974190c0146a7f3aa711890aba653817cdf49660cbf0a5"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp312-cp312-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "a8c3d0cdab833e497bd3da3188544f91",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 9237962,
"upload_time": "2024-10-14T20:25:04",
"upload_time_iso_8601": "2024-10-14T20:25:04.730706Z",
"url": "https://files.pythonhosted.org/packages/29/97/409b6b594f410721d0d0303379ef4c1664cd8779ac0f4975a7b94867babe/rapidgzip-0.14.3-cp312-cp312-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "459c6cdeca9308ec11d80bd574415e98c1dccb187caabfe607b23aca4a8fbd6f",
"md5": "27815b3745f682fa3840ed1af87a4500",
"sha256": "910c7f6a1ce44bc6e8f927728c1d3cb621e44b12bcacbd584f24f24709b4f578"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "27815b3745f682fa3840ed1af87a4500",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 9443855,
"upload_time": "2024-10-14T20:24:33",
"upload_time_iso_8601": "2024-10-14T20:24:33.507130Z",
"url": "https://files.pythonhosted.org/packages/45/9c/6cdeca9308ec11d80bd574415e98c1dccb187caabfe607b23aca4a8fbd6f/rapidgzip-0.14.3-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d082410b5093668ce738bd9c621d7226221749ac52284de2e473b8a648be5695",
"md5": "aa4096eb725b26c61070132d7cfa3302",
"sha256": "ae7ce88a86deaacab8ce69d74b04d6e62dd86863751479cbf512988cd6c80e66"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "aa4096eb725b26c61070132d7cfa3302",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 835860,
"upload_time": "2024-10-14T20:12:58",
"upload_time_iso_8601": "2024-10-14T20:12:58.944967Z",
"url": "https://files.pythonhosted.org/packages/d0/82/410b5093668ce738bd9c621d7226221749ac52284de2e473b8a648be5695/rapidgzip-0.14.3-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b8d92a35bbae18477ae2f0ea7ec4c4a32911d1a78b94582de2627c6e3963b137",
"md5": "28fa76b6bbec603e410dc0439b8097f0",
"sha256": "55cd754d279443111b4934f5ee92c10e74347fee2ca35d8cd7ae19d72262316c"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp313-cp313-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "28fa76b6bbec603e410dc0439b8097f0",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 1100786,
"upload_time": "2024-10-14T20:15:27",
"upload_time_iso_8601": "2024-10-14T20:15:27.788562Z",
"url": "https://files.pythonhosted.org/packages/b8/d9/2a35bbae18477ae2f0ea7ec4c4a32911d1a78b94582de2627c6e3963b137/rapidgzip-0.14.3-cp313-cp313-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c0c0cc16d540686e05d9371d055b74233e70580b67f50ff5c328c5dfe5854c54",
"md5": "02b6301d3e12849861612e6b772113b2",
"sha256": "af4dc3337eb11a40feb38587d616f5489733132ed0b826311013af05b2a0e0e0"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "02b6301d3e12849861612e6b772113b2",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 1023899,
"upload_time": "2024-10-14T20:03:15",
"upload_time_iso_8601": "2024-10-14T20:03:15.207876Z",
"url": "https://files.pythonhosted.org/packages/c0/c0/cc16d540686e05d9371d055b74233e70580b67f50ff5c328c5dfe5854c54/rapidgzip-0.14.3-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "900520c632ac74615faa3ecd7dfcfa7386d240fe487c3d9fd2b6e4960511f698",
"md5": "9c0a42edc9eb6fbedc0e1c08ab43b7a3",
"sha256": "ce7e9101070b490de5793959412e9697803f8597f9b37244243cb723a4600e1c"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "9c0a42edc9eb6fbedc0e1c08ab43b7a3",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 8916116,
"upload_time": "2024-10-14T20:25:07",
"upload_time_iso_8601": "2024-10-14T20:25:07.904258Z",
"url": "https://files.pythonhosted.org/packages/90/05/20c632ac74615faa3ecd7dfcfa7386d240fe487c3d9fd2b6e4960511f698/rapidgzip-0.14.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5d219d723c42f23b64798fc3bdb36c335be6f70930fdd13b2aadb01783f1d608",
"md5": "d4cbeffdd4ea4fdb77dd98b858e05d06",
"sha256": "b2fcde6c3fd844f28c2771c0958995002f7d5bf9229efb5179d60d5d59786afc"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "d4cbeffdd4ea4fdb77dd98b858e05d06",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 9289730,
"upload_time": "2024-10-14T20:30:17",
"upload_time_iso_8601": "2024-10-14T20:30:17.524165Z",
"url": "https://files.pythonhosted.org/packages/5d/21/9d723c42f23b64798fc3bdb36c335be6f70930fdd13b2aadb01783f1d608/rapidgzip-0.14.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6a1b5b61af4747d3741d7c8978aeebea9762d217551483699a14eca377ecc9bb",
"md5": "77111fc2b58b85500d019fe4e50d4b6d",
"sha256": "3b98924f72f1894c1bf6ee6c59d3492f298ac85f5e48f559ab90011ebecd6052"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "77111fc2b58b85500d019fe4e50d4b6d",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 9219355,
"upload_time": "2024-10-14T20:24:35",
"upload_time_iso_8601": "2024-10-14T20:24:35.851538Z",
"url": "https://files.pythonhosted.org/packages/6a/1b/5b61af4747d3741d7c8978aeebea9762d217551483699a14eca377ecc9bb/rapidgzip-0.14.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1c8b90af9d9aa6d9b9e526992c1991fdf381dd6b9cf4f99003a31be361fce7ba",
"md5": "18f495ea9ec62fe15de8ece1252f4e2c",
"sha256": "e0910e1974acb57593ba38dacd59bee4e0463f0e6427145bfdeae8c5be233040"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp313-cp313-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "18f495ea9ec62fe15de8ece1252f4e2c",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 9236932,
"upload_time": "2024-10-14T20:25:11",
"upload_time_iso_8601": "2024-10-14T20:25:11.678313Z",
"url": "https://files.pythonhosted.org/packages/1c/8b/90af9d9aa6d9b9e526992c1991fdf381dd6b9cf4f99003a31be361fce7ba/rapidgzip-0.14.3-cp313-cp313-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "35ddcf72972077bf6c19bf0cd46903426f11632f7be4d80e107dd4ee2dd55331",
"md5": "75a4987783427bd457ab562b07284500",
"sha256": "2d3aa339b2bc0310c27868daa01c520c004adb2b3329bb3440ae09ce68d643c4"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "75a4987783427bd457ab562b07284500",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 9445515,
"upload_time": "2024-10-14T20:24:37",
"upload_time_iso_8601": "2024-10-14T20:24:37.848838Z",
"url": "https://files.pythonhosted.org/packages/35/dd/cf72972077bf6c19bf0cd46903426f11632f7be4d80e107dd4ee2dd55331/rapidgzip-0.14.3-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9483a293517119f2d7bbf7347219599a96ee55eba6d4587288b0c14713d8e16b",
"md5": "206ba5476bc00946d07a44ea53e2a065",
"sha256": "484f37d61ef606c72dc48b92eeda86b3c92037f80a5b90eb45435dd032481469"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "206ba5476bc00946d07a44ea53e2a065",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 835571,
"upload_time": "2024-10-14T20:13:00",
"upload_time_iso_8601": "2024-10-14T20:13:00.177993Z",
"url": "https://files.pythonhosted.org/packages/94/83/a293517119f2d7bbf7347219599a96ee55eba6d4587288b0c14713d8e16b/rapidgzip-0.14.3-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "11ca29df9c471ddd0c85d516fa8022c228fa081df7f550fd406b861a9c4ad699",
"md5": "9dccd997ac0744e36484ccfc1ef93cbc",
"sha256": "c80d6c75d1827aa44dbd7fdb175dfd7102fd164061d687f936323170cfb83d88"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp37-cp37m-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "9dccd997ac0744e36484ccfc1ef93cbc",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 1099611,
"upload_time": "2024-10-14T20:15:29",
"upload_time_iso_8601": "2024-10-14T20:15:29.587693Z",
"url": "https://files.pythonhosted.org/packages/11/ca/29df9c471ddd0c85d516fa8022c228fa081df7f550fd406b861a9c4ad699/rapidgzip-0.14.3-cp37-cp37m-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "65607753ae79a1a5f0ae4c42c703cb3353b2937695691c668e6bbba127a978a1",
"md5": "339a85a3a4f8f33ca8f28fe0264b4e2e",
"sha256": "cb2121d2b1f8332cb5417b7fa3af7e62754ff09500f6bcb2123968ea5c5b6398"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "339a85a3a4f8f33ca8f28fe0264b4e2e",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 8905055,
"upload_time": "2024-10-14T20:25:14",
"upload_time_iso_8601": "2024-10-14T20:25:14.908593Z",
"url": "https://files.pythonhosted.org/packages/65/60/7753ae79a1a5f0ae4c42c703cb3353b2937695691c668e6bbba127a978a1/rapidgzip-0.14.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a14fa6754b297d4bb02c5ea6ae15e461dcc436990712c453846cb8a942b47029",
"md5": "c41a8a763ac17c00e31ea3989cd90e1c",
"sha256": "690b6237ee21f062a664ca4f8cc411a8b76b262f841ace34ba693587046a06b3"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c41a8a763ac17c00e31ea3989cd90e1c",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 9270179,
"upload_time": "2024-10-14T20:30:20",
"upload_time_iso_8601": "2024-10-14T20:30:20.785260Z",
"url": "https://files.pythonhosted.org/packages/a1/4f/a6754b297d4bb02c5ea6ae15e461dcc436990712c453846cb8a942b47029/rapidgzip-0.14.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "05b724725ce3b7df62e952f557bd31bf3959610179c77098b4f8254a12bc6440",
"md5": "38704de644b99c7df23395c4abcd5b5c",
"sha256": "288a1a337511117d362e56fbd798c03687121cdf82f9c6faf5dd5bdafc4cc042"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp37-cp37m-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "38704de644b99c7df23395c4abcd5b5c",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 9187817,
"upload_time": "2024-10-14T20:24:40",
"upload_time_iso_8601": "2024-10-14T20:24:40.050537Z",
"url": "https://files.pythonhosted.org/packages/05/b7/24725ce3b7df62e952f557bd31bf3959610179c77098b4f8254a12bc6440/rapidgzip-0.14.3-cp37-cp37m-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9bd5f8a39552288b82f5d90e9680e109ef8541db2886f9bbce5f094db6393c47",
"md5": "45cb46ede81d9067eb5cdd61a686ab94",
"sha256": "c4722ccccaaa20fd329d84d4baae94176c8e5cbb7cae48494b002c72c1f036ad"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp37-cp37m-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "45cb46ede81d9067eb5cdd61a686ab94",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 9205918,
"upload_time": "2024-10-14T20:25:17",
"upload_time_iso_8601": "2024-10-14T20:25:17.692486Z",
"url": "https://files.pythonhosted.org/packages/9b/d5/f8a39552288b82f5d90e9680e109ef8541db2886f9bbce5f094db6393c47/rapidgzip-0.14.3-cp37-cp37m-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "65ad950ae873abe1490a14960c56600bcbf99b04058a5487035734a4d79ffe18",
"md5": "3f9cfe635e37125ef700cb0de40cd1e8",
"sha256": "e19ae271712108d42c7d7a9928da49bd56cda937396705b0cd89c012c55751bc"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp37-cp37m-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "3f9cfe635e37125ef700cb0de40cd1e8",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 9395349,
"upload_time": "2024-10-14T20:24:42",
"upload_time_iso_8601": "2024-10-14T20:24:42.759653Z",
"url": "https://files.pythonhosted.org/packages/65/ad/950ae873abe1490a14960c56600bcbf99b04058a5487035734a4d79ffe18/rapidgzip-0.14.3-cp37-cp37m-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4e771dbd7759ce26bf65b34838fd6c76bc4b6b7cc40df258f93644f3c9162bbc",
"md5": "d7738f786fc4d2c04e17c3fd5944496a",
"sha256": "c812f68e67cf5302976e650e574ff3ac1a89ee059cfb98d5f86afe1654235010"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "d7738f786fc4d2c04e17c3fd5944496a",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 835055,
"upload_time": "2024-10-14T20:13:01",
"upload_time_iso_8601": "2024-10-14T20:13:01.361285Z",
"url": "https://files.pythonhosted.org/packages/4e/77/1dbd7759ce26bf65b34838fd6c76bc4b6b7cc40df258f93644f3c9162bbc/rapidgzip-0.14.3-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dcb2a8312c14e3fe79b27482b076377b6cf14a4f13965e7949eff1e774e45ad3",
"md5": "5f7e96aedc54c6c36b765f3311e6ea1a",
"sha256": "b02e5af172e90611e2e2b71eca93847ada90b3f927e3a27ea7824dd90cc52ee0"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp38-cp38-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "5f7e96aedc54c6c36b765f3311e6ea1a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 1098518,
"upload_time": "2024-10-14T20:15:30",
"upload_time_iso_8601": "2024-10-14T20:15:30.921522Z",
"url": "https://files.pythonhosted.org/packages/dc/b2/a8312c14e3fe79b27482b076377b6cf14a4f13965e7949eff1e774e45ad3/rapidgzip-0.14.3-cp38-cp38-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8eb173377a86749fb507f0b82f2ae155cb20c560ffa12b243a1caa79c13c0474",
"md5": "84100969951f5618b6af6caf864656e7",
"sha256": "b92206b281147b3824867721b60ec44a2935ff276ad30ce257915f4eac9ad0bd"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp38-cp38-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "84100969951f5618b6af6caf864656e7",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 1016934,
"upload_time": "2024-10-14T20:03:16",
"upload_time_iso_8601": "2024-10-14T20:03:16.923698Z",
"url": "https://files.pythonhosted.org/packages/8e/b1/73377a86749fb507f0b82f2ae155cb20c560ffa12b243a1caa79c13c0474/rapidgzip-0.14.3-cp38-cp38-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4433c35a600971728c762da49269bb6bd93178f4d8573c292d170bf3a5ed26bc",
"md5": "972595c194998498ed665b553ba59bab",
"sha256": "7dd860d4acce3077f69040318daa0a6e4832c39cceafab4db307911202209398"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "972595c194998498ed665b553ba59bab",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 8931696,
"upload_time": "2024-10-14T20:25:20",
"upload_time_iso_8601": "2024-10-14T20:25:20.079066Z",
"url": "https://files.pythonhosted.org/packages/44/33/c35a600971728c762da49269bb6bd93178f4d8573c292d170bf3a5ed26bc/rapidgzip-0.14.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5454572ca1b7af1e824209f36d6f2c060f0a9952266ca4d56484b417d42f3cc4",
"md5": "b88cdce593c9a0d5939d7321acd5ce8b",
"sha256": "cd55ae869f85ac753f56bf706378b984112e109e603e1d3970ef169fef52efc4"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b88cdce593c9a0d5939d7321acd5ce8b",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 9287469,
"upload_time": "2024-10-14T20:30:23",
"upload_time_iso_8601": "2024-10-14T20:30:23.890527Z",
"url": "https://files.pythonhosted.org/packages/54/54/572ca1b7af1e824209f36d6f2c060f0a9952266ca4d56484b417d42f3cc4/rapidgzip-0.14.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b06be80f8937e00626b98191438463a82ca9dba594f477d690500d06ab110e76",
"md5": "931c977d5e960b01ae7bba428ed27910",
"sha256": "9b7fffde8a9c42e56c40ce3fb9cfdb83b95ed13fbb03c41d8e9e58d410f2affb"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "931c977d5e960b01ae7bba428ed27910",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 9215029,
"upload_time": "2024-10-14T20:24:46",
"upload_time_iso_8601": "2024-10-14T20:24:46.009249Z",
"url": "https://files.pythonhosted.org/packages/b0/6b/e80f8937e00626b98191438463a82ca9dba594f477d690500d06ab110e76/rapidgzip-0.14.3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b798fbce04e9649a442b877211e7539914485581795c161366d436448cdd6abd",
"md5": "40a522971ee733589f8035f51f5f2061",
"sha256": "b98eedd14d2f72b8cf3bb12f1011c63548391417bb4e3c957f12c6b16018f194"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp38-cp38-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "40a522971ee733589f8035f51f5f2061",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 9250696,
"upload_time": "2024-10-14T20:25:22",
"upload_time_iso_8601": "2024-10-14T20:25:22.507731Z",
"url": "https://files.pythonhosted.org/packages/b7/98/fbce04e9649a442b877211e7539914485581795c161366d436448cdd6abd/rapidgzip-0.14.3-cp38-cp38-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "669ae82b36ac2f9262b44e71316ed023fc2deb2cb2866f490494ad5ed09d26df",
"md5": "79cbce8f445732ad47dc371678297590",
"sha256": "e904617cbea974a3f8013cba76dba2e5a8d2ea01552a1ed82ecd7a55d830afba"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp38-cp38-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "79cbce8f445732ad47dc371678297590",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 9420457,
"upload_time": "2024-10-14T20:24:50",
"upload_time_iso_8601": "2024-10-14T20:24:50.136909Z",
"url": "https://files.pythonhosted.org/packages/66/9a/e82b36ac2f9262b44e71316ed023fc2deb2cb2866f490494ad5ed09d26df/rapidgzip-0.14.3-cp38-cp38-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7ff61ed4cdc0fc329c1bb40ce9231c70201e36c4d2edfffbb19214f29d98746b",
"md5": "152fed818bb10483eb111faaf25eec83",
"sha256": "cee6ff43a853b7a6dffe6d7182cc374452f078ca240914e03470eb28c52ef867"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "152fed818bb10483eb111faaf25eec83",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 836130,
"upload_time": "2024-10-14T20:13:03",
"upload_time_iso_8601": "2024-10-14T20:13:03.291707Z",
"url": "https://files.pythonhosted.org/packages/7f/f6/1ed4cdc0fc329c1bb40ce9231c70201e36c4d2edfffbb19214f29d98746b/rapidgzip-0.14.3-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a75ba4205630ad678be35643628f1343031968c5905cbe1d708ff336e86b4d82",
"md5": "1999bde77e9616e5f58cb2b4101bcd1a",
"sha256": "ddb9cedc2c9fa37c1b65f0d744a9bbd537cfdc27330f7b8a3f30da03df7731b2"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp39-cp39-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "1999bde77e9616e5f58cb2b4101bcd1a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 1097617,
"upload_time": "2024-10-14T20:15:33",
"upload_time_iso_8601": "2024-10-14T20:15:33.546875Z",
"url": "https://files.pythonhosted.org/packages/a7/5b/a4205630ad678be35643628f1343031968c5905cbe1d708ff336e86b4d82/rapidgzip-0.14.3-cp39-cp39-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0f876af3564a58f0a7a05e08198ce509c2f19b56929951e52924f7eadbee8110",
"md5": "31dffec5145a90a467dfc5c5f093eda6",
"sha256": "252b0d31ae8adb2ba4bd484d46eaa42e77d3325e3fb94ec8b0e6e35c8ace1504"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "31dffec5145a90a467dfc5c5f093eda6",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 1022633,
"upload_time": "2024-10-14T20:03:19",
"upload_time_iso_8601": "2024-10-14T20:03:19.334831Z",
"url": "https://files.pythonhosted.org/packages/0f/87/6af3564a58f0a7a05e08198ce509c2f19b56929951e52924f7eadbee8110/rapidgzip-0.14.3-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "14ef15f735c41be2d2365f048638fe7553d4324611fb0ea9332b9cadcf0a5b5c",
"md5": "70c6b972c3677e799292e3a5e721d5de",
"sha256": "19a593d2be31fd76f76d0c651056f07ce9d2f059c931e2f42885e63e7b33794e"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "70c6b972c3677e799292e3a5e721d5de",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 8916888,
"upload_time": "2024-10-14T20:25:25",
"upload_time_iso_8601": "2024-10-14T20:25:25.258507Z",
"url": "https://files.pythonhosted.org/packages/14/ef/15f735c41be2d2365f048638fe7553d4324611fb0ea9332b9cadcf0a5b5c/rapidgzip-0.14.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e8be347e5bcdbc96ce07dd606fc3c4e8fa848404368e19e207462d77d709cfc7",
"md5": "a0a743c4c2139eb5849c32f772176e35",
"sha256": "28dfb295d146ece8147fbf252dce39dd5ecba8a053e749bec6402637476e9359"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "a0a743c4c2139eb5849c32f772176e35",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 9270038,
"upload_time": "2024-10-14T20:30:27",
"upload_time_iso_8601": "2024-10-14T20:30:27.613571Z",
"url": "https://files.pythonhosted.org/packages/e8/be/347e5bcdbc96ce07dd606fc3c4e8fa848404368e19e207462d77d709cfc7/rapidgzip-0.14.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8ebd41e9a784ee7590c3f9090d9d8b3467fdd2150236d0bc0774cb0a8a50072d",
"md5": "9feb66a3b9a6aeb6c06cea166a9fc62a",
"sha256": "1de92b03e711c2f77a0dfa524d04e1f821f26632daa76ba9399d5d3aa49b7c6d"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "9feb66a3b9a6aeb6c06cea166a9fc62a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 9199056,
"upload_time": "2024-10-14T20:24:54",
"upload_time_iso_8601": "2024-10-14T20:24:54.274251Z",
"url": "https://files.pythonhosted.org/packages/8e/bd/41e9a784ee7590c3f9090d9d8b3467fdd2150236d0bc0774cb0a8a50072d/rapidgzip-0.14.3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ae0718fa2ce640834535609aac0e00ddcc89378b4a080ce7cbbbf039afa7e960",
"md5": "bda19d9f2675cc88d83002733ef6f30c",
"sha256": "0156695e10763dd9db03904023ef06d940356f3385295f2026132ae77e8b62ef"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp39-cp39-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "bda19d9f2675cc88d83002733ef6f30c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 9234918,
"upload_time": "2024-10-14T20:25:27",
"upload_time_iso_8601": "2024-10-14T20:25:27.365948Z",
"url": "https://files.pythonhosted.org/packages/ae/07/18fa2ce640834535609aac0e00ddcc89378b4a080ce7cbbbf039afa7e960/rapidgzip-0.14.3-cp39-cp39-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3e2806cf1f991bc91791f67d360704e833d085d7dfcdce7ac926aacf5a0c754b",
"md5": "01c8a1a0bdb871d3c82d02ae3ee6da61",
"sha256": "25bafe4cdbd120a903a2c0d242607b5f379380555626e88f5106d0fe8b91b526"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp39-cp39-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "01c8a1a0bdb871d3c82d02ae3ee6da61",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 9404745,
"upload_time": "2024-10-14T20:24:59",
"upload_time_iso_8601": "2024-10-14T20:24:59.387921Z",
"url": "https://files.pythonhosted.org/packages/3e/28/06cf1f991bc91791f67d360704e833d085d7dfcdce7ac926aacf5a0c754b/rapidgzip-0.14.3-cp39-cp39-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3280892e4bc77ab11c726354e0507b7b6928284d7b8137d38461c2fcac3d3061",
"md5": "16f0e66bdf00607e72de9e6b7457e936",
"sha256": "e87939efa8a3f62493bc79ceb8c03a97cb9d4a083c5185eeaf06ce78edb3f0c3"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "16f0e66bdf00607e72de9e6b7457e936",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 835643,
"upload_time": "2024-10-14T20:13:05",
"upload_time_iso_8601": "2024-10-14T20:13:05.006780Z",
"url": "https://files.pythonhosted.org/packages/32/80/892e4bc77ab11c726354e0507b7b6928284d7b8137d38461c2fcac3d3061/rapidgzip-0.14.3-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2ffd6dd8dcd6bbbce8225a5cece6be74b6689e5744d020fb115d569c07ac2039",
"md5": "3d7ca4e3f37cfb4efeba7257661fe4b1",
"sha256": "5cccb12bc08387d0fbcf4c3a5fcb0fe85257b936a324e8857e21ab986f9257d9"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
"has_sig": false,
"md5_digest": "3d7ca4e3f37cfb4efeba7257661fe4b1",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.7",
"size": 1060782,
"upload_time": "2024-10-14T20:15:35",
"upload_time_iso_8601": "2024-10-14T20:15:35.527781Z",
"url": "https://files.pythonhosted.org/packages/2f/fd/6dd8dcd6bbbce8225a5cece6be74b6689e5744d020fb115d569c07ac2039/rapidgzip-0.14.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "256158023e0a31405fb61cb274bbbb7b289c7fe1ff81b40eabbf4925afd6496e",
"md5": "ea49ab8af87a44ed325ae8ca5e7d9c5c",
"sha256": "c8541e00a4a78297d9754944952b536f1fd5bc477788cd3b19b50adc62913c94"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "ea49ab8af87a44ed325ae8ca5e7d9c5c",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.7",
"size": 982064,
"upload_time": "2024-10-14T20:03:20",
"upload_time_iso_8601": "2024-10-14T20:03:20.756306Z",
"url": "https://files.pythonhosted.org/packages/25/61/58023e0a31405fb61cb274bbbb7b289c7fe1ff81b40eabbf4925afd6496e/rapidgzip-0.14.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "43f92aebb6acc662e64e58419ede087e9b12bdc51d2f6547658aa11eee480c46",
"md5": "5c7ff9807eb1fe3d3d1bbf40b9d973b8",
"sha256": "2789eee98ce8b8a2d02604ff498d99670fe94f1bef415d69dccb1b5e777462c7"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "5c7ff9807eb1fe3d3d1bbf40b9d973b8",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.7",
"size": 1251245,
"upload_time": "2024-10-14T20:25:30",
"upload_time_iso_8601": "2024-10-14T20:25:30.245513Z",
"url": "https://files.pythonhosted.org/packages/43/f9/2aebb6acc662e64e58419ede087e9b12bdc51d2f6547658aa11eee480c46/rapidgzip-0.14.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "368ba8f12ba90bfae69e8b4b3f19ee4005f4fa67fe94af67e1227124e51b72c2",
"md5": "acacf60e3326ac53fa1f7650a5cf2368",
"sha256": "6b59978a24c0ea7c8afb5757e2b42f645d06e8d7d9890d41ae26c0bbe2664dbd"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "acacf60e3326ac53fa1f7650a5cf2368",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.7",
"size": 1239550,
"upload_time": "2024-10-14T20:30:30",
"upload_time_iso_8601": "2024-10-14T20:30:30.007431Z",
"url": "https://files.pythonhosted.org/packages/36/8b/a8f12ba90bfae69e8b4b3f19ee4005f4fa67fe94af67e1227124e51b72c2/rapidgzip-0.14.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a529b288aa192e73e1496744f38965020703b8a2e8a2deb2e76d0e152cbb2de6",
"md5": "1ee4a919b9b2a3e1280e5ad2dd048346",
"sha256": "0a0700f44045010af9b28b2963f96af32451fe1836eb279e6d05f357611278db"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "1ee4a919b9b2a3e1280e5ad2dd048346",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.7",
"size": 1215814,
"upload_time": "2024-10-14T20:25:02",
"upload_time_iso_8601": "2024-10-14T20:25:02.711067Z",
"url": "https://files.pythonhosted.org/packages/a5/29/b288aa192e73e1496744f38965020703b8a2e8a2deb2e76d0e152cbb2de6/rapidgzip-0.14.3-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7d86c30b012c551daa9f84a513f4ff6612541061165625fa594303cf9f7b1f8b",
"md5": "3c194250c7f3cbbf890023b48da65897",
"sha256": "5ed31b32aea95429316812ae97802e37032471cd344ed4bfdbfbd891e05c9aa3"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp310-pypy310_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "3c194250c7f3cbbf890023b48da65897",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.7",
"size": 830519,
"upload_time": "2024-10-14T20:13:06",
"upload_time_iso_8601": "2024-10-14T20:13:06.131919Z",
"url": "https://files.pythonhosted.org/packages/7d/86/c30b012c551daa9f84a513f4ff6612541061165625fa594303cf9f7b1f8b/rapidgzip-0.14.3-pp310-pypy310_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "12da2dab4b62571fc7f1abd5f54ebbe9bdfce4c0202ccf5a1b4015e98686c0ac",
"md5": "d289f2a3a96e04def5f0a9366239e662",
"sha256": "71a0fb8766efe5a50928acc472b224c7c42877a2c6f653d76472c706a810e1ff"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp37-pypy37_pp73-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "d289f2a3a96e04def5f0a9366239e662",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.7",
"size": 1059877,
"upload_time": "2024-10-14T20:15:37",
"upload_time_iso_8601": "2024-10-14T20:15:37.574419Z",
"url": "https://files.pythonhosted.org/packages/12/da/2dab4b62571fc7f1abd5f54ebbe9bdfce4c0202ccf5a1b4015e98686c0ac/rapidgzip-0.14.3-pp37-pypy37_pp73-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1c6b0eb439882077772093507f9eed5f93ba05b3ad574eaba77d1239feede7e1",
"md5": "9cdf7a072f55a66227193fdefe649baf",
"sha256": "8d45f3e6cb8fc8eab0737c9361037b057b81cc1de9b4383bda1a4e6681183c2c"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "9cdf7a072f55a66227193fdefe649baf",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.7",
"size": 1259675,
"upload_time": "2024-10-14T20:25:31",
"upload_time_iso_8601": "2024-10-14T20:25:31.662845Z",
"url": "https://files.pythonhosted.org/packages/1c/6b/0eb439882077772093507f9eed5f93ba05b3ad574eaba77d1239feede7e1/rapidgzip-0.14.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9fc3e21dc5cbf32c45eb2f571ba271323b22c55c1a7b6ad01e52e64b00a43662",
"md5": "3a4928fb4928e4e2fb40db8c1113fb1b",
"sha256": "1bc390525183567f9942c91a34000287ad13b5e96c6daa133d615b2df1b04e59"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3a4928fb4928e4e2fb40db8c1113fb1b",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.7",
"size": 1245373,
"upload_time": "2024-10-14T20:30:31",
"upload_time_iso_8601": "2024-10-14T20:30:31.668966Z",
"url": "https://files.pythonhosted.org/packages/9f/c3/e21dc5cbf32c45eb2f571ba271323b22c55c1a7b6ad01e52e64b00a43662/rapidgzip-0.14.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4cbc4a9330ec24c09a99a3b4b0c305a08bb94ab84d7e4fe83783805d5da190e9",
"md5": "a80d47880c59b9ae14fe66aa66aaaf44",
"sha256": "6eee77e7d2a67f7a3c46dcb20e4846742f81d92560baa60d82dd868febed7642"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp37-pypy37_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "a80d47880c59b9ae14fe66aa66aaaf44",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.7",
"size": 1220061,
"upload_time": "2024-10-14T20:25:05",
"upload_time_iso_8601": "2024-10-14T20:25:05.724872Z",
"url": "https://files.pythonhosted.org/packages/4c/bc/4a9330ec24c09a99a3b4b0c305a08bb94ab84d7e4fe83783805d5da190e9/rapidgzip-0.14.3-pp37-pypy37_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0d4f21b9127f6378269f036bd01b2d178403535bdbe9e45641c557d50a0da264",
"md5": "78c209e0743b4b2b6f459514bd62247a",
"sha256": "d742624a798177ffd356156d58f6108dd4e646c8d2165c013d031d3b4c512272"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp37-pypy37_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "78c209e0743b4b2b6f459514bd62247a",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": ">=3.7",
"size": 829357,
"upload_time": "2024-10-14T20:13:07",
"upload_time_iso_8601": "2024-10-14T20:13:07.777600Z",
"url": "https://files.pythonhosted.org/packages/0d/4f/21b9127f6378269f036bd01b2d178403535bdbe9e45641c557d50a0da264/rapidgzip-0.14.3-pp37-pypy37_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "10f06ae637d309485e5027b2a6f4ecf228e320691557998d77ae2fa033e905c1",
"md5": "e3e2c16cd6c76b99a2140d608bfab013",
"sha256": "283146805b6c772fbb3e5916caf574f17648e2e20e0fff248b102aa5581ba761"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp38-pypy38_pp73-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "e3e2c16cd6c76b99a2140d608bfab013",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.7",
"size": 1059947,
"upload_time": "2024-10-14T20:15:39",
"upload_time_iso_8601": "2024-10-14T20:15:39.278377Z",
"url": "https://files.pythonhosted.org/packages/10/f0/6ae637d309485e5027b2a6f4ecf228e320691557998d77ae2fa033e905c1/rapidgzip-0.14.3-pp38-pypy38_pp73-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ba373214cea29aaa94032bf7b58f81d85958e26f65edfae7a03f5032546497c4",
"md5": "3ec0b928d59cb93e8c75276f634a22fb",
"sha256": "3f7373607c0d1d7720722d86efcbf7be956d371bbcfd105fb7e9cb7b1f366c2d"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "3ec0b928d59cb93e8c75276f634a22fb",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.7",
"size": 981476,
"upload_time": "2024-10-14T20:03:22",
"upload_time_iso_8601": "2024-10-14T20:03:22.545932Z",
"url": "https://files.pythonhosted.org/packages/ba/37/3214cea29aaa94032bf7b58f81d85958e26f65edfae7a03f5032546497c4/rapidgzip-0.14.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0886e60161cfd6f72e39f87b61b064a1b7cf010040cb4cad844b335c1026bc6c",
"md5": "31abe13289c160db74da964422a195de",
"sha256": "cf5603392861577737847402f16f953d386cfc1a6f05908ba367c2ec320f8a7a"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "31abe13289c160db74da964422a195de",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.7",
"size": 1250668,
"upload_time": "2024-10-14T20:25:33",
"upload_time_iso_8601": "2024-10-14T20:25:33.778273Z",
"url": "https://files.pythonhosted.org/packages/08/86/e60161cfd6f72e39f87b61b064a1b7cf010040cb4cad844b335c1026bc6c/rapidgzip-0.14.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "999d493323f99bcdcecc5d44f68415818f09c1c85b77e9b49d173262d229fac8",
"md5": "b08a318a2bb8ccd9b162ee1bddbc79e0",
"sha256": "6ceb3ceefc9713a2b9e93e472831d85ec6286325854be3d074a84f1b3947773d"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b08a318a2bb8ccd9b162ee1bddbc79e0",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.7",
"size": 1238855,
"upload_time": "2024-10-14T20:30:34",
"upload_time_iso_8601": "2024-10-14T20:30:34.453771Z",
"url": "https://files.pythonhosted.org/packages/99/9d/493323f99bcdcecc5d44f68415818f09c1c85b77e9b49d173262d229fac8/rapidgzip-0.14.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3ba5a9d65def39968b15052d0113911152edfff5f9be8520bf307789c5b8b63d",
"md5": "26a4d6d581d1b9aebb4d6c1dade533ab",
"sha256": "7f2dd06b24cbea3cb67eafe08ed59a18ad96fb775d821d75c72ecef356b89dfa"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp38-pypy38_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "26a4d6d581d1b9aebb4d6c1dade533ab",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.7",
"size": 1214510,
"upload_time": "2024-10-14T20:25:09",
"upload_time_iso_8601": "2024-10-14T20:25:09.771125Z",
"url": "https://files.pythonhosted.org/packages/3b/a5/a9d65def39968b15052d0113911152edfff5f9be8520bf307789c5b8b63d/rapidgzip-0.14.3-pp38-pypy38_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6dd92147ecddfffdb26b029ce7f6f09d471eaa73a6a8c2f2642bbd56a64ebf59",
"md5": "dbe17798044fd078b72a841ab9465e6c",
"sha256": "bba5dbb182e415c9fb840a3966796f5f1b51b5fe4721c52c2c3e912a5463195d"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp38-pypy38_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "dbe17798044fd078b72a841ab9465e6c",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.7",
"size": 829644,
"upload_time": "2024-10-14T20:13:09",
"upload_time_iso_8601": "2024-10-14T20:13:09.505617Z",
"url": "https://files.pythonhosted.org/packages/6d/d9/2147ecddfffdb26b029ce7f6f09d471eaa73a6a8c2f2642bbd56a64ebf59/rapidgzip-0.14.3-pp38-pypy38_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bda377634bd55d1f9a8ba51cfbb93b8d3c7ff051a7cdb100c8b33589ab005644",
"md5": "4933786156215b5035e781e178fd354b",
"sha256": "b2b454f2ed751b4d127e7b3aff9e728f97d867e3f6317ecd30ccbaaf77ace812"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
"has_sig": false,
"md5_digest": "4933786156215b5035e781e178fd354b",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.7",
"size": 1059056,
"upload_time": "2024-10-14T20:15:41",
"upload_time_iso_8601": "2024-10-14T20:15:41.159799Z",
"url": "https://files.pythonhosted.org/packages/bd/a3/77634bd55d1f9a8ba51cfbb93b8d3c7ff051a7cdb100c8b33589ab005644/rapidgzip-0.14.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8ef206443f382f1caffb686f1503841a83181ce1c42a24ae888f955570a73b73",
"md5": "38c5e1cdecfbd8d8feee712a185e5f61",
"sha256": "e97bb7c4f32e529bc9bec0cdaf1233dba9a902ebc941eaf43ed800131ec61f7c"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "38c5e1cdecfbd8d8feee712a185e5f61",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.7",
"size": 981039,
"upload_time": "2024-10-14T20:03:24",
"upload_time_iso_8601": "2024-10-14T20:03:24.598872Z",
"url": "https://files.pythonhosted.org/packages/8e/f2/06443f382f1caffb686f1503841a83181ce1c42a24ae888f955570a73b73/rapidgzip-0.14.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f0c8b2c900562bc58f442e6635630a9a0dd53966c9d06f16a3e04a3f48abc8e1",
"md5": "034a03405e209dba47c5d0ec4a257eca",
"sha256": "9398e0a307c45952dddcd870e4e0c7e63c04f70d967bfd2e91979ccd1f1bb38b"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "034a03405e209dba47c5d0ec4a257eca",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.7",
"size": 1250985,
"upload_time": "2024-10-14T20:25:35",
"upload_time_iso_8601": "2024-10-14T20:25:35.120162Z",
"url": "https://files.pythonhosted.org/packages/f0/c8/b2c900562bc58f442e6635630a9a0dd53966c9d06f16a3e04a3f48abc8e1/rapidgzip-0.14.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "81e50972c042c6a1f0d0ffc5b23d7d88c5701ccdabf151990ff5a65bcef33188",
"md5": "3a8a71184bfbf08c743ea613c0d6f801",
"sha256": "be74d08db9446a9c7341f38e25945f2b7464f0add51910e51f90cdb043c0af71"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3a8a71184bfbf08c743ea613c0d6f801",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.7",
"size": 1239214,
"upload_time": "2024-10-14T20:30:35",
"upload_time_iso_8601": "2024-10-14T20:30:35.970674Z",
"url": "https://files.pythonhosted.org/packages/81/e5/0972c042c6a1f0d0ffc5b23d7d88c5701ccdabf151990ff5a65bcef33188/rapidgzip-0.14.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "09e43f3ffde6afd4315e58f2927707de13a967ad388c7efd628e0a80802489c9",
"md5": "f9009c3a8be3ecc74b70191e078f9fee",
"sha256": "773822b93cfb2d331d8991bc6deba83200142c5df22b3d4b681a8b85ceed42d6"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp39-pypy39_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "f9009c3a8be3ecc74b70191e078f9fee",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.7",
"size": 1217115,
"upload_time": "2024-10-14T20:25:12",
"upload_time_iso_8601": "2024-10-14T20:25:12.617205Z",
"url": "https://files.pythonhosted.org/packages/09/e4/3f3ffde6afd4315e58f2927707de13a967ad388c7efd628e0a80802489c9/rapidgzip-0.14.3-pp39-pypy39_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "69ea550939e385f97f14b78fa51c4aa9cc0f60deb365558ed1edf1e88bace541",
"md5": "6882e9c5bc7e1111ee8edab92adc703f",
"sha256": "308fb359e710dda5876b82e1d569e139fe4fe646952b2d5dbdebaa440cc65504"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3-pp39-pypy39_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "6882e9c5bc7e1111ee8edab92adc703f",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.7",
"size": 830420,
"upload_time": "2024-10-14T20:13:10",
"upload_time_iso_8601": "2024-10-14T20:13:10.673939Z",
"url": "https://files.pythonhosted.org/packages/69/ea/550939e385f97f14b78fa51c4aa9cc0f60deb365558ed1edf1e88bace541/rapidgzip-0.14.3-pp39-pypy39_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0bac0eee3d3279618a3c3810ac6b012b8ee7c1a9f239c9fa37529e619a31bb93",
"md5": "6f589e5bca1ab9b428e1ca326ccecbf3",
"sha256": "7d35f0af1657b4051a90c3c0c2c0d2433f3ce839db930fdbed3d6516de2a5df1"
},
"downloads": -1,
"filename": "rapidgzip-0.14.3.tar.gz",
"has_sig": false,
"md5_digest": "6f589e5bca1ab9b428e1ca326ccecbf3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 1434486,
"upload_time": "2024-10-14T20:24:42",
"upload_time_iso_8601": "2024-10-14T20:24:42.626936Z",
"url": "https://files.pythonhosted.org/packages/0b/ac/0eee3d3279618a3c3810ac6b012b8ee7c1a9f239c9fa37529e619a31bb93/rapidgzip-0.14.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-14 20:24:42",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mxmlnkn",
"github_project": "rapidgzip",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "rapidgzip"
}