Skip to content

Commit 2bc5247

Browse files
Merge pull request #1177 from Axelrod-Python/fix-typing-for-mypy-2.1
Fix type hints for mypy 2.1
2 parents 8ad448a + beee0f6 commit 2bc5247

8 files changed

Lines changed: 29 additions & 20 deletions

File tree

axelrod/fingerprint.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def construct_tournament_elements(self, step: float,
268268

269269
def fingerprint(
270270
self, turns: int = 50, repetitions: int = 10, step: float = 0.01,
271-
processes: int=None, filename: str = None,
271+
processes: int = None, filename: str = None,
272272
progress_bar: bool = True
273273
) -> dict:
274274
"""Build and play the spatial tournament.
@@ -305,7 +305,7 @@ def fingerprint(
305305

306306
temp_file_descriptor = None
307307
if filename is None:
308-
temp_file_descriptor, filename = mkstemp()
308+
temp_file_descriptor, filename = mkstemp() # type: ignore
309309

310310
edges, tourn_players = self.construct_tournament_elements(
311311
step, progress_bar=progress_bar)
@@ -323,6 +323,7 @@ def fingerprint(
323323
filename, progress_bar=progress_bar)
324324

325325
if temp_file_descriptor is not None:
326+
assert filename is not None
326327
os.close(temp_file_descriptor)
327328
os.remove(filename)
328329

@@ -443,7 +444,7 @@ def fingerprint(self, turns: int = 50, repetitions: int = 1000,
443444

444445
temp_file_descriptor = None
445446
if filename is None:
446-
temp_file_descriptor, filename = mkstemp()
447+
temp_file_descriptor, filename = mkstemp() # type: ignore
447448

448449
edges = [(0, k + 1) for k in range(len(self.opponents))]
449450
tournament = axl.Tournament(players=players,
@@ -455,6 +456,7 @@ def fingerprint(self, turns: int = 50, repetitions: int = 1000,
455456
self.data = self.analyse_cooperation_ratio(filename)
456457

457458
if temp_file_descriptor is not None:
459+
assert filename is not None
458460
os.close(temp_file_descriptor)
459461
os.remove(filename)
460462

axelrod/moran.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from .match import Match
1313
from .random_ import randrange
1414

15-
from typing import List, Tuple, Set
15+
from typing import List, Tuple, Set, Optional
1616

1717

1818
def fitness_proportionate_selection(scores: List) -> int:
@@ -102,7 +102,7 @@ def __init__(self, players: List[Player], turns: int = DEFAULT_TURNS,
102102
self.populations = [] # type: List
103103
self.set_players()
104104
self.score_history = [] # type: List
105-
self.winning_strategy_name = None # type: str
105+
self.winning_strategy_name = None # type: Optional[str]
106106
self.mutation_rate = mutation_rate
107107
assert (mutation_rate >= 0) and (mutation_rate <= 1)
108108
assert (noise >= 0) and (noise <= 1)
@@ -184,7 +184,7 @@ def death(self, index: int = None) -> int:
184184
index:
185185
The index of the player to be removed
186186
"""
187-
if self.mode == "db":
187+
if index is None:
188188
# Select a player to be replaced globally
189189
i = randrange(0, len(self.players))
190190
# Record internally for use in _matchup_indices
@@ -207,7 +207,7 @@ def birth(self, index: int = None) -> int:
207207
"""
208208
# Compute necessary fitnesses.
209209
scores = self.score_all()
210-
if self.mode == "db":
210+
if index is not None:
211211
# Death has already occurred, so remove the dead player from the
212212
# possible choices
213213
scores.pop(index)

axelrod/strategies/apavlov.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from axelrod.action import Action
22
from axelrod.player import Player
33

4+
from typing import Optional
5+
46
C, D = Action.C, Action.D
57

68

@@ -29,7 +31,7 @@ class APavlov2006(Player):
2931

3032
def __init__(self) -> None:
3133
super().__init__()
32-
self.opponent_class = None # type: str
34+
self.opponent_class = None # type: Optional[str]
3335

3436
def strategy(self, opponent: Player) -> Action:
3537
# TFT for six rounds
@@ -93,7 +95,7 @@ class APavlov2011(Player):
9395

9496
def __init__(self) -> None:
9597
super().__init__()
96-
self.opponent_class = None # type: str
98+
self.opponent_class = None # type: Optional[str]
9799

98100
def strategy(self, opponent: Player) -> Action:
99101
# TFT for six rounds

axelrod/strategies/darwin.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from axelrod.action import Action
99
from axelrod.player import Player
1010

11+
from typing import Optional
12+
1113
C, D = Action.C, Action.D
1214

1315

@@ -48,7 +50,7 @@ class Darwin(Player):
4850
valid_callers = ["play"] # What functions may invoke our strategy.
4951

5052
def __init__(self) -> None:
51-
self.outcomes = None # type: dict
53+
self.outcomes = None # type: Optional[dict]
5254
self.response = Darwin.genome[0]
5355
super().__init__()
5456

@@ -64,6 +66,7 @@ def strategy(self, opponent: Player) -> Action:
6466
trial = len(self.history)
6567

6668
if trial > 0:
69+
assert self.outcomes is not None
6770
outcome = self.outcomes[(self.history[-1], opponent.history[-1])]
6871
self.mutate(outcome, trial)
6972
# Update genome with selected response

axelrod/strategies/hunter.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from axelrod.player import Player
33
from axelrod._strategy_utils import detect_cycle
44

5-
from typing import List, Tuple
5+
from typing import List, Tuple, Optional
66

77
C, D = Action.C, Action.D
88

@@ -120,7 +120,7 @@ class CycleHunter(Player):
120120

121121
def __init__(self) -> None:
122122
super().__init__()
123-
self.cycle = None # type: Tuple[Action]
123+
self.cycle = None # type: Optional[Tuple[Action]]
124124

125125
def strategy(self, opponent: Player) -> Action:
126126
if self.cycle:

axelrod/strategies/memoryone.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ def receive_match_attributes(self):
193193
self.set_four_vector(four_vector)
194194

195195
def __repr__(self) -> str:
196+
assert self.p is not None
196197
return "%s: %s" % (self.name, round(self.p, 2))
197198

198199

axelrod/tests/unit/test_moran.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,13 @@ def test_death_in_db(self):
7777
players = axelrod.Cooperator(), axelrod.Defector(), axelrod.TitForTat()
7878
mp = MoranProcess(players, mutation_rate=0.5, mode="db")
7979
axelrod.seed(1)
80-
self.assertEqual(mp.death(0), 0)
80+
self.assertEqual(mp.death(), 0)
8181
self.assertEqual(mp.dead, 0)
8282
axelrod.seed(5)
83-
self.assertEqual(mp.death(0), 1)
83+
self.assertEqual(mp.death(), 1)
8484
self.assertEqual(mp.dead, 1)
8585
axelrod.seed(2)
86-
self.assertEqual(mp.death(0), 2)
86+
self.assertEqual(mp.death(), 2)
8787
self.assertEqual(mp.dead, 2)
8888

8989
def test_death_in_bd(self):
@@ -102,14 +102,14 @@ def test_birth_in_db(self):
102102
players = axelrod.Cooperator(), axelrod.Defector(), axelrod.TitForTat()
103103
mp = MoranProcess(players, mode="db")
104104
axelrod.seed(1)
105-
self.assertEqual(mp.death(0), 0)
105+
self.assertEqual(mp.death(), 0)
106106
self.assertEqual(mp.birth(0), 2)
107107

108108
def test_birth_in_bd(self):
109109
players = axelrod.Cooperator(), axelrod.Defector(), axelrod.TitForTat()
110110
mp = MoranProcess(players, mode="bd")
111111
axelrod.seed(1)
112-
self.assertEqual(mp.birth(0), 0)
112+
self.assertEqual(mp.birth(), 0)
113113

114114
def test_fixation_check(self):
115115
players = axelrod.Cooperator(), axelrod.Cooperator()

axelrod/tournament.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
C, D = Action.C, Action.D
2323

24-
from typing import List, Tuple
24+
from typing import List, Tuple, Optional
2525

2626

2727
class Tournament(object):
@@ -83,8 +83,8 @@ def __init__(self, players: List[Player],
8383
self._logger = logging.getLogger(__name__)
8484

8585
self.use_progress_bar = True
86-
self.filename = None # type: str
87-
self._temp_file_descriptor = None # type: int
86+
self.filename = None # type: Optional[str]
87+
self._temp_file_descriptor = None # type: Optional[int]
8888

8989
def setup_output(self, filename=None):
9090
"""assign/create `filename` to `self`. If file should be deleted once
@@ -142,6 +142,7 @@ def play(self, build_results: bool = True, filename: str = None,
142142
processes=processes,
143143
progress_bar=progress_bar)
144144
if self._temp_file_descriptor is not None:
145+
assert self.filename is not None
145146
os.close(self._temp_file_descriptor)
146147
os.remove(self.filename)
147148

0 commit comments

Comments
 (0)