from typing import Dict, Tuple
from numpy import heaviside
from axelrod.IIlIIIllllllI import Action
from axelrod.player import Player
lIlIIIlllllII, lIIIIlIIlllllIIIIlI = Action.C, Action.D
class IIlIIllIlII(Player):
    llIIlIIllIlIIIIlllI = "strategy"
    IIIIlIIlIIlIlllII = {
        "memory_depth": float("inf"),  
        "stochastic": True,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(
        llIlIlIIIIlIIIIIlIIl, llllIIllIllIllllI: Dict[Tuple[Action, Action], float], lIIlIllllIll: float = 0.01
    ) -> None:
        super().__init__()
        llIlIlIIIIlIIIIIlIIl.lIIlIllllIll = lIIlIllllIll
        llIlIlIIIIlIIIIIlIIl.llllIIllIllIllllI = llllIIllIllIllllI
        llIlIlIIIIlIIIIIlIIl.lIllIIIllIllII = 0.0
    def lIIlIIllllIIIl(llIlIlIIIIlIIIIIlIIl, IIlIlllIllIIIIlIIl: Player) -> Action:
        if llIlIlIIIIlIIIIIlIIl.history:
            IIIlIIII = (llIlIlIIIIlIIIIIlIIl.history[-1], IIlIlllIllIIIIlIIl.history[-1])
            llIlIlIIIIlIIIIIlIIl.lIllIIIllIllII += llIlIlIIIIlIIIIIlIIl.llllIIllIllIllllI[IIIlIIII]
        lIlIIIIllllIIlIlI = llIlIlIIIIlIIIIIlIIl.lIIlIllllIll + (1.0 - 2 * llIlIlIIIIlIIIIIlIIl.lIIlIllllIll) * (
            heaviside(llIlIlIIIIlIIIIIlIIl.lIllIIIllIllII + 1, 1) - heaviside(llIlIlIIIIlIIIIIlIIl.lIllIIIllIllII - 1, 1)
        )
        IIlIIIllllllI = llIlIlIIIIlIIIIIlIIl._random.random_choice(lIlIIIIllllIIlIlI)
        return IIlIIIllllllI
class IlIIlIIIIllllIl(IIlIIllIlII):
    llIIlIIllIlIIIIlllI = "strategy"
    def __init__(llIlIlIIIIlIIIIIlIIl) -> None:
        llllIIllIllIllllI = {
            (lIlIIIlllllII, lIlIIIlllllII): 0.0,  
            (lIlIIIlllllII, lIIIIlIIlllllIIIIlI): 1.888159,  
            (lIIIIlIIlllllIIIIlI, lIlIIIlllllII): 1.858883,  
            (lIIIIlIIlllllIIIIlI, lIIIIlIIlllllIIIIlI): -0.995703,  
        }
        super().__init__(llllIIllIllIllllI=llllIIllIllIllllI)