Skip to main content

Fast, dependency-free Parquet/CSV/JSONL reader and writer (no PyArrow, no NumPy).

Project description

Rugo

PyPI Python License

A fast, dependency-free file engine for Parquet, CSV, and JSONL — reading and writing — with no PyArrow and no NumPy.

Rugo reads and writes columnar data files from Python without pulling in a heavy dependency stack. There is no PyArrow and no NumPy on any read or write path — the engine is compiled C++/Cython and ships its own columnar substrate (Draken) inside the wheel. If you want to read a Parquet file, stream row groups with projection and predicate pushdown, or write Parquet/CSV/JSONL back out, and you do not want to install PyArrow to do it, rugo is for you.

Rugo is the file engine extracted from the Opteryx SQL query engine, published as a standalone wheel.

from rugo import parquet

# stream a projected, row-group-pruned read — no PyArrow, no NumPy
with parquet.read_parquet("planets.parquet", columns=["id", "name"], filters=[("id", ">", 4)]) as reader:
    for morsel in reader:
        print(morsel.column(b"name").to_pylist())

Why rugo over PyArrow?

PyArrow is excellent. It is also 124 MB installed, takes 137 ms to import on a cold process, and drags the entire Arrow C++ runtime into your environment whether you use 5% of it or 100%. In a serverless or containerised deployment, you pay for every millisecond of cold-start time and every megabyte of memory and image size. Rugo is built for those environments.

rugo PyArrow
Wheel size 2.9 MB ~23 MB
Installed footprint 7.7 MB 124 MB
Runtime dependencies zero Arrow C++ runtime
Cold import time 2.6 ms 137 ms
Schema read (footer only) 0.02 ms 0.05 ms
Memory at import 134 KB 260 KB

Measured on Python 3.14t, Apple M-series. Import times on a cold process (first load off disk).

In real terms:

  • AWS Lambda / GCP Cloud Functions bill by the millisecond. A 137 ms PyArrow import adds cost to every cold start. With rugo that's 2.6 ms — over 50× faster. Functions that cold-start frequently can see that overhead add up directly on the invoice.

  • Container image size affects pull time, horizontal scale-out speed, and storage costs. At 16× smaller, rugo shrinks the image meaningfully — and keeps you well clear of AWS Lambda's 250 MB unzipped layer limit (PyArrow alone is halfway there).

  • Memory is billed per GB-second in serverless. Rugo imports at 134 KB; PyArrow at 260 KB — before either has read a single byte of data. At scale, that headroom matters.

  • Schema inspection (reading the Parquet footer to check row counts and column types without decoding any column data) is 2.5× faster with rugo. If your workload metadata-scans many files before deciding what to read, this compounds.

Where PyArrow is faster: bulk full-table decoding. PyArrow's Arrow C++ engine is highly optimised for throughput on wide reads and benefits from a mature decade-long optimisation effort. Rugo uses a lock-free multithreaded decode pipeline (GIL-free worker threads) but its primary design goal is reading less — projection and row-group pruning — rather than maximising raw scan throughput. If you are streaming entire large tables into memory as fast as possible, PyArrow is the right tool. If you are running in a constrained cloud environment, routing selective queries, or simply do not want 124 MB of Arrow C++ in your dependency tree, rugo is the right tool.


Installation

pip install rugo

Pre-built wheels bundle Draken — there is nothing else to install. Rugo has zero runtime dependencies.

Requirements

  • Python 3.11+
  • A platform with a published wheel (Linux x86-64/aarch64, macOS arm64). For other platforms, see Building from source.

Data model

Rugo speaks Draken, the bundled columnar substrate:

  • A Vector is a single typed column. Call vector.to_pylist() to get a Python list of its values.
  • A Morsel is a batch of rows across several columns (a chunk of a table). Call morsel.column(b"name") to get a column Vector (note the bytes key), and len(morsel) for the row count.

Readers return Morsels (Parquet) or a result dict whose columns are Vectors (CSV, JSONL). The writers consume a Morsel. A read → write round-trip:

