Open-source Python library for evidence-based climbing training analysis
Project description
climbing-science ๐ง
Evidence-based climbing training analysis โ as a Python library and CLI.
Convert grades, predict strength-to-grade, compute Critical Force, plan periodisation, pick protocols โ all from peer-reviewed science, all in one pip install.
pip install climbing-science
Quick Start
Grade Conversion
from climbing_science import convert, parse
convert("7a", "French", "YDS") # โ '5.11d'
convert("7a", "French", "UIAA") # โ 'VIII'
convert("V5", "V-Scale", "Font") # โ '6C'
parse("5.12a").difficulty_index # โ 19 (IRCRA universal scale)
Finger Strength โ Grade
from climbing_science import mvc7_to_grade, grade_to_mvc7, power_to_weight
mvc7_to_grade(130.0) # โ '7a' (130% BW โ French grade)
grade_to_mvc7("7a") # โ 128.0 (%BW needed for 7a)
power_to_weight(90.0, 72.0) # โ (125.0, 'intermediate')
Critical Force & Endurance
from climbing_science import critical_force, interpret_cf_ratio, cf_mvc_ratio
cf, w_prime, r2 = critical_force(
intensities_percent_mvc=[80, 60, 45],
tlim_seconds=[77, 136, 323],
)
# cf=34.1% MVC, w_prime=3533.7, Rยฒ=1.0
interpret_cf_ratio(cf_mvc_ratio(cf, mvc7_percent_bw=130.0))
# โ {'category': 'endurance-limited', 'priority': 'Repeaters, ARC, SubHangs'}
Training Load & Injury Prevention
from climbing_science import rpe_to_mvc_pct, tut_per_session, overtraining_check
rpe_to_mvc_pct(8.0) # โ 85.0 (%MVC)
tut_per_session(10.0, 1, 5) # โ 50.0 seconds
overtraining_check([400, 450, 500, 600])
# โ {'acwr': 1.33, 'status': 'yellow', 'message': '...approaching high-risk zone...'}
Protocol Library (21 protocols)
from climbing_science import get_protocol, select_protocols, format_notation
from climbing_science.models import ClimberLevel
p = get_protocol("lopez-maxhang-maw")
format_notation(p, added_weight_kg=15.0)
# โ '4ร MaxHang @18mm HC W+15.0kg 10s(0):180s'
select_protocols("strength", ClimberLevel.INTERMEDIATE)
# โ [lopez-maxhang-maw, lopez-maxhang-haw, horst-7-53, bechtel-ladders, ...]
Diagnostics & Periodisation
from climbing_science import classify_level, identify_weakness, training_priority
from climbing_science import generate_macrocycle
classify_level("7a") # โ 'advanced'
weaknesses = identify_weakness(1.0, cf_mvc_ratio=0.30)
# โ ['finger-strength-moderate', 'endurance']
training_priority(weaknesses) # โ 'max-strength'
plan = generate_macrocycle(total_weeks=52) # Annual plan (Hรถrst model)
Command-Line Interface
# Grade conversion
climbing-science grade "7a+" --to all
# FRENCH: 7a+
# UIAA: VIII+
# YDS: 5.12a
# Strength analysis from Tindeq / force gauge
climbing-science analyze --mvc7 90 --bw 72
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ๐ง Climbing Strength Analysis
# Power-to-weight: 125.0% BW
# Predicted route: 6c+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Browse 21 hangboard protocols
climbing-science protocols --level intermediate
# Critical Force from 3-point test
climbing-science endurance --intensities 80 60 45 --durations 77 136 323
What's Inside
| Module | What it does | Key references |
|---|---|---|
| grades | Convert between 5 grading systems (UIAA, French, YDS, Font, V-Scale) | Draper et al. 2015 (IRCRA) |
| strength | MVC-7 โ grade prediction, power-to-weight, Rohmert curve | Giles 2006, Rohmert 1960 |
| endurance | Critical Force, W', time-to-failure, CF/MVC diagnostics | Jones 2010, Fryer 2018 |
| load | RPE โ %MVC, TUT, ACWR, overtraining detection | Lรณpez-Rivera 2014, Gabbett 2016 |
| protocols | 21 hangboard protocols with full parameters | Lรณpez, Hรถrst, Anderson, Lattice |
| periodization | Macro/meso/microcycle generation | Hรถrst 2016, Lรณpez-Rivera 2014 |
| diagnostics | Level classification, weakness ID, progress tracking | Draper 2015, Fryer 2018 |
| signal | Peak detection, RFD, impulse from force-gauge data | Levernier & Laffaye 2019 |
| edge_depth | Edge-depth correction factors | Amca et al. 2012 |
| io | Export assessments as JSON / Markdown | โ |
Every function cites its source paper. Full bibliography: docs/references.bib.
Why This Library
- Open source โ no paywalls, no black boxes. Every formula traces to a published reference.
- Deterministic โ pure functions, no side effects, tested against published benchmarks (521 tests).
- Zero heavy dependencies โ stdlib only at runtime. Optional
matplotlibfor plotting. - Dual interface โ Python API for integration, CLI for quick lookups.
Interactive Notebooks
Explore the science hands-on (click the Binder badge above, or run locally):
| Notebook | Topic |
|---|---|
| 01 โ My Climbing Assessment | Full strength + endurance assessment |
| 02 โ Rohmert Curve | Isometric fatigue model explained |
| 03 โ Critical Force | CF/W' from 3-point test |
| 04 โ Protocol Comparison | Compare 21 hangboard protocols |
| 05 โ Session Deep Dive | Analyse a single session |
| 06 โ Progress Tracker | Track gains over time |
| 07 โ Edge Depth Science | Edge-depth correction factors |
Installation
pip install climbing-science # from PyPI
With plotting support:
pip install "climbing-science[plot]" # adds matplotlib
For development:
git clone https://github.com/8cH9azbsFifZ/climbing-science.git
cd climbing-science
pip install -e ".[dev]"
make test # 521 tests, ~0.3s
Documentation
Full API reference (auto-generated from docstrings): User Manual
Contributing
make test # run tests
make lint # ruff check + format
make docs # build documentation locally
make bump-patch # release: 0.4.1 โ 0.4.2
License
GPL-3.0-or-later โ 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 climbing_science-0.4.2.tar.gz.
File metadata
- Download URL: climbing_science-0.4.2.tar.gz
- Upload date:
- Size: 118.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27748420a9d02e703621e61b3d1341bf3ffa0d5ba8a9d11fa1cc077897a4adda
|
|
| MD5 |
25217a2f2ebca0af87108d4da49569d8
|
|
| BLAKE2b-256 |
affa5767f99f390314b5a28058beb71b3cb6316d6870273b9737a60991a6dd75
|
Provenance
The following attestation bundles were made for climbing_science-0.4.2.tar.gz:
Publisher:
publish.yml on 8cH9azbsFifZ/climbing-science
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
climbing_science-0.4.2.tar.gz -
Subject digest:
27748420a9d02e703621e61b3d1341bf3ffa0d5ba8a9d11fa1cc077897a4adda - Sigstore transparency entry: 1288393668
- Sigstore integration time:
-
Permalink:
8cH9azbsFifZ/climbing-science@f8eda5c4d747d1f0d1faea6e8d17f733996d9b51 -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/8cH9azbsFifZ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f8eda5c4d747d1f0d1faea6e8d17f733996d9b51 -
Trigger Event:
push
-
Statement type:
File details
Details for the file climbing_science-0.4.2-py3-none-any.whl.
File metadata
- Download URL: climbing_science-0.4.2-py3-none-any.whl
- Upload date:
- Size: 70.6 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 |
21d368e7f2bba2cd3eb1f30d1293fc4338290341544ea119bacacebf458ade7c
|
|
| MD5 |
3e81567e4a136fe7f7d6df73a2931d00
|
|
| BLAKE2b-256 |
f810b3478a554f68981dadb3a3c7f3ee344d5135dd2be79d35401d7424c0109e
|
Provenance
The following attestation bundles were made for climbing_science-0.4.2-py3-none-any.whl:
Publisher:
publish.yml on 8cH9azbsFifZ/climbing-science
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
climbing_science-0.4.2-py3-none-any.whl -
Subject digest:
21d368e7f2bba2cd3eb1f30d1293fc4338290341544ea119bacacebf458ade7c - Sigstore transparency entry: 1288393799
- Sigstore integration time:
-
Permalink:
8cH9azbsFifZ/climbing-science@f8eda5c4d747d1f0d1faea6e8d17f733996d9b51 -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/8cH9azbsFifZ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f8eda5c4d747d1f0d1faea6e8d17f733996d9b51 -
Trigger Event:
push
-
Statement type: