Skip to main content

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

Project description

Rugo

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())

Installation

pip install rugo

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

Requirements

  • Python 3.13+
  • 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.2.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

rugo-0.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

rugo-0.2.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

rugo-0.2.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

rugo-0.2.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

rugo-0.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

rugo-0.2.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rugo-0.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

rugo-0.2.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (26.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rugo-0.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (25.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

rugo-0.2.2-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.2.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8d0309a43dfe4f6419bfa6b9209371679470988d1a2a5ca0b190c6ef800afc11
MD5 60fefdba060ebfdeb2900167c1a72249
BLAKE2b-256 2affd8e97b246d33d6957770ff77d926b5f4fc5b369732a777842a245c0cc44c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 cd86ff1e95728a0ffc315d225ad91cc6ba61d77836edeba5b4585d98e433a601
MD5 dc78115e291afb2b8020d264f86d7c33
BLAKE2b-256 c5faa1f1d534e82da6dafa48ff00d97a81107c4f6539c04d8a424b3e780b9813

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 45d9c61579afccd816e9342faed59e46ff6827c1b991d26c4ea82db818f2cf08
MD5 612cefa89db26e0287c91630c001dec6
BLAKE2b-256 82933340e7d5a62d033c52869f9ba3d0fb70041c3279c35150d44c5f4b68b062

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 2bbb777b33e9a84448ead7cb3b1bc23db8dde2ee10fc1c8f90b8c92edda70cd1
MD5 7add4a84ba80a952d2c4de8641159eb7
BLAKE2b-256 709d9417b3946e837b262a72c073dcc5e90eba1b605fe79c1d0c2e52e549f0b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 7d1a814eeda9ea0594a5c6e5a260deb17fc326ba6f9643ecb80a6077f3f23e32
MD5 4e4b21636eaecf1b1a452b34ad035778
BLAKE2b-256 8d07b92e7d0adc2592fae79f66e3be95ab11e0d1c1252e8a9b1be895827fe48e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c7df3273f35b60a02104c5a18d06917e437bce14b5971d546c16f8e1f0ea805
MD5 2ece46abbe8095ed95eb7db4d2eae272
BLAKE2b-256 a2c892a29d1e4f29c2e04b266393fb7b9a50c052265c6486a448aa68db162665

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 b89dc455fb1a6b88046f41efa50d9c48897306593f9d16214fb85a31e0f0214f
MD5 d75fda47399c8d1186e5a0b5244784b9
BLAKE2b-256 179c71d466a508cc47fe5f586ce6d9847f28a3c4cadce68f7ee20ea02e6406ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 72bae1111f16c9fbf938a73a2710db13386247e587f9fa7aa6c21a364165a2be
MD5 3c66c030ad1a3074ec0edefd07d0e1f8
BLAKE2b-256 8fbf07aabaa6c21d071ffa8a178f40a0f1caed2d4655fb1307cbdf11e5a8d4ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dad1401f050cee06fb15dfe4f76baf5137ebe39eb6a8d0d0e896d9866729cb96
MD5 c07c92e366d86a1a2279f3065f93db99
BLAKE2b-256 7cd9bb9253b3f20132d994a3b0fde262eb2821afe4e734353bdd0e94a6a1e378

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rugo-0.2.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 95e7e318e40b4e53613f67f5126f9f29450f2202460b94b9e76e09ab2400d8d7
MD5 e2cb8b2854be83062a89054efcf64bc6
BLAKE2b-256 471929eb00c6b10e708a74ade379db81fac617f0c88cf35fb6b1660dafd579ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 695609f85c712923d6d5bcd96d88eec43f9a6e4a426929bf4f5da54482575b37
MD5 f3fc95b2a9356b6ca41189a0ec3582d3
BLAKE2b-256 fbc2e6a65924b63659c4857108c5a92721edbd87e4008c326aaf5f9ca87c1e98

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rugo-0.2.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 04e2658af622dce2340ee0da3e5cfc5bac07d9a9da58680036b08b58337926cb
MD5 16c4d7741404d6b7cff87a11b2256a78
BLAKE2b-256 0db618f597b06ed807a98f949493d9d9cb34e63abd5545502527b11422e16421

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rugo-0.2.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 4392c718f18d5e2be6dac70cb5723737e6e8505e2e9677a8dc585bada07a96ab
MD5 f43e70508ccd59e5aaefa5e37cec705b
BLAKE2b-256 4ce9f2350a2c028750551e0c6a9f9b4f6d18bc6750ba99e2f81dde05a1b638db

See more details on using hashes here.

Provenance

The following attestation bundles were made for rugo-0.2.2-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.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for rugo-0.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 e5003592398f17634d9ac6063e03b99f71d6f4abfb188af61f304a4283eaf8bb
MD5 27684c3d0f666ed6d5586f50d3b464df
BLAKE2b-256 91702001b2a3f73d1f42f9e4dcb19080cb9c494e845d781bea9203230a232757

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rugo-0.2.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 755eb14de6a2c2012d07b8c41272e8a08c8776002396a0494cc41b76892bd55f
MD5 d1db4ff9feeae4c223a7ff1aea5d2c01
BLAKE2b-256 e16eac304382abb91e8d2ca37f02f735ebaa21e11f0b6f84c1defb439055486e

See more details on using hashes here.

Provenance

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