from rugo import parquet
from rugo.csv import write_csv
from rugo.jsonl import write_jsonl

with parquet.read_parquet("planets.parquet") as reader:
    for morsel in reader:                      # one Morsel per row group
        csv_bytes   = write_csv(morsel)        # -> bytes (RFC 4180)
        jsonl_bytes = write_jsonl(morsel)      # -> bytes (one JSON object per row)
        pq_bytes    = parquet.write_parquet(morsel)   # -> bytes (ZSTD)

Parquet

rugo.parquet is the recommended surface: one symmetric module for reading and writing that accepts a filename or an in-memory buffer, streams row-group Morsels, applies predicate pushdown, and writes Morsels back to bytes.

Quick start

from rugo import parquet

# Schema-only metadata (footer parse, no column data). Path OR bytes.
meta = parquet.read_metadata("planets.parquet")
print(meta.num_rows)                       # 9
print([c.name for c in meta.schema_columns])

# Streaming read: one Morsel per row group. `columns` projects; `filters`
# prune whole row groups via footer statistics (rows in surviving groups are
# NOT filtered — apply row-level predicates downstream).
with parquet.read_parquet(
    "planets.parquet",
    columns=["id", "name"],
    filters=[("id", ">", 4)],              # ops: = == != < <= > >= in "not in"
) as reader:
    for morsel in reader:
        print(morsel.column(b"name").to_pylist())

# Write a Draken Morsel to Parquet bytes (ZSTD by default; "none" to disable).
data = parquet.write_parquet(morsel, compression="zstd")
with open("out.parquet", "wb") as f:
    f.write(data)

rugo.parquet API

Function Returns
read_parquet(source, columns=None, filters=None) context manager yielding one Morsel per surviving row group
read_metadata(source) ParquetMetadata (num_rows, schema_columns)
write_parquet(morsel, compression="zstd") bytes (whole file)
write_parquet_with_bounds(morsel, compression="zstd") (bytes, {col_index: (min, max)})

source is a filename (str) or bytes/bytearray/memoryview. filters is a list of (column, op, value); pruning is at row-group granularity.

Low-level API (rugo.parquet_reader)

Most callers should use rugo.parquet above. The low-level module is exposed for fine-grained control.

Metadata

Function Returns
read_metadata(path: str) ParquetMetadata(num_rows, schema_columns) (typed object)
read_metadata_from_bytes(data: bytes) same
read_metadata_from_memoryview(mv: memoryview) same (memoryview must be contiguous)
read_rowgroup_stats(data) list[{num_rows, columns:[{name, physical_type, logical_type, min, max, null_count}]}] — per-row-group stats for pushdown

schema_columns is a tuple of SchemaColumn(name, physical_type, logical_type, nullable). read_rowgroup_stats min/max are raw stat bytes (or None); decode with decode_value.

Decode

read_parquet(data, column_names=None, row_group_mask=None)
  • databytes, bytearray, or memoryview holding the full Parquet file.
  • column_nameslist[str] to project, or None for all columns.
  • row_group_mask — optional iterable, one truthy/falsy entry per row group; a falsy entry skips decoding that row group (predicate pushdown). rugo.parquet's filters= builds this from read_rowgroup_stats.
  • Returns list[Morsel] (one per decoded row group), or None on failure. On partial decode failure an individual column within a Morsel may be None.

Compatibility

Function Returns
can_decode(path: str) bool — quick compatibility signal, not a guarantee
can_decode_from_memory(data) bool — same, for an in-memory buffer

Fine-grained / range decode

Function Description
decode_column_from_chunk(chunk_bytes, col_stats, row_mask=None) Decode a single column chunk to a Draken Vector; row_mask is an optional uint8 bitmap
decode_column_from_chunk_to_python(chunk_bytes, col_stats) Decode a single column chunk to a Python list
decode_column_from_memory(data, column_name, row_group_stats, row_group_index) Decode one column from a full in-memory file, by row-group index
decode_value(physical_type, logical_type, raw, prefer_text) Decode a single raw Parquet value to a Python scalar

