dyce
release notes
0.6.2
- Adds the
H.draw
convenience method for treating a histogram as a deck rather than a die.
0.6.1
- Fixes
P.total
to return1
for empty pools, consistent with the empty product. (See this explanation). - Renames
dyce.evaluation._LimitT
todyce.evaluation.LimitT
. - Fixes issues pertaining to histograms with zero totals after allowing outcomes with zero counts in non-normalized
H
objects. - Fixes issue that would lead to incorrect results when making certain arbitrary selections with heterogeneous pools (e.g., with
P.rolls_with_counts
).
0.6.0
- Now requires
numerary~=0.4.3
. - Adds the
expandable
decorator as well as theforeach
andexplode
convenience functions. - Deprecates
P.foreach
,H.foreach
, andH.substitute
. - Allows outcomes with zero counts in non-normalized
H
objects. Outcomes with zero counts are dropped when callingH.lowest_terms
. Adds theH.zero_fill
convenience method. - Fixes memoization in Risus multi-round combat translation.
- Migrates from
setuptools_scm
toversioningit
for more flexible version number formatting. - Allows deployments to PyPI from CI based on tags.
- Uses JupyterLite instead of Binder for examples.
- Refactors
P.is_homogeneous
property into a similarly-named method and adds theP.total
method property. - Removes
H.order_stat_func_for_n
and instead caches order stat functions forn
insideH.order_stat_for_n_at_pos
.
0.5.2
- Updates binder links that fix requirements ranges.
0.5.1
- Fixes broken binder links in docs.
- Adds the
precision_limit
argument toH.substitute
andH.explode
.
0.5.0
- Breaks
dyce.viz
out intoanydyce
. - Removes use of
numerary.types.…SCU
types. - Adds the
H.foreach
andP.foreach
class methods. - Migrates
resolve_dependent_probability
to theH.foreach
class method.
0.4.5
- Fixes this bullshit (no, really, I’m serious this time).
- Adds
FilterRoller
. - Adds
SubstitutionRoller
.
0.4.4
- Removes
…_gh.png
hack now that this dumpster fire is at least partially resolved. - Refines Tension Pool example.
- Adds Ironsworn example.
- Removes faulty (correctly-derived, but misapplied) math in Risus “Evens Up” example.
- Adds detail around dependent probabilities.
- Adds experimental
dyce.h.resolve_dependent_probability
function.
0.4.3
- Removes dependencies on deprecated
numerary.types.…SCT
tuples - Adds Angry GM Tension Pool mechanic translation.
0.4.2
- Removes calls to
os.get_terminal_size
to retain utility in environments without terminals. Fixes #5. Thanks @sudo-simon!!
0.4.1
- Splits out protocol checking into its own fancy library:
numerary
! - Is now available on PyPI as
dyce
_, thanks to the generosity of David Eyk! - Introduces experimental generic
walk
function and supporting visitor data structures. - Uses
pygraphviz
to automate class diagram generation. (See the note on special considerations for regenerating class diagrams in the hacking quick start.) - Introduces experimental use of
numpy
for RNG, if present. - Migrates to using
pyproject.toml
andsetup.cfg
. - Adds missing
py.typed
to ensure clients get type checking. (Whoops.)
0.4.0
Breaking changes
Warning
The following changes are not backward compatible. Please review before upgrading.
- Renames
HAbleT
andHAbleOpsMixin
toHableT
andHableOpsMixin
. Uses alternate spellings. - Removes deprecated non-flattening unary operation methods
P.__neg__
andP.__pos__
. Uses, e.g.,P.umap(operator.__neg__)
orP(-h for h in p)
instead. - Removes deprecated synonym methods
H.even
andH.odd
. UsesH.is_even
andH.is_odd
instead. - Removes deprecated synonym package
dyce.plt
. Usesdyce.viz
instead. -
Removes special case handling of
H({})
for addition and subtraction. Check for code that relied on, e.g.,h + H({})
resolving toh
. It is probably not correct. If the behavior is desired, consider eliminating empty histograms before performing calculations. E.G.,h1 + h2 if h2 else h1
.See also the
sum_h
function, which ensures the result is always a histogram:1 2 3 4 5
>>> from dyce.h import sum_h >>> sum(()) 0 >>> sum_h(()) H({})
Note, however, that sums including empty histograms will be always result in empty histograms:
1 2 3 4
>>> from dyce import H >>> hs = (H(6), H(6), H(6), H({})) >>> sum_h(hs) H({})
If a different result was desired, adapting our advice from above would yield something like:
1 2
>>> sum_h(h for h in hs if h) H({3: 1, 4: 3, 5: 6, 6: 10, ..., 16: 6, 17: 3, 18: 1})
Other changes
- Documentation overhaul including augmented examples and reorganized images and JavaScript.
- Fixes
H({}).format()
bug. - Adds
beartype
runtime type checking. - Maintains support for Python 3.7 (for now).
0.3.2
- Emergency release to
cover upaddress thisembarrassmenttypo. 😬😅
0.3.1
- Adds these release notes.
- Boosts
isinstance
performance withdyce
’s proprietary numericProtocol
s. - Reinstates support for Python 3.7
(for now). - Adds
H.is_even
andH.is_odd
. - Deprecates synonym methods
H.even
andH.odd
. - Introduces experimental
H.total
property. - Removes incorrectly non-flattening unary operation methods
P.__abs__
andP.__invert__
. - Deprecates non-flattening unary operation methods
P.__neg__
andP.__pos__
. - Renames experimental
P.homogeneous
property toP.is_homogeneous
. - Introduces experimental
R
andRoll
primitives. - Removes
coerce
parameter fromH.map
,H.rmap
, andH.umap
. - Renames
dyce.plt
todyce.viz
. - Deprecates synonym package
dyce.plt
.
0.3.0
dyce
goes beta!
Non-experimental features should be considered stable.