Skip to main content

Parquet Reader

Project description

rugo

License Python Version

A lightning-fast Parquet file reader built with C++ and Cython, optimized for ultra-fast metadata extraction and analysis.

๐Ÿš€ Features

  • ๐Ÿš€ Lightning-fast metadata reading - 10-50x faster than PyArrow for metadata operations
  • ๐Ÿ—๏ธ C++ core with Cython bindings - Maximum performance with Python convenience
  • ๐Ÿ“Š Complete schema information - Physical types, logical types, and statistics
  • ๐Ÿ”„ Schema conversion - Convert rugo schemas to orso format (optional)
  • ๐Ÿ”ฌ Zero dependencies - No runtime dependencies for core functionality
  • โœ… PyArrow compatible - Validated results, drop-in replacement for metadata operations

๐Ÿ“ฆ Installation

# Basic installation (coming soon to PyPI)
pip install rugo

# With orso schema conversion support
pip install rugo[orso]

From Source

# Clone the repository
git clone https://github.com/mabel-dev/rugo.git
cd rugo

# Create virtual environment
python -m venv venv
source venv/bin/activate

# Install build dependencies
pip install setuptools cython

# Build the extension
make compile

# Install in development mode
pip install -e .

Requirements

  • Python 3.9+
  • C++ compiler with C++17 support
  • Cython (for building from source)

๐Ÿ”ง Usage

Reading Parquet Metadata

Rugo provides blazing-fast access to Parquet file metadata without the overhead of loading actual data:

import rugo.parquet as parquet_meta

# Extract complete metadata from a Parquet file
metadata = parquet_meta.read_metadata("example.parquet")

print(f"Number of rows: {metadata['num_rows']}")
print(f"Number of row groups: {len(metadata['row_groups'])}")

# Analyze row groups and column statistics
for i, row_group in enumerate(metadata['row_groups']):
    print(f"Row Group {i}:")
    print(f"  Rows: {row_group['num_rows']}")
    print(f"  Size: {row_group['total_byte_size']} bytes")
    
    for col in row_group['columns']:
        print(f"    Column: {col['name']}")
        print(f"    Physical Type: {col['type']}")
        print(f"    Logical Type: {col.get('logical_type', '(none)')}")
        print(f"    Nulls: {col['null_count']}")
        print(f"    Min: {col['min']}")
        print(f"    Max: {col['max']}")
        
        # Check for bloom filter availability
        if parquet_meta.has_bloom_filter(col):
            print(f"    Has bloom filter: Yes")
        else:
            print(f"    Has bloom filter: No")

Advanced Features

Schema Analysis

Extract detailed schema information including both physical and logical types:

import rugo.parquet as parquet_meta

metadata = parquet_meta.read_metadata("example.parquet")
for col in metadata['row_groups'][0]['columns']:
    print(f"{col['name']}: {col['type']} -> {col.get('logical_type', '(inferred)')}")
    # Example output:
    # name: BYTE_ARRAY -> STRING
    # timestamp: INT64 -> TIMESTAMP_MILLIS
    # price: DOUBLE -> (inferred)

Bloom Filter Testing

Quickly test if values might exist in columns without reading the actual data:

import rugo.parquet as parquet_meta

metadata = parquet_meta.read_metadata("example.parquet")

for col in metadata['row_groups'][0]['columns']:
    if parquet_meta.has_bloom_filter(col):
        # Test if a value might be present
        might_exist = parquet_meta.test_bloom_filter(
            "example.parquet",
            col['bloom_offset'],
            col['bloom_length'], 
            "search_value"
        )
        if might_exist:
            print(f"Value might be in column {col['name']}")
        else:
            print(f"Value definitely not in column {col['name']}")

Schema Conversion to Orso

Convert rugo parquet schemas to orso format:

from rugo.converters.orso import rugo_to_orso_schema, extract_schema_only
import rugo.parquet as parquet_meta

# Read parquet metadata
metadata = parquet_meta.read_metadata("example.parquet")

# Convert to orso RelationSchema
orso_schema = rugo_to_orso_schema(metadata, "my_table")

