Skip to main content

Fast and opinionated activity data parsing. Forged in Rust. Fired up in Python.

Project description

Pyroparse

Fast and opinionated activity data parsing. Forged in Rust. Fired up in Python.

Pyroparse reads FIT files and gives you a typed PyArrow table with structured metadata. This Rust-backed parser loads a typical activity in 15 ms (see benchmark), which is roughly 20x faster than pure-Python FIT parsers. It standardizes the mess of manufacturer-specific field names into a clean, consistent schema. It round-trips to Parquet with metadata preserved. And it hands you Arrow memory that Polars, DuckDB, and pandas can consume with zero-copy.

Parse. Standardize. Serialize. Analyze. One library, no glue code.

[!WARNING] Pyroparse is experimental and not ready for production use. APIs may change without notice.


Quick start

import pyroparse as pp

# One line to a DataFrame
df = pp.read_fit("ride.fit").to_pandas()

# Or zero-copy into Polars
import polars as pl
df = pl.from_arrow(pp.read_fit("ride.fit"))

With metadata

import pyroparse as pp

activity = pp.Activity.load_fit("ride.fit")

activity.metadata.sport         # "cycling" (open-sport-taxonomy code)
activity.metadata.start_time    # datetime(2024, 3, 19, 5, 30, tzinfo=UTC)
activity.metadata.duration      # 3842.7 (seconds)
activity.metadata.distance      # 45230.5 (meters)
activity.metadata.metrics       # {"heart_rate", "power", "speed", "cadence", "gps"}
activity.metadata.devices       # [Device(garmin edge_540 (creator), columns=[heart_rate,power])]

activity.data                   # pyarrow.Table — 21,666 rows × 11 typed columns

Lazy loading

open_fit() and open_parquet() read metadata immediately but defer data loading until you access .data. Useful when you need to inspect metadata before deciding whether to load the full timeseries.

activity = pp.Activity.open_fit("ride.fit")
activity.metadata.sport     # "cycling" — available immediately
activity.metadata.duration  # 3842.7         — no data parsed yet

activity.data               # pyarrow.Table — parsed on first access

FIT to Parquet

activity = pp.Activity.load_fit("ride.fit")
activity.to_parquet("ride.parquet")  # ZSTD compressed, metadata preserved

Load it back with data and metadata intact:

loaded = pp.Activity.load_parquet("ride.parquet")
loaded.metadata.sport      # "cycling"
loaded.metadata.distance   # 45230.5
loaded.data.num_rows       # 21,666

Batch conversion

Convert an entire directory tree of FIT files to Parquet, preserving the folder structure:

import pyroparse as pp

# In-place — parquet files appear next to fit files
pp.convert_fit_tree("~/garmin/activities")

# Mirror to a separate directory
pp.convert_fit_tree("~/garmin/activities", "~/parquet/activities")

# Use all CPU cores
result = pp.convert_fit_tree("~/garmin", "~/parquet", workers=-1, progress=True)
result.converted  # [Path("~/parquet/2024/ride.parquet"), ...]
result.errors     # [(Path("~/garmin/corrupt.fit"), FitParseError(...))]

Re-runs are idempotent — only new files are converted. Pass overwrite=True to force re-conversion.

CLI

Install the CLI tool:

curl -LsSf uvx.sh/pyroparse/install.sh | sh
# Single file
pyroparse convert morning_ride.fit
pyroparse convert morning_ride.fit -o /tmp/ride.parquet

# Directory tree, all cores, with progress bar
pyroparse convert ~/garmin/activities/ -o ~/parquet/ -w -1

# Dump raw FIT messages as JSON
pyroparse dump ride.fit
pyroparse dump ride.fit --kind event,hr_zone
pyroparse dump ride.fit --exclude record -o debug.json

Run pyroparse convert --help or pyroparse dump --help for all options.


Standardized schema

FIT files are a mess. enhanced_speed vs speed, semicircle-encoded GPS, manufacturer-specific field names. Pyroparse normalizes all of it into a single, opinionated schema with purpose-chosen Arrow types:

Column Arrow Type Notes
timestamp Timestamp(us, UTC) Microsecond, timezone-aware, always present
heart_rate Int16 BPM
power Int16 Watts
cadence Int16 RPM (cycling) or SPM (running)
speed Float32 m/s, normalized from enhanced_speed variants
latitude Float64 Degrees, converted from semicircles
longitude Float64 Degrees, converted from semicircles
altitude Float32 Meters, normalized from enhanced_altitude
temperature Int8 Celsius
distance Float64 Cumulative meters
lap Int16 0-based lap index, from FIT Lap messages

These 11 columns are the default output. Use columns="all" to get additional columns like core_temperature, smo2, form_power, and stance_time from CIQ apps and running dynamics.

These types are native across the ecosystem, no casting, no surprises:

# DuckDB: direct Arrow scan
import duckdb
duckdb.from_arrow(activity.data).filter("power > 300").fetchdf()

Laps

Pyroparse parses FIT Lap messages and assigns a lap index to every record row. The lap column is included by default — use it for per-lap analysis with any tool:

import polars as pl
import pyroparse as pp

activity = pp.Activity.load_fit("intervals.fit")
df = pl.from_arrow(activity.data)
df.group_by("lap").agg(pl.col("power").mean(), pl.col("heart_rate").mean())

The lap_trigger column tells you what ended each lap — useful for distinguishing manual presses from auto-laps:

activity = pp.Activity.load_fit("ride.fit", extra_columns=["lap_trigger"])
df = pl.from_arrow(activity.data)

# Find laps the user deliberately marked (ignoring auto-lap noise)
manual_laps = df.filter(pl.col("lap_trigger") == "manual")["lap"].unique()

Trigger values come directly from the FIT SDK: "manual", "distance", "time", "session_end", "fitness_equipment", "position_start", "position_lap", "position_waypoint", "position_marked". The trigger describes what ended the lap — so a lap closed by pressing the lap button has lap_trigger="manual".

Files without Lap messages get lap=0 for all rows. lap_trigger is omitted entirely when no laps are present.


Structured metadata

Metadata is extracted from FIT Session and DeviceInfo messages, the same source Garmin Connect and Strava use. Sport, timestamps, duration, distance, device info, available metrics: all parsed into a typed dataclass, not left as raw dicts for you to dig through.

@dataclass
class ActivityMetadata:
    sport: str | None               # open-sport-taxonomy code, e.g. "cycling", "running.trail"
    name: str | None                # user-given activity name
    start_time: datetime | None     # UTC
    start_time_local: datetime | None  # naive, local wall-clock time
    duration: float | None          # seconds
    distance: float | None          # meters
    metrics: set[str]               # {"heart_rate", "power", "speed", "cadence", "gps"}
    devices: list[Device]           # head unit + connected sensors
    extra: dict                     # sub_sport, anything format-specific

Manual overrides merge on top of file-native values. A sport override is validated against the taxonomy, so a typo fails loudly instead of silently entering your data:

activity = pp.Activity.load_fit("ride.fit", metadata={"sport": "cycling.gravel"})
activity.metadata.sport       # "cycling.gravel" (overridden)
activity.metadata.duration    # 3842.7           (preserved from FIT)

pp.Activity.load_fit("ride.fit", metadata={"sport": "gravel"})  # ValueError: invalid sport

Sport values

