def get_sides(self) -> List[sym.Symbol]: return [ sym.Block(), sym.Surge(), sym.Blank(), sym.Blank(), sym.Blank(), sym.Blank(), ]
def test_convert_surge__on_symbols(): symbols = syms.Symbols.from_symbols_list( [ sym.Hit(), sym.Surge(), sym.Blank(), ] ) symbols_target = syms.Symbols.from_symbols_list( [ sym.Hit(), sym.Crit(), sym.Blank(), ] ) assert actions.convert_all_surges_to_crit.on(symbols) == symbols_target
def get_pierce(k: int): return conv_syms.ConvertSymbols( conversion_policy=conv_pol.get_conversion_policy_defence( convertible_symbols=(sym.Block, ), conversion_target=sym.Blank(), ), conversion_limit=k, )
def block_hits(k: Optional[int]): return conv_syms.ConvertSymbols( conversion_policy=conv_pol.get_conversion_policy_attack( convertible_symbols=(sym.Hit, ), conversion_target=sym.Blank(), ), conversion_limit=k, )
def test_convert_surge__on_rolled_dice_pool__no_surge(): rolled_dice_pool = dce.RolledDicePool.from_rolled_dice_list( [ dse.RolledDouse( douse=att_dse.BlackAttackDouse(), symbol=sym.Blank(), ), dse.RolledDouse( douse=att_dse.RedAttackDouse(), symbol=sym.Hit(), ), ] ) assert actions.convert_all_surges_to_crit.on(rolled_dice_pool) == rolled_dice_pool
def test_roll__douse(): douse = att_dse.BlackAttackDouse() rerolled_douse = rll.Roll(roll_policy=rll_pol.RollPolicyAttack()).on(douse) crit_prob = fractions.Fraction(1, 8) * fractions.Fraction(3, 2) assert rerolled_douse.as_dict[dse.RolledDouse(douse, sym.Crit())] == crit_prob hit_prob = fractions.Fraction(3, 8) * fractions.Fraction(3, 2) assert rerolled_douse.as_dict[dse.RolledDouse(douse, sym.Hit())] == hit_prob blank_prob = fractions.Fraction(3, 8) * fractions.Fraction(1, 2) assert rerolled_douse.as_dict[dse.RolledDouse(douse, sym.Blank())] == blank_prob
import pytest from legion_dice_probs import actions from legion_dice_probs.stochastic_objects import douse as dse from legion_dice_probs.stochastic_objects import attack_douse as att_dse from legion_dice_probs.stochastic_states import symbol as sym from legion_dice_probs.stochastic_states import symbols as syms from prob_dist_api import probability_distribution as pd @pytest.mark.parametrize( "output, prob", ( ( dse.RolledDouse(douse=att_dse.BlackAttackDouse(), symbol=sym.Blank()), fractions.Fraction(3, 8) * fractions.Fraction(1, 2), # 3 / 16 ), ( dse.RolledDouse(douse=att_dse.BlackAttackDouse(), symbol=sym.Surge()), fractions.Fraction(1, 8) * fractions.Fraction(1, 2), # 1 / 16 ), ( dse.RolledDouse(douse=att_dse.BlackAttackDouse(), symbol=sym.Hit()), fractions.Fraction(3, 8) * (1 + fractions.Fraction(1, 2)), # 9 / 16 ), ( dse.RolledDouse(douse=att_dse.BlackAttackDouse(), symbol=sym.Crit()), fractions.Fraction(1, 8) * (1 + fractions.Fraction(1, 2)), # 3 / 16 ), )
def get_defence_reroll(k: int): return rll.Roll( roll_policy=rll_pol.get_roll_policy_defence(rollable_symbols=( sym.Blank, sym.Surge, ), ), roll_limit=k, ) uncanny_luck_3 = get_attack_reroll(3) remove_unconverted_surge_results_attack = conv_syms.ConvertSymbols( conversion_policy=conv_pol.get_conversion_policy_attack( convertible_symbols=(sym.Surge, ), conversion_target=sym.Blank(), )) remove_unconverted_surge_results_defence = conv_syms.ConvertSymbols( conversion_policy=conv_pol.get_conversion_policy_defence( convertible_symbols=(sym.Surge, ), conversion_target=sym.Blank(), )) count_symbols = count_syms.CountSymbols() convert_all_crits_to_hits_for_calculation = conv_syms.ConvertSymbols( conversion_policy=conv_pol.get_conversion_policy_attack( convertible_symbols=(sym.Crit, ), conversion_target=sym.Hit(), ))
def __init__( self, conversion_target: sym.Symbol = sym.Blank(), ): super().__init__(conversion_target)
import pytest from legion_dice_probs.events import convert_symbols as conv_syms from legion_dice_probs.events.tools import conversion_policy as conv_pol from legion_dice_probs.stochastic_objects import attack_douse as att_dse from legion_dice_probs.stochastic_objects import dice_pool as dce from legion_dice_probs.stochastic_objects import douse as dse from legion_dice_probs.stochastic_states import symbol as sym from legion_dice_probs.stochastic_states import symbols as syms @pytest.mark.parametrize("n_converts, symbols, symbols_target", ((2, [ sym.Hit(), sym.Hit(), sym.Blank(), sym.Surge(), sym.Surge(), sym.Crit(), ], [ sym.Hit(), sym.Crit(), sym.Crit(), sym.Surge(), sym.Crit(), sym.Hit(), ]), (1, [ sym.Hit(), sym.Hit(), sym.Blank(), sym.Surge(), sym.Surge(),
import pytest from legion_dice_probs.events import roll as rll from legion_dice_probs.events.tools import roll_policy as rll_pol from legion_dice_probs.stochastic_objects import attack_douse as att_dse from legion_dice_probs.stochastic_objects import dice_pool as dce from legion_dice_probs.stochastic_objects import douse as dse from legion_dice_probs.stochastic_states import symbol as sym @pytest.mark.parametrize("policy, douse_cls, symbol, target_prob_dist", ( ( rll_pol.RollPolicyAttack(), att_dse.WhiteAttackDouse, sym.Blank(), att_dse.WhiteAttackDouse().get_probability_distribution(), ), ( rll_pol.RollPolicyAttack(), att_dse.BlackAttackDouse, sym.Surge(), att_dse.BlackAttackDouse().get_probability_distribution(), ), ( rll_pol.RollPolicyAttackBlanksOnly(), att_dse.RedAttackDouse, sym.Surge(), dse.RolledDouse(att_dse.RedAttackDouse(), sym.Surge()).get_probability_distribution(), ),