Python dice probability package.
Icepool
Python dice probability package.
Try coding in your browser using Icecup, a simple frontend for scripting and graphing similar to AnyDice, SnakeEyes, and Troll. You can find a series of tutorials here.
Features
- Pure Python implementation using only the Standard Library. Run it almost anywhere Python runs: program locally, share Jupyter notebooks, or build your own client-side web apps using Pyodide.
- Dice support all standard operators (+, -, <, >, etc.) as well as an extensive library of functions (rerolling, exploding, etc.)
- Exact fractional probabilities using Python
ints. - Some support for decks (aka sampling without replacement).
Installing
pip install icepool
The source is pure Python, so including a direct copy in your project can work as well.
Contact
Feel free to open a discussion or issue on GitHub. You can also find me on Reddit or Twitter.
API documentation
JupyterLite notebooks
See this JupyterLite distribution for a collection of interactive, editable examples. These include mechanics from published games, StackExchange, Reddit, and academic papers.
As a backup, you can open the notebooks in Google Colab.
Tutorial notebooks
In particular, here is a series of tutorial notebooks.
StackExchange answers
Call-on traits in Burning Wheel*: Success-counting dice pools with explosions and rerolls. Vampire the Masquerade V*
Year Zero Engine* Neon City Overdrive* Broken Compass / Household / Outgunned* Here is a full search of answers in which I mention Icepool.Web applications
These are all client-side, powered by Pyodide. Perhaps you will find inspiration for your own application.
- Icecup, a simple frontend for scripting and graphing.
Paper on algorithm
Presented at Artificial Intelligence and Interactive Digital Entertainment (AIIDE) 2022.
BibTeX:
@inproceedings{liu2022icepool,
title={Icepool: Efficient Computation of Dice Pool Probabilities},
author={Albert Julius Liu},
booktitle={Eighteenth AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment},
volume={18},
number={1},
pages={258-265},
year={2022},
month={Oct.},
eventdate={2022-10-24/2022-10-28},
venue={Pomona, California},
url={https://ojs.aaai.org/index.php/AIIDE/article/view/21971},
doi={10.1609/aiide.v18i1.21971}
}
Versioning
Frankly, I haven't made backwards compatibility a top priority. If you need specific behavior, I recommend version pinning. Typing is especially unstable.
Similar projects
In roughly chronological order:
Troll by Torben รgidius Mogensen
http://hjemmesider.diku.dk/~torbenm/Troll/
The oldest general-purpose dice probability calculator I know of. It has an accompanying peer-reviewed paper.
AnyDice by Jasper Flick
https://anydice.com/
Probably the most popular dice probability calculator in existence, and with good reason---its accessibility and shareability remains unparalleled. I still use it often for prototyping and as a second opinion.
SnakeEyes by Noรฉ Falzon
https://snake-eyes.io/
SnakeEyes demonstrated the viability of browser-based, client-side dice calculation, as well as introducing me to Chart.js.
dice_roll.py by Ilmari Karonen
https://gist.github.com/vyznev/8f5e62c91ce4d8ca7841974c87271e2f
This demonstrated the trick of iterating "vertically" over the outcomes of dice in a dice pool, rather than "horizontally" through the dice---one of the insights into creating a much faster dice pool algorithm.
dyce by Matt Bogosian
https://github.com/posita/dyce
Another Python dice probability package. I've benefited greatly from exchanging our experiences.