The sport field is an open-sport-taxonomy code, not a free-form string. The same vocabulary is used by pp.Sport (the taxonomy's Sport class, re-exported for convenience). Codes use a dotted hierarchy for disciplines and + for modifiers:

Example code Meaning
cycling cycling, discipline unspecified
cycling.road road cycling
cycling.gravel gravel cycling
cycling+stationary indoor / trainer cycling
running.trail trail running
running+stationary treadmill running
generic sport recorded but unrecognized

Specificity comes only from the FIT sport/sub_sport fields — pyroparse never guesses a discipline. A road ride saved without a sub_sport decodes to the bare cycling, and metadata.extra["sub_sport"] preserves the raw FIT sub-sport name when present.


Parquet with metadata

to_parquet() writes ZSTD-compressed Parquet with metadata embedded in the Arrow schema under the b"pyroparse" key. This means you can scan metadata across thousands of files without reading row data:

-- DuckDB: find all cycling activities
SELECT filename, json_extract_string(value, '$.sport') AS sport
FROM parquet_kv_metadata('activities/*.parquet')
WHERE key = 'pyroparse'
  AND json_extract_string(value, '$.sport') = 'cycling';

Batch operations

Scan a directory of .fit or .parquet files, filter by metadata, load only what you need:

import pyroparse as pp

# Scan: metadata only, no timeseries parsing (fast)
catalog = pp.scan_fit("~/data/activities/")
# file_path | sport | start_time | duration | distance | metrics | ...

# Same API for Parquet (reads schema footers only)
catalog = pp.scan_parquet("~/data/parquet/")

# Filter with PyArrow compute
import pyarrow.compute as pc
cycling = catalog.filter(pc.field("sport") == "cycling")

# Load only the files and columns you need
paths = cycling.column("file_path").to_pylist()
data = pp.load_fit_batch(paths, columns=["timestamp", "power", "heart_rate"])
# file_path | timestamp | power | heart_rate

Column selection

All loaders accept a columns parameter to keep only the data you need. For Parquet files, this pushes down to the reader and skips column chunks entirely. For FIT and CSV, it drops unwanted columns after parse.

# Single file: only timestamp and power
table = pp.read_fit("ride.fit", columns=["timestamp", "power"])

# Parquet: true column pushdown, skips unused data on disk
activity = pp.Activity.load_parquet("ride.parquet", columns=["timestamp", "speed"])

Polars

import polars as pl
import pyroparse.polars as ppl

ppl.scan_fit("~/data/")
  .filter(pl.col("sport") == "cycling")
  .fit.load_data(columns=["timestamp", "power"])
  .select("file_path", "timestamp", "power")

DuckDB

import pyroparse.duckdb as ppdb

catalog = ppdb.scan_fit("~/data/")
catalog.filter("sport = 'cycling'").fetchdf()

paths = catalog.filter("sport = 'cycling'").fetchnumpy()["file_path"].tolist()
data = ppdb.load_fit(paths, columns=["timestamp", "power"])
data.filter("power > 300").fetchdf()

Note: polars and duckdb are optional dependencies, install them separately.


Multi-activity FIT files

Triathlon and multisport files split cleanly by session:

session = pp.Session.load_fit("triathlon.fit")
session.activities[0].metadata.sport  # "swimming"
session.activities[1].metadata.sport  # "cycling"
session.activities[2].metadata.sport  # "running"

Activity.load_fit() raises MultipleActivitiesError for multi-activity files, no silent data loss.


Course files

Course FIT files (planned routes from Garmin Connect, Strava, race organizers) are a different file type from activities. Parse them with Course:

course = pp.Course.load_fit("stage3.fit")

course.track                          # PyArrow Table: latitude, longitude, altitude, distance
course.metadata.name                  # "Volta Ciclista a Catalunya 2026 - Stage 3"
course.metadata.distance              # 162110.4 (meters)
course.metadata.ascent                # 2358.0 (meters)
course.metadata.waypoints             # list[Waypoint] — turns, climbs, sprints, etc.
course.metadata.waypoints[0].name     # "km 0"
course.metadata.waypoints[0].type     # "generic"

course.to_parquet("stage3.parquet")   # single file, waypoints in schema metadata

Passing a course file to Activity.load_fit() raises FileTypeMismatchError with guidance to use Course instead.


Raw FIT messages

all_messages() is the escape hatch — every message in the FIT file, no pyroparse opinions applied. Field names, values, and units come straight from the FIT profile as decoded by fitparser. Use it for HR zones, workout steps, events, or anything the opinionated interface doesn't cover.

import pyroparse as pp

msgs = pp.all_messages("ride.fit")

# Each message has a kind and a list of fields
msgs[0]
# {"kind": "file_id", "fields": [{"name": "type", "number": 0, ...}, ...]}

# Get HR zones
zones = [m["fields"] for m in msgs if m["kind"] == "hr_zone"]

# Get all events in order
events = [m["fields"] for m in msgs if m["kind"] == "event"]

# Get workout interval definitions
steps = [m["fields"] for m in msgs if m["kind"] == "workout_step"]

# Access session fields that pyroparse doesn't model
sessions = [m for m in msgs if m["kind"] == "session"]
fields = {f["name"]: f["value"] for f in sessions[0]["fields"]}
fields["avg_stance_time"]  # not in ActivityMetadata, but here

Or from the command line:

pyroparse dump ride.fit --kind event,session --compact | jq '.'

CSV

activity = pp.Activity.load_csv("export.csv", metadata={"sport": "cycling"})
activity.to_parquet("ride.parquet")  # inferred + manual metadata preserved

Timestamps, duration, and available metrics are inferred automatically. Constant-value string columns (like sport=cycling in every row) are promoted to metadata.


Installation

uv add pyroparse

Or with pip:

pip install pyroparse

From source

Requires a Rust toolchain and maturin:

git clone <repo>
cd pyroparse
maturin develop --release

Releasing

Releases are automated via GitHub Actions. On tag push:

  1. CI runs the full test suite
  2. Wheels are built for Linux (x86_64, aarch64), macOS (x86_64, arm64), and Windows (x86_64)
  3. All artifacts are published to PyPI via trusted publisher (OIDC)
# 1. Bump version in pyproject.toml and Cargo.toml
# 2. Commit and tag
git commit -am "Release v0.4.0"
git tag v0.4.0
git push && git push --tags

To build wheels locally for testing (requires Docker for Linux targets):

make wheels          # all targets
./build.sh macos     # macOS only
./build.sh linux     # Linux only (Docker)

Docker

A minimal HTTP server for FIT to Parquet/CSV conversion:

docker build -t pyroparse .
docker run -p 8000:8000 pyroparse
# Upload at http://localhost:8000

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

pyroparse-0.5.0.tar.gz (1.7 MB view details)

Uploaded Source

Built Distributions

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

pyroparse-0.5.0-cp313-cp313-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.13Windows x86-64

pyroparse-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyroparse-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pyroparse-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

pyroparse-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

pyroparse-0.5.0-cp313-cp313-macosx_11_0_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

pyroparse-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyroparse-0.5.0-cp312-cp312-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.12Windows x86-64

pyroparse-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyroparse-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pyroparse-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

pyroparse-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

pyroparse-0.5.0-cp312-cp312-macosx_11_0_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

pyroparse-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyroparse-0.5.0-cp311-cp311-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.11Windows x86-64

pyroparse-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyroparse-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pyroparse-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

pyroparse-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

pyroparse-0.5.0-cp311-cp311-macosx_11_0_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

pyroparse-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pyroparse-0.5.0-cp310-cp310-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.10Windows x86-64

pyroparse-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pyroparse-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pyroparse-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

pyroparse-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

pyroparse-0.5.0-cp310-cp310-macosx_11_0_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

pyroparse-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file pyroparse-0.5.0.tar.gz.

File metadata

  • Download URL: pyroparse-0.5.0.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyroparse-0.5.0.tar.gz
Algorithm Hash digest
SHA256 014a507779ec184be559f807cf30e4def4dc48d53da291acc7d0d85a57b7dff6
MD5 b96206f8e976bf25d357843d4f0cc88e
BLAKE2b-256 ea9224a6c9a25fd60f4b37158eac779413446298857c7575768096dfe157d740

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0.tar.gz:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyroparse-0.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyroparse-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 15bee239c06aca25ea0355cb29b50cac0594492c88c4246aace1dccb26cc48a3
MD5 2f6d65609205b7c0662f7416125e52e4
BLAKE2b-256 708374f9c6618927caf7b6291781a4cfae2f6344a27b72fab4c8ceb269a95002

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp313-cp313-win_amd64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f9d1e27b2c6621b2fd189c3c1788c55ac94e86963b3f4f30420d51cab9b7e481
MD5 ff8389fac492a560b9c7949fbfa77c7a
BLAKE2b-256 4c430341f48f2e4ab434a6930a01915a2d9d81703f884bced965a9931a804d81

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3ebe8dd1fe95d427ff018c16eb140b890a09a24254b772eac3d8acd7d7f522f3
MD5 2ac826213553c312512e0c55ae3ab073
BLAKE2b-256 ae1d98bf55bfc64361fa5f8601dc264afe9cb10e3356f98de7b9334c60e9404b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 679737a7a6235e771fe4559b3092dfb333634a33a4891f57bbadb4b3e506b6d7
MD5 97270f97c6af360d9cd67f4489dd0c9c
BLAKE2b-256 1b751d710510a92ad5d1947465ede5bf532527d84cc9aca1b8d5338f1332f0bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 db51fb25238387bfe10812ebef8dcb6c5f089e1b5a91c19e9ab66513fb5402dc
MD5 4858fdf3bd0eec7270b763d674a3ed5c
BLAKE2b-256 155e036cd0c72ce24b96bd53091dd11669e9a0f12883d7f59507aaba530e492e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 7f5e841dcf24969417bc147fd51c13fa78ad5da805c6de1758e2a48581717161
MD5 fe846d44fcbf6a8f27e7b8190ddb3f55
BLAKE2b-256 654b8e74aaf24eefc82b3e599bdee820471cca6b342c4d70b31cdbc727484cdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp313-cp313-macosx_11_0_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1d7ed3d9d066e53d82a0657c7563cf4ab145f1be0ef6fd768ff6b1fdf2108b2f
MD5 524c4bb1e1385e949cf493cb03cc3d41
BLAKE2b-256 5f46105de9c482f5e0f18e60e17b74bcb8494142ee9566d08c84431214a112a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyroparse-0.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyroparse-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 25124fc0f32052faf4b471a2686b9dca84c38f9e69fe379ae84b87a286ba3807
MD5 9fd157a7ed931b866e58577e1555cf42
BLAKE2b-256 003956904c6779822fd452811e6b923ed1b678507d68580858f3e196c874c950

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp312-cp312-win_amd64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 26ec76ea1959238ff32873ef30f060b3335d22bc3ceebeb3dcc32b60d74e3540
MD5 607eebb865c90cf41be4f13c4cc8d684
BLAKE2b-256 cd81c8c99584317bef36ffee80fabdf524b0a7250fa36f9bb00c6980a01bb04a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ac48e4e1b7ce60cb7b4e63a11061d77b28a5d84caf5eda3f1d7fe391a1438d74
MD5 bf881a5d586726a2583e12fdb9b77e57
BLAKE2b-256 b30287a0c3c0375280d4f13faff0b4efa137c23bb052e5b7a922589d214a99bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 939cbf0d1332d1fba1dd9e081479b5557f60794ac75bcb86b061182af08d7b59
MD5 26e070a4fdb81670de0d645907e90322
BLAKE2b-256 191c4491805626c45642fd7b61ed385b939fd78e8681705276b4a844ad476fb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bdcf5fcb4f90b37a9f364883c304576c5dfef3f06c4618d9c73cb323a7e7f559
MD5 903146b76f3e5f73a85ef95f4061a3a1
BLAKE2b-256 d2c3cc7c4cd9bcd4c98a39e4060a8d6ed92b604fa650af8a72fb75ca11ae117e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b0070ce20256cfca77bab2332e7858a32b0ff4832e77ce0a8f4e3158f6bd9f0a
MD5 5cb2ddba021f61148d64f0a49ce33838
BLAKE2b-256 01cd9fa0a83ad4559a987cf6e8fdd34caf6b47484a3e8bab5af5ca68546ad1b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp312-cp312-macosx_11_0_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88e5a8e998d6ed3ecbb9f56f1b51c926c4f3c456d5b89234415aebbe748a9390
MD5 22428100fb827f49b508bedc615601da
BLAKE2b-256 efc25a8b08fdd605c818395256e4ee6e678b64b8c46a7967d333af06724c8c3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyroparse-0.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyroparse-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2ebb2b70699f57e2764f359d52b9633bdc15c39f51ce333199b06f953ed12bad
MD5 315ad282e197f2b97d0c029cc544785b
BLAKE2b-256 adb40d9b663a6a702100200793f4a48cfc32d745054ac57fea6a0cd1a7cf5f05

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp311-cp311-win_amd64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b5f97bfa1a820733f46494d172ac70fc7b898e3a928af1aeb9ee108d2fe10b15
MD5 a26ea8c57bf0e7caa17869d20d57c1b5
BLAKE2b-256 4f7db6a02b78b94fc52f1bfa11b5d583636fc7413eace5041ff36e2ec4435e79

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2538fa0feaab5cae054e5dca5be5320db32853fda1b1cd763fc9e8a546c7f568
MD5 60463ebe0105abfbd0140539e78b43ae
BLAKE2b-256 9e71b7cc1ef79072c99eb78d7561da54b922ca2963d5c12fa75b60950fdc8c2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e967650b2edcfa3d855a62662348a5a6f154a46376a7c29431354fba59a4c3b
MD5 c9f8aa4631d3470638d962593950f30c
BLAKE2b-256 ac471ca23224d7a178d8739f8f734737fbd6a79162af81bd9726dc7661d56939

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 28ccd67b769e0f81893b67373ff42159a6490b7655547470b3f8541373d03167
MD5 5bda09c4e9115675956f6d789ba45661
BLAKE2b-256 652c195a29d064c30df49b53b8decc6f59a2a96cdae0c3dcf26e546921176594

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 c3c5bd720c1f8c463f5c1f581783ddc002fefd42d551561d4d2f445256eb0345
MD5 91b7aa7626e7423c494733bf11a53eea
BLAKE2b-256 0c0075f88dfc0e0cb57b364e3feff9a99f2a85ebf76c0251d048943d1aa9a00c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp311-cp311-macosx_11_0_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d277de8b5808455eb0d32a1b63b2d18ceadc80a690c6ace9cdd89b0547b1b6a5
MD5 e7046ab5d1353ed695bf09ca45b35e3b
BLAKE2b-256 37ee7b044d021d7cf65860a9e28102f83f6943785b4802f60381b448c6e58610

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pyroparse-0.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyroparse-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 136a5329bd8efb36d7ad5019ed1e00babf2af0556fe20a156d6ad5f1810e011d
MD5 7350b81ed5fcce83b78fde9ac668abea
BLAKE2b-256 15a8eb3c3987d4e2ed20287c6ed8017967e5dab5412fcba5473b45ea40f680d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp310-cp310-win_amd64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 40ba3229efcb82aefa102da62d8900482eb4d5c64c8c762984d662ebb10b9147
MD5 e209a042f41b9b729de1e4c40c72eced
BLAKE2b-256 dfc1e71a807ab47bf71a10ab4ac11e82bc16d07351e0892fbae7f13b842a5382

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c0d0b61e017954b12e33980855dc27a40ec0b65901f64e65f635b960529fc909
MD5 9e38ed466d26dafdfa3e7382befe0553
BLAKE2b-256 cafa6a0d5f3a7c058e74647d543dc7d7e19188dad8fd515a5f6bba397b2c3cb1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e29fc60372be468618a4d2d170013fd85cf46c6271139587686184067ce303be
MD5 014a423a180956789cd128ee1272c768
BLAKE2b-256 84857d91fd2f60c7097cb10b64635ffee02f8f412523084c2ce82a764d77dd10

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 57e1a6f547282c2f8839966959fea889c054b33f22f520c4a1139475f40f3568
MD5 a1373628c3d6f6c02c6169e118dadfd5
BLAKE2b-256 4c96e855fe2147ecfdab5d911d9326c6541a7ffa06c9ed3f7a571e6f28cdc018

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 6493b3236dda862c50c8af4fbb7fb20376ca4fe3d42729e1196063c099aadac4
MD5 60eae7087b61e26a8a51b6ab7974ff40
BLAKE2b-256 da51f03714162a7608de6333854cf04a3ae40fd9bd5e0810295fa7c47e918a05

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp310-cp310-macosx_11_0_x86_64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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

File details

Details for the file pyroparse-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyroparse-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2734f674a10bfe36b8300e50ecaab2455e9f44facfd8dcdf0945db976ca135bf
MD5 93eb208e6796705151a0b9e8aed24874
BLAKE2b-256 1782a9d928793ef5afb71026c8c29c7344649839e982d98a79591be5297e4688

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.5.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: ci.yml on SweatStack/pyroparse

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