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.5.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.5-cp314-cp314-win_amd64.whl (152.5 kB view details)

Uploaded CPython 3.14Windows x86-64

heavykeeper-0.2.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (294.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

heavykeeper-0.2.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (290.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

heavykeeper-0.2.5-cp314-cp314-macosx_11_0_arm64.whl (257.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

heavykeeper-0.2.5-cp313-cp313-win_amd64.whl (151.7 kB view details)

Uploaded CPython 3.13Windows x86-64

heavykeeper-0.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (293.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

heavykeeper-0.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (290.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

heavykeeper-0.2.5-cp313-cp313-macosx_11_0_arm64.whl (255.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

heavykeeper-0.2.5-cp312-cp312-win_amd64.whl (152.4 kB view details)

Uploaded CPython 3.12Windows x86-64

heavykeeper-0.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (293.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

heavykeeper-0.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (289.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

heavykeeper-0.2.5-cp312-cp312-macosx_11_0_arm64.whl (256.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

heavykeeper-0.2.5-cp311-cp311-win_amd64.whl (154.6 kB view details)

Uploaded CPython 3.11Windows x86-64

heavykeeper-0.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

heavykeeper-0.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (293.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

heavykeeper-0.2.5-cp311-cp311-macosx_11_0_arm64.whl (263.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for heavykeeper-0.2.5.tar.gz
Algorithm Hash digest
SHA256 97caed9f28a932f39415781b860f92ea8a0ba8fd4f12184c7503ce5420d51296
MD5 a4f49f6bd355b99155df4a54d66d0fff
BLAKE2b-256 a5d37d0708197a25413a445de90f24e70934ae5c52247e209afddc4f2c265d9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5.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.5-cp314-cp314-win_amd64.whl.

File metadata

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

File hashes

Hashes for heavykeeper-0.2.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 bd68625247643ab81b50b2ed83e5ad846a12a3b092216fdd9f8c21d0d7bb350f
MD5 2d6ca42fe687d646c592cc04b7ce3104
BLAKE2b-256 04d52435e702d037f53240c9bd4c0c07cc5b7d626a543b62a457fdb0b52cd3a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 07cc89b58ff37bd8497a7a6607b48f4d3ea3106b185ef897e6b99897c9467210
MD5 0575805342556a5108053a667031d867
BLAKE2b-256 7e1780457c9717433db88914524f02748ab09626453586916dddd26fbbf24073

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c081bcbc7dc3a036507a512d84980359ae843b026c32fda7a4d1d6ff9b5e5640
MD5 7007e300f5e0205e9ac0dfd42569cb47
BLAKE2b-256 8fcdc8f4c363e730f81ef110fa1323014c265c7875a2df8f1d8867db93058f9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f97de7e3121bbe0f57d087ff78bbb6944084c17c13f18e06b5530c71e141ccb8
MD5 599e669a1e36e60f982f22d8561b6ac6
BLAKE2b-256 bc16aa3dd7221f59de367e29b6b29b9f0190936d43a5308bd48f670692075852

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp313-cp313-win_amd64.whl.

File metadata

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

File hashes

Hashes for heavykeeper-0.2.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1853c3a6d74ba6e2ec8cdfdb4cc46dc6b6877f4ec83b578e1d4b92d6a21be85d
MD5 7d304701579b79f11bb4948c2decc3a4
BLAKE2b-256 130ace26efa2737a97fe6190fae17c4377b8d78e0a8375ef0c36af14628cf223

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2307f8606414499c212ce5f80dce37fa4176c15f9a91a1f3ec07bef7c7c0da9a
MD5 6da69185449b06f18a98178efeaa9610
BLAKE2b-256 1dcd6909f59a747f6b1598dbb1c9d3b625411b639bfcb1161ab39cdb6b390996

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0d765f0ebdd767ffa190af9086d8146f589327009e469f2f73b7a531abbabf55
MD5 8070a7487cbc94eb4d109a2ba9af04e9
BLAKE2b-256 af87efcceadc8d3669b256d036e9a480c8733def5aaf6581a107211a82244ea2

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3e39d27d02a6184a183f4bcdf45eeb6f27e78d4df8cc61d4ba474f131b8d83a2
MD5 7f44d3c05b8361f29967add7619cae75
BLAKE2b-256 cb431992b82d6b7cbae72aff7b1e2141153fa0d95bf2526dd38b5f04e40b0822

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp312-cp312-win_amd64.whl.

File metadata

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

File hashes

Hashes for heavykeeper-0.2.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cd9b21cdfcff0f95694d37a33e6575f54b1ef17ed9d0b9cc75d6466f3d11d793
MD5 c6024dc6093e2da869f8785090394d1f
BLAKE2b-256 a2997f89753aa9074789da4fc101a5b36ab94aeccdb48914d8cb0c0dbfb12d34

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12744f992244c7f5a2ad3ed007955b84476f82984fc0e78f4fdced16db43a209
MD5 3e0c7a4dde0337bd840ae6903aa27381
BLAKE2b-256 3b2cf0d4f5bc17d2ae4659534bab0073d1ec8d599a3f01d154575b8180b7d935

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dcdb667a5fd39bd1a82ff7436adb82817256862536491d0dc4e614a772cbe770
MD5 4aedfe71ee55ede381ca8cbd5c49c111
BLAKE2b-256 2cb648f4548618885979673bad38ffc6bab43a3d4573c0868113e8b62e0f94ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d6605f2188076017fdcc196ecd2f5cfa8843c229b6e3ff6a1ddcfda95c9ee87
MD5 2878495bc2a803c0cdd6a9a403dbe44e
BLAKE2b-256 388472972a8e8dbd4343856f23f44eb8ab9a67c96a99ce77854fac2e134bcda8

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp311-cp311-win_amd64.whl.

File metadata

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

File hashes

Hashes for heavykeeper-0.2.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3e01881d670e9e999afb0dd70249053f5996fbc29eb7bb4efdeff319cd650b8b
MD5 bfbd8d11be5792bf300cc4bfc9f54edc
BLAKE2b-256 51f43ebb0512ca944fd91c51055650a0d0cd434495c94f8c2a7b4c6cdaadd87c

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a91bc03ba458e9f1a0e57a4e2109d5683c37ec90bd51110d8356f50039242308
MD5 dcf6be0521d4c96fbc93dca61c65065e
BLAKE2b-256 d60b3ad0a843d14c10855dc1143bf46b6cc81bb39651267c3fb925742ec6ef12

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6d4745717a4613cc2ed0042dbf72ffa7fbbf2e91359ced1d9df2465ec165dd5a
MD5 187f0fd51c5fbca447da7b9f474052ee
BLAKE2b-256 eabbec3561335c1ec338696cc3f64f564256bb78e386bbdafc97cf5be00458fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heavykeeper-0.2.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cbeb1983096b19aa2a9275d97fe2921ebe6fed323c0eb97a91610000b0f94589
MD5 8e784332b93fac1b89b7ec66c159693b
BLAKE2b-256 4165115029a4e3f6c2647751893a0aa41f815923e42fb80f983ad569756f986b

See more details on using hashes here.

Provenance

The following attestation bundles were made for heavykeeper-0.2.5-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