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.2.tar.gz (117.8 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.2-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.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (695.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rugo-0.1.2-cp312-cp312-macosx_11_0_arm64.whl (82.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rugo-0.1.2-cp312-cp312-macosx_10_9_x86_64.whl (83.7 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

rugo-0.1.2-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.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (680.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rugo-0.1.2-cp311-cp311-macosx_11_0_arm64.whl (81.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rugo-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl (83.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

rugo-0.1.2-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.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (667.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rugo-0.1.2-cp310-cp310-macosx_11_0_arm64.whl (82.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rugo-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl (83.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

rugo-0.1.2-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.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (666.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

rugo-0.1.2-cp39-cp39-macosx_11_0_arm64.whl (82.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

rugo-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl (83.8 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: rugo-0.1.2.tar.gz
  • Upload date:
  • Size: 117.8 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.2.tar.gz
Algorithm Hash digest
SHA256 be6b5570dee4e096825faccdb341f7aecf78fa5d94106620f25f312dbdac3406
MD5 fb46b6f8e24fffc2f92f324cd3f6ae27
BLAKE2b-256 017416eab37b604a44f883e9f6e28159db64a3ac3ee97375c2b9d4b40bac48c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2.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.2-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ab153b6dd3c01cccf70d28d3883536c4552247e91a52950bfbff20059f785d92
MD5 4db9456e6423e22d4128f00178c0d8be
BLAKE2b-256 f86b9442ef53bedcfe43d568c229d70455bd0b63a5572ce56961851856f94002

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9a2ccc40caab8be3a3a67b3b9c5303eebf92ab2d032aa704e32e2e7dcfd8c407
MD5 12b1f8b832cda275fe56c54ef93c084b
BLAKE2b-256 2f67120e3eed444155379b705707953070109a28a52ecb80ce19833b51d1ef66

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1586b0c19dc0a0420b76e2014efa9ee167504954aebe982a042df996e55a3920
MD5 2c35af1c3ec163b42580fb093e442dd5
BLAKE2b-256 a66db948933f2001ce4476a10b0ce884b039f95344202096a4b37eacd44bc622

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5c144978a58c536eaeb0a4c3558c815ab190475b3b6a0f4ace8e4de845b91e3f
MD5 c6f403e22f37fa5910207aff1e719456
BLAKE2b-256 45be9c9e17bbee529a6438e695d8907d2242ad35e6802703adfd53065481c8ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 6e7eb9f52add00eb5ae6deb86b535deb8d46186e12b327a845d11926e503eac7
MD5 e155dd55642ab32ce96d3af3735ba8ff
BLAKE2b-256 7da8a96e65b176a0892e44e24567092a581115d292d5ee9e3b7c2374b7a14c2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 60a8c52ef24bef063fd618c9a58bbc27dae643c7369bc58ebd5dd58870e648d9
MD5 f9ff8bb4ccacd182fbb6388fbd4c2a7a
BLAKE2b-256 3eddd85d350869104f9208d3b7e78538702a67a80518956968972d3e7297667b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 955cac0ccb1c08bc09263f2cf2ff1fa6c64d42e767664db25352a52cc0d9f298
MD5 f951c3b1d61797f0ecf9c08d9e516084
BLAKE2b-256 6e8812a04a135982dc7271f03438a29811a87d7ec55c03d33588d24b74fb6e72

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fa6f9225a6854c7e2ff404ba19c4989948ec601c8fb8847347dd3c7fd98ac737
MD5 ee229cbf5b41e59e45ea49a15588553a
BLAKE2b-256 8db4466130edeab8f9673bb500a0d38e10fbb4130b390ae7e983ebc45c1c756d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 6b2d62ac47f588bfa3bad8347bd7cdd06aa56666a4bfb5f817e3b5c2d40c682a
MD5 94f13990cd924a15257b9be0db117701
BLAKE2b-256 2ac6c4c09be68e329748e1dc31ce2c956234c73caaa949d00bc009cc3e59d30a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a821a4f608816d57389e2cf40e19e5471ecf29e97a7338854bff44adbfba7706
MD5 c75f60f5103c09305df2a15e8bbba0c6
BLAKE2b-256 58675c2707bd343576423506822f67da24583da8be8fc8720d8d6df1a7fc4680

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8fb8350edaf1c141b6f9474aa00535316a836ae1210bf86aa2887774c5981f3
MD5 03fc5c929c083305f2772a55596d048c
BLAKE2b-256 fa73a462f4a8ae4d4fe39d21630ea752dcee7964c61f67964ba69a7a63c4957d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7c0964b868f02321a49496e86f01496f0e38a749c9430040c1a66bcbf6f56d54
MD5 31776f29cdd920b2841983743048d98e
BLAKE2b-256 9a82c7bd9f89ef1c64be92e37b15afc84b5670e7bbd5550d47622c9716f6aa80

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: rugo-0.1.2-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.2-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5c20fbc7c0c9c6595ca17bb053379e259d2afaf4d8e00f5e1dcbce1ea4dc4c00
MD5 36c976c8f9dad09d1120be56505d8bfa
BLAKE2b-256 c1cbbb1dec999cee10e010471aa79915f333ba66c5e0195b42cf751b40d5443e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a1c052efe5b956033ecef23ae1a5b0eba102d1f4f293863d1111d1b107420658
MD5 a6a1f82976127f13c9c2acbb0d7bb1d1
BLAKE2b-256 68e9a02942dba63403a99b0bd5595c9d64d2bc1e942384ae41c841f277958b6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: rugo-0.1.2-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 82.3 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.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1afd3f790a8d0864d0e898af31930c2c10b5ed15c56d51c51c9eb61f079b88eb
MD5 79230a44314fd953774d06158fa5ea88
BLAKE2b-256 ad21cfac9de342e7d223769e71d1dbacd26d6919c97ec6d935f24cb2b15ff3d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: rugo-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 83.8 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.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 10c504c4cc1016e52daa8a6e1a2afd7e587513567d838029c3508d836fea3751
MD5 116fc82ac431af122123c0f8262f818e
BLAKE2b-256 ae73edcbfb6e0927c856b8fadac101cf8ba837f4907557d11c1df2467d65ff90

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.1.2-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