A previous release had provenance metadata, but this release does not. View details.
balloon-ranking-glicko
A Glicko-2 based rating engine for competitive hot-air balloon pilots.
This is the public, open-source rating math behind the Global Balloon Pilot Ranking System. It is a pure-Python package with zero runtime dependencies. Given a chronological history of competition events, it produces a Glicko-2 rating, rating deviation (RD), and volatility for every pilot, plus derived values (Strength of Field, tier assignments).
Design
- Algorithm: Glicko-2, implemented directly from Mark Glickman's specification.
- Input signal: task finishing position, not raw points. Position is the cleaner signal of "did this pilot beat that pilot in this task".
- Rating period: one per event. All pairwise outcomes from all of an event's tasks are pooled into a single Glicko-2 update per pilot.
- No-result handling: no-result pilots are tied for last within the no-result group. This matches FAI scoring conventions.
- Pure functions, zero I/O: no database, no network, no file I/O. The caller supplies events and prior ratings; the engine returns new ratings.
The engine has no opinions about storage or identity. The caller supplies events plus the rating state entering each event; the engine returns the state coming out.
Install
pip install balloon-ranking-glicko
Quick start
from datetime import date
from balloon_ranking_glicko import Event, Task, TaskResult, RatingEngine
event = Event(
event_id="example-2026",
event_date=date(2026, 6, 1),
tasks=(
Task(
task_id="t1",
results=(
TaskResult(pilot_id="alice", position=1),
TaskResult(pilot_id="bob", position=2),
TaskResult(pilot_id="carol", position=3),
),
),
),
)
engine = RatingEngine()
ratings = engine.process_history([event])
for pid, r in sorted(ratings.items(), key=lambda kv: -kv[1].rating):
print(f"{pid}: {r.rating:.1f} (RD {r.rd:.1f})")
Public API
Event,Task,TaskResult,PilotRating— frozen dataclassesRatingEngine(tau, initial_rating, initial_rd, initial_volatility)process_event(event, prior_ratings) -> dict[str, PilotRating]process_history(events) -> dict[str, PilotRating]process_history_with_snapshots(events) -> Iterator[(Event, dict[str, PilotRating])]
compute_sof(event, ratings) -> floatassign_tiers(ratings, cutoffs=None) -> dict[str, str]
Development
pip install -e ".[dev]"
pytest
mypy
The Glicko-2 implementation is validated against the worked example from Glickman's paper (final rating 1464.06, RD 151.52, volatility 0.05999).
License
MIT
Metadata
Release files for balloon-ranking-glicko 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Loss of provenance
These files do not have provenance metadata, despite files in a prior release including this data.
We recommend further investigation before installing these files. View details.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| balloon_ranking_glicko-0.1.1.tar.gz | 14.2 kB | Without provenance | Details for balloon_ranking_glicko-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| balloon_ranking_glicko-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for balloon_ranking_glicko-0.1.1-py3-none-any.whl |
Total release size: 26.9 kB
Release files / balloon_ranking_glicko-0.1.1.tar.gz
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | balloon_ranking_glicko-0.1.1.tar.gz |
|---|---|
| Size | 14.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eed9052f93a9c43713754855009503bb80a3dfbecc14791711cf6cef423e9d39
|
|
BLAKE2b-256 checksum How to use checksums |
b3f00a9095e95c8bb42545906f3f59423e90f8785cf3ee9fabab2e7838fcb82a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Release files / balloon_ranking_glicko-0.1.1-py3-none-any.whl
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | balloon_ranking_glicko-0.1.1-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
67df33020d022e6da16543baaaf0fcb5e5d0cee98802200bd59aaaffecedde66
|
|
BLAKE2b-256 checksum How to use checksums |
142d3e144435c715e59424da4bca41d37bde48335956e01d5b231cd00af65971
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Security for balloon-ranking-glicko 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Loss of provenance
A previous release of these files had provenance metadata, but this release does not.
While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.
Release comparison
- Removed 0.1.0 2 files With provenance
- Added 0.1.1 2 files Without provenance
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.