heavykeeper
Python bindings for the HeavyKeeper algorithm - a fast, memory-efficient sketch-based algorithm for finding the top-K most frequent items in data streams.
Overview
HeavyKeeper is a probabilistic data structure that identifies the most frequent items in a data stream using minimal memory. This implementation provides Python bindings for a high-performance Rust implementation of the algorithm.
Key Features
- 🚀 High Performance: Rust-based implementation with Python bindings via PyO3
- 💾 Memory Efficient: Uses probabilistic sketching to track millions of items with minimal memory
- 🎯 Top-K Tracking: Efficiently maintains the K most frequent items
- 🔄 Stream Processing: Designed for continuous data streams
- 📊 Approximate Counts: Provides estimated frequencies with high accuracy
- 🧪 Battle Tested: Includes comprehensive benchmarks and tests
Use Cases
- Log Analysis: Find the most frequent IP addresses, user agents, or error messages
- Text Processing: Identify the most common words in large documents
- Network Monitoring: Track heavy hitters in network traffic
- Clickstream Analysis: Find the most popular pages or user actions
- Time Series Data: Monitor frequently occurring events or anomalies
Installation
From Source (Development)
# Clone the repository
git clone https://github.com/pmcgleen/heavykeeper-py.git
cd heavykeeper-py
# Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Build and install the Python package
maturin develop
# Or build a wheel
maturin build --release
Requirements
- Python 3.11+
- Rust toolchain (for building from source)
Quick Start
from heavykeeper import HeavyKeeper
# Create a HeavyKeeper instance
# k=100: track top 100 items
# width=2048: sketch width (affects accuracy)
# depth=8: number of hash functions (affects accuracy)
# decay=0.9: aging factor for old items
hk = HeavyKeeper(k=100, width=2048, depth=8, decay=0.9)
# Add items to the stream
items = ["apple", "banana", "apple", "cherry", "apple", "banana"]
for item in items:
hk.add(item)
# Query individual items
print(f"Is 'apple' in top-K? {hk.query('apple')}")
print(f"Estimated count for 'apple': {hk.count('apple')}")
# Get all top-K items
top_items = hk.list() # Returns list of (item, count) tuples
print("Top items:", top_items)
# Get as dictionary
top_dict = hk.get_topk() # Returns {item: count} dictionary
print("Top items dict:", top_dict)
API Reference
HeavyKeeper(k, width, depth, decay)
Creates a new HeavyKeeper instance.
Parameters:
k(int): Number of top items to trackwidth(int): Width of the sketch (number of buckets)depth(int): Depth of the sketch (number of hash functions)decay(float): Decay factor for aging items (between 0.0 and 1.0)
Methods
add(item: str) -> None
Add an item to the sketch.
query(item: str) -> bool
Check if an item is being tracked in the top-K list.
count(item: str) -> int
Get the estimated count for an item (returns 0 if not tracked).
list() -> List[Tuple[str, int]]
Get the top-K items as a list of (item, count) tuples, sorted by count.
get_topk() -> Dict[str, int]
Get the top-K items as a dictionary mapping items to counts.
len() -> int
Get the current number of items being tracked.
is_empty() -> bool
Check if the sketch is empty.
Benchmarking
The repository includes a simnple script for performance testing:
Word Count Benchmark
# Basic benchmark with a text file
python benchmark_wordcount.py -k 10 -f data/war_and_peace.txt --time
Parameter Tuning
Choosing Parameters
- k: Set to the number of top items you need
- width: Larger values improve accuracy but use more memory (try 1024-8192)
- depth: More hash functions improve accuracy (try 4-16)
- decay: Controls how quickly old items are forgotten (0.8-0.99)
Memory Usage
Approximate memory usage: width × depth × 16 bytes + k × (item_size + 16 bytes)
For typical usage (width=2048, depth=8, k=100):
- Sketch: ~262 KB
- Top-K storage: ~depends on item sizes
Accuracy vs Performance
- Higher
widthanddepth→ better accuracy, more memory - Lower
decay→ faster adaptation to changes, less stability - Higher
k→ more items tracked, slightly more overhead
Development
Building
# Development build
maturin develop
# Release build
maturin build --release
# Build with debugging
maturin develop --debug
Testing
# Run the test suite
python test_heavykeeper.py
# Run benchmarks
python benchmark_wordcount.py -k 10 -f test_file.txt
Project Structure
heavykeeper-py/
├── src/
│ └── lib.rs # Rust implementation and Python bindings
├── benchmark_*.py # Performance benchmarks
├── test_heavykeeper.py # Test suite
├── Cargo.toml # Rust dependencies
├── pyproject.toml # Python package configuration
└── README.md # This file
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Based on the HeavyKeeper algorithm
- Built with PyO3 for Rust-Python interoperability
- Uses Maturin for building Python extensions
Metadata
Release files for heavykeeper 0.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| heavykeeper-0.2.5.tar.gz | 1.2 MB | Details |
Built distributions (wheels)
Total release size: 5.2 MB
Release files / heavykeeper-0.2.5.tar.gz
| Download URL | heavykeeper-0.2.5.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
97caed9f28a932f39415781b860f92ea8a0ba8fd4f12184c7503ce5420d51296
|
|
BLAKE2b-256 checksum How to use checksums |
a5d37d0708197a25413a445de90f24e70934ae5c52247e209afddc4f2c265d9d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp314-cp314-win_amd64.whl
| Download URL | heavykeeper-0.2.5-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 152.5 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bd68625247643ab81b50b2ed83e5ad846a12a3b092216fdd9f8c21d0d7bb350f
|
|
BLAKE2b-256 checksum How to use checksums |
04d52435e702d037f53240c9bd4c0c07cc5b7d626a543b62a457fdb0b52cd3a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | heavykeeper-0.2.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 294.4 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
07cc89b58ff37bd8497a7a6607b48f4d3ea3106b185ef897e6b99897c9467210
|
|
BLAKE2b-256 checksum How to use checksums |
7e1780457c9717433db88914524f02748ab09626453586916dddd26fbbf24073
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | heavykeeper-0.2.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 290.9 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
c081bcbc7dc3a036507a512d84980359ae843b026c32fda7a4d1d6ff9b5e5640
|
|
BLAKE2b-256 checksum How to use checksums |
8fcdc8f4c363e730f81ef110fa1323014c265c7875a2df8f1d8867db93058f9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | heavykeeper-0.2.5-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 257.0 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f97de7e3121bbe0f57d087ff78bbb6944084c17c13f18e06b5530c71e141ccb8
|
|
BLAKE2b-256 checksum How to use checksums |
bc16aa3dd7221f59de367e29b6b29b9f0190936d43a5308bd48f670692075852
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp313-cp313-win_amd64.whl
| Download URL | heavykeeper-0.2.5-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 151.7 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1853c3a6d74ba6e2ec8cdfdb4cc46dc6b6877f4ec83b578e1d4b92d6a21be85d
|
|
BLAKE2b-256 checksum How to use checksums |
130ace26efa2737a97fe6190fae17c4377b8d78e0a8375ef0c36af14628cf223
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | heavykeeper-0.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 293.4 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
2307f8606414499c212ce5f80dce37fa4176c15f9a91a1f3ec07bef7c7c0da9a
|
|
BLAKE2b-256 checksum How to use checksums |
1dcd6909f59a747f6b1598dbb1c9d3b625411b639bfcb1161ab39cdb6b390996
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | heavykeeper-0.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 290.5 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
0d765f0ebdd767ffa190af9086d8146f589327009e469f2f73b7a531abbabf55
|
|
BLAKE2b-256 checksum How to use checksums |
af87efcceadc8d3669b256d036e9a480c8733def5aaf6581a107211a82244ea2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | heavykeeper-0.2.5-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 255.7 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3e39d27d02a6184a183f4bcdf45eeb6f27e78d4df8cc61d4ba474f131b8d83a2
|
|
BLAKE2b-256 checksum How to use checksums |
cb431992b82d6b7cbae72aff7b1e2141153fa0d95bf2526dd38b5f04e40b0822
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp312-cp312-win_amd64.whl
| Download URL | heavykeeper-0.2.5-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 152.4 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cd9b21cdfcff0f95694d37a33e6575f54b1ef17ed9d0b9cc75d6466f3d11d793
|
|
BLAKE2b-256 checksum How to use checksums |
a2997f89753aa9074789da4fc101a5b36ab94aeccdb48914d8cb0c0dbfb12d34
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | heavykeeper-0.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 293.9 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
12744f992244c7f5a2ad3ed007955b84476f82984fc0e78f4fdced16db43a209
|
|
BLAKE2b-256 checksum How to use checksums |
3b2cf0d4f5bc17d2ae4659534bab0073d1ec8d599a3f01d154575b8180b7d935
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | heavykeeper-0.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 289.7 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
dcdb667a5fd39bd1a82ff7436adb82817256862536491d0dc4e614a772cbe770
|
|
BLAKE2b-256 checksum How to use checksums |
2cb648f4548618885979673bad38ffc6bab43a3d4573c0868113e8b62e0f94ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | heavykeeper-0.2.5-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 256.0 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5d6605f2188076017fdcc196ecd2f5cfa8843c229b6e3ff6a1ddcfda95c9ee87
|
|
BLAKE2b-256 checksum How to use checksums |
388472972a8e8dbd4343856f23f44eb8ab9a67c96a99ce77854fac2e134bcda8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp311-cp311-win_amd64.whl
| Download URL | heavykeeper-0.2.5-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 154.6 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3e01881d670e9e999afb0dd70249053f5996fbc29eb7bb4efdeff319cd650b8b
|
|
BLAKE2b-256 checksum How to use checksums |
51f43ebb0512ca944fd91c51055650a0d0cd434495c94f8c2a7b4c6cdaadd87c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | heavykeeper-0.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 296.9 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
a91bc03ba458e9f1a0e57a4e2109d5683c37ec90bd51110d8356f50039242308
|
|
BLAKE2b-256 checksum How to use checksums |
d60b3ad0a843d14c10855dc1143bf46b6cc81bb39651267c3fb925742ec6ef12
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | heavykeeper-0.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 293.5 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
6d4745717a4613cc2ed0042dbf72ffa7fbbf2e91359ced1d9df2465ec165dd5a
|
|
BLAKE2b-256 checksum How to use checksums |
eabbec3561335c1ec338696cc3f64f564256bb78e386bbdafc97cf5be00458fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency logRelease files / heavykeeper-0.2.5-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | heavykeeper-0.2.5-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 263.3 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cbeb1983096b19aa2a9275d97fe2921ebe6fed323c0eb97a91610000b0f94589
|
|
BLAKE2b-256 checksum How to use checksums |
4165115029a4e3f6c2647751893a0aa41f815923e42fb80f983ad569756f986b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 13, 2026.
Transparency log