<div align="center">
<img src="https://raw.githubusercontent.com/BrianPugh/tamp/main/assets/logo_300w.png">
</div>
<div align="center">

[](https://pypi.python.org/pypi/tamp)
[](https://github.com/BrianPugh/tamp/actions?query=workflow%3Atests)
[](https://codecov.io/github/BrianPugh/tamp?branch=main)
[](https://tamp.readthedocs.io/en/latest/?badge=latest)
</div>
---
**Documentation:** <https://tamp.readthedocs.io/en/latest/>
**Source Code:** <https://github.com/BrianPugh/tamp>
**Online Demo:** <https://brianpugh.github.io/tamp>
Tamp is a low-memory, DEFLATE-inspired lossless compression library intended for
embedded targets.
Tamp delivers the highest data compression ratios, while using the least amount
of RAM and firmware storage.
# Features
- Various language implementations available:
- Pure Python reference:
- `tamp/__init__.py`, `tamp/compressor.py`, `tamp/decompressor.py`
- `pip install tamp` will use a python-bound C implementation optimized for
speed.
- Micropython:
- Native Module (suggested micropython implementation).
- `mpy_bindings/`
- Viper.
- `tamp/__init__.py`, `tamp/compressor_viper.py`,
`tamp/decompressor_viper.py`
- C library:
- `tamp/_c_src/`
- Javascript/Typescript via Emscripten WASM.
- `wasm/`
- High compression ratios, low memory use, and fast.
- Compact compression and decompression implementations.
- Compiled C library is <4KB (compressor + decompressor).
- Mid-stream flushing.
- Allows for submission of messages while continuing to compress subsequent
data.
- Customizable dictionary for greater compression of small messages.
- Convenient CLI interface.
# Installation
Tamp contains 4 implementations:
1. A reference desktop CPython implementation that is optimized for readability
(and **not** speed).
2. A Micropython Native Module implementation (fast).
3. A Micropython Viper implementation (not recommended, please use Native
Module).
4. A C implementation (with python bindings) for accelerated desktop use and to
be used in C projects (very fast).
This section instructs how to install each implementation.
## Desktop Python
The Tamp library and CLI requires Python `>=3.8` and can be installed via:
```bash
pip install tamp
```
## MicroPython
### MicroPython Native Module
Tamp provides pre-compiled [native modules]{.title-ref} that are easy to
install, are small, and are incredibly fast.
Download the appropriate `.mpy` file from the
[release page](https://github.com/BrianPugh/tamp/releases).
- Match the micropython version.
- Match the architecture to the microcontroller (e.g. `armv6m` for a pi pico).
Rename the file to `tamp.mpy` and transfer it to your board. If using
[Belay](https://github.com/BrianPugh/belay), tamp can be installed by adding the
following to `pyproject.toml`.
```toml
[tool.belay.dependencies]
tamp = "https://github.com/BrianPugh/tamp/releases/download/v1.7.0/tamp-1.7.0-mpy1.23-armv6m.mpy"
```
### MicroPython Viper
**NOT RECOMMENDED, PLEASE USE NATIVE MODULE**
For micropython use, there are 3 main files:
1. `tamp/__init__.py` - Always required.
2. `tamp/decompressor_viper.py` - Required for on-device decompression.
3. `tamp/compressor_viper.py` - Required for on-device compression.
For example, if on-device decompression isn't used, then do not include
`decompressor_viper.py`. If manually installing, just copy these files to your
microcontroller's `/lib/tamp` folder.
If using
[mip](https://docs.micropython.org/en/latest/reference/packages.html#installing-packages-with-mip),
tamp can be installed by specifying the appropriate `package-*.json` file.
```bash
mip install github:brianpugh/tamp # Defaults to package.json: Compressor & Decompressor
mip install github:brianpugh/tamp/package-compressor.json # Compressor only
mip install github:brianpugh/tamp/package-decompressor.json # Decompressor only
```
If using [Belay](https://github.com/BrianPugh/belay), tamp can be installed by
adding the following to `pyproject.toml`.
```toml
[tool.belay.dependencies]
tamp = [
"https://github.com/BrianPugh/tamp/blob/main/tamp/__init__.py",
"https://github.com/BrianPugh/tamp/blob/main/tamp/compressor_viper.py",
"https://github.com/BrianPugh/tamp/blob/main/tamp/decompressor_viper.py",
]
```
## C
Copy the `tamp/_c_src/tamp` folder into your project. For more information, see
[the documentation](https://tamp.readthedocs.io/en/latest/c_library.html).
# Usage
Tamp works on desktop python and micropython. On desktop, Tamp is bundled with
the `tamp` command line tool for compressing and decompressing tamp files.
## CLI
### Compression
Use `tamp compress` to compress a file or stream. If no input file is specified,
data from stdin will be read. If no output is specified, the compressed output
stream will be written to stdout.
```bash
$ tamp compress --help
Usage: tamp compress [ARGS] [OPTIONS]
Compress an input file or stream.
╭─ Parameters ───────────────────────────────────────────────────────────────────────────────╮
│ INPUT,--input -i Input file to compress. Defaults to stdin. │
│ OUTPUT,--output -o Output compressed file. Defaults to stdout. │
│ --window -w Number of bits used to represent the dictionary window. [default: 10] │
│ --literal -l Number of bits used to represent a literal. [default: 8] │
╰────────────────────────────────────────────────────────────────────────────────────────────╯
```
Example usage:
```bash
tamp compress enwik8 -o enwik8.tamp # Compress a file
echo "hello world" | tamp compress | wc -c # Compress a stream and print the compressed size.
```
The following options can impact compression ratios and memory usage:
- `window` - `2^window` plaintext bytes to look back to try and find a pattern.
A larger window size will increase the chance of finding a longer pattern
match, but will use more memory, increase compression time, and cause each
pattern-token to take up more space. Try smaller window values if compressing
highly repetitive data, or short messages.
- `literal` - Number of bits used in each plaintext byte. For example, if all
input data is 7-bit ASCII, then setting this to 7 will improve literal
compression ratios by 11.1%. The default, 8-bits, can encode any binary data.
### Decompression
Use `tamp decompress` to decompress a file or stream. If no input file is
specified, data from stdin will be read. If no output is specified, the
compressed output stream will be written to stdout.
```bash
$ tamp decompress --help
Usage: tamp decompress [ARGS] [OPTIONS]
Decompress an input file or stream.
╭─ Parameters ───────────────────────────────────────────────────────────────────────────────╮
│ INPUT,--input -i Input file to decompress. Defaults to stdin. │
│ OUTPUT,--output -o Output decompressed file. Defaults to stdout. │
╰────────────────────────────────────────────────────────────────────────────────────────────╯
```
Example usage:
```bash
tamp decompress enwik8.tamp -o enwik8
echo "hello world" | tamp compress | tamp decompress
```
## Python
The python library can perform one-shot compression, as well as operate on
files/streams.
```python
import tamp
# One-shot compression
string = b"I scream, you scream, we all scream for ice cream."
compressed_data = tamp.compress(string)
reconstructed = tamp.decompress(compressed_data)
assert reconstructed == string
# Streaming compression
with tamp.open("output.tamp", "wb") as f:
for _ in range(10):
f.write(string)
# Streaming decompression
with tamp.open("output.tamp", "rb") as f:
reconstructed = f.read()
```
# Benchmark
In the following section, we compare Tamp against:
- [zlib](https://docs.python.org/3/library/zlib.html), a python builtin
gzip-compatible DEFLATE compression library.
- [heatshrink](https://github.com/atomicobject/heatshrink), a data compression
library for embedded/real-time systems. Heatshrink has similar goals as Tamp.
All of these are LZ-based compression algorithms, and tests were performed using
a 1KB (10 bit) window. Since zlib already uses significantly more memory by
default, the lowest memory level (`memLevel=1`) was used in these benchmarks. It
should be noted that higher zlib memory levels will having greater compression
ratios than Tamp. Currently, there is no micropython-compatible zlib or
heatshrink compression implementation, so these numbers are provided simply as a
reference.
## Compression Ratio
The following table shows compression algorithm performance over a variety of
input data sourced from the
[Silesia Corpus](https://sun.aei.polsl.pl//~sdeor/index.php?page=silesia) and
[Enwik8](https://mattmahoney.net/dc/textdata.html). This should give a general
idea of how these algorithms perform over a variety of input data types.
| dataset | raw | tamp | tamp (LazyMatching) | zlib | heatshrink |
| --------------------- | ----------- | -------------- | ------------------- | -------------- | ---------- |
| enwik8 | 100,000,000 | **51,635,633** | 51,252,113 | 56,205,166 | 56,110,394 |
| build/silesia/dickens | 10,192,446 | **5,546,761** | 5,511,604 | 6,049,169 | 6,155,768 |
| build/silesia/mozilla | 51,220,480 | 25,121,385 | 24,936,067 | **25,104,966** | 25,435,908 |
| build/silesia/mr | 9,970,564 | 5,027,032 | 4,886,272 | **4,864,734** | 5,442,180 |
| build/silesia/nci | 33,553,445 | 8,643,610 | 8,645,299 | **5,765,521** | 8,247,487 |
| build/silesia/ooffice | 6,152,192 | **3,814,938** | 3,798,261 | 4,077,277 | 3,994,589 |
| build/silesia/osdb | 10,085,684 | **8,520,835** | 8,506,443 | 8,625,159 | 8,747,527 |
| build/silesia/reymont | 6,627,202 | **2,847,981** | 2,820,870 | 2,897,661 | 2,910,251 |
| build/silesia/samba | 21,606,400 | 9,102,594 | 9,060,692 | **8,862,423** | 9,223,827 |
| build/silesia/sao | 7,251,944 | **6,137,755** | 6,101,744 | 6,506,417 | 6,400,926 |
| build/silesia/webster | 41,458,703 | **18,694,172** | 18,567,288 | 20,212,235 | 19,942,817 |
| build/silesia/x-ray | 8,474,240 | 7,510,606 | 7,405,814 | **7,351,750** | 8,059,723 |
| build/silesia/xml | 5,345,280 | 1,681,687 | 1,672,660 | **1,586,985** | 1,665,179 |
Tamp usually out-performs heatshrink, and is generally very competitive with
zlib. While trying to be an apples-to-apples comparison, zlib still uses
significantly more memory during both compression and decompression (see next
section). Tamp accomplishes competitive performance while using around 10x less
memory.
Lazy Matching is a simple technique to improve compression ratios at the expense
of CPU while requiring very little code. One can expect **50-75%** more CPU
usage for modest compression gains (around 0.5 - 2.0%). Because of this poor
trade-off, it is disabled by default; however, in applications where we want to
compress once on a powerful machine (like a desktop/server) and decompress on an
embedded device, it may be worth it to spend a bit more compute. Lazy matched
compressed data is the exact same format; it appears no different to the tamp
decoder.
One might wonder "Why did Tamp perform so much worse than zlib on the nci
dataset?" The `nci` dataset contains highly compressible data with **long
patterns**. For example, the following 49-character **text** appears repeatedly
in the dataset:
```
0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
```
Tamp's maximum pattern length peaks at around 15 characters, meaning that these
49 characters has to be compressed as 4 pattern-matches. Zlib can handle
patterns with a maximum length of 258, meaning that it can encode this highly
repeating data more efficiently. Given Tamp's excellent performance in most of
the other data compression benchmark files, this is a good tradeoff for most
real-world scenarios.
## Memory Usage
The following table shows approximately how much memory each algorithm uses
during compression and decompression.
| | Compression | Decompression |
| --------------------- | ----------------------------- | ----------------------- |
| Tamp | (1 << windowBits) | (1 << windowBits) |
| ZLib | (1 << (windowBits + 2)) + 7KB | (1 << windowBits) + 7KB |
| Heatshrink | (1 << (windowBits + 1)) | (1 << (windowBits + 1)) |
| Deflate (micropython) | (1 << windowBits) | (1 << windowBits) |
All libraries have a few dozen bytes of overhead in addition to the primary
window buffer, but are implementation-specific and ignored for clarity here.
Tamp uses significantly less memory than ZLib, and half the memory of
Heatshrink.
## Runtime
As a rough benchmark, here is the performance (in seconds) of these different
compression algorithms on the 100MB enwik8 dataset. These tests were performed
on an M1 Macbook Air.
| | Compression (s) | Decompression (s) |
| -------------------------- | --------------- | ----------------- |
| Tamp (Python Reference) | 109.5 | 76.0 |
| Tamp (C) | 16.45 | 0.142 |
| ZLib | 0.98 | 0.98 |
| Heatshrink (with index) | 6.22 | 0.82 |
| Heatshrink (without index) | 41.73 | 0.82 |
Heatshrink v0.4.1 was used in these benchmarks. When heathshrink uses an index,
an additional `(1 << (windowBits + 1))` bytes of memory are used, resulting in
4x more memory-usage than Tamp. Tamp could use a similar indexing to increase
compression speed, but has chosen not to to focus on the primary goal of a
low-memory compressor.
To give an idea of Tamp's speed on an embedded device, the following table shows
compression/decompression in **bytes/second of the first 100KB of enwik8 on a pi
pico (rp2040)** at the default 125MHz clock rate. The C benchmark **does not**
use a filesystem nor dynamic memory allocation, so it represents the maximum
speed Tamp can achieve. In all tests, a 1KB window (10 bit) was used.
| | Compression (bytes/s) | Decompression (bytes/s) |
| -------------------------------- | --------------------- | ----------------------- |
| Tamp (MicroPython Viper) | 4,300 | 42,000 |
| Tamp (Micropython Native Module) | 12,770 | 644,000 |
| Tamp (C) | 28,500 | 1,042,524 |
| Deflate (micropython builtin) | 6,715 | 146,477 |
Tamp resulted in a **51637** byte archive, while Micropython's builtin `deflate`
resulted in a larger, **59442** byte archive.
## Binary Size
To give an idea on the resulting binary sizes, Tamp and other libraries were
compiled for the Pi Pico (`armv6m`). All libraries were compiled with `-O3`.
Numbers reported in bytes.
| | Compressor | Decompressor | Compressor + Decompressor |
| ------------------------- | ---------- | ------------ | ------------------------- |
| Tamp (MicroPython Viper) | 4429 | 4205 | 7554 |
| Tamp (MicroPython Native) | 3232 | 3047 | 5505 |
| Tamp (C) | 2008 | 1972 | 3864 |
| Heatshrink (C) | 2956 | 3876 | 6832 |
| uzlib (C) | 2355 | 3963 | 6318 |
Heatshrink doesn't include a high level API; in an apples-to-apples comparison
the Tamp library would be even smaller.
## Acknowledgement
- Thanks @BitsForPeople for the esp32-optimized compressor implementation.
Raw data
{
"_id": null,
"home_page": "https://github.com/BrianPugh/tamp",
"name": "tamp",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": null,
"author": "Brian Pugh",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/f8/e6/8c69b1f5f06323aea449f90ead31567e91726ee323de85f3692572a9cde5/tamp-1.10.0.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n <img src=\"https://raw.githubusercontent.com/BrianPugh/tamp/main/assets/logo_300w.png\">\n</div>\n\n<div align=\"center\">\n\n\n[](https://pypi.python.org/pypi/tamp)\n[](https://github.com/BrianPugh/tamp/actions?query=workflow%3Atests)\n[](https://codecov.io/github/BrianPugh/tamp?branch=main)\n[](https://tamp.readthedocs.io/en/latest/?badge=latest)\n\n</div>\n\n---\n\n**Documentation:** <https://tamp.readthedocs.io/en/latest/>\n\n**Source Code:** <https://github.com/BrianPugh/tamp>\n\n**Online Demo:** <https://brianpugh.github.io/tamp>\n\nTamp is a low-memory, DEFLATE-inspired lossless compression library intended for\nembedded targets.\n\nTamp delivers the highest data compression ratios, while using the least amount\nof RAM and firmware storage.\n\n# Features\n\n- Various language implementations available:\n - Pure Python reference:\n - `tamp/__init__.py`, `tamp/compressor.py`, `tamp/decompressor.py`\n - `pip install tamp` will use a python-bound C implementation optimized for\n speed.\n - Micropython:\n - Native Module (suggested micropython implementation).\n - `mpy_bindings/`\n - Viper.\n - `tamp/__init__.py`, `tamp/compressor_viper.py`,\n `tamp/decompressor_viper.py`\n - C library:\n - `tamp/_c_src/`\n - Javascript/Typescript via Emscripten WASM.\n - `wasm/`\n- High compression ratios, low memory use, and fast.\n- Compact compression and decompression implementations.\n - Compiled C library is <4KB (compressor + decompressor).\n- Mid-stream flushing.\n - Allows for submission of messages while continuing to compress subsequent\n data.\n- Customizable dictionary for greater compression of small messages.\n- Convenient CLI interface.\n\n# Installation\n\nTamp contains 4 implementations:\n\n1. A reference desktop CPython implementation that is optimized for readability\n (and **not** speed).\n2. A Micropython Native Module implementation (fast).\n3. A Micropython Viper implementation (not recommended, please use Native\n Module).\n4. A C implementation (with python bindings) for accelerated desktop use and to\n be used in C projects (very fast).\n\nThis section instructs how to install each implementation.\n\n## Desktop Python\n\nThe Tamp library and CLI requires Python `>=3.8` and can be installed via:\n\n```bash\npip install tamp\n```\n\n## MicroPython\n\n### MicroPython Native Module\n\nTamp provides pre-compiled [native modules]{.title-ref} that are easy to\ninstall, are small, and are incredibly fast.\n\nDownload the appropriate `.mpy` file from the\n[release page](https://github.com/BrianPugh/tamp/releases).\n\n- Match the micropython version.\n- Match the architecture to the microcontroller (e.g. `armv6m` for a pi pico).\n\nRename the file to `tamp.mpy` and transfer it to your board. If using\n[Belay](https://github.com/BrianPugh/belay), tamp can be installed by adding the\nfollowing to `pyproject.toml`.\n\n```toml\n[tool.belay.dependencies]\ntamp = \"https://github.com/BrianPugh/tamp/releases/download/v1.7.0/tamp-1.7.0-mpy1.23-armv6m.mpy\"\n```\n\n### MicroPython Viper\n\n**NOT RECOMMENDED, PLEASE USE NATIVE MODULE**\n\nFor micropython use, there are 3 main files:\n\n1. `tamp/__init__.py` - Always required.\n2. `tamp/decompressor_viper.py` - Required for on-device decompression.\n3. `tamp/compressor_viper.py` - Required for on-device compression.\n\nFor example, if on-device decompression isn't used, then do not include\n`decompressor_viper.py`. If manually installing, just copy these files to your\nmicrocontroller's `/lib/tamp` folder.\n\nIf using\n[mip](https://docs.micropython.org/en/latest/reference/packages.html#installing-packages-with-mip),\ntamp can be installed by specifying the appropriate `package-*.json` file.\n\n```bash\nmip install github:brianpugh/tamp # Defaults to package.json: Compressor & Decompressor\nmip install github:brianpugh/tamp/package-compressor.json # Compressor only\nmip install github:brianpugh/tamp/package-decompressor.json # Decompressor only\n```\n\nIf using [Belay](https://github.com/BrianPugh/belay), tamp can be installed by\nadding the following to `pyproject.toml`.\n\n```toml\n[tool.belay.dependencies]\ntamp = [\n \"https://github.com/BrianPugh/tamp/blob/main/tamp/__init__.py\",\n \"https://github.com/BrianPugh/tamp/blob/main/tamp/compressor_viper.py\",\n \"https://github.com/BrianPugh/tamp/blob/main/tamp/decompressor_viper.py\",\n]\n```\n\n## C\n\nCopy the `tamp/_c_src/tamp` folder into your project. For more information, see\n[the documentation](https://tamp.readthedocs.io/en/latest/c_library.html).\n\n# Usage\n\nTamp works on desktop python and micropython. On desktop, Tamp is bundled with\nthe `tamp` command line tool for compressing and decompressing tamp files.\n\n## CLI\n\n### Compression\n\nUse `tamp compress` to compress a file or stream. If no input file is specified,\ndata from stdin will be read. If no output is specified, the compressed output\nstream will be written to stdout.\n\n```bash\n$ tamp compress --help\nUsage: tamp compress [ARGS] [OPTIONS]\n\nCompress an input file or stream.\n\n\u256d\u2500 Parameters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 INPUT,--input -i Input file to compress. Defaults to stdin. \u2502\n\u2502 OUTPUT,--output -o Output compressed file. Defaults to stdout. \u2502\n\u2502 --window -w Number of bits used to represent the dictionary window. [default: 10] \u2502\n\u2502 --literal -l Number of bits used to represent a literal. [default: 8] \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n\nExample usage:\n\n```bash\ntamp compress enwik8 -o enwik8.tamp # Compress a file\necho \"hello world\" | tamp compress | wc -c # Compress a stream and print the compressed size.\n```\n\nThe following options can impact compression ratios and memory usage:\n\n- `window` - `2^window` plaintext bytes to look back to try and find a pattern.\n A larger window size will increase the chance of finding a longer pattern\n match, but will use more memory, increase compression time, and cause each\n pattern-token to take up more space. Try smaller window values if compressing\n highly repetitive data, or short messages.\n- `literal` - Number of bits used in each plaintext byte. For example, if all\n input data is 7-bit ASCII, then setting this to 7 will improve literal\n compression ratios by 11.1%. The default, 8-bits, can encode any binary data.\n\n### Decompression\n\nUse `tamp decompress` to decompress a file or stream. If no input file is\nspecified, data from stdin will be read. If no output is specified, the\ncompressed output stream will be written to stdout.\n\n```bash\n$ tamp decompress --help\nUsage: tamp decompress [ARGS] [OPTIONS]\n\nDecompress an input file or stream.\n\n\u256d\u2500 Parameters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 INPUT,--input -i Input file to decompress. Defaults to stdin. \u2502\n\u2502 OUTPUT,--output -o Output decompressed file. Defaults to stdout. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n\nExample usage:\n\n```bash\ntamp decompress enwik8.tamp -o enwik8\necho \"hello world\" | tamp compress | tamp decompress\n```\n\n## Python\n\nThe python library can perform one-shot compression, as well as operate on\nfiles/streams.\n\n```python\nimport tamp\n\n# One-shot compression\nstring = b\"I scream, you scream, we all scream for ice cream.\"\ncompressed_data = tamp.compress(string)\nreconstructed = tamp.decompress(compressed_data)\nassert reconstructed == string\n\n# Streaming compression\nwith tamp.open(\"output.tamp\", \"wb\") as f:\n for _ in range(10):\n f.write(string)\n\n# Streaming decompression\nwith tamp.open(\"output.tamp\", \"rb\") as f:\n reconstructed = f.read()\n```\n\n# Benchmark\n\nIn the following section, we compare Tamp against:\n\n- [zlib](https://docs.python.org/3/library/zlib.html), a python builtin\n gzip-compatible DEFLATE compression library.\n- [heatshrink](https://github.com/atomicobject/heatshrink), a data compression\n library for embedded/real-time systems. Heatshrink has similar goals as Tamp.\n\nAll of these are LZ-based compression algorithms, and tests were performed using\na 1KB (10 bit) window. Since zlib already uses significantly more memory by\ndefault, the lowest memory level (`memLevel=1`) was used in these benchmarks. It\nshould be noted that higher zlib memory levels will having greater compression\nratios than Tamp. Currently, there is no micropython-compatible zlib or\nheatshrink compression implementation, so these numbers are provided simply as a\nreference.\n\n## Compression Ratio\n\nThe following table shows compression algorithm performance over a variety of\ninput data sourced from the\n[Silesia Corpus](https://sun.aei.polsl.pl//~sdeor/index.php?page=silesia) and\n[Enwik8](https://mattmahoney.net/dc/textdata.html). This should give a general\nidea of how these algorithms perform over a variety of input data types.\n\n| dataset | raw | tamp | tamp (LazyMatching) | zlib | heatshrink |\n| --------------------- | ----------- | -------------- | ------------------- | -------------- | ---------- |\n| enwik8 | 100,000,000 | **51,635,633** | 51,252,113 | 56,205,166 | 56,110,394 |\n| build/silesia/dickens | 10,192,446 | **5,546,761** | 5,511,604 | 6,049,169 | 6,155,768 |\n| build/silesia/mozilla | 51,220,480 | 25,121,385 | 24,936,067 | **25,104,966** | 25,435,908 |\n| build/silesia/mr | 9,970,564 | 5,027,032 | 4,886,272 | **4,864,734** | 5,442,180 |\n| build/silesia/nci | 33,553,445 | 8,643,610 | 8,645,299 | **5,765,521** | 8,247,487 |\n| build/silesia/ooffice | 6,152,192 | **3,814,938** | 3,798,261 | 4,077,277 | 3,994,589 |\n| build/silesia/osdb | 10,085,684 | **8,520,835** | 8,506,443 | 8,625,159 | 8,747,527 |\n| build/silesia/reymont | 6,627,202 | **2,847,981** | 2,820,870 | 2,897,661 | 2,910,251 |\n| build/silesia/samba | 21,606,400 | 9,102,594 | 9,060,692 | **8,862,423** | 9,223,827 |\n| build/silesia/sao | 7,251,944 | **6,137,755** | 6,101,744 | 6,506,417 | 6,400,926 |\n| build/silesia/webster | 41,458,703 | **18,694,172** | 18,567,288 | 20,212,235 | 19,942,817 |\n| build/silesia/x-ray | 8,474,240 | 7,510,606 | 7,405,814 | **7,351,750** | 8,059,723 |\n| build/silesia/xml | 5,345,280 | 1,681,687 | 1,672,660 | **1,586,985** | 1,665,179 |\n\nTamp usually out-performs heatshrink, and is generally very competitive with\nzlib. While trying to be an apples-to-apples comparison, zlib still uses\nsignificantly more memory during both compression and decompression (see next\nsection). Tamp accomplishes competitive performance while using around 10x less\nmemory.\n\nLazy Matching is a simple technique to improve compression ratios at the expense\nof CPU while requiring very little code. One can expect **50-75%** more CPU\nusage for modest compression gains (around 0.5 - 2.0%). Because of this poor\ntrade-off, it is disabled by default; however, in applications where we want to\ncompress once on a powerful machine (like a desktop/server) and decompress on an\nembedded device, it may be worth it to spend a bit more compute. Lazy matched\ncompressed data is the exact same format; it appears no different to the tamp\ndecoder.\n\nOne might wonder \"Why did Tamp perform so much worse than zlib on the nci\ndataset?\" The `nci` dataset contains highly compressible data with **long\npatterns**. For example, the following 49-character **text** appears repeatedly\nin the dataset:\n\n```\n 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n```\n\nTamp's maximum pattern length peaks at around 15 characters, meaning that these\n49 characters has to be compressed as 4 pattern-matches. Zlib can handle\npatterns with a maximum length of 258, meaning that it can encode this highly\nrepeating data more efficiently. Given Tamp's excellent performance in most of\nthe other data compression benchmark files, this is a good tradeoff for most\nreal-world scenarios.\n\n## Memory Usage\n\nThe following table shows approximately how much memory each algorithm uses\nduring compression and decompression.\n\n| | Compression | Decompression |\n| --------------------- | ----------------------------- | ----------------------- |\n| Tamp | (1 << windowBits) | (1 << windowBits) |\n| ZLib | (1 << (windowBits + 2)) + 7KB | (1 << windowBits) + 7KB |\n| Heatshrink | (1 << (windowBits + 1)) | (1 << (windowBits + 1)) |\n| Deflate (micropython) | (1 << windowBits) | (1 << windowBits) |\n\nAll libraries have a few dozen bytes of overhead in addition to the primary\nwindow buffer, but are implementation-specific and ignored for clarity here.\nTamp uses significantly less memory than ZLib, and half the memory of\nHeatshrink.\n\n## Runtime\n\nAs a rough benchmark, here is the performance (in seconds) of these different\ncompression algorithms on the 100MB enwik8 dataset. These tests were performed\non an M1 Macbook Air.\n\n| | Compression (s) | Decompression (s) |\n| -------------------------- | --------------- | ----------------- |\n| Tamp (Python Reference) | 109.5 | 76.0 |\n| Tamp (C) | 16.45 | 0.142 |\n| ZLib | 0.98 | 0.98 |\n| Heatshrink (with index) | 6.22 | 0.82 |\n| Heatshrink (without index) | 41.73 | 0.82 |\n\nHeatshrink v0.4.1 was used in these benchmarks. When heathshrink uses an index,\nan additional `(1 << (windowBits + 1))` bytes of memory are used, resulting in\n4x more memory-usage than Tamp. Tamp could use a similar indexing to increase\ncompression speed, but has chosen not to to focus on the primary goal of a\nlow-memory compressor.\n\nTo give an idea of Tamp's speed on an embedded device, the following table shows\ncompression/decompression in **bytes/second of the first 100KB of enwik8 on a pi\npico (rp2040)** at the default 125MHz clock rate. The C benchmark **does not**\nuse a filesystem nor dynamic memory allocation, so it represents the maximum\nspeed Tamp can achieve. In all tests, a 1KB window (10 bit) was used.\n\n| | Compression (bytes/s) | Decompression (bytes/s) |\n| -------------------------------- | --------------------- | ----------------------- |\n| Tamp (MicroPython Viper) | 4,300 | 42,000 |\n| Tamp (Micropython Native Module) | 12,770 | 644,000 |\n| Tamp (C) | 28,500 | 1,042,524 |\n| Deflate (micropython builtin) | 6,715 | 146,477 |\n\nTamp resulted in a **51637** byte archive, while Micropython's builtin `deflate`\nresulted in a larger, **59442** byte archive.\n\n## Binary Size\n\nTo give an idea on the resulting binary sizes, Tamp and other libraries were\ncompiled for the Pi Pico (`armv6m`). All libraries were compiled with `-O3`.\nNumbers reported in bytes.\n\n| | Compressor | Decompressor | Compressor + Decompressor |\n| ------------------------- | ---------- | ------------ | ------------------------- |\n| Tamp (MicroPython Viper) | 4429 | 4205 | 7554 |\n| Tamp (MicroPython Native) | 3232 | 3047 | 5505 |\n| Tamp (C) | 2008 | 1972 | 3864 |\n| Heatshrink (C) | 2956 | 3876 | 6832 |\n| uzlib (C) | 2355 | 3963 | 6318 |\n\nHeatshrink doesn't include a high level API; in an apples-to-apples comparison\nthe Tamp library would be even smaller.\n\n## Acknowledgement\n\n- Thanks @BitsForPeople for the esp32-optimized compressor implementation.\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": null,
"version": "1.10.0",
"project_urls": {
"Homepage": "https://github.com/BrianPugh/tamp",
"Repository": "https://github.com/BrianPugh/tamp"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e4deaf115105c500cf2fdc37386ff320d79b6e4ba6d2f514c98bfb1c177b92ce",
"md5": "9a5b0cf08551970994de55b0496da07f",
"sha256": "101ee3d908d9c16d1ce58d00cf90e2317e1f67abc6c6231923ab350acc4ea486"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "9a5b0cf08551970994de55b0496da07f",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 178617,
"upload_time": "2025-08-06T19:34:21",
"upload_time_iso_8601": "2025-08-06T19:34:21.766553Z",
"url": "https://files.pythonhosted.org/packages/e4/de/af115105c500cf2fdc37386ff320d79b6e4ba6d2f514c98bfb1c177b92ce/tamp-1.10.0-cp310-cp310-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "35327bd93363d4f638733bfdfd8338e23dd3116a42b9b64da6375a7f56969c22",
"md5": "1478bf8bee4bd10be96b466b41c6086b",
"sha256": "0cb4048041fae7dd400dc3522d6dc2e6cf0667246a1608b51939fa06febec65e"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "1478bf8bee4bd10be96b466b41c6086b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 169679,
"upload_time": "2025-08-06T19:34:22",
"upload_time_iso_8601": "2025-08-06T19:34:22.926717Z",
"url": "https://files.pythonhosted.org/packages/35/32/7bd93363d4f638733bfdfd8338e23dd3116a42b9b64da6375a7f56969c22/tamp-1.10.0-cp310-cp310-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dd212824fccf3e7ab85ae530f1fd6393749d85ab09a23bf4c9756fb6a2bf0dae",
"md5": "d963350621cbd2443be99a603df6b8f2",
"sha256": "75e600bb1e51f2d0d708022d4ae8002366540f823b15de78072773ffc798ee32"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "d963350621cbd2443be99a603df6b8f2",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 809900,
"upload_time": "2025-08-06T19:34:24",
"upload_time_iso_8601": "2025-08-06T19:34:24.163935Z",
"url": "https://files.pythonhosted.org/packages/dd/21/2824fccf3e7ab85ae530f1fd6393749d85ab09a23bf4c9756fb6a2bf0dae/tamp-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f59b89a4c2e6f91cbc7f7e19999069027818d16ce8b112752baade2e391e26ee",
"md5": "9f23336322dae49edefed6444139bdcf",
"sha256": "04fc36937d9ba1979af32529d5d3613a17c7483a3115e8b6c6b0a28933ab38c2"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "9f23336322dae49edefed6444139bdcf",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 783472,
"upload_time": "2025-08-06T19:34:25",
"upload_time_iso_8601": "2025-08-06T19:34:25.675725Z",
"url": "https://files.pythonhosted.org/packages/f5/9b/89a4c2e6f91cbc7f7e19999069027818d16ce8b112752baade2e391e26ee/tamp-1.10.0-cp310-cp310-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fdf91fc33045983c9b41c17c620445becbf2a66aa5dc1664f56891e5c86e82ce",
"md5": "97b464d20f31ac6a3acce5e72e984707",
"sha256": "18986147c39943d53190da6e663aa461db5a22c497ddc931328953e7dd9301be"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "97b464d20f31ac6a3acce5e72e984707",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 865704,
"upload_time": "2025-08-06T19:34:26",
"upload_time_iso_8601": "2025-08-06T19:34:26.927016Z",
"url": "https://files.pythonhosted.org/packages/fd/f9/1fc33045983c9b41c17c620445becbf2a66aa5dc1664f56891e5c86e82ce/tamp-1.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "257f3e1f1d3dd50f4d0b8eede49a9ea4cd0a171e48a803b64486fbb3837b1a48",
"md5": "5067b5cd8683752563098b25b9ebfcbd",
"sha256": "6853f3d6a11a70207a26a89ef0495a652c06acec0a6d3454e16be7e186ae77c8"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "5067b5cd8683752563098b25b9ebfcbd",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 809765,
"upload_time": "2025-08-06T19:34:27",
"upload_time_iso_8601": "2025-08-06T19:34:27.974527Z",
"url": "https://files.pythonhosted.org/packages/25/7f/3e1f1d3dd50f4d0b8eede49a9ea4cd0a171e48a803b64486fbb3837b1a48/tamp-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2cbd3ec369818d604a44efd3293957eb9caceefea8bee711f06e5ce637cf1802",
"md5": "5d5cdc08fe2d5cd40e76b511eca2dfd2",
"sha256": "99f26d8d61b3c343cc9f6dd3b37b6174b657b934b0ec44a8d63b0db14ba87448"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "5d5cdc08fe2d5cd40e76b511eca2dfd2",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 823335,
"upload_time": "2025-08-06T19:34:29",
"upload_time_iso_8601": "2025-08-06T19:34:29.053709Z",
"url": "https://files.pythonhosted.org/packages/2c/bd/3ec369818d604a44efd3293957eb9caceefea8bee711f06e5ce637cf1802/tamp-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bd33dd4b39c212033443f18c479ecab72fba879b252ad5c1f1ea2a95e26db304",
"md5": "f34f1774cafdd584f470836cb3c99dda",
"sha256": "454bc589e773578ceb18efea3b0ca34d9fda80279b797416995770f51206ae73"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "f34f1774cafdd584f470836cb3c99dda",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 784864,
"upload_time": "2025-08-06T19:34:30",
"upload_time_iso_8601": "2025-08-06T19:34:30.096261Z",
"url": "https://files.pythonhosted.org/packages/bd/33/dd4b39c212033443f18c479ecab72fba879b252ad5c1f1ea2a95e26db304/tamp-1.10.0-cp310-cp310-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9ea483e7261afb05298dfd78dfb888d25c1ffb85d1a16e084f69466ea9e748f2",
"md5": "6709f0d35e244544bcaf7bf2c18e221e",
"sha256": "244e7d1186f4d77d2d5403ce6330b8ba895618f5fc378c97fa4481b40ebaedbc"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-musllinux_1_1_ppc64le.whl",
"has_sig": false,
"md5_digest": "6709f0d35e244544bcaf7bf2c18e221e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 860586,
"upload_time": "2025-08-06T19:34:31",
"upload_time_iso_8601": "2025-08-06T19:34:31.157150Z",
"url": "https://files.pythonhosted.org/packages/9e/a4/83e7261afb05298dfd78dfb888d25c1ffb85d1a16e084f69466ea9e748f2/tamp-1.10.0-cp310-cp310-musllinux_1_1_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0c0b555ab9552bdcaf6ba9d34a7c394247fef9d507a08d963d2b8b9b1ae46109",
"md5": "84f1445bc0c9c86787fd05843c11e374",
"sha256": "69faa58d540cbf0185b82748401fa2635c43e42a27a6d5765d025d9b6fc14c05"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "84f1445bc0c9c86787fd05843c11e374",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 822525,
"upload_time": "2025-08-06T19:34:33",
"upload_time_iso_8601": "2025-08-06T19:34:33.003950Z",
"url": "https://files.pythonhosted.org/packages/0c/0b/555ab9552bdcaf6ba9d34a7c394247fef9d507a08d963d2b8b9b1ae46109/tamp-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ff344d1240fec695173d1fde7363adf7a5a3790d2ba381cf8cf3d13e5b924cc7",
"md5": "d9fd4c8cd7ae6e96c9ce11a60d95f8bd",
"sha256": "39cf82219c91f517e217ec127af039ece95c896fe5e76aae576ca09403563ee1"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "d9fd4c8cd7ae6e96c9ce11a60d95f8bd",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 146649,
"upload_time": "2025-08-06T19:34:33",
"upload_time_iso_8601": "2025-08-06T19:34:33.982139Z",
"url": "https://files.pythonhosted.org/packages/ff/34/4d1240fec695173d1fde7363adf7a5a3790d2ba381cf8cf3d13e5b924cc7/tamp-1.10.0-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cc0548888cb54d53a9ad4d4eeac7a5a7962e8afb5c956cfe01f78217885443af",
"md5": "c20c0113e2800689d3adba737f2bc04a",
"sha256": "e5660d82e6c39089c4800880bcb01634ac6034026d7f9bdc64b45c01fafcf0f1"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "c20c0113e2800689d3adba737f2bc04a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.8",
"size": 169221,
"upload_time": "2025-08-06T19:34:34",
"upload_time_iso_8601": "2025-08-06T19:34:34.816002Z",
"url": "https://files.pythonhosted.org/packages/cc/05/48888cb54d53a9ad4d4eeac7a5a7962e8afb5c956cfe01f78217885443af/tamp-1.10.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "85924ccfcc9ee74d86a6eacbf8feaf4bcf169d1e06fa06a07fd882ac1e539b1a",
"md5": "16e42d76eca37757187b925cf87a6016",
"sha256": "988cafb2831d280afdbf9773190595a69c5bf20b9698bc1bbe6ff846bf2f5237"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "16e42d76eca37757187b925cf87a6016",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 179274,
"upload_time": "2025-08-06T19:34:35",
"upload_time_iso_8601": "2025-08-06T19:34:35.737711Z",
"url": "https://files.pythonhosted.org/packages/85/92/4ccfcc9ee74d86a6eacbf8feaf4bcf169d1e06fa06a07fd882ac1e539b1a/tamp-1.10.0-cp311-cp311-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f418b7401c87e5c044449f7849863a5019d9d02efe8c2d94770c572c150d2529",
"md5": "ceb2bb49b2bb77b72f4f64cc60c3e1ee",
"sha256": "ec97c91e133e430c3c5d37200d4a85687ffa7d8ac78b377d803ac3efad9d5684"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "ceb2bb49b2bb77b72f4f64cc60c3e1ee",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 170408,
"upload_time": "2025-08-06T19:34:36",
"upload_time_iso_8601": "2025-08-06T19:34:36.705451Z",
"url": "https://files.pythonhosted.org/packages/f4/18/b7401c87e5c044449f7849863a5019d9d02efe8c2d94770c572c150d2529/tamp-1.10.0-cp311-cp311-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e4e49329230d96fbb2cc464c54ccdca881c0cfcc817783e472c82a5cb63b6a65",
"md5": "17c6e35e65a311349a217a3d324364b1",
"sha256": "815338548149ab3092dd2d277edbd882a081ce6dcd274aa39428390458e2b366"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "17c6e35e65a311349a217a3d324364b1",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 856323,
"upload_time": "2025-08-06T19:34:37",
"upload_time_iso_8601": "2025-08-06T19:34:37.941726Z",
"url": "https://files.pythonhosted.org/packages/e4/e4/9329230d96fbb2cc464c54ccdca881c0cfcc817783e472c82a5cb63b6a65/tamp-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "22c045b79d5aacef0aec78faa604bf7ad5b1f6eadfcf85b00af570b660aa3f58",
"md5": "d97585150423eded22657f0750bcaab8",
"sha256": "d9c5f476b6482d24c2b84454d387279dac2abe382230923eec890f8ea1947155"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "d97585150423eded22657f0750bcaab8",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 826137,
"upload_time": "2025-08-06T19:34:39",
"upload_time_iso_8601": "2025-08-06T19:34:39.011903Z",
"url": "https://files.pythonhosted.org/packages/22/c0/45b79d5aacef0aec78faa604bf7ad5b1f6eadfcf85b00af570b660aa3f58/tamp-1.10.0-cp311-cp311-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fac1e55c8b64c35bd9c88c33edd2d000c40f3c1fdcc7e4ce195ff55945362b4f",
"md5": "64d2aaa36acdf875644e2d9654946f75",
"sha256": "93821646471cc7af94f913f2ea81868ddc9e95485c1715bb5f387a1e52feef5a"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "64d2aaa36acdf875644e2d9654946f75",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 913592,
"upload_time": "2025-08-06T19:34:40",
"upload_time_iso_8601": "2025-08-06T19:34:40.340238Z",
"url": "https://files.pythonhosted.org/packages/fa/c1/e55c8b64c35bd9c88c33edd2d000c40f3c1fdcc7e4ce195ff55945362b4f/tamp-1.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3b4a1964491afd83f672dd589e3fba4b7bfc3ac14e3d29584d503c6192159a40",
"md5": "b3bae49b44c14f08e8c5306b4c4bf661",
"sha256": "c027ddf8c8eda8f8d47c7e53e924ec92039357934364048697232c6b4d8526aa"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b3bae49b44c14f08e8c5306b4c4bf661",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 855503,
"upload_time": "2025-08-06T19:34:41",
"upload_time_iso_8601": "2025-08-06T19:34:41.732002Z",
"url": "https://files.pythonhosted.org/packages/3b/4a/1964491afd83f672dd589e3fba4b7bfc3ac14e3d29584d503c6192159a40/tamp-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8e678e6a2d439e9b1bcf7b0e1a19d72c757cd7512b3bfb5673771c8d876beab0",
"md5": "8da61d95b3b7f303e0630b9ecb3e4e92",
"sha256": "69bc21262f1b505878eda9649ed907fcf9d0148260d0b59d31180da6d30c727e"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "8da61d95b3b7f303e0630b9ecb3e4e92",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 864241,
"upload_time": "2025-08-06T19:34:42",
"upload_time_iso_8601": "2025-08-06T19:34:42.831158Z",
"url": "https://files.pythonhosted.org/packages/8e/67/8e6a2d439e9b1bcf7b0e1a19d72c757cd7512b3bfb5673771c8d876beab0/tamp-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "630b4a5659c35634fb3f8b0c06f93ba181ab003b5b49cebc763dd80a1db999ba",
"md5": "bfde59171b1ff07141c654478d367575",
"sha256": "7e9b80ad706f587d62a5c37913fe91d9e6d63618a6ded5f66418c8deec731504"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "bfde59171b1ff07141c654478d367575",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 817056,
"upload_time": "2025-08-06T19:34:44",
"upload_time_iso_8601": "2025-08-06T19:34:44.028954Z",
"url": "https://files.pythonhosted.org/packages/63/0b/4a5659c35634fb3f8b0c06f93ba181ab003b5b49cebc763dd80a1db999ba/tamp-1.10.0-cp311-cp311-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b3189a2338d1a5c87f5246961305b7e13c57ba29545c48deba0112de95665c20",
"md5": "62323e22c75abf03647a12aca31f2b12",
"sha256": "63c9633ab3758ebdda6b11c427e501e552b54b8d8265b4e936d57baf35417bd1"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-musllinux_1_1_ppc64le.whl",
"has_sig": false,
"md5_digest": "62323e22c75abf03647a12aca31f2b12",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 900629,
"upload_time": "2025-08-06T19:34:45",
"upload_time_iso_8601": "2025-08-06T19:34:45.079709Z",
"url": "https://files.pythonhosted.org/packages/b3/18/9a2338d1a5c87f5246961305b7e13c57ba29545c48deba0112de95665c20/tamp-1.10.0-cp311-cp311-musllinux_1_1_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "76260aaf3f0bbc23553c98514da44c415a3e30e03971459d6ea2c86e693de659",
"md5": "e0f97ca1215a776e3839680301c5a4fb",
"sha256": "5bade62c79cdd3660cf0294d2d489be73a71e25bf2d2714b24d1a9b026a9e234"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "e0f97ca1215a776e3839680301c5a4fb",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 861506,
"upload_time": "2025-08-06T19:34:47",
"upload_time_iso_8601": "2025-08-06T19:34:47.015547Z",
"url": "https://files.pythonhosted.org/packages/76/26/0aaf3f0bbc23553c98514da44c415a3e30e03971459d6ea2c86e693de659/tamp-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "885042217c3cd92a2974f23eb20b6415e704c72c108c62f751c2aa56944c8d30",
"md5": "fd08f3c95cd55a70658a5bf897004370",
"sha256": "5712ae3e0a6ab8cdcd287bd01a053f114f6a237622f0224542e525a839ed9ce1"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "fd08f3c95cd55a70658a5bf897004370",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 146120,
"upload_time": "2025-08-06T19:34:51",
"upload_time_iso_8601": "2025-08-06T19:34:51.745349Z",
"url": "https://files.pythonhosted.org/packages/88/50/42217c3cd92a2974f23eb20b6415e704c72c108c62f751c2aa56944c8d30/tamp-1.10.0-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "01d1b2947a0d71dcbdf1e3c7329d78ba82c3e61174b2f6274b8890f403052c4e",
"md5": "fec05abc0d63068f3ca8ecabc8b4978d",
"sha256": "1af75b1d6dd12315b17f2c63ce43eee095147a08d6e827433210176b72835d4a"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "fec05abc0d63068f3ca8ecabc8b4978d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.8",
"size": 169553,
"upload_time": "2025-08-06T19:34:52",
"upload_time_iso_8601": "2025-08-06T19:34:52.987932Z",
"url": "https://files.pythonhosted.org/packages/01/d1/b2947a0d71dcbdf1e3c7329d78ba82c3e61174b2f6274b8890f403052c4e/tamp-1.10.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4ff64218ce91c450db194d365619c849f36798027ae84c875aa278a4bd5a3ba5",
"md5": "3dc851b96fb3e7311c85e5eda36e4319",
"sha256": "c7c861a06b13ecbd92a8bb0a2e98d6aec31e815e735c355edfd2087da097b97d"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "3dc851b96fb3e7311c85e5eda36e4319",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 180430,
"upload_time": "2025-08-06T19:34:53",
"upload_time_iso_8601": "2025-08-06T19:34:53.851829Z",
"url": "https://files.pythonhosted.org/packages/4f/f6/4218ce91c450db194d365619c849f36798027ae84c875aa278a4bd5a3ba5/tamp-1.10.0-cp312-cp312-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f3cf93bba4f4e17bfbb414749c0caff1652bb77dcd132c323f8c828e62267c13",
"md5": "917348d728a04c2d2c51f7ac72e36776",
"sha256": "b06b286838ff205e0d460efee2e86c8bfe3535274756ea68486648fd5932a0f8"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "917348d728a04c2d2c51f7ac72e36776",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 169809,
"upload_time": "2025-08-06T19:34:55",
"upload_time_iso_8601": "2025-08-06T19:34:55.058182Z",
"url": "https://files.pythonhosted.org/packages/f3/cf/93bba4f4e17bfbb414749c0caff1652bb77dcd132c323f8c828e62267c13/tamp-1.10.0-cp312-cp312-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8718a21117a7bb78f42f853441700ca97f10a6ef14fbc792dee8c9c5075eaae7",
"md5": "2cd600848294d74192adf64c8f0ebdbb",
"sha256": "d8565ab011a54ef19c9cf30d73bc2dda8896c93494b7acf7bde5d632dd72000f"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "2cd600848294d74192adf64c8f0ebdbb",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 861864,
"upload_time": "2025-08-06T19:34:56",
"upload_time_iso_8601": "2025-08-06T19:34:56.068499Z",
"url": "https://files.pythonhosted.org/packages/87/18/a21117a7bb78f42f853441700ca97f10a6ef14fbc792dee8c9c5075eaae7/tamp-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d6742184cb36f259cb09db2e80e68a8a7a33a76f4c45ed6a701446c33a13e8a3",
"md5": "19b106d914b256816be9c97e11308068",
"sha256": "7f3f6bb06753dc8b2ca6f225f8c14596e8b7b4e79bcb4a04ff77afc0be186bc9"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "19b106d914b256816be9c97e11308068",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 827988,
"upload_time": "2025-08-06T19:34:58",
"upload_time_iso_8601": "2025-08-06T19:34:58.602142Z",
"url": "https://files.pythonhosted.org/packages/d6/74/2184cb36f259cb09db2e80e68a8a7a33a76f4c45ed6a701446c33a13e8a3/tamp-1.10.0-cp312-cp312-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "869d016923443fdee56866c5b86bfa3111aa807b4e2aa27a86bb8e00ade9acc9",
"md5": "a9c2a3e56a1bab63234816c0c6832997",
"sha256": "0209d64897e1e0017cf56d793e449b0c4075c571365e96c719aab21e2b95e3b5"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "a9c2a3e56a1bab63234816c0c6832997",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 906241,
"upload_time": "2025-08-06T19:34:59",
"upload_time_iso_8601": "2025-08-06T19:34:59.740553Z",
"url": "https://files.pythonhosted.org/packages/86/9d/016923443fdee56866c5b86bfa3111aa807b4e2aa27a86bb8e00ade9acc9/tamp-1.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a92a17be797ef2ea51ffa0ee87b1ef322dbf38fe6e848511f593284abe32e101",
"md5": "7c6c376123b1d1614bc48229e878bf64",
"sha256": "8569771ab25ede2b0a97a4a8cd50ac5b6ca528ba92e652113fc7269adb139a50"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "7c6c376123b1d1614bc48229e878bf64",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 867413,
"upload_time": "2025-08-06T19:35:00",
"upload_time_iso_8601": "2025-08-06T19:35:00.773374Z",
"url": "https://files.pythonhosted.org/packages/a9/2a/17be797ef2ea51ffa0ee87b1ef322dbf38fe6e848511f593284abe32e101/tamp-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2f012570b378fe2e53d5f9b393da1b24b34123b09bef0d4c3890e17760db65d1",
"md5": "56ef47bf0e6fe9bfa0e36e187ef36dcd",
"sha256": "42ab9678078fb268ad9cffb1c295a021978cc01f3656b580f28adeb95daff852"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "56ef47bf0e6fe9bfa0e36e187ef36dcd",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 874641,
"upload_time": "2025-08-06T19:35:03",
"upload_time_iso_8601": "2025-08-06T19:35:03.998542Z",
"url": "https://files.pythonhosted.org/packages/2f/01/2570b378fe2e53d5f9b393da1b24b34123b09bef0d4c3890e17760db65d1/tamp-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6d768f1b2f453080a4b7ed0be5fe7f6fd3e77cc3098d6f12b10030c2c41def3c",
"md5": "7753e2c43b533458ec17a4624c442142",
"sha256": "48bf76297273bb90a0249d8cd021986607de04b221b14283c2c5f131ab09a353"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "7753e2c43b533458ec17a4624c442142",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 821063,
"upload_time": "2025-08-06T19:35:05",
"upload_time_iso_8601": "2025-08-06T19:35:05.078862Z",
"url": "https://files.pythonhosted.org/packages/6d/76/8f1b2f453080a4b7ed0be5fe7f6fd3e77cc3098d6f12b10030c2c41def3c/tamp-1.10.0-cp312-cp312-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "336514f170ce0ca04525a827f8df2f9849620e0e8a841440681b740679734757",
"md5": "4204823b29af400bb69209c631d4ae39",
"sha256": "0da0a5e4e5e9f096f037df77489e72d8aa27cdc46bda95ec8db2b31421ac0485"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-musllinux_1_1_ppc64le.whl",
"has_sig": false,
"md5_digest": "4204823b29af400bb69209c631d4ae39",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 903713,
"upload_time": "2025-08-06T19:35:06",
"upload_time_iso_8601": "2025-08-06T19:35:06.587246Z",
"url": "https://files.pythonhosted.org/packages/33/65/14f170ce0ca04525a827f8df2f9849620e0e8a841440681b740679734757/tamp-1.10.0-cp312-cp312-musllinux_1_1_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "15fdac9d725318ca47c692ba0b369704f8a58af2492d184b34b0544675abf3a7",
"md5": "8ae29a25c2474059e222247d29522fba",
"sha256": "266d108b1fe26522d84e8bba73548a046b2f8140e94313d03057ca4232648758"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "8ae29a25c2474059e222247d29522fba",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 880387,
"upload_time": "2025-08-06T19:35:08",
"upload_time_iso_8601": "2025-08-06T19:35:08.137907Z",
"url": "https://files.pythonhosted.org/packages/15/fd/ac9d725318ca47c692ba0b369704f8a58af2492d184b34b0544675abf3a7/tamp-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fad1e4739bd94db418d687fbba644f59b2a3bc7516f21279eefeb4b80e34fbde",
"md5": "4487a2976a2cdfaa64b05b7f24bf32a0",
"sha256": "11e39af2855ebc9b3c48d7e42af33290db8f6cbdaf74623d35cbc88ad190a0eb"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "4487a2976a2cdfaa64b05b7f24bf32a0",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 145841,
"upload_time": "2025-08-06T19:35:09",
"upload_time_iso_8601": "2025-08-06T19:35:09.438601Z",
"url": "https://files.pythonhosted.org/packages/fa/d1/e4739bd94db418d687fbba644f59b2a3bc7516f21279eefeb4b80e34fbde/tamp-1.10.0-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "39d0ef0c9a3aae83b95b9f544e9cfe052dcd0a2281469b1ad111a977ed6bdf84",
"md5": "e87058c42063e4372ab54bda223e0767",
"sha256": "ae6bd039febcb4d74b9cf4dfb2ffbe96da77163ef95afbbe99b7fac30bf8e295"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "e87058c42063e4372ab54bda223e0767",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.8",
"size": 167904,
"upload_time": "2025-08-06T19:35:10",
"upload_time_iso_8601": "2025-08-06T19:35:10.370211Z",
"url": "https://files.pythonhosted.org/packages/39/d0/ef0c9a3aae83b95b9f544e9cfe052dcd0a2281469b1ad111a977ed6bdf84/tamp-1.10.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4f5b7ec6d32acfb3005d113803e9c3879e9f42d58413dc33027f48667680a0c9",
"md5": "7a975a086681a4de55650c43442fc795",
"sha256": "acc76d2ecbfafae4d6b7b2acb873d77851bfef948a4f722151516a40ec75602f"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "7a975a086681a4de55650c43442fc795",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 183008,
"upload_time": "2025-08-06T19:35:11",
"upload_time_iso_8601": "2025-08-06T19:35:11.303497Z",
"url": "https://files.pythonhosted.org/packages/4f/5b/7ec6d32acfb3005d113803e9c3879e9f42d58413dc33027f48667680a0c9/tamp-1.10.0-cp38-cp38-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "57bbc0fcfc66fa6109fe79752dce2420e37b08494a8771fc7debdf24be197fb0",
"md5": "4c964e0afa81c8cd1ca0ccf32372ca55",
"sha256": "3a21140799b224c64951d3fcf16bfd49a5e168430424a881dbeeb53df104447f"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "4c964e0afa81c8cd1ca0ccf32372ca55",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 174197,
"upload_time": "2025-08-06T19:35:12",
"upload_time_iso_8601": "2025-08-06T19:35:12.399932Z",
"url": "https://files.pythonhosted.org/packages/57/bb/c0fcfc66fa6109fe79752dce2420e37b08494a8771fc7debdf24be197fb0/tamp-1.10.0-cp38-cp38-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d51b2d7e7a7487a1ed49c1830b315b30d36f3662db57dacd2a08c289f6678aaa",
"md5": "ba807f62b56a86d7e60a64c202bf3516",
"sha256": "53204961d4fa605788e33435183d2381a27696419ee2ec469e8d9ff993946df8"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "ba807f62b56a86d7e60a64c202bf3516",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 831276,
"upload_time": "2025-08-06T19:35:13",
"upload_time_iso_8601": "2025-08-06T19:35:13.390268Z",
"url": "https://files.pythonhosted.org/packages/d5/1b/2d7e7a7487a1ed49c1830b315b30d36f3662db57dacd2a08c289f6678aaa/tamp-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4333535ee172da0f089fd6d655969fd0cc38e355386b83b36a975c40d996365f",
"md5": "9d27cbcdc2a9b84da3f472f9945822c2",
"sha256": "31694b0db1b13761e94e7a6592426735f723e70a30a44724af7d4c6098271337"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "9d27cbcdc2a9b84da3f472f9945822c2",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 803772,
"upload_time": "2025-08-06T19:35:14",
"upload_time_iso_8601": "2025-08-06T19:35:14.429423Z",
"url": "https://files.pythonhosted.org/packages/43/33/535ee172da0f089fd6d655969fd0cc38e355386b83b36a975c40d996365f/tamp-1.10.0-cp38-cp38-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1a2e044dc1e65e25652dbcf1340600af8905fad12fc0069801d7b8c5b2d4e4e5",
"md5": "65c0706c8ac14d2655fa134d35b22602",
"sha256": "0396ba8ff3f282a49c75bbc9276f6145c5ac6bad6b447c07f833357e94ed94ed"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "65c0706c8ac14d2655fa134d35b22602",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 896584,
"upload_time": "2025-08-06T19:35:15",
"upload_time_iso_8601": "2025-08-06T19:35:15.549585Z",
"url": "https://files.pythonhosted.org/packages/1a/2e/044dc1e65e25652dbcf1340600af8905fad12fc0069801d7b8c5b2d4e4e5/tamp-1.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "28ac784c7992d765a070f4a5aae5e819c2bd5e89089ab369aea61d45a95c3f85",
"md5": "8d9b07e8d31807ec9e646c16dba6cc3a",
"sha256": "ccb4e1b9392de89ec549ddfb7a737a55703ef35778690d21ab0a827bff05a39a"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "8d9b07e8d31807ec9e646c16dba6cc3a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 832234,
"upload_time": "2025-08-06T19:35:16",
"upload_time_iso_8601": "2025-08-06T19:35:16.887346Z",
"url": "https://files.pythonhosted.org/packages/28/ac/784c7992d765a070f4a5aae5e819c2bd5e89089ab369aea61d45a95c3f85/tamp-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "507a96b7fc94a3978ea3afb1a6e736d4cd03dcf94e3e30bb1ba96b284f5d6714",
"md5": "cdd807f3b4d3489b030266d7d9a914a5",
"sha256": "943221ac43125280485f47ed28ce4c2b2028c8deb2b7aab552a6af1431cbaf60"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "cdd807f3b4d3489b030266d7d9a914a5",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 862349,
"upload_time": "2025-08-06T19:35:17",
"upload_time_iso_8601": "2025-08-06T19:35:17.967938Z",
"url": "https://files.pythonhosted.org/packages/50/7a/96b7fc94a3978ea3afb1a6e736d4cd03dcf94e3e30bb1ba96b284f5d6714/tamp-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1cc059f0d2cff6260ea945076f4ec8a5ed21568ae8ad8655c78266d827584bb9",
"md5": "43a6fe701820d5f1f2b6d8ecc7783cab",
"sha256": "907979d4cf4e051e850d614959e1032f43bbe2d6ab67e7b9a90aeace883ba1b2"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "43a6fe701820d5f1f2b6d8ecc7783cab",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 827701,
"upload_time": "2025-08-06T19:35:19",
"upload_time_iso_8601": "2025-08-06T19:35:19.120758Z",
"url": "https://files.pythonhosted.org/packages/1c/c0/59f0d2cff6260ea945076f4ec8a5ed21568ae8ad8655c78266d827584bb9/tamp-1.10.0-cp38-cp38-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "858e97e31d4881fb96feee64d9b7a9182cc3f4d9c48c3d361b7b3467fbcea221",
"md5": "54d6e7e8547311beab5c2e32d0167af6",
"sha256": "27800fa9f1b50c1a511dd1fea7bad1bd3cc6636c6daa62442dcd621ca618323a"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-musllinux_1_1_ppc64le.whl",
"has_sig": false,
"md5_digest": "54d6e7e8547311beab5c2e32d0167af6",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 900844,
"upload_time": "2025-08-06T19:35:20",
"upload_time_iso_8601": "2025-08-06T19:35:20.572329Z",
"url": "https://files.pythonhosted.org/packages/85/8e/97e31d4881fb96feee64d9b7a9182cc3f4d9c48c3d361b7b3467fbcea221/tamp-1.10.0-cp38-cp38-musllinux_1_1_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b17f31e1f17a4b797a855af0776523a7ac7dfc3cfe487594b91dc04a329e6312",
"md5": "ee707716ea309688e28a0ad7141b5767",
"sha256": "f1fa96602f51158ccde9dfc3d278b3ab3800f96a60e7ddc08774efd9258b3bd9"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "ee707716ea309688e28a0ad7141b5767",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 863479,
"upload_time": "2025-08-06T19:35:21",
"upload_time_iso_8601": "2025-08-06T19:35:21.605022Z",
"url": "https://files.pythonhosted.org/packages/b1/7f/31e1f17a4b797a855af0776523a7ac7dfc3cfe487594b91dc04a329e6312/tamp-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "786e73c96bae46e4b5526e5998044281e47bbdbaf68388eb00de5d9d324830da",
"md5": "e1da1ec5390ac3c4c9ab7bb775bc8e3b",
"sha256": "5ea9e232cd3e3cf201bea3c78a120ad0d1d3565afc5b806a62ec962b033c6b35"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-win32.whl",
"has_sig": false,
"md5_digest": "e1da1ec5390ac3c4c9ab7bb775bc8e3b",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 148735,
"upload_time": "2025-08-06T19:35:22",
"upload_time_iso_8601": "2025-08-06T19:35:22.663251Z",
"url": "https://files.pythonhosted.org/packages/78/6e/73c96bae46e4b5526e5998044281e47bbdbaf68388eb00de5d9d324830da/tamp-1.10.0-cp38-cp38-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1983a65820eb2e8f4c63eb7808b6713f3ee81519ae684d6bbff7ee53cd0a38d8",
"md5": "90892961f7739cc861d26d19408d7e87",
"sha256": "f75c0640d2ca3d558a20709b3a6595958a0fa7731b0adf30c620df4896e4a811"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "90892961f7739cc861d26d19408d7e87",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0,>=3.8",
"size": 171565,
"upload_time": "2025-08-06T19:35:23",
"upload_time_iso_8601": "2025-08-06T19:35:23.581680Z",
"url": "https://files.pythonhosted.org/packages/19/83/a65820eb2e8f4c63eb7808b6713f3ee81519ae684d6bbff7ee53cd0a38d8/tamp-1.10.0-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4109d423aa42310a0ebabf2c445d521b8a018497a6bc553b89ce9f7323062411",
"md5": "c483b2df9d2552bc5fd132de5d280857",
"sha256": "eeaa7e1dcf2dc4eb84f4e94439846824adbda9ca58b68d4f026bad36324148df"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "c483b2df9d2552bc5fd132de5d280857",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 179909,
"upload_time": "2025-08-06T19:35:24",
"upload_time_iso_8601": "2025-08-06T19:35:24.496810Z",
"url": "https://files.pythonhosted.org/packages/41/09/d423aa42310a0ebabf2c445d521b8a018497a6bc553b89ce9f7323062411/tamp-1.10.0-cp39-cp39-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eb9e273158aeb6941d954944d9f08a39798e62bd53ed537ff928d8eaffafbd25",
"md5": "eb564a221ffec336e96ce7f3abc1ffbe",
"sha256": "d33d3c57d28aaa75ee24e8dc131ee623edb27a0f1f793e205ad9eb33db7f294c"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "eb564a221ffec336e96ce7f3abc1ffbe",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 170948,
"upload_time": "2025-08-06T19:35:25",
"upload_time_iso_8601": "2025-08-06T19:35:25.558200Z",
"url": "https://files.pythonhosted.org/packages/eb/9e/273158aeb6941d954944d9f08a39798e62bd53ed537ff928d8eaffafbd25/tamp-1.10.0-cp39-cp39-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f56e42b379f85f4adcd1d4c3ceafa45059f0ab1848701e6f182913ca4b7008bf",
"md5": "fd8b981039ed92d1831f88e89e0e85ce",
"sha256": "ff5005e84953a29f09cff9b9ee5c0f557e88dee572652698e7e57680b2713b72"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "fd8b981039ed92d1831f88e89e0e85ce",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 813340,
"upload_time": "2025-08-06T19:35:26",
"upload_time_iso_8601": "2025-08-06T19:35:26.840414Z",
"url": "https://files.pythonhosted.org/packages/f5/6e/42b379f85f4adcd1d4c3ceafa45059f0ab1848701e6f182913ca4b7008bf/tamp-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "235a22df3300617ad2a710e3e6630404fe8b6a9d4d6ae88a419c58b09ff92b82",
"md5": "e40be53812c770fb0c8a50686776cee8",
"sha256": "c6c24931264b3bab321f227a1b465df5c846433283aff93f4ea8ec1f6317fe78"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "e40be53812c770fb0c8a50686776cee8",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 786879,
"upload_time": "2025-08-06T19:35:27",
"upload_time_iso_8601": "2025-08-06T19:35:27.935218Z",
"url": "https://files.pythonhosted.org/packages/23/5a/22df3300617ad2a710e3e6630404fe8b6a9d4d6ae88a419c58b09ff92b82/tamp-1.10.0-cp39-cp39-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "188a6d5f51d69f18b2ccdd1d8982a73fb1effd5c02af5559035530688fb427c9",
"md5": "8f7f7a26d140c9dfd2378e0529b24df2",
"sha256": "6abfe261f6a334efdaa1cbaf1714c2f624ef5a120f64ba222865c1be7dfe9879"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "8f7f7a26d140c9dfd2378e0529b24df2",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 870801,
"upload_time": "2025-08-06T19:35:29",
"upload_time_iso_8601": "2025-08-06T19:35:29.126135Z",
"url": "https://files.pythonhosted.org/packages/18/8a/6d5f51d69f18b2ccdd1d8982a73fb1effd5c02af5559035530688fb427c9/tamp-1.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2b8a2110ec4257928de149d752db2816adf277cf8842b7ff4564206d4259c4d6",
"md5": "64781e50ab93c5e5ad2023125a8f6ec8",
"sha256": "d6d5dabb662156b240cbe5fd9c5a239fafe5fa864f84627638ddfab79b72c180"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "64781e50ab93c5e5ad2023125a8f6ec8",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 812745,
"upload_time": "2025-08-06T19:35:30",
"upload_time_iso_8601": "2025-08-06T19:35:30.168840Z",
"url": "https://files.pythonhosted.org/packages/2b/8a/2110ec4257928de149d752db2816adf277cf8842b7ff4564206d4259c4d6/tamp-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "80dddb41cf45a19b73bb9fe2869a747dce0266df8c0b20d663ff3210967e0343",
"md5": "ee6411abe4f0dd602e28876bb87e3a2c",
"sha256": "06ec9b28789ed546b972fb14cd744cbe9d3632b71183dae72accaceac5a0b0e7"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "ee6411abe4f0dd602e28876bb87e3a2c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 825821,
"upload_time": "2025-08-06T19:35:31",
"upload_time_iso_8601": "2025-08-06T19:35:31.285241Z",
"url": "https://files.pythonhosted.org/packages/80/dd/db41cf45a19b73bb9fe2869a747dce0266df8c0b20d663ff3210967e0343/tamp-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d997c327ff952b992594394f5e643b591bb14f85d5370bb35226ea35a86f684c",
"md5": "6f376552d7e3abadc7e49c5b8d03d591",
"sha256": "ba6d74b6a76e22f2e7a739d2eb572acf6586539cfcedae3a55458abeea8476c9"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "6f376552d7e3abadc7e49c5b8d03d591",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 787129,
"upload_time": "2025-08-06T19:35:32",
"upload_time_iso_8601": "2025-08-06T19:35:32.320975Z",
"url": "https://files.pythonhosted.org/packages/d9/97/c327ff952b992594394f5e643b591bb14f85d5370bb35226ea35a86f684c/tamp-1.10.0-cp39-cp39-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "db6bfd77d630aa1961264bfa1c685c8b0604ada794479fdffe839007d817e49a",
"md5": "16c8668d81872a313a03ef4b94b4385d",
"sha256": "28e57f45eeb1d3c4b9b57fea07e31de4480489d5936d0303ac722ff65d06a07e"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-musllinux_1_1_ppc64le.whl",
"has_sig": false,
"md5_digest": "16c8668d81872a313a03ef4b94b4385d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 863045,
"upload_time": "2025-08-06T19:35:33",
"upload_time_iso_8601": "2025-08-06T19:35:33.474469Z",
"url": "https://files.pythonhosted.org/packages/db/6b/fd77d630aa1961264bfa1c685c8b0604ada794479fdffe839007d817e49a/tamp-1.10.0-cp39-cp39-musllinux_1_1_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cea1124f24c1bde3179ea3229021b26c09006293216aa6ed2076d3288526ab36",
"md5": "5ca40bd7399f19fc456b2f485b8eeb13",
"sha256": "29c87359f7ab4f421c9000b3280c3a1150a1664e2c21d4d13b434b5560386d73"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "5ca40bd7399f19fc456b2f485b8eeb13",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 824812,
"upload_time": "2025-08-06T19:35:34",
"upload_time_iso_8601": "2025-08-06T19:35:34.520835Z",
"url": "https://files.pythonhosted.org/packages/ce/a1/124f24c1bde3179ea3229021b26c09006293216aa6ed2076d3288526ab36/tamp-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d31dbc4a025db79119129fae9cae340a5738402ddd0c62acc31f9ad1038b1045",
"md5": "523439f475d8638f0ce73ca6882b99ff",
"sha256": "5bd4046d28396152403f4e2c7eeb0d2172fe21b52047300e724ff2232b8712fe"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "523439f475d8638f0ce73ca6882b99ff",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 147544,
"upload_time": "2025-08-06T19:35:35",
"upload_time_iso_8601": "2025-08-06T19:35:35.621502Z",
"url": "https://files.pythonhosted.org/packages/d3/1d/bc4a025db79119129fae9cae340a5738402ddd0c62acc31f9ad1038b1045/tamp-1.10.0-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c70ae64380fd5135a30b149d074f5a89154c46d47bbfe224c792a19ee394a4aa",
"md5": "192b8b15dec7095c7d471db884100d57",
"sha256": "a8dc82a8e91763eed622425f648549b9d9d5e03bc0808bca5eb6ddb5e0f9be65"
},
"downloads": -1,
"filename": "tamp-1.10.0-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "192b8b15dec7095c7d471db884100d57",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0,>=3.8",
"size": 170325,
"upload_time": "2025-08-06T19:35:36",
"upload_time_iso_8601": "2025-08-06T19:35:36.902645Z",
"url": "https://files.pythonhosted.org/packages/c7/0a/e64380fd5135a30b149d074f5a89154c46d47bbfe224c792a19ee394a4aa/tamp-1.10.0-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f8e68c69b1f5f06323aea449f90ead31567e91726ee323de85f3692572a9cde5",
"md5": "3b9d8eb9da4d8039e201a7fb05c81b8b",
"sha256": "ab5b467ca0f742ffa7184750fdfc91ab260ad7495df491c7a23ce4fb56bc08f9"
},
"downloads": -1,
"filename": "tamp-1.10.0.tar.gz",
"has_sig": false,
"md5_digest": "3b9d8eb9da4d8039e201a7fb05c81b8b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 41725,
"upload_time": "2025-08-06T19:35:37",
"upload_time_iso_8601": "2025-08-06T19:35:37.822392Z",
"url": "https://files.pythonhosted.org/packages/f8/e6/8c69b1f5f06323aea449f90ead31567e91726ee323de85f3692572a9cde5/tamp-1.10.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-06 19:35:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "BrianPugh",
"github_project": "tamp",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "tamp"
}