col_stats is the per-column stats dict for the matching row group from read_metadata.

Bloom filters

bloom_filter_maybe_contains(path, bloom_offset, bloom_length, value)  # -> bool

Evaluates a column bloom filter at the given byte offset/length for a candidate value. Bloom filter offsets and lengths are exposed in the per-column metadata returned by read_metadata.

Supported decode subset

Area Support
Physical types int32, int64, float32, float64, boolean, byte_array
Compression UNCOMPRESSED, SNAPPY, ZSTD
Encodings PLAIN, dictionary pages (PLAIN_DICTIONARY / RLE_DICTIONARY), DELTA_BINARY_PACKED, DELTA_BYTE_ARRAY
Input Path, or in-memory bytes / memoryview, with column selection

Writing

rugo.parquet_writer (and the rugo.parquet facade) serialize a Draken Morsel to a well-formed, PyArrow-readable Parquet file.

from rugo.parquet_writer import write_parquet, write_parquet_with_bounds
data = write_parquet(morsel, compression="zstd")          # -> bytes
data, bounds = write_parquet_with_bounds(morsel)          # + per-column min/max
Area Support
Column types INT8/16/32/64 (→INT64), FLOAT32 (→DOUBLE), FLOAT64, BOOL, VARCHAR/NVARCHAR/VARBINARY, VARIANT (→STRING), DATE32, TIME32/64, TIMESTAMP64 (µs/ms/ns), INTERVAL (FLBA-12), DECIMAL/DECIMAL128 (FLBA), ARRAY/LIST of those (int/float/bool/string elements), all-null (→INT32). FP16 not yet.
Encoding PLAIN values, RLE definition levels, one data page per column chunk
Compression ZSTD (default) or uncompressed
Statistics per-column min/max/null_count + column_orders (so readers trust them)
Bloom filters split-block (SBBF), XXH64, on equality-friendly columns; bloom_filters=True|False|[names]
Layout single row group per Morsel

Unsupported column types fail loud (no silent skip). Nested LIST/MAP/STRUCT and dictionary-encoded output are not yet implemented.

Limitations

  • Not a full Parquet replacement reader; decode support is intentionally narrow.
  • GZIP, LZO, BROTLI, LZ4, and LZ4_RAW compression codecs are not implemented in the decode path.
  • INT96 is not supported for value decoding in read_parquet(...).
  • FIXED_LEN_BYTE_ARRAY value decoding is not implemented.
  • Decode logic is built around DATA_PAGE (V1); DATA_PAGE_V2 is not handled.
  • Decode reads from a single data-page path per column chunk; files requiring full multi-page streaming decode may return partial or failed column results.
  • Nested, list, and map-heavy files are not a primary decode target; flat primitive columns are the intended shape.
  • On partial decode failure, individual columns may be returned as None.
  • Metadata extraction is broad, but known edge cases remain around list/nested column naming normalisation.

Performance

Metadata reads (schema + row-group stats, no column data) are fast and comparable to PyArrow. The high-level read_parquet() path is correctness-first: it reconstructs Draken vectors from decoded columns and materializes through Python, so it is a serial utility rather than a throughput benchmark. The emphasis is on reading less — projection and row-group pruning — not on raw bulk scan speed.


JSONL

Quick start

from rugo.jsonl import get_jsonl_schema, read_jsonl, write_jsonl

# Infer schema from sample rows
schema = get_jsonl_schema("example.jsonl", sample_size=5)
# -> {"columns": [{"name": str, "type": str, "nullable": True}, ...]}

# Read from a file path with projection and predicate pushdown
result = read_jsonl(
    "example.jsonl",
    columns=["id", "name"],
    predicates=[("status", "==", "active")],
)
if result["success"]:
    print(result["num_rows"])
    for vec in result["columns"]:          # list of Draken Vectors
        print(vec.to_pylist())

# Read from bytes input
with open("example.jsonl", "rb") as f:
    result = read_jsonl(f.read(), columns=["id"])

# Write a Morsel to JSONL bytes (one JSON object per row)
data = write_jsonl(morsel)

