Skip to main content

Python bindings for the HeavyKeeper algorithm implemented in Rust

Project description

heavykeeper

License: MIT Python

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 track
  • width (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 width and depth → 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

heavykeeper-0.2.3.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

heavykeeper-0.2.3-cp314-cp314-win_amd64.whl (154.0 kB view details)

Uploaded CPython 3.14Windows x86-64

heavykeeper-0.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (301.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

heavykeeper-0.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (297.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

heavykeeper-0.2.3-cp314-cp314-macosx_11_0_arm64.whl (264.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

heavykeeper-0.2.3-cp313-cp313-win_amd64.whl (155.0 kB view details)

Uploaded CPython 3.13Windows x86-64

heavykeeper-0.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (303.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

heavykeeper-0.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (297.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

heavykeeper-0.2.3-cp313-cp313-macosx_11_0_arm64.whl (265.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

heavykeeper-0.2.3-cp312-cp312-win_amd64.whl (154.8 kB view details)

Uploaded CPython 3.12Windows x86-64

heavykeeper-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (303.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

heavykeeper-0.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (298.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

heavykeeper-0.2.3-cp312-cp312-macosx_11_0_arm64.whl (265.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

heavykeeper-0.2.3-cp311-cp311-win_amd64.whl (155.2 kB view details)

Uploaded CPython 3.11Windows x86-64

heavykeeper-0.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (304.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

heavykeeper-0.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (298.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

heavykeeper-0.2.3-cp311-cp311-macosx_11_0_arm64.whl (265.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file heavykeeper-0.2.3.tar.gz.

File metadata

  • Download URL: heavykeeper-0.2.3.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for heavykeeper-0.2.3.tar.gz
Algorithm Hash digest
SHA256 4be009367a16a5e17167999ffedd8bf690fdfe4adf5121b94e7c6d44f083ba33
MD5 842735094a4aeee9b5adc25ae7feedb4
BLAKE2b-256 ca49e29f3c66a15335129dee3478ad7c788ca69da83413f880b6e2cbf2ba5f86

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3.tar.gz:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: heavykeeper-0.2.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 154.0 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for heavykeeper-0.2.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 42b37b7f17a7f1983bf3536ee2393f513b3a7de7647c8e89c7ee574ee0238715
MD5 41ff9caf19d8e707169b6478b57a443d
BLAKE2b-256 05b42f949806aece1bef021295670230f7cef262473f89aa97de2618dc7e7828

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp314-cp314-win_amd64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d439d14734a95a5085e52dd241414f804e202f0aaee62873ac86cee9668c6165
MD5 d210b99a4dad1795c9d0780bee6b6897
BLAKE2b-256 be71614e78a333fb0dbbacfb4a295b05ca5dd39b9090105d9acb9d68b958a81f

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 500c458e33e02db2249dea58f7eed4b3ec05273a4f8ddc20facd12d5e9354d13
MD5 66566a9e1f3ec76c6ff63832d139bf2a
BLAKE2b-256 17edcb2f1b588067caca77b64640b33f0118e3908981291179add0f4e0b00212

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b4d80c1c47e4b0e704429d56bca20956f8c2a98fcd2f6b97dc82e1983ce1d92
MD5 714428f1b81ed5cc592ec737bbb89022
BLAKE2b-256 0f6286e00fe26ae88889cbc0ef60b5bebfdc1a8165938af054a03d3e360051d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: heavykeeper-0.2.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 155.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for heavykeeper-0.2.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2a6ba73921c221bae16a7b74c233fdb73f3b964300a220f78430272eac236010
MD5 36241c7f51af0079c33e7ea51d8c339c
BLAKE2b-256 3ebeea116a864cca7ec3fe86483662416040da1d2f817c8d64c50d6c54ef9d38

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp313-cp313-win_amd64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5604918193ade182e784ff962119a9294aacdbc19f4e74f32417db63e3ab5773
MD5 9dbbdbb65dcf66754ac6ff046f68cb56
BLAKE2b-256 e3ab0bb4f86576a209a54626c3fce369c2ca84e42eea40acdfaaea95c4b3f86b

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1c4c81a832b4c5235389802eef034ff99524ccb0a1c984c5e35784215a3c8fcc
MD5 fa364d186cd863f928ceab8c6ca90d94
BLAKE2b-256 04c74a19ebe7a6741fdbe81e265c311398b64932f1659ecf494185c7f0602eb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9a5dee07c6a0205b3a84eb0f04076aebfe27b5b97b288d92af6293ce843dd7e
MD5 9bc057990a76ef7c3578631eb99c7962
BLAKE2b-256 9c5246ea3ea47fd6d9b4ff9fb9e676b64f04bcb021abd558f6fd2ff1f3b41bfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: heavykeeper-0.2.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 154.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for heavykeeper-0.2.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a8cf4670e1b8d07262be88e424a5035cac7e8c7f1800c78e75280dc830f8fe0a
MD5 0f549de08ee6314db761fb8f61b75c19
BLAKE2b-256 f60c2465ee8505d30ab46e5b0b73c23385a2b516a54bd74eb42bb8bbb3580e7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp312-cp312-win_amd64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6adc3ac65a92e8013cd024363edf7fda46c1003c5d2826ceb5fb314c2306eba6
MD5 c8f04de7b74dfc9b9e5e93fbec978fbf
BLAKE2b-256 109a5644d8130f2e7da36cf14da3e934b4d649456b7ba2741a33c847444c1457

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7f344da86ba68774042f0871ac8634c7e4e52730b6f413f739863a0697d70aae
MD5 eb0d69323fd527d6fc59402ed1552ed8
BLAKE2b-256 a8c9be5d1cf69806092e5efcfcc18787edaa1586fb341acf6319eaebb322d11a

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f021dbb705b6b6e608abc69b441d521dc9c264ef29afd33d4c174309d0545bc8
MD5 233d9074cdf2aecc24f9ead3c412128d
BLAKE2b-256 672ca31e3137bf9c493c96f3a3c92068181069bcea382304296c9334df3a9d9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: heavykeeper-0.2.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 155.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for heavykeeper-0.2.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 11546ae7bccfe4d058fb067a92ee3bfa81ae2c104894bf01e6cd98b1a2ae43d2
MD5 4e798ed51cd4db65bdbf372a26761803
BLAKE2b-256 3a72274333462e8ac9a03722ac8f043b23a7cc052962274c42330f1b0d383b82

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp311-cp311-win_amd64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 943cd26ff2e1150bc3a54633fb1e896a6cdbcd2765f61065f7342a88f6e955e2
MD5 caee345a5ce75368b3afef23ccb4458a
BLAKE2b-256 871d3c7b0c34fc169e35b37e5e12203c1fd56734306b8f42b4f10c33d9b371a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7fc83e1e727b5f7796ea7ca44cf45fdfaa920fb2d2df0de92891b4a095043340
MD5 9661cb2a930470c9fcfbaaadbd5576fa
BLAKE2b-256 6c1e570baad2eb7131adfb9bd095ec6291ce07ec8b5415ef7ddf5139b27ebf34

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heavykeeper-0.2.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 14e46d324cf48a07c8a4f5163419ddce0bca3e2296363dc9dbd7bfee0cce70a2
MD5 a1e8a42e04827828c468c67ef013e2a6
BLAKE2b-256 886ca6539ae56866c7c92e986fff7fb8081b6483e82bf821b8ee898d3277a76a

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.3-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on pmcgleenon/heavykeeper-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page