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.4.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.4.0-cp313-cp313-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.13Windows x86-64

pyroparse-0.4.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.4.0-cp313-cp313-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pyroparse-0.4.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.4.0-cp313-cp313-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

pyroparse-0.4.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.4.0-cp312-cp312-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pyroparse-0.4.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.4.0-cp312-cp312-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 11.0+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

pyroparse-0.4.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.4.0-cp311-cp311-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pyroparse-0.4.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.4.0-cp311-cp311-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 11.0+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

pyroparse-0.4.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.4.0-cp310-cp310-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pyroparse-0.4.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.4.0-cp310-cp310-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 11.0+ x86-64

pyroparse-0.4.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.4.0.tar.gz.

File metadata

  • Download URL: pyroparse-0.4.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.4.0.tar.gz
Algorithm Hash digest
SHA256 31ebefc21edb0273478f6e6040831d3fef74e01bf9e2c51238cd8e64decc1e02
MD5 3dfa5575a03114c1a26eae9d613aaea2
BLAKE2b-256 12d983606099aff4910d18e2dba15af0850baab6e74fc4cbf658400cd9e7e447

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyroparse-0.4.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.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 736816c3a67b0cd972ce3bd0ead54bcbb83193a2fb9693af7b4b99c739a3ed69
MD5 12be40af03d5865db9dd6f3448819d0d
BLAKE2b-256 aa7015d3f14068b5c587c286394f53aae228dd609d8a60bfcd917210d04b9338

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a2070d801f8087c03895ad6ab04acf0bdb099b02781511753369b606b3468d76
MD5 c0f44e9b3f231a59f72cac8280d3dca8
BLAKE2b-256 db54835ee44514b0ef3f47cb3471c6a84482ee682f443fd501da87710f1d6d62

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a53f41265bb8654fae00ee0f5dadc948238e94a533000db02762783d95dc9228
MD5 a04d528954214ce01a9d37073d130ede
BLAKE2b-256 61f4f3e7d1f194020bb22b899f17c640decb97aa26f1e2a8ffbe4ca939b2cc81

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d3100169819ac1fbdf52ef7d208cd871352eac0c9d290f82e09fb778026f0ecf
MD5 a37c0f88ddf3f04559d714919a269659
BLAKE2b-256 571a55456d18342706e640b68604277fb0d28721b93028dd5f96b6c1a14aeae4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ec393f3e7008aa8c5e5c8b7032a535356c9e7d1c9ced1639927a3fc50e4439fb
MD5 6c0095b6b44b28c8bfe097f356c2b290
BLAKE2b-256 75f55b7f93dd229f4578a3f65f5871ee4a4fb6e16b7a35493c610cc0816e490c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0b07bc6df617a4b8dc233a7d7c6f6b105a3d86457b31d88aa68fb38be0dc87d5
MD5 7967a4e6239ae39a9f07a2405cedc0f4
BLAKE2b-256 b42c4c7411118c6dfc59419c27d238eb854d04720837dc107ff9ca8610ce4d31

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b005bf06e5b4349592aafcb66f9ea3a87315032222533cc74ad94c01debc44b9
MD5 63df216b6434b56d82b82e9c4acfd576
BLAKE2b-256 21351c9c688e0737f64b3d8aaae7db7ccd5629e627bc66e5ae3b3a136f7b524b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyroparse-0.4.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.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 50125df5166d53eb59fd981c92d71ac791467945e31f7f30317cf17a055e9017
MD5 4efbbc6153b88438d052ac68579facd0
BLAKE2b-256 f334d16684c267934adaff6ceb7ac2868f5114a16a779c62ba26a3cf734bd142

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eb0b8421985c6a87635233320a051c643a8cc60745f3803274b7b453f11d3e7f
MD5 6ee56c1b6002911665f5e28878188f66
BLAKE2b-256 0d0e2a286a260088acd53e86630051f9a2c1aedf99d59371ccdf5c363c6d655e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1ecc9dc5a8739d9a35f9751009d401950bb0f29ea8170e825ef44cd434a3134e
MD5 77bb528fa823bd27ebb073a8d0582b86
BLAKE2b-256 98ad30a16c07979dd271d3cb454d11ba7ebcc2b29ed879ba60360078b4c0ec76

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 db3dc92adf385ecb02a1941222723085cfc6dca274232805897bc972ad291b5e
MD5 b74b9e9e0db13d0d3a8ad9497dca373f
BLAKE2b-256 840b2a862e4a87f5bdd7f8199404ce152602bc7daae9d6091a070032aaeed9a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cee72dc67fb918d406417a63e8d0d3d68ce32080fc853a4ebda3b72d9adbdda4
MD5 66e60101ae218e9b24af50e423188386
BLAKE2b-256 4234be2405818ef773927cff3f6c2f812efdbe711fe1d3a0d7cb8f118f06f2eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 77f12e6416219f102de898f167842e88f754237df778caa8b0d44f5858f587c1
MD5 ce91fbd631da6d47eb84f82ba51e9c8b
BLAKE2b-256 0a2e6d4db655fa65e7fe013077e89a37d9a5534b60d2a6890e4dde25aca728e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3078f32b1e614afd42fdf99ee96245ef2573517ec892c0aedf55a2f3f18bc79a
MD5 bd7a5bac95b7484194d7931c3d7451c7
BLAKE2b-256 ae5a2c60e529029cdc86c5593abb9cc15e771f7a79d71efeaa6df3841e9bed03

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyroparse-0.4.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.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ed73c295ec295f799bfb789452554f3ea1ee24011f5c1756034632611a14df6c
MD5 d853c2dcfda403436ed5e5b43a821299
BLAKE2b-256 35e040dda81bc0d5a19c686ca69d5c3ef3493d99837ea8f9adf21056824ca4c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f054e3372d716bc7b79f4e1895f28fd33f494dce52c76ea8f979dbd2e81c13e2
MD5 c922c77ff1d5cb0a8c5eb6c710ba0591
BLAKE2b-256 1dbd66766eb1f1148195f39b8f2ba3bb513116df89f0f8bb441ac2456aea983d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1ea3aba5ae731a17d13a23a93a619435f50abf010f6fbb79826cd8491e1e5a78
MD5 97936d93d26a4b71eb3d06dcccf364a7
BLAKE2b-256 a4dc3d2162e5505fec338885fdc36d16da40de76a22caa6e8fed7e858d911b10

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cec6b28e80a7cd310f7326b3e350c3769243194f4b5e838c9db84e5549f97ae7
MD5 7feaa5de86c0a0237d792588ded73875
BLAKE2b-256 383850b01dedbe5b01a8eb0512c9d3d553bb9855e071c01a6245e9eedbf3d35f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 de935e7bc7eeeccd5cd3f1309b881abd64b3702176a7f53a22399f0a15d4e1c0
MD5 a20d9b70b82dbafe714aa50c31b390ec
BLAKE2b-256 a0837488c891a47e439b915ac83d89be96cac5927c0b47244a795d48c6104c7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 5f437bee7695194d180af9835b068fd452a220585df42653c958b3a5e67ce280
MD5 cc05a2a17bd3df92263f4dcafd0d6608
BLAKE2b-256 757bd2320ffa4e9517fe6ede58cfb9d43c0842048ba70be766c5fa594c8ad036

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6192c76c6e6ffdf1ca539e52f8b4046700670c4d55d95bd062fe288aa8800232
MD5 769ceb4b7c2a778b2d4b7bb6fb577b99
BLAKE2b-256 daafc3e92980231d68eeded5de552da78d4684ea0224d7924974841ce554a87b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pyroparse-0.4.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.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c316cf7ada628c38dfaba77d4a53d85f347245144011bebb68bbec0963297eac
MD5 3e5e66133088e98a2142b780b78dc95d
BLAKE2b-256 3b9d8464a44e5b5f9c52a7b1d1a54cb724c85e4da20a4aba26860a6464ad9074

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8f2ba5c8fd2bf2e5fb46015cac2dbc76c7adcdede1be763c782be7a8455215d5
MD5 b994acdc4a00e2b985bc641dad1e0c63
BLAKE2b-256 7e2bce411ae2286d437a9708c18517cba9225c2bb696950eaa8002035417ba47

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 365030be0d008fd2f7d6322cea9f6127a46e9f3f43bc2caad97b22dd038b7c8b
MD5 abfa896b813e5f0ee47a70a43b56e96f
BLAKE2b-256 eeafce70cafa1e45772cc73c9dd42784eec05b959e10aac90e8e28d4769450ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 64294659286a6c4ad77f3ad77269130f09600acc28d383da41d9628a4cf73b73
MD5 67a0c553d62a9b26928bef798c838ee8
BLAKE2b-256 96b4b7bd9dce641e12c125708b3d19bde2c76265e15456f157093ffa7c1e83d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5e76671042df39670cff14f84d260ab1e30dd0874fd7cfed506dd32f3d488dad
MD5 143d519601c5880c3af93cf87c47cb15
BLAKE2b-256 23fb69445d8a88ca09430d3b68c63a275f528a3b8c54033887acd83b882f4aba

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 9a87523c4da78b314171da0327f09cc1aaaebc96c377609367139328075628cb
MD5 a5f2d260a23509c16fa2da376f82b25d
BLAKE2b-256 593518033e98d6507cf3c5d291776576886e2702360d2cec5816143290a26d78

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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.4.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyroparse-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5480f088f7e1ec375eed997fb5ba591d557941afb766fda3a1f596d5484b17fc
MD5 d586c99a5b7443ca01180edef948ed9f
BLAKE2b-256 5d50a031cb5f89808371849b642a6364fff373db009d894c490e22ed4c8639c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyroparse-0.4.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