Skip to content

Commit 164eaf9

Browse files
fix filtering rules
1 parent 3fb7763 commit 164eaf9

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/pygambit/catalog/catalog.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,14 @@ def games(
145145
>>> games(is_tree=True, num_players=2) # 2-player extensive-form games
146146
"""
147147

148+
# Filter by extensive-form if filtering by tree-specific attributes
149+
if (
150+
num_actions is not None or
151+
num_infosets is not None or
152+
num_nodes is not None
153+
):
154+
is_tree = True
155+
148156
def get_all_subclasses(cls):
149157
"""Recursively get all subclasses."""
150158
all_subclasses = []
@@ -155,49 +163,64 @@ def get_all_subclasses(cls):
155163
all_subclasses.extend(get_all_subclasses(subclass))
156164
continue
157165

158-
if num_actions is not None and subclass.game.num_actions != num_actions:
166+
if num_actions is not None and num_actions != len(subclass.game.actions):
159167
all_subclasses.extend(get_all_subclasses(subclass))
160168
continue
161169

162170
if (
163171
num_contingencies is not None
164-
and subclass.game.num_contingencies != num_contingencies
172+
and num_contingencies != len(subclass.game.contingencies)
165173
):
166174
all_subclasses.extend(get_all_subclasses(subclass))
167175
continue
168176

169-
if num_infosets is not None and subclass.game.num_infosets != num_infosets:
177+
if (
178+
num_infosets is not None
179+
and num_infosets != len(subclass.game.infosets)
180+
):
170181
all_subclasses.extend(get_all_subclasses(subclass))
171182
continue
172183

173-
if is_const_sum is not None and subclass.game.is_const_sum != is_const_sum:
184+
if is_const_sum is not None and is_const_sum != subclass.game.is_const_sum:
174185
all_subclasses.extend(get_all_subclasses(subclass))
175186
continue
176187

177188
if (
178189
is_perfect_recall is not None
179-
and subclass.game.is_perfect_recall != is_perfect_recall
190+
and is_perfect_recall != subclass.game.is_perfect_recall
180191
):
181192
all_subclasses.extend(get_all_subclasses(subclass))
182193
continue
183194

184-
if is_tree is not None and subclass.game.is_tree != is_tree:
195+
if is_tree is not None and is_tree != subclass.game.is_tree:
185196
all_subclasses.extend(get_all_subclasses(subclass))
186197
continue
187198

188-
if num_nodes is not None and subclass.game.num_nodes != num_nodes:
199+
if (
200+
num_nodes is not None and
201+
num_nodes != len(subclass.game.nodes)
202+
):
189203
all_subclasses.extend(get_all_subclasses(subclass))
190204
continue
191205

192-
if num_outcomes is not None and subclass.game.num_outcomes != num_outcomes:
206+
if (
207+
num_outcomes is not None
208+
and num_outcomes != len(subclass.game.outcomes)
209+
):
193210
all_subclasses.extend(get_all_subclasses(subclass))
194211
continue
195212

196-
if num_strategies is not None and subclass.game.num_strategies != num_strategies:
213+
if (
214+
num_strategies is not None
215+
and num_strategies != len(subclass.game.strategies)
216+
):
197217
all_subclasses.extend(get_all_subclasses(subclass))
198218
continue
199219

200-
if num_players is not None and len(subclass.game.players) != num_players:
220+
if (
221+
num_players is not None
222+
and num_players != len(subclass.game.players)
223+
):
201224
all_subclasses.extend(get_all_subclasses(subclass))
202225
continue
203226

tests/test_catalog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def test_games_filter_by_num_players(self):
8383
three_player_games = catalog.games(num_players=3)
8484
for game_name in three_player_games:
8585
game_class = getattr(catalog, game_name)
86-
assert len(game_class().players) == 3
86+
assert len(game_class.game.players) == 3
8787

8888
def test_games_filter_by_custom_metadata(self):
8989
"""games() should filter by custom metadata fields."""

0 commit comments

Comments
 (0)