read_jsonl

read_jsonl(
    data,                       # file path (str) or buffer (bytes/bytearray/memoryview)
    columns=None,               # list[str] to project, or None for all
    predicates=None,            # list[(column, op, value)]; op in ==, !=, <, <=, >, >=
    explicit_schema=None,       # provide a schema dict instead of inferring
    infer_schema=True,
    infer_sample_size=5,        # rows sampled for type inference
    parse_arrays=True,
    parse_objects=True,
    fail_on_error=True,
    use_threads=True,           # SIMD-accelerated parallel scan/interpret
    min_rows_per_thread=2048,
)

Return dict:

Key Value
success bool
column_names list[str]
num_rows int — rows passing predicates
columns list of Draken Vectors
schema dict[str, str] — column name → inferred type string
error str — present only when success is False

Inferred type strings: int64, double, boolean, string, bytes, object, null, array<T>.

get_jsonl_schema

get_jsonl_schema(data, sample_size=5)
# -> {"columns": [{"name": str, "type": str, "nullable": True}, ...]}

Infers the schema from the first sample_size rows. Returns {"columns": []} on failure; does not raise.

Writing

write_jsonl(morsel) returns bytes, one JSON object per row. Value formatting is done in C++: doubles use shortest round-trip (std::to_chars); dates/timestamps render ISO-8601 strings; decimals are JSON numbers; arrays render as JSON arrays (null list / empty list / null element are all distinguished); nulls are null.

Performance

116 MB, 1.5 M rows, 5 cols, versus PyArrow read_json (multithreaded):

Query shape Rugo PyArrow
SELECT * ~67 ms ~53 ms
SELECT one_col ~33 ms ~53 ms
SELECT col WHERE id < 150k (~10% pass) ~15 ms ~53 ms
SELECT col WHERE id < 15k (~1% pass) ~7 ms ~53 ms

Bulk SELECT * is materialiser-bound — PyArrow has an edge. The analytical shapes — project + filter — are 1.2–5×+ faster, and the advantage grows with selectivity and table width.

Caveats

  • String/object-heavy fields are often returned as bytes (binary-preserving), not eagerly decoded Python str/dict values.
  • Mixed or deeply nested array-object content may fall back to raw JSON text/bytes in edge cases.
  • Schema inference is sampled (infer_sample_size rows only); pass explicit_schema when the schema is known to avoid mismatches on heterogeneous files.

CSV

Quick start

from rugo.csv import read_csv, write_csv

result = read_csv("data.csv")                                          # all columns
result = read_csv("data.csv", columns=["col1", "col2"])                # projection
result = read_csv("data.csv", columns=["name"], predicates=[("age", ">", 30)])
result = read_csv("data.tsv", delimiter="\t")                          # TSV variant

if result["success"]:
    for vec in result["columns"]:          # list of Draken Vectors
        print(vec.to_pylist())

# Write a Morsel to CSV bytes (RFC 4180)
data = write_csv(morsel, delimiter=",", header=True)

read_csv

read_csv(
    data,               # file path (str) or buffer (bytes/bytearray/memoryview)
    columns=None,       # list[str] to project, or None for all
    predicates=None,    # list[(column, op, value)]; op in ==, !=, <, <=, >, >=
    delimiter=",",      # field separator character
    has_header=True,    # whether the first row is a header
    use_threads=True,   # parallel scan
)
Parameter Type Description
data str / bytes / bytearray / memoryview File path or in-memory buffer
columns list[str] or None Columns to project; None returns all
predicates list[tuple] or None Filter predicates applied before typed build
delimiter str Single-character field separator
has_header bool Whether row 0 is a header row
use_threads bool Enable parallel scan

Return dict:

Key Value
success bool
column_names list[str]
num_rows int — rows passing predicates
columns list of Draken Vectors

Type inference cascade per field: int64float64VARCHARnull (empty field).

Writing

write_csv(morsel, delimiter=",", header=True) returns RFC 4180 bytes: fields are quoted when they contain the delimiter/quote/newline (quotes doubled), nulls are empty fields, and ARRAY columns render as a (quoted) JSON array. The CSV and JSONL writers share the same C++ value formatter.

