tamp


Nametamp JSON
Version 1.10.0 PyPI version JSON
download
home_pagehttps://github.com/BrianPugh/tamp
SummaryNone
upload_time2025-08-06 19:35:37
maintainerNone
docs_urlNone
authorBrian Pugh
requires_python<4.0,>=3.8
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div align="center">
  <img src="https://raw.githubusercontent.com/BrianPugh/tamp/main/assets/logo_300w.png">
</div>

<div align="center">

![Python compat](https://img.shields.io/badge/%3E=python-3.8-blue.svg)
[![PyPi](https://img.shields.io/pypi/v/tamp.svg)](https://pypi.python.org/pypi/tamp)
[![GHA Status](https://github.com/BrianPugh/tamp/actions/workflows/tests.yaml/badge.svg?branch=main)](https://github.com/BrianPugh/tamp/actions?query=workflow%3Atests)
[![Coverage](https://codecov.io/github/BrianPugh/tamp/coverage.svg?branch=main)](https://codecov.io/github/BrianPugh/tamp?branch=main)
[![Documentation Status](https://readthedocs.org/projects/tamp/badge/?version=latest)](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![Python compat](https://img.shields.io/badge/%3E=python-3.8-blue.svg)\n[![PyPi](https://img.shields.io/pypi/v/tamp.svg)](https://pypi.python.org/pypi/tamp)\n[![GHA Status](https://github.com/BrianPugh/tamp/actions/workflows/tests.yaml/badge.svg?branch=main)](https://github.com/BrianPugh/tamp/actions?query=workflow%3Atests)\n[![Coverage](https://codecov.io/github/BrianPugh/tamp/coverage.svg?branch=main)](https://codecov.io/github/BrianPugh/tamp?branch=main)\n[![Documentation Status](https://readthedocs.org/projects/tamp/badge/?version=latest)](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"
}
        
Elapsed time: 0.76019s