Skip to main content

A Python library for computing dice probabilities.

Installing

pip install hdroller

Features

  • Implemented in pure Python for high interoperability.
  • Weights are Python ints, providing exact results even for large numbers of dice.
  • Dice support all standard operators as well as an extensive library of functions.
  • Dice pool system allows for flexible yet efficient solutions to common problems.
  • Also handles multivariate distributions (though less tested).

API documentation

GitLab.

Examples

JupyterLite notebooks

See this JupyterLite distribution for a collection of interactive examples.

Applications

Advanced Dungeons & Dragons 1st edition ability score methods

Source for these methods.

Method I:

All scores are recorded and arranged in the order the player desires. 4d6 are rolled, and the lowest die (or one of the lower) is discarded.

Method II:

All scores are recorded and arranged as in Method I. 3d6 are rolled 12 times and the highest 6 scores are retained.

Method III:

Scores rolled are according to each ability category, in order, STRENGTH, INTELLIGENCE, WISDOM, DEXTERITY, CONSTITUTION, CHARISMA. 3d6 are rolled 6 times for each ability, and the highest score in each category is retained for that category.

Method IV:

3d6 are rolled sufficient times to generate the 6 ability scores, in order, for 12 characters. The player then selects the single set of scores which he or she finds most desirable and these scores are noted on the character record sheet.

import hdroller

"""
The @ operator means "roll the left die, then roll that many of the right die and sum".
Integers are treated as a die that always rolls that number.
Therefore:
* 3 @ hdroller.d6 means 3d6.
* hdroller.d6 @ 3 means roll a d6 and multiply the result by 3.
"""

method1 = 6 @ hdroller.d6.keep_highest(num_dice=4, num_keep=3)
method2 = (3 @ hdroller.d6).keep_highest(12, 6)
# num_keep defaults to 1.
method3 = 6 @ (3 @ hdroller.d6).keep_highest(6)
method4 = (6 @ (3 @ hdroller.d6)).keep_highest(12)

import numpy
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(method1.outcomes(), method1.pmf(percent=True))
ax.plot(method2.outcomes(), method2.pmf(percent=True))
ax.plot(method3.outcomes(), method3.pmf(percent=True))
ax.plot(method4.outcomes(), method4.pmf(percent=True))
ax.set_title('AD&D 1e ability score methods')
ax.legend(['Method I', 'Method II', 'Method III', 'Method IV'])
ax.set_xlabel('Total of ability scores')
ax.set_xlim(50, 100)
ax.set_ylim(0)
ax.grid(True)
plt.show()

Metadata

Release files for hdroller 0.6.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hdroller 0.6.7
File Size Uploaded
hdroller-0.6.7.tar.gz 30.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hdroller 0.6.7
File Interpreter ABI Platform
hdroller-0.6.7-py3-none-any.whl Python 3 none any Details

Total release size: 65.7 kB

Release files / hdroller-0.6.7.tar.gz

Download URL hdroller-0.6.7.tar.gz
Size 30.8 kB
Tags Source
SHA-256 checksum
How to use checksums
2f3ed087bc300a445e03d5cb553703b594357faea54c5beee9dbf9ed2d24228c
BLAKE2b-256 checksum
How to use checksums
b457d6a9a54f7c21369d3e873b1901729214466f0cc5cb33e611bd2e0c7ed923
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.10

Release files / hdroller-0.6.7-py3-none-any.whl

Download URL hdroller-0.6.7-py3-none-any.whl
Size 34.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4042a8e53f8e5165ca6da9e8824f488cf15b44531c8de8cc89c3d6ea627c902b
BLAKE2b-256 checksum
How to use checksums
e6162cfdbb1fc6135bb6565711c8787bf29fbff3d2dc7ac7818e36944b2c478e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.10

Release history Release notifications | RSS feed

This release

0.6.7 This release

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page