Performance

Measured against pyarrow.csv.read_csv. The expensive step is typed column build; rugo makes it survivor-only, which pays off when there is something to skip.

Narrow file — 3 cols, 1 M rows, 12.6 MB:

Query shape Rugo PyArrow
SELECT * ~7 ms ~3 ms
SELECT 2 cols ~6 ms ~3 ms
WHERE id > P90 (~10% pass) ~6 ms ~4 ms
WHERE id > P99 (~1% pass) ~5 ms ~3 ms

Wide file — 50 cols, 200 k rows, 55 MB:

Query shape Rugo PyArrow
SELECT * ~26 ms ~17 ms
SELECT 2 cols ~9 ms ~7 ms
SELECT * WHERE score > P90 (~10% pass) ~13 ms ~27 ms
SELECT * WHERE score > P99 (~1% pass) ~10 ms ~23 ms
SELECT 2 cols WHERE score > P90 ~8 ms ~27 ms

On narrow files PyArrow is faster across the board. On wide files with filtering, rugo is 2–3×+ faster — the crossover is driven by how many columns can be skipped and how many rows are eliminated before the typed column build.

Known limitations

  • Field length is capped at 65,535 bytes (uint16_t index); longer fields are silently truncated.
  • Type inference is speculative from sampled values; there is no schema-override parameter — inferred types may be wrong on heterogeneous columns.
  • Predicate operator set is fixed: ==, !=, <, <=, >, >=.

Design notes

  • No PyArrow, no NumPy. Every read and write path is pure C++/Cython and Draken-native. Output Parquet is still standard and PyArrow-readable.
  • Fail loud. can_decode(...) is a quick compatibility signal, not a guarantee; on partial decode failure a selected column may be returned as None — check, don't assume success.
  • Read less. The advantage over bulk readers comes from projection and predicate/row-group pruning, not raw scan throughput.

Example notebook

space_missions.ipynb walks through a complete workflow on a real dataset:

  • Download a Parquet file and inspect its schema with read_metadata
  • Filter launches by company with row-group pruning and row-level predicate
  • Aggregate total spend per company across streaming morsels
  • Write filtered results to JSONL and read them back

Building from source

End users should pip install rugo and use the published wheels. To build from the opteryx-core source tree (rugo is developed there alongside Draken and the Opteryx engine):

python rugo/setup.py bdist_wheel    # build the standalone rugo wheel (from repo root)

For in-place development of the whole tree, use the repository's make compile.


License

Apache-2.0. Rugo is part of the Opteryx project.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

rugo-0.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

rugo-0.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.5 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

rugo-0.3.1-cp314-cp314t-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

rugo-0.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

rugo-0.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

rugo-0.3.1-cp314-cp314-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rugo-0.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

rugo-0.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

rugo-0.3.1-cp313-cp313-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rugo-0.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rugo-0.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

rugo-0.3.1-cp312-cp312-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rugo-0.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rugo-0.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

