@@ -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
0 commit comments