print(f"Schema: {orso_schema.name}")
print(f"Columns: {len(orso_schema.columns)}")
print(f"Estimated rows: {orso_schema.row_count_estimate}")

# Access individual columns
for column in orso_schema.columns[:3]:
    print(f"{column.name}: {column.type} ({'nullable' if column.nullable else 'not null'})")

# Or get a simplified column mapping
schema_info = extract_schema_only(metadata, "simple_name")
print("Column types:", schema_info['columns'])

Note: Orso conversion requires the optional orso dependency:

pip install rugo[orso]

### Metadata Structure

The `read_metadata()` function returns a dictionary with the following structure:

```python
{
    "num_rows": int,           # Total number of rows in the file
    "row_groups": [            # List of row groups
        {
            "num_rows": int,           # Rows in this row group
            "total_byte_size": int,    # Size in bytes
            "columns": [               # Column metadata
                {
                    "name": str,           # Column name/path
                    "type": str,           # Physical type (INT64, BYTE_ARRAY, etc.)
                    "logical_type": str,   # Logical type (STRING, TIMESTAMP_MILLIS, etc.)
                    "min": any,            # Minimum value (decoded)
                    "max": any,            # Maximum value (decoded)
                    "null_count": int,     # Number of null values
                    "bloom_offset": int,   # Bloom filter offset (-1 if none)
                    "bloom_length": int,   # Bloom filter length (-1 if none)
                }
            ]
        }
    ]
}

โšก Performance

Rugo is specifically designed for blazing-fast Parquet metadata operations:

  • โšก 10-50x faster than PyArrow for metadata extraction
  • ๐Ÿง  Minimal memory footprint - Direct binary parsing without intermediate objects
  • ๐Ÿš€ Lightning startup - Fast imports with optimized compiled extensions
  • ๐Ÿ“Š Efficient statistics - Decode min/max values without loading columns

Benchmarks

Run performance comparisons yourself:

make test  # Includes comprehensive PyArrow vs Rugo benchmarks

Why is Rugo so fast?

  • Direct C++ implementation of Parquet metadata parsing
  • Zero-copy binary protocol parsing
  • Optimized Thrift deserialization
  • No Python object overhead during parsing

๐Ÿ› ๏ธ Development

Building from Source

# Install development dependencies
make update

# Build Cython extensions
make compile

# Run tests
make test

# Run linting
make lint

# Check type hints
make mypy

# Generate coverage report
make coverage

Project Structure

rugo/
โ”œโ”€โ”€ rugo/
โ”‚   โ”œโ”€โ”€ __init__.py          # Main package
โ”‚   โ””โ”€โ”€ parquet/             # Parquet decoder implementation
โ”‚       โ”œโ”€โ”€ metadata.cpp     # C++ metadata parser
โ”‚       โ”œโ”€โ”€ metadata.hpp     # C++ headers
โ”‚       โ”œโ”€โ”€ thrift.hpp       # Thrift protocol implementation
โ”‚       โ””โ”€โ”€ metadata_reader.pyx  # Cython bindings
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ data/                # Test Parquet files
โ”‚   โ””โ”€โ”€ tests
โ”œโ”€โ”€ Makefile                 # Build automation
โ”œโ”€โ”€ setup.py                 # Build configuration
โ””โ”€โ”€ pyproject.toml           # Project metadata

Testing

The test suite includes:

  • Validation tests - Compare output with PyArrow
  • Performance benchmarks - Speed comparisons
  • Edge case handling - Various Parquet file formats
# Run all tests
make test

# Run specific test
python -m pytest tests/test_compare_arrow_rugo.py -v

Code Quality

We maintain high code quality with:

  • Linting: ruff, isort, pycln
  • Type checking: mypy
  • Formatting: ruff format
  • Cython linting: cython-lint

๐Ÿค Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature-name
  3. Make your changes and add tests
  4. Run the test suite: make test
  5. Run linting: make lint
  6. Submit a pull request

Development Setup

# Clone your fork
git clone https://github.com/yourusername/rugo.git
cd rugo

# Set up development environment
python -m venv venv
source venv/bin/activate
make update
make compile
make test

๐Ÿ“Š What Rugo Does

โœ… Currently Supported:

  • Fast Parquet metadata extraction - Schema, statistics, row group information
  • Logical type detection - STRING, TIMESTAMP, DECIMAL, etc.
  • Bloom filter testing - Value presence checks without data scanning
  • Statistics decoding - Min/max values properly typed and decoded
  • Cross-platform support - Linux, macOS

๐ŸŽฏ Focus Areas: Rugo is laser-focused on being the fastest Parquet metadata reader available. It doesn't try to be everything to everyone - it does one thing exceptionally well.

๐Ÿ› Known Limitations

  • Metadata-only: Rugo focuses on metadata extraction, not data reading
  • C++ compiler required: Building from source requires C++17 compiler
  • Parquet-specific: Designed specifically for Parquet format

๐Ÿ“„ License

Licensed under the Apache License 2.0. See LICENSE for details.

๐Ÿ‘จโ€๐Ÿ’ป Authors

  • Justin Joyce - Initial work - joocer

๐Ÿ™ Acknowledgments

  • Built on top of the Apache Parquet format specification
  • Inspired by PyArrow's parquet module design
  • Uses optimized Thrift binary protocol for metadata parsing
  • Performance insights from the Apache Arrow community

๐Ÿ“ˆ Roadmap

Core Focus: Fastest Parquet Metadata Reader

  • Lightning-fast metadata extraction
  • Complete schema information with logical types
  • Bloom filter support
  • Advanced statistics (histograms, sketches)
  • Parquet format validation

For more information, visit the GitHub repository or open an issue.

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

rugo-0.1.1.tar.gz (113.7 kB view details)

Uploaded Source

Built Distributions

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

rugo-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

rugo-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (671.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rugo-0.1.1-cp312-cp312-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rugo-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl (80.8 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

rugo-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

rugo-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (665.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rugo-0.1.1-cp311-cp311-macosx_11_0_arm64.whl (78.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rugo-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl (80.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

rugo-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

rugo-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (653.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rugo-0.1.1-cp310-cp310-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rugo-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl (80.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

rugo-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

rugo-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (652.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

rugo-0.1.1-cp39-cp39-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

rugo-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl (80.9 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file rugo-0.1.1.tar.gz.

File metadata

  • Download URL: rugo-0.1.1.tar.gz
  • Upload date:
  • Size: 113.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rugo-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5749c940b42305cb1ce42220d58671ab396b87092a93e39a752ce8a16796e8bd
MD5 782f616eae9319bcdddb01c44645add3
BLAKE2b-256 1182bc28424fe148b75e348bd1b00a52c64290e3d4648a2f6a2160a481992033

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1.tar.gz:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 d3ef570af0fd88c01cee9a97fe892e230a792c3ec2ee50269ea4bcb11aa12171
MD5 71c1550d5d054bcde97d77947723f71b
BLAKE2b-256 a72d3a529fe29544cc0994c0a0a87d3c3bcb75c2d0006e663cdeb025d20210ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 16589f8697fb835d07a6a06e2a0ffa1837f19bea248e23f89edd85a9c9d74c5c
MD5 6fe64ec640ac0db079825ad7e6c62a2e
BLAKE2b-256 667c20202a1d4c84049f3d3ed1cef83b4ea4e76405209bcf926e1e9e0326a09f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 94eb9a32d35696ccd6ae25d384c32bace373ad5a89a6d5cbd4252ec838d69b70
MD5 c3e0f0a59bac7806d4a468846fa72685
BLAKE2b-256 208741472f9f81ee6b4809103cf3b30a3de2ef022b22b4669e3833e9b70d2039

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 08f3e3c20f1c94ba23af6ed72bf0f783ec3b419ae5fe728acb4b3516c23c58ad
MD5 47432f0414eb43f6d4a2d0df301538d5
BLAKE2b-256 29bdb488920c3ec5bf09683ff37653b44941d20bfce0d824cd7d1cc053469720

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 481573d603c208c8baef93342e0b32b55f03b9966cae1db6883c05e6ef43b7af
MD5 712b41b13fda4012e42b370419d9c0a5
BLAKE2b-256 03a9f28c4078c2e2f9d0b5bf28920efcf632cfcc0331d99ea6657397d2641fae

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d9a97cb6205da887512d3583f70a221776fd7f8de2042140f1c40420d1b3fe48
MD5 2b18e1dbe1f7d65d9cd783de1e6d6595
BLAKE2b-256 116755e9c1891f9a5e63e161ddc79904c615826d5939cd1758cc3ca6f439f3da

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6febc14e99c3a17c3103015688e06755e3e44bddcc87c6eefcb53f372e4234cc
MD5 ec692700b1c88a1b0093fa7a14108c21
BLAKE2b-256 a0e0cb64bee8f006c67ac08406b970ce9c16ccff3486a2a7bc31bda2821c7d4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 72c862187c537c546aba8a1824eeb89d8e5c19e915b3c111f6e4e1a2037d9855
MD5 09d8a219c4f7e7e8ff89154b4f75cb6b
BLAKE2b-256 51b205fda0e02ab209244e1092f016e237b6bd3644cf664b880944250ab091ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ad7c5371b61bec7b7df8d4a8b21382bab93dbcb38bd29ca66fca804cc5a3b398
MD5 279e41edbbd7486c691ef68132cd5b24
BLAKE2b-256 c4cb38760aa044006c4293010647c085d608f302ac25dae661bb46a4af6c13bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 66f249ffe8d9b1c8c3631cbd3832b6504ec603500408ce7285eec3c8e1e970b3
MD5 ca9b4b00b4d2df40fa76dac3fd91ea22
BLAKE2b-256 0552bd5e993252f6efa53959cc4f62c6fa4f664e3653e2d9866f477ce07a7d04

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 28575760e6edae733d7d6f51872d0f0f8df332e43fad3b08b25f4f9948d5b995
MD5 6e27bfc841676b66eddc818207fc16e6
BLAKE2b-256 666bc7ce87a8fb55bff02a0e3d57d766f7f81e3c2386defa94501981c5c7f783

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3dd318a02068d82e79d2d91cd0be93d1ef1418001ba46a198b0d302a71191367
MD5 b8aaa6a51b7da7abd2234d795a544d79
BLAKE2b-256 e8215341159e0fd5846dff9498027f9d95908590491f3debabb3252601997b0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: rugo-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rugo-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 d5db6d86489fa4ee7ef1d1f6fd6cac5270a96372f69cf193cbb8bbeb87a17fce
MD5 b66f85f85283d1c17c790475118f96e7
BLAKE2b-256 38df0735238dcd2057f9b2536a5b0d1fc3ab45ff40767c908d45c884b2201796

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6dfdc29c4a94d32263df713724211f7d382fb2156b16645f4e6493ecc4eff3ed
MD5 b4a50b28ac86f12932cdd2196a2a278f
BLAKE2b-256 642c71831c1ce0da0b6e2ea1a92e4249d1b29817c3c8468da3080e413fe660d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: rugo-0.1.1-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 79.2 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rugo-0.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 64906c24b5ac62d3419cdbd812e631c1c9f827c58bb466b8ba78be782b3dd027
MD5 d6e19461694a29554a8ac09ce8f4419b
BLAKE2b-256 694aa89674ef6d70c81186954693515c5179a089edfd7fcef5b0f1999ab5a338

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: release.yml on mabel-dev/rugo

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

File details

Details for the file rugo-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: rugo-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 80.9 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rugo-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f123eda0b14f4748dca1358ffa928ac64b87bed7088a5e3dfdb4b33c43d5a32e
MD5 e4e2a656142bcc1fcad90bb79889f2ed
BLAKE2b-256 4c581fb6f8e004fe8600bb6767c36192eb6cb85c8f25406dd3d79943220b234f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl:

Publisher: release.yml on mabel-dev/rugo

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