* Use the `` operator and `d()` instead of `*` for "roll the die on the left, then roll that many dice on the right and sum". * `*` operator now multiplies. * Add `/` operator. * Add `median_left(), median_right(), ppf(), ppf_left(), ppf_right(), sample(), cmp(), sign()`.
0.4.0
No longer numpy-based. Major changes:
* API completely reworked. * Weights are Python `int`s. This decreases performance but produces all exact results. * New `MultiDie` class representing multivariate distributions. * `PoolScorer` classes merged to a single `PoolEval` class.
0.3.3
This will most likely be the last numpy-based version.
* Pool scorers skip zero-weight outcomes. * Removed `__bool__` since zero-weight dice are no longer allowed.
0.3.2
* Pool scorers can now return `None` states, which drops the state from evaluation, effectively performing a full reroll. * Operations that result in no remaining weight (e.g. rerolling all outcomes) now return None. * Dice can no longer be constructed with zero total weight. * The `Die()` constructor now auto-trims. * `Die._align()` is now private and no longer makes all the dice the same weight. * Fixed `Die.explode()` weighting. * Cleaned up unused functions.
0.3.1
* Optimize `Pool.pops()` by immediately removing all the dice if there are no left in the mask. * `Die.reroll` now tracks weights properly.
0.3.0
* Implemented new keep/pool algorithms, which make heavy use of caching. The `keep*()` function signatures changed. * `Die` is now hashable. * Empty `Die` is now an error. * Removed weight normalization. * Added `%` and `//` operators to `Die`. * Renamed `ccdf` to `sf` following `scipy`'s naming.