Skip to content

Commit d9b078d

Browse files
authored
Merge pull request #665 from Axelrod-Python/664
Changing strategy lists
2 parents f5a9ee4 + 9f9498d commit d9b078d

File tree

14 files changed

+123
-27
lines changed

14 files changed

+123
-27
lines changed

axelrod/strategies/__init__.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,21 @@
1212
MetaMixer
1313
)
1414

15-
strategies.extend((MetaHunter, MetaMajority, MetaMinority, MetaWinner,
15+
all_strategies.append(MetaHunter)
16+
17+
long_run_time_strategies = [MetaMajority, MetaMinority, MetaWinner,
1618
MetaMajorityMemoryOne, MetaWinnerMemoryOne,
1719
MetaMajorityFiniteMemory, MetaWinnerFiniteMemory,
18-
MetaMajorityLongMemory, MetaWinnerLongMemory, MetaMixer))
20+
MetaMajorityLongMemory, MetaWinnerLongMemory, MetaMixer]
21+
22+
all_strategies.extend(long_run_time_strategies)
1923

2024
# Distinguished strategy collections in addition to
21-
# `strategies` from _strategies.py
25+
# `all_strategies` from _strategies.py
2226

2327
demo_strategies = [Cooperator, Defector, TitForTat, Grudger, Random]
24-
basic_strategies = [s for s in strategies if is_basic(s())]
25-
ordinary_strategies = [s for s in strategies if obey_axelrod(s())]
26-
cheating_strategies = [s for s in strategies if not obey_axelrod(s())]
28+
basic_strategies = [s for s in all_strategies if is_basic(s())]
29+
strategies = [s for s in all_strategies if obey_axelrod(s())]
30+
cheating_strategies = [s for s in all_strategies if not obey_axelrod(s())]
31+
32+
ordinary_strategies = strategies # This is a legacy and will be removed

axelrod/strategies/_strategies.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161

6262
# Note: Meta* strategies are handled in .__init__.py
6363