rugo-0.3.1-cp311-cp311-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file rugo-0.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 0d088adb8a55b5c8b035c63ada25a61cfdfb8fa08a7db180702c566e2d74d001
MD5 22dac52ccf1f3f2ec028e7f14950be4b
BLAKE2b-256 1fc44a98ca7c916568ce04bb2d9554f6f32292abd5a7ad9da2bf15822d730609

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 b5eaef309b5e795dcc96136b2ff6b072638fd676eea6faafaae87b42e0ce1a2a
MD5 1e71d1a3a7d165382cc1ccd577c9f074
BLAKE2b-256 8338bc7b2e6e3410e1c24e5057498ddeb9b88696d5c6bdfc0ff7a24d03eaf4b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06d556f453189bc347e8abd60759c0379f3cbc8171953513ab766af02aa8e1ef
MD5 915a02c07d1435b171a1e29ba1d99802
BLAKE2b-256 1e59ddd8b17764b7b2c8b7ec80a887e2b6599e1a9178abcc8ac170de0cfb15c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 f7e8d8864f206f8c1d57ddced2ef8a748b1ebba757c021e7dee8150de34160c1
MD5 888dd36c77e8d06657bcee51a9de4973
BLAKE2b-256 31ad827d3e6d231bf456eeb54689320e8cf828ffaed96cd9f9ecb84d0489f859

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 8219a7b26058fe602dc64098175657aea8dd909c4ecae29c57681d5e746875ac
MD5 e5bab536f19c6c2658e7c5c05b3e02cb
BLAKE2b-256 461c7bb863bbddc52439a8417218385cf55b713a492d0396c40422f91ad29031

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d5881e2b1a38235ec0c4957a401cf64d24a3f41ee2dff2b5002d355835e3c6b7
MD5 7e1b4de6329ed3cadaa58d72de13da37
BLAKE2b-256 56a0a07645f0b662362aed27ec75822829ab1fce72b9e87f32c4c83e5a230cf0

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 5f40aa0bf26d20fcda5e44b159f68866d20157d7b8ed495580a535da42995f12
MD5 b63324de6b79b9ce3488ead4df4724ce
BLAKE2b-256 e961afc4864731f500beb2ef0f5ed1e5c5d1a6e5f26606c2936f75f2bca13258

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 67a1686ad7ae9a37c482017063cf3044eafec98106df62252112cf5deb93f1be
MD5 3c3cdf44a4a2098df6e16b437037327c
BLAKE2b-256 207aaa8ef238ae171b48501b1f548f7322ed85313c218d8d51e59df44b5329d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 910b773577abf80864ca93532b3466be0e29a174f1c1a1695f6a0467fbc7e827
MD5 50716a2ee570ac1cc21eae3f2557e7c3
BLAKE2b-256 9920d1a4024d73540195f27fc2be5d68000f1332a7572a8b141ea88a7da70873

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 4e3d94cf5330ce05165b19cbbee773d62ea7e0bca2d627fcd35f9376714a2c4c
MD5 8ad7b46589c1e171f79431a6ca02d0e5
BLAKE2b-256 cac01185081c1ff24177990f3cb89fd41a6528d3b243208a6dd2267d069dcc89

See more details on using hashes here.

Provenance

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

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 f1279340b8cfc36a879edf3b433fe6a503e77a2e8ce0dec56be61ccb921b44ca
MD5 1e238039396bd3d75a2d36c27131f15d
BLAKE2b-256 5e9a15bc092608fc2e0f9cc78ed0d5c23641ce2e425fa18a02bfe6a61efc7c31

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 884b5981298d485b19558d665bc82bf2fe9fbdc8d6e66886352a53174e7b6994
MD5 ee5d3446771933e7de7a2479a6e12f69
BLAKE2b-256 9f2c1ddf1a471028308926d1950297b67be17bef9aaef1b42ad29cfa740065fa

See more details on using hashes here.

Provenance

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

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 43bda57c51ce67849aa5b00f1a9c322e1c91b775d26ae27dbcfe7fdf266c309f
MD5 4476d35c666885ee1a9fb33bbbd6f38b
BLAKE2b-256 435fa6c840cef5aaafe484b794126475b61798c9689bb44c31625fd153e8ecb0

See more details on using hashes here.

Provenance

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

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 d86825efc9a2dc26a11bda64a248e9a436028900cb79e3cb83d6679ab7ac5e23
MD5 1c7cf489951ce11dd42f4d93e26f551e
BLAKE2b-256 8cf73dd2af5539985c72b63544a37b850f9fc18b9a1857188f205021530b3fbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl:

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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.3.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9cda4eee2e379b5e3d0873ef80583be9649631fec4db271ce06889175a4dd8f5
MD5 3261cf4f23e84d179e64c5bdd91ab311
BLAKE2b-256 086fd5a179c0b196367e87a852790d555b0da75dd49e4957a565bc3d8e6fa3c4

See more details on using hashes here.

Provenance

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

Publisher: release-rugo.yaml on mabel-dev/opteryx-core

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