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.2.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.2-py3-none-any.whl (70.6 kB view details)

Uploaded Python 3

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

Hashes for climbing_science-0.4.2.tar.gz
Algorithm Hash digest
SHA256 27748420a9d02e703621e61b3d1341bf3ffa0d5ba8a9d11fa1cc077897a4adda
MD5 25217a2f2ebca0af87108d4da49569d8
BLAKE2b-256 affa5767f99f390314b5a28058beb71b3cb6316d6870273b9737a60991a6dd75

See more details on using hashes here.

Provenance

The following attestation bundles were made for climbing_science-0.4.2.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.2-py3-none-any.whl.

File metadata

File hashes

Hashes for climbing_science-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 21d368e7f2bba2cd3eb1f30d1293fc4338290341544ea119bacacebf458ade7c
MD5 3e81567e4a136fe7f7d6df73a2931d00
BLAKE2b-256 f810b3478a554f68981dadb3a3c7f3ee344d5135dd2be79d35401d7424c0109e

See more details on using hashes here.

Provenance

The following attestation bundles were made for climbing_science-0.4.2-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