64-
strategies = [
64+
all_strategies = [
6565
Adaptive,
6666
Aggravater,
6767
ALLCorALLD,

axelrod/strategies/meta.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from axelrod import Actions, Player, obey_axelrod
2-
from ._strategies import strategies
2+
from ._strategies import all_strategies
33
from .hunter import DefectorHunter, AlternatorHunter, RandomHunter, MathConstantHunter, CycleHunter, EventualCycleHunter
44
from .cooperator import Cooperator
55
from numpy.random import choice
66

77
# Needs to be computed manually to prevent circular dependency
8-
ordinary_strategies = [s for s in strategies if obey_axelrod(s)]
8+
ordinary_strategies = [s for s in all_strategies if obey_axelrod(s)]
99
C, D = Actions.C, Actions.D
1010

1111
class MetaPlayer(Player):

axelrod/tests/integration/test_matches.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88

99
C, D = axelrod.Actions.C, axelrod.Actions.D
1010

11-
deterministic_strategies = [s for s in axelrod.ordinary_strategies
11+
deterministic_strategies = [s for s in axelrod.strategies
1212
if not s().classifier['stochastic']] # Well behaved strategies
1313

14-
stochastic_strategies = [s for s in axelrod.ordinary_strategies
14+
stochastic_strategies = [s for s in axelrod.strategies
1515
if s().classifier['stochastic']]
1616

1717

axelrod/tests/integration/test_tournament.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def setUpClass(cls):
3030

3131
def test_full_tournament(self):
3232
"""A test to check that tournament runs with all non cheating strategies."""
33-
strategies = [strategy() for strategy in axelrod.ordinary_strategies]
33+
strategies = [strategy() for strategy in axelrod.strategies]
3434
tournament = axelrod.Tournament(name='test', players=strategies,
3535
game=self.game, turns=2,
3636
repetitions=2)
@@ -63,7 +63,7 @@ def test_parallel_play(self):
6363

6464
def test_repeat_tournament_deterministic(self):
6565
"""A test to check that tournament gives same results."""
66-
deterministic_players = [s() for s in axelrod.ordinary_strategies
66+
deterministic_players = [s() for s in axelrod.strategies
6767
if not s().classifier['stochastic']]
6868
files = []
6969
for _ in range(2):
@@ -83,7 +83,7 @@ def test_repeat_tournament_stochastic(self):
8383
files = []
8484
for _ in range(2):
8585
axelrod.seed(0)
86-
stochastic_players = [s() for s in axelrod.ordinary_strategies
86+
stochastic_players = [s() for s in axelrod.strategies
8787
if s().classifier['stochastic']]
8888
tournament = axelrod.Tournament(name='test',
8989
players=stochastic_players,

axelrod/tests/unit/test_classification.py

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_known_classifiers(self):
1414
'manipulates_source',
1515
'manipulates_state']
1616

17-
for s in axelrod.strategies:
17+
for s in axelrod.all_strategies:
1818
s = s()
1919
self.assertTrue(None not in [s.classifier[key] for key in known_keys])
2020

@@ -130,24 +130,61 @@ def test_is_basic(self):
130130
class TestStrategies(unittest.TestCase):
131131

132132
def test_strategy_list(self):
133-
for strategy_list in ["strategies",
133+
for strategy_list in ["all_strategies",
134134
"demo_strategies",
135135
"basic_strategies",
136+
"long_run_time_strategies",
137+
"strategies",
136138
"ordinary_strategies",
137139
"cheating_strategies"]:
138140
self.assertTrue(hasattr(axelrod, strategy_list))
139141

140142
def test_lists_not_empty(self):
141-
for strategy_list in [axelrod.strategies,
143+
for strategy_list in [axelrod.all_strategies,
142144
axelrod.demo_strategies,
143145
axelrod.basic_strategies,
146+
axelrod.long_run_time_strategies,
147+
axelrod.strategies,
144148
axelrod.ordinary_strategies,
145149
axelrod.cheating_strategies]:
146150
self.assertTrue(len(strategy_list) > 0)
147151

152+
def test_inclusion_of_strategy_lists(self):
153+
all_strategies_set = set(axelrod.all_strategies)
154+
for strategy_list in [axelrod.demo_strategies,
155+
axelrod.basic_strategies,
156+
axelrod.long_run_time_strategies,
157+
axelrod.strategies,
158+
axelrod.ordinary_strategies,
159+
axelrod.cheating_strategies]:
160+
self.assertTrue(set(strategy_list).issubset(all_strategies_set))
161+
162+
strategies_set = set(axelrod.strategies)
163+
for strategy_list in [axelrod.demo_strategies,
164+
axelrod.basic_strategies,
165+
axelrod.long_run_time_strategies]:
166+
self.assertTrue(set(strategy_list).issubset(strategies_set))
167+
168+
def test_long_run_strategies(self):
169+
long_run_time_strategies = [axelrod.MetaMajority,
170+
axelrod.MetaMinority,
171+
axelrod.MetaWinner,
172+
axelrod.MetaMajorityMemoryOne,
173+
axelrod.MetaWinnerMemoryOne,
174+
axelrod.MetaMajorityFiniteMemory,
175+
axelrod.MetaWinnerFiniteMemory,
176+
axelrod.MetaMajorityLongMemory,
177+
axelrod.MetaWinnerLongMemory,
178+
axelrod.MetaMixer]
179+
self.assertTrue(long_run_time_strategies,
180+
axelrod.long_run_time_strategies)
181+
148182
def test_meta_inclusion(self):
149183
self.assertTrue(axelrod.MetaMajority in axelrod.strategies)
150184

185+
self.assertTrue(axelrod.MetaHunter in axelrod.strategies)
186+
self.assertFalse(axelrod.MetaHunter in axelrod.long_run_time_strategies)
187+
151188
def test_demo_strategies(self):
152189
demo_strategies = [axelrod.Cooperator,
153190
axelrod.Defector,

axelrod/tests/unit/test_strategy_transformers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class TestTransformers(unittest.TestCase):
1919
def test_all_strategies(self):
2020
# Attempt to transform each strategy to ensure that implementation
2121
# choices (like use of super) do not cause issues
22-
for s in axelrod.ordinary_strategies:
22+
for s in axelrod.strategies:
2323
opponent = axelrod.Cooperator()
2424
player = IdentityTransformer()(s)()
2525
player.play(opponent)

axelrod/tests/unit/test_titfortat.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ class TestContriteTitForTat(TestPlayer):
383383
'manipulates_state': False
384384
}
385385

386-
deterministic_strategies = [s for s in axelrod.ordinary_strategies
386+
deterministic_strategies = [s for s in axelrod.strategies
387387
if not s().classifier['stochastic']]
388388

389389
@given(strategies=strategy_lists(strategies=deterministic_strategies,
@@ -432,7 +432,7 @@ def test_strategy_with_noise(self):
432432
self.assertEqual(opponent.history, [C, D, D, D])
433433
self.assertFalse(ctft.contrite)
434434

435-
435+
436436
def test_reset_cleans_all(self):
437437
p = self.player()
438438
p.contrite = True
@@ -462,5 +462,5 @@ def test_effect_of_strategy(self):
462462
self.responses_test([C]*3, [C, D, C], [C])
463463
self.responses_test([C]*3, [C, D, D], [D])
464464

465-
466-
465+
466+

axelrod/tests/unit/test_tournament.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535

3636
test_edges = [(0, 1), (1, 2), (3, 4)]
3737

38-
deterministic_strategies = [s for s in axelrod.ordinary_strategies
39-
if not s().classifier['stochastic']]
38+
deterministic_strategies = [s for s in axelrod.strategies
39+
if not s().classifier['stochastic']]
4040

4141
class TestTournament(unittest.TestCase):
4242

docs/tutorials/advanced/classification_of_strategies.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ This allows us to, for example, quickly identify all the stochastic
2424
strategies::
2525

2626
>>> len([s for s in axl.strategies if s().classifier['stochastic']])
27-
41
27+
40
2828

2929
Or indeed find out how many strategy only use 1 turn worth of memory to
3030
make a decision::

0 commit comments

Comments
 (0)