Whole History Rating (WHR)
A Python interface incorporating a highly optimized C++ implementation of the Whole History Rating (WHR) algorithm proposed by Rémi Coulom. WHR computes time-varying Elo ratings for players of games (e.g., Chess, Go) by optimizing the log-likelihood of all game results across history simultaneously.
This C++ implementation is based on the Ruby implementation by GoShrine.
Features
- Blazing Fast: The core algorithm is implemented in C++ (via
pybind11), allowing it to scale to tens of thousands of games. - Tolerant CSV Loading: Built-in support to ingest games from CSV files with smart header alias matching, winner normalization, and graceful handling of missing or malformed fields.
- Robust Evaluation: Standardized validation metrics including average log-likelihood computation.
- Highly Configurable: Custom rating volatility parameter ($w^2$) and virtual game regularization.
Installation
From PyPI
pip install whr
From Source
git clone https://github.com/wind23/whole_history_rating.git
cd whole_history_rating
pip install .
Note: Building from source requires a C++ compiler supporting C++11 (GCC, Clang, MSVC) and the
pybind11package.
Usage
1. Basic API Usage
import whr
import math
# Initialize the rating database with volatility parameter w^2 = 30
base = whr.Base(config={"w2": 30})
# Create game records manually:
# create_game(black_player, white_player, winner, time_step, handicap=0.0)
# Winner options: "B" (black wins), "W" (white wins), "D" (draw)
base.create_game("Alice", "Carol", "D", 0) # Day 0: Draw
base.create_game("Bob", "Dave", "B", 10) # Day 10: Bob won
base.create_game("Dave", "Alice", "W", 30) # Day 30: Alice won (Dave lost)
base.create_game("Bob", "Carol", "W", 60) # Day 60: Carol won (Bob lost)
# Run 50 Newton-Raphson iterations to solve for player ratings
base.iterate(50)
# Retrieve rating history for individual players: returns list of [day, elo, uncertainty]
print("Alice ratings:", base.ratings_for_player("Alice"))
# Output: [[0, 78.51, 185.55], [30, 79.47, 187.12]]
# Get all player ratings sorted by final strength
print("Ordered ratings:", base.get_ordered_ratings())
2. Loading Games from CSV
The load_csv() method enables importing games from a CSV file or file-like buffer. It is designed to be highly tolerant of formatting errors:
import whr
import io
base = whr.Base()
csv_content = """
black_player, white_player, winner, time_step, handicap
Alice, Bob, B, 1, 0.0
Bob, Carol, W, 2, 0.0
Carol, Alice, D, 3, 5.0
"""
# Load from a file path or a StringIO buffer
base.load_csv(io.StringIO(csv_content))
base.iterate(50)
CSV Format & Column Aliases
WHR searches the header row case-insensitively for matches using the following aliases:
| Logical Column | Accepted Header Aliases | Default Fallback / Behavior |
|---|---|---|
| Black Player | black, black_player, player_black, p1, player1, black player |
Row is skipped if missing/empty. |
| White Player | white, white_player, player_white, p2, player2, white player |
Row is skipped if missing/empty. |
| Winner | winner, result, outcome, win, winner_player, victor |
Defaults to a Draw (D) with a warning. |
| Time Step | time_step, time, step, day, date, round |
Defaults to 0 with a warning. |
| Handicap | handicap, advantage, komi |
Defaults to 0.0 (no warning if absent, warning if invalid). |
Winner Normalization Rules
WHR normalizes various winner representations to simplify integration:
- Black Win:
B,black,b,1-0,1,black win - White Win:
W,white,w,0-1,0,white win - Draw:
D,draw,d,1/2-1/2,0.5 - Any unrecognized string defaults to a Draw (
D) with a warning.
Tolerance & Warning Behavior
If the CSV structure contains minor anomalies, the parser emits a UserWarning instead of failing:
- Missing Headers: If headers cannot be detected at all, WHR falls back to treating columns positionally as
[black, white, winner, time_step, handicap]. - Invalid Numbers: If
time_steporhandicapis non-numeric, it is defaulted to0or0.0respectively, and a warning is logged. - Float Time Steps: If the
time_stepcontains decimals, it is safely rounded to the nearest integer. - Empty & Comment Lines: Empty lines and clean space rows are skipped silently.
Handicap & First-Move Advantage (Go vs. Chess)
WHR was originally designed for Go (围棋), where Black plays first and any handicap/komi is applied to Black's rating. Therefore, the library API is designed with [black, white, ...] parameter order.
If you are using this library for games where White plays first (e.g., Chess), you can handle the first-move advantage easily:
- Approach A (Recommended - Negative Handicap): Keep passing the White player as the
whiteargument, the Black player as theblackargument, and pass a negative handicap value to represent White's first-move advantage. E.g.,handicap = -35.0(which mathematically increases White's win probability by adding 35.0 Elo to White). - Approach B (Logical Mapping): Map the first-move player (White) to the
blackparameter, and the second-move player (Black) to thewhiteparameter. If White wins, set the winner to"B".
API Reference
whr.Base
Main interface for calculating ratings.
__init__(config=None, w2=300.0, virtual_games=2)config: Optional dict containingw2andvirtual_games.w2: Rating variance parameter controlling how fast rating changes over time (default: 300.0).virtual_games: Number of virtual draw games assigned to players on their first day for rating regularization.
create_game(black, white, winner, time_step, handicap=0.0): Create and register a single game.create_games(games): Ingest a list of games in the format[black, white, winner, time_step, handicap].load_csv(filepath_or_buffer): Load games from a CSV file path or file-like buffer.iterate(count): Perform a fixed number of Newton-Raphson optimization steps.iterate_until_converge(verbose=True): Iterate until convergence. Returns the total number of iterations.ratings_for_player(name): Get the rating timeline of a player as[[day, rating, uncertainty], ...].get_ordered_ratings(): Get sorted ratings for all active players.log_likelihood(): Returns the overall log-likelihood score of the current model.
whr.Evaluate
Evaluates rating predictability on external test datasets.
__init__(base): Initialize with a trainedwhr.Baserating database.get_rating(name, time_step, ignore_null_players=True): Get the rating of a player on a specific day.evaluate_ave_log_likelihood_games(games, ignore_null_players=True): Compute average log-likelihood across a list of test games.
Running Tests
Test files are modularized and cover base functionality, evaluation metrics, and CSV parsing:
python -m pytest tests/
To run with verbose output:
python -m pytest tests/ -v
References
Rémi Coulom. Whole-history rating: A Bayesian rating system for players of time-varying strength. In International Conference on Computers and Games. 2008.
Metadata
Release files for whr 2.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| whr-2.2.0.tar.gz | 21.1 kB | Without provenance | Details for whr-2.2.0.tar.gz |
Built distributions (wheels)
Total release size: 19.0 MB
Release files / whr-2.2.0.tar.gz
| Download URL | whr-2.2.0.tar.gz |
|---|---|
| Size | 21.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
78d18ceb0444a360ea122555bd1cf62184a12235082d690143f462a0bee8b5d8
|
|
BLAKE2b-256 checksum How to use checksums |
c82bd86f81b1e9c2e363d2f52692bf10d10d06eaf685b70b0d65403f0e03f9fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314t-win_amd64.whl
| Download URL | whr-2.2.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 352.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
dc80efa02c445bfe54313825b502e1232512a9ff9bd8910d150c273e57bcf576
|
|
BLAKE2b-256 checksum How to use checksums |
76818275c47576dbeaef9465d34cc97b55610da948ec9ec1279273302ee1f5c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314t-win32.whl
| Download URL | whr-2.2.0-cp314-cp314t-win32.whl |
|---|---|
| Size | 321.4 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-32 |
|
SHA-256 checksum How to use checksums |
653724b1cd0b3ddc56592e0a8db67f5ad63619874723152dbca4b720ee9acb9a
|
|
BLAKE2b-256 checksum How to use checksums |
9566d9cf0c1acac752611fe3e9ec17e67ed8fe00098d113bdd40096f61a59290
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | whr-2.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
6ea5f81cafc329230c312cb92a5457ae456509a68da2e7b3b1cc2c6d31c45907
|
|
BLAKE2b-256 checksum How to use checksums |
621adc2667153e221ca5157e4274f2c3f290792196f87d97c93815163ff02d57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | whr-2.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 186.5 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9831e3a874abb9b3109940c6e80ebc5aa0b6459dc1cece24b2e0f04a28891b6a
|
|
BLAKE2b-256 checksum How to use checksums |
0f47e5c1d6d898283baa2a7d32bff5a23a8113aa24642a5a618e4b585557a16e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | whr-2.2.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 170.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
fd5c31ce03fd6acec0fab19935638792cfe7dbed4f7a844e08c699ef409f5b4e
|
|
BLAKE2b-256 checksum How to use checksums |
fb5d0dd47441fc1e225033c6f7a3d856eacf8cf0b3ab733937b138bd82df370d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314t-macosx_10_15_x86_64.whl
| Download URL | whr-2.2.0-cp314-cp314t-macosx_10_15_x86_64.whl |
|---|---|
| Size | 179.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
f74aff4b39df8248d426856d900aedfb4e295464ecbab4ee1f94908389351afd
|
|
BLAKE2b-256 checksum How to use checksums |
388b84ad0e7e949061f8ab9d13d74a44c16e2216fa009fdc105477b076d949d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314t-macosx_10_15_universal2.whl
| Download URL | whr-2.2.0-cp314-cp314t-macosx_10_15_universal2.whl |
|---|---|
| Size | 339.7 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
2fc22924132c9bd80ff6b87343eaa0b1b1e071f27d4a5273df203662d8eca40c
|
|
BLAKE2b-256 checksum How to use checksums |
1826a04b836f3be385fbc86c384255c3a0338a5aeb9fea58044ad53b5dc3cddd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314-win_amd64.whl
| Download URL | whr-2.2.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 347.0 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5e87c4d0326d1d60031d13fd7f6f9a128b1397bf6eea2a8e4eef1c6c719a585b
|
|
BLAKE2b-256 checksum How to use checksums |
4145cb344471359f58d58fbe395f53a25fdd90f2604ff1fc28a3c110b566768d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314-win32.whl
| Download URL | whr-2.2.0-cp314-cp314-win32.whl |
|---|---|
| Size | 316.2 kB |
| Tags | CPython 3.14 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
ebc805da8d07ec0ec48625888cad8aea266b0b6d2b315864c6460f9054375cbf
|
|
BLAKE2b-256 checksum How to use checksums |
3def2b53d6725506b126d93a8d8e2d88b7560652a543cf4272d2f9443a5d4a5f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | whr-2.2.0-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
8af2b0efe472cb58a4f7b3d593db560a19b03f20a7e1dde565461cb88a087af3
|
|
BLAKE2b-256 checksum How to use checksums |
de5545cffc172f3d939647a6ea2d9456453aff6cfffa41552cab066323fda40d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | whr-2.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 190.9 kB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
2357f0fabc8e95347390e49a40d8ab7c14ff62fbe27c3443752ad30554dde06d
|
|
BLAKE2b-256 checksum How to use checksums |
d9c664175e1372d9e48e9e5769f16fdbde14c17af2277244a95d5996c5c6f08b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | whr-2.2.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 159.7 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b40208022a7be042bb7d6e222839fb80caf34153d72892d0396ba6e4db2fb707
|
|
BLAKE2b-256 checksum How to use checksums |
092a427a883eb15be9e4d044ec3265481c622b42d22a2d30359807d111de0439
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | whr-2.2.0-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 171.1 kB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
3964f18461710c8ac0a66646e8452514792d6f19b07cb1c1327d62fb9e9b1258
|
|
BLAKE2b-256 checksum How to use checksums |
22056d73ef57d147c5a8eefada3223205a13f065ffaaac4b0320c6fa4eefc5cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp314-cp314-macosx_10_15_universal2.whl
| Download URL | whr-2.2.0-cp314-cp314-macosx_10_15_universal2.whl |
|---|---|
| Size | 320.2 kB |
| Tags | CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
fce684394f0c1493a06f33e5a151241aa0a4995fb8ffdeaf84e375f712014675
|
|
BLAKE2b-256 checksum How to use checksums |
adf4dde7b74ca99ad7e2fdfbcc9a8fc0452b763f59e8f6ed25c515c54e82c08e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp313-cp313-win_amd64.whl
| Download URL | whr-2.2.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 336.9 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
999f8c70f140e6379f61cefaa278065ccd3fe4bffcc7f20d63a4b41e4ae5d090
|
|
BLAKE2b-256 checksum How to use checksums |
647828def457af58095f2ad383466c963d40f1ac0082c0db7c41ce90beb2d0f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp313-cp313-win32.whl
| Download URL | whr-2.2.0-cp313-cp313-win32.whl |
|---|---|
| Size | 308.3 kB |
| Tags | CPython 3.13 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
1db71b09303b5744eb24fa20a20898ac21337cc1904ba2d1dc687d11ad3dcca0
|
|
BLAKE2b-256 checksum How to use checksums |
15e0b615aee7b545875a5b15f55fcc2abde3f3b586a6abc882e34ebf075d1b68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | whr-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
52c7497459809c8e07f14e5d997251819e031e6c0b840c008b5188dfb15dd31b
|
|
BLAKE2b-256 checksum How to use checksums |
1010a80ca13badbed763201fc806b3db1b995207de0b9ddb0a7a2d823309e231
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | whr-2.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 190.8 kB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c860d71f8acd958a0f045be7bac0812481bbf408e4bcecc8af22dfa4851d16d4
|
|
BLAKE2b-256 checksum How to use checksums |
ab9278b438a231126f2a348c0aa0543f4a200683cb11e2e6614bd71c9e63370b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | whr-2.2.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 159.5 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0188e4506d557dfd23e0acea5930d19f6105344c9ad20d46d77eb47a31877081
|
|
BLAKE2b-256 checksum How to use checksums |
50ad6cb0f60c0d95e18652f84b89e22b6a4fdb4ef64cee510ec0bb1ec585208d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | whr-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 171.0 kB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
eeeae825093c4f1e3d24070b51017420c860491cf798862bab135e60a9d5d727
|
|
BLAKE2b-256 checksum How to use checksums |
01309845dee86c3fe9e52bfbc7ac13a5b9586c91a001db27df2baa7e8ce2bcc6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp313-cp313-macosx_10_13_universal2.whl
| Download URL | whr-2.2.0-cp313-cp313-macosx_10_13_universal2.whl |
|---|---|
| Size | 319.9 kB |
| Tags | CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
6829bbf411ec072255234afb029ad73ff3ce369cf954cc9a538ab8f249454ab6
|
|
BLAKE2b-256 checksum How to use checksums |
10fb919d7e680a6a59b999441e0fd265c7b64befb73e7d17a4c6176851aac4b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp312-cp312-win_amd64.whl
| Download URL | whr-2.2.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 336.9 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f448e05dfdbcef4c23e54ccad5b76cf46fe3a475fe02c6265e57269cb5e89b12
|
|
BLAKE2b-256 checksum How to use checksums |
9f84589b96284c38e2359c4fc55047f6f7bd044c6571862ccb187d59c36be516
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp312-cp312-win32.whl
| Download URL | whr-2.2.0-cp312-cp312-win32.whl |
|---|---|
| Size | 308.4 kB |
| Tags | CPython 3.12 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
08eff30dc91a47fca7e10d0cf8ff263fec16d7505dd10f5b4afa7da1c00df53d
|
|
BLAKE2b-256 checksum How to use checksums |
136560f1bc7a01cf8a413c7130ce6de6e8f08a39bb22da3f84c0c155c727863d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | whr-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
661093f00fb1b4ae76cd07893e28ca2e6ca4e68f7590e24192e1da3e6137f5f8
|
|
BLAKE2b-256 checksum How to use checksums |
2f286ba201dc79a9f100ce3cfd56ad18145f6ff2a2e9db41407e4c95d42e17a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | whr-2.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 190.8 kB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4feb1994ce2073f3b06600753c25de891f157d37d921a24bf4b1941da981726f
|
|
BLAKE2b-256 checksum How to use checksums |
b624f7af47044c803dcb765e0b20b9a75cbc03602103787e0df24a96846c7228
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | whr-2.2.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 159.4 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
fe37006da8d35fdbc9346dc304f49d90372e42404d6eb5b72fa81982d5a1e898
|
|
BLAKE2b-256 checksum How to use checksums |
6a7cafaa3b87028f50fcefbf6ad8b147841032a5da8204a51888ec15672433b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | whr-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 171.0 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
d1d2649399992334e2cd87d7e33c05f9a2b3788237003152f3264df2d258baee
|
|
BLAKE2b-256 checksum How to use checksums |
fdd918a017fa1a4cc01028613e8653a4f177add761be8a4a31ee27a666c6386e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp312-cp312-macosx_10_13_universal2.whl
| Download URL | whr-2.2.0-cp312-cp312-macosx_10_13_universal2.whl |
|---|---|
| Size | 319.7 kB |
| Tags | CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
59076c7f137f0df4e676366e1c781c660201cab2ae4f7c02a291582aa791f47f
|
|
BLAKE2b-256 checksum How to use checksums |
b90482bd6879c1b8feb8ad3531346cd48fbfe8ab38c7bbf3d51ecb07300c4dff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp311-cp311-win_amd64.whl
| Download URL | whr-2.2.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 335.4 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9e2f1a7bf82309e202fc3541ab7bfa00e6d85c3cd47bd46f5cea3cca2467dc2d
|
|
BLAKE2b-256 checksum How to use checksums |
76ecf594ac65aa28db7445eb080f18e93f6a9585cb8379aece3a683e0162b29a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp311-cp311-win32.whl
| Download URL | whr-2.2.0-cp311-cp311-win32.whl |
|---|---|
| Size | 308.0 kB |
| Tags | CPython 3.11 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
5bfab7b073bc3833f200c6b6f4638afb041a0cc540189f8ac51d46899b2ff8b3
|
|
BLAKE2b-256 checksum How to use checksums |
3f7e5916855589f3f2cc2169192c2d57f709afbeafaed510509b1bbee72b0b02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | whr-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
43da9a38674bed396f15eb710a213129d4b18e5367781c2d18eb9afa362fcd3f
|
|
BLAKE2b-256 checksum How to use checksums |
3bc07aec862e4d58d11e03322e95b3f4e3b71bdc0a58d9490f89a33a910d9d43
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | whr-2.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 189.9 kB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c10b9703bd79906ef313f60e58fd6e12d451df9af62f0e8caa88945dd692a7b0
|
|
BLAKE2b-256 checksum How to use checksums |
ecc53360771ec2456227fcd38e9234cf94619918a0a9bcb8290108c32b66e1d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | whr-2.2.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 158.5 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3dbb770caba8f280c4e85a191d06f5983c3af8d0c7fe9ce79e4169300e130be1
|
|
BLAKE2b-256 checksum How to use checksums |
b33a24f93e20d7dbd4ebbb3fa7bef4b9f7f3d91607df389e6eeb94b927ca2816
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | whr-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 169.4 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
5c8cd6996a03e8c6fa7ce3d17bd8541aecaab8f535e9f11be80216d5ad0dccb9
|
|
BLAKE2b-256 checksum How to use checksums |
f86bda2d9043ae0ad52e477b0bdb7f7eca461401cc8a1af62d87d9864c54834a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp311-cp311-macosx_10_9_universal2.whl
| Download URL | whr-2.2.0-cp311-cp311-macosx_10_9_universal2.whl |
|---|---|
| Size | 317.1 kB |
| Tags | CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
01fff58891e6168421dcd95e84d8641205a246ec0b91682806a31c20c14cba36
|
|
BLAKE2b-256 checksum How to use checksums |
7626cb1cc4466afecc4f290e229153e691c5ba2de63f3538c51583755ed14907
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp310-cp310-win_amd64.whl
| Download URL | whr-2.2.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 334.1 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
74d8095457cdb7dfd5c8f307a722f4bba32942f3c9abb522fdc0121b49f2899d
|
|
BLAKE2b-256 checksum How to use checksums |
5b59b4c605454e01151644d08a2a406098f1f2ac4f8e1be0dd9c2e7e0a60a77d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp310-cp310-win32.whl
| Download URL | whr-2.2.0-cp310-cp310-win32.whl |
|---|---|
| Size | 307.1 kB |
| Tags | CPython 3.10 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
fd5cfd901d2452b0722b1de0a5643d2c1642e54e91afd68665bb69b1cfbdd612
|
|
BLAKE2b-256 checksum How to use checksums |
36213e91e996e23d2a90dd3a5065fb0a74270cd0a2dc6b9776cbd2454c177b48
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | whr-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
12a53f111638ae18e3cd9d0c93e3d830e5213d2f81e2ad434f7e4326345f25e3
|
|
BLAKE2b-256 checksum How to use checksums |
788940d678a8d928a972efb0d30d68071d012c2e90df8053731af597b9f87e7c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | whr-2.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 187.3 kB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
bbcaa80207e8cf366af663818ecd2596ce276229b79b711f3eea5f87abc9ffb8
|
|
BLAKE2b-256 checksum How to use checksums |
00028d9ccca5e002290b710c92a3e2f489c7ebe9b8782c1c4479c0d186372e97
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | whr-2.2.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 157.3 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9f5bb7c2398ef631df30ea0ae72aca29cd5300728bcd552194b20d5a0b1ab7db
|
|
BLAKE2b-256 checksum How to use checksums |
0784c13de18f0cf101adcf6906ff5ef8b4101ed6dc78cbedae860fb843e63799
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | whr-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 168.1 kB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
3a936c13296cf9f0871fddcba5f961e2f3253c8039d0a772661b159d6f9c406e
|
|
BLAKE2b-256 checksum How to use checksums |
ed203069ea8a482b1264313e09e41518c34ea8c9d1a924ea5f5022fca2fe92e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp310-cp310-macosx_10_9_universal2.whl
| Download URL | whr-2.2.0-cp310-cp310-macosx_10_9_universal2.whl |
|---|---|
| Size | 315.0 kB |
| Tags | CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
dd1a9e1eff915f9a350bb77e2dcc658a2d4fea7a7a42f44c35224dddff5ff9a9
|
|
BLAKE2b-256 checksum How to use checksums |
92346a4252ca9796b1cf7ed9d6825f626bef55639dee471747062bb9093cdd46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp39-cp39-win_amd64.whl
| Download URL | whr-2.2.0-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 334.9 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c3cd3abcb45da5d9ffa137382c3746de97ea2eb91d50f0d2a04459c4a336fce2
|
|
BLAKE2b-256 checksum How to use checksums |
1b703d30d3ebdfd6d69c2cdbc705ea2195960fbfd81912257392a6ec78e8773c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp39-cp39-win32.whl
| Download URL | whr-2.2.0-cp39-cp39-win32.whl |
|---|---|
| Size | 307.7 kB |
| Tags | CPython 3.9 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
d057ee9130f38945c8a24675b4ddfcd7634b5a48e6d7942910a02f677a77f1c3
|
|
BLAKE2b-256 checksum How to use checksums |
8ca540ae13a9ba999ce468c7ed444dfced488906473d0e2e214c875a7cb64fb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp39-cp39-musllinux_1_2_x86_64.whl
| Download URL | whr-2.2.0-cp39-cp39-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
7fe85fa07aa7d24d8ea481fa14518656073acbdf1bee3f413059351c825cb69b
|
|
BLAKE2b-256 checksum How to use checksums |
5e315fa20a882ffad563f3ef0852186bf532dfade604f3f1f666b673156b10b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | whr-2.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 186.4 kB |
| Tags | CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
8cdb039dcc9fce20776e33e597caf8f2d6ef3853728a7cc739525239f09c3cba
|
|
BLAKE2b-256 checksum How to use checksums |
6f5fff2190c3e7f282570442e1b5c06d69f7003710db65f28ab90885b4a4096b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | whr-2.2.0-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 157.5 kB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9868a37381262adfb24418ab9297ac294840db2d3fde0a5a8d4f59e958b81d8b
|
|
BLAKE2b-256 checksum How to use checksums |
6796405aaf43f3bbd07c20e10ea635a058a37c0404563b031835b151fe20ed27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl
| Download URL | whr-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl |
|---|---|
| Size | 168.2 kB |
| Tags | CPython 3.9 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
1c8d63ef91a8c44707dd113e308880186f04fc4a154da7c413865639ac7c45f7
|
|
BLAKE2b-256 checksum How to use checksums |
4693d60083d3318dfcd830ad0d899507f47176391e6ad5fb7b20ec7098b310ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / whr-2.2.0-cp39-cp39-macosx_10_9_universal2.whl
| Download URL | whr-2.2.0-cp39-cp39-macosx_10_9_universal2.whl |
|---|---|
| Size | 315.2 kB |
| Tags | CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
6b83a9ce82e4f25390e3177e1c1d64fde95e4d4e8fc85b68567726547d596511
|
|
BLAKE2b-256 checksum How to use checksums |
2d4bfa74fb098be12a06b6cab64e6dc1eae3c86c905de2d4d438c7621c7fa512
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for whr 2.2.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.