def test_is_cheater(self): """A test that verifies if the is_cheater function works correctly""" known_cheaters = [axelrod.Darwin, axelrod.Geller, axelrod.GellerCooperator, axelrod.GellerDefector, axelrod.MindBender, axelrod.MindController, axelrod.MindWarper, axelrod.MindReader] known_basic = [axelrod.Alternator, axelrod.AntiTitForTat, axelrod.Bully, axelrod.Cooperator, axelrod.Defector, axelrod.GoByMajority, axelrod.SuspiciousTitForTat, axelrod.TitForTat, axelrod.WinStayLoseShift] known_ordinary = [axelrod.AverageCopier, axelrod.ForgivingTitForTat, axelrod.GoByMajority20, axelrod.GTFT, axelrod.Grudger, axelrod.Inverse, axelrod.Random] for strategy in known_cheaters: self.assertTrue(axelrod.is_cheater(strategy()), msg=strategy) self.assertFalse(axelrod.is_basic(strategy()), msg=strategy) for strategy in known_basic: self.assertTrue(axelrod.is_basic(strategy()), msg=strategy) self.assertFalse(axelrod.is_cheater(strategy()), msg=strategy) for strategy in known_ordinary: self.assertFalse(axelrod.is_basic(strategy()), msg=strategy) self.assertFalse(axelrod.is_cheater(strategy()), msg=strategy)
from axelrod import Player, is_cheater from ._strategies import strategies from .hunter import DefectorHunter, AlternatorHunter, RandomHunter, MathConstantHunter # Needs to be computed manually to prevent circular dependency ordinary_strategies = [s for s in strategies if not is_cheater(s)] class MetaPlayer(Player): """A generic player that has its own team of players.""" team = [] classifier = { 'memory_depth': float('inf'), # Long memory 'stochastic': False, 'inspects_source': False, 'manipulates_source': False, 'manipulates_state': False } def __init__(self): super(MetaPlayer, self).__init__() # Make sure we don't use any meta players to avoid infinite recursion. self.team = [t for t in self.team if not issubclass(t, MetaPlayer)] self.nteam = len(self.team) # Initiate all the player in out team. self.team = [t() for t in self.team]