Cycling physics engine: power/speed solver, race-time prediction, and Garmin Power Guide FIT generation
Project description
bike-power-model
A cycling physics engine for power, speed, and race-time prediction, plus a generator for Garmin Power Guide FIT files (messages 352/353).
Pre-release. This alpha reserves the package name and wires up the build and publish pipeline. The physics solver, FIT tooling, and the full
bpmcommand set land in a later release. Install it now if you want to track progress; the API is not stable yet.
What it does
Give it a route (GPX or FIT), a rider (weight, FTP, CdA), and conditions (wind, temperature, surface), and it predicts the power you would hold and the speed and time that follow from it. The direction matters: it solves logic to power to physics to speed, never the other way around. It does not read a speed profile off a file and back out the power.
The same engine writes Garmin Power Guide FIT files, so the plan you compute can be sideloaded onto a head unit and followed on the road.
It is calibrated and checked against real race telemetry, per rider and per terrain type (climbs, flats, descents, cobbles, gravel), not against a single averaged error number that hides where the model is wrong.
Install
pip install --pre bike-power-model
The --pre flag is required while the package is in alpha.
bpm --version
bpm status
The planning, decoding, and FIT-generation commands arrive with the engine.
bpm status tells you what the current install can do.
Requirements
Python 3.11, 3.12, or 3.13. No system libraries for the core install.
Documentation
docs/DEVELOPMENT.md: local setup, tests, the offline gatedocs/RELEASING.md: how a (pre-)release is cut and publishedCONTRIBUTING.md: what is welcome and how to set upCHANGELOG.md: what changed, per version
Reference docs for the physics, the FIT format, and the validation method ship with the engine.
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bike_power_model-0.0.1a0.tar.gz.
File metadata
- Download URL: bike_power_model-0.0.1a0.tar.gz
- Upload date:
- Size: 31.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02e04a0bbea8634db86f80756bc188bf6b710354fd509bce32e998a1a3845bd9
|
|
| MD5 |
4aa7ca842a3b4204318a355e4fd96876
|
|
| BLAKE2b-256 |
5756dcdb822ca56bb646d665208d75c0e48548df39f19fb4b923b0eddd746748
|
Provenance
The following attestation bundles were made for bike_power_model-0.0.1a0.tar.gz:
Publisher:
release.yml on sam-dumont/bike-power-model-lib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bike_power_model-0.0.1a0.tar.gz -
Subject digest:
02e04a0bbea8634db86f80756bc188bf6b710354fd509bce32e998a1a3845bd9 - Sigstore transparency entry: 2084277646
- Sigstore integration time:
-
Permalink:
sam-dumont/bike-power-model-lib@9a51b67f71d638b1f425fcc367cbcc04c7f4c1ce -
Branch / Tag:
refs/tags/v0.0.1a0 - Owner: https://github.com/sam-dumont
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9a51b67f71d638b1f425fcc367cbcc04c7f4c1ce -
Trigger Event:
push
-
Statement type:
File details
Details for the file bike_power_model-0.0.1a0-py3-none-any.whl.
File metadata
- Download URL: bike_power_model-0.0.1a0-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01eb43892fb12e57e78bbdc22917039b20d26e0fd68a4ca806dc9f7cc9495ec7
|
|
| MD5 |
9cb48aa056d900f2ef915957c36ba3d8
|
|
| BLAKE2b-256 |
8c04a6971a032ab3503081c18366e8c20f14c80abe04ffc19c48f640aa80d165
|
Provenance
The following attestation bundles were made for bike_power_model-0.0.1a0-py3-none-any.whl:
Publisher:
release.yml on sam-dumont/bike-power-model-lib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bike_power_model-0.0.1a0-py3-none-any.whl -
Subject digest:
01eb43892fb12e57e78bbdc22917039b20d26e0fd68a4ca806dc9f7cc9495ec7 - Sigstore transparency entry: 2084277655
- Sigstore integration time:
-
Permalink:
sam-dumont/bike-power-model-lib@9a51b67f71d638b1f425fcc367cbcc04c7f4c1ce -
Branch / Tag:
refs/tags/v0.0.1a0 - Owner: https://github.com/sam-dumont
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9a51b67f71d638b1f425fcc367cbcc04c7f4c1ce -
Trigger Event:
push
-
Statement type: