Skip to main content

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.

CI Docs PyPI Python License: GPL-3.0-or-later Binder

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 matplotlib for 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

climbing_science-0.4.3.tar.gz (118.6 kB view details)

Uploaded Source

Built Distribution

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

climbing_science-0.4.3-py3-none-any.whl (70.6 kB view details)

Uploaded Python 3

File details

Details for the file climbing_science-0.4.3.tar.gz.

File metadata

  • Download URL: climbing_science-0.4.3.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

Hashes for climbing_science-0.4.3.tar.gz
Algorithm Hash digest
SHA256 da3b4eaf11f64243bfa5fc69ef3c4cb6f312e496df83286fae87e42e5aa3c2dc
MD5 736fbed237a786d04e7fa8cb061d4fa7
BLAKE2b-256 73e77d65ec0d401e18010ce46d949feefa7828ea8fae7bb25d8f657e3e65879f

See more details on using hashes here.

Provenance

The following attestation bundles were made for climbing_science-0.4.3.tar.gz:

Publisher: publish.yml on 8cH9azbsFifZ/climbing-science

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

File details

Details for the file climbing_science-0.4.3-py3-none-any.whl.

File metadata

File hashes

Hashes for climbing_science-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 433e2d81915b79d217c3cdece6ffe3a8df54c868a18cc3f6f39028135983d592
MD5 55961ac17b6798daaec56b455b25dc4e
BLAKE2b-256 90026cbd1aeb5f6336c5b2f7e77677a55e5478513c459ccfe36f56de44ba6ad2

See more details on using hashes here.

Provenance

The following attestation bundles were made for climbing_science-0.4.3-py3-none-any.whl:

Publisher: publish.yml on 8cH9azbsFifZ/climbing-science

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