예제 #1
0
 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
예제 #3
0
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,
    )
예제 #4
0
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
예제 #6
0
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
예제 #7
0
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
            ),
    )
예제 #8
0
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(),
예제 #11
0
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(),
    ),