Skip to content

Commit e176877

Browse files
add filter for number of players
1 parent a314e30 commit e176877

2 files changed

Lines changed: 34 additions & 38 deletions

File tree

doc/tutorials/01_quickstart.ipynb

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
},
5151
{
5252
"cell_type": "code",
53-
"execution_count": null,
53+
"execution_count": 2,
5454
"id": "2060c1ed",
5555
"metadata": {},
5656
"outputs": [
@@ -60,7 +60,7 @@
6060
"pygambit.gambit.Game"
6161
]
6262
},
63-
"execution_count": 1,
63+
"execution_count": 2,
6464
"metadata": {},
6565
"output_type": "execute_result"
6666
}
@@ -83,7 +83,7 @@
8383
},
8484
{
8585
"cell_type": "code",
86-
"execution_count": 2,
86+
"execution_count": 3,
8787
"id": "9d8203e8",
8888
"metadata": {},
8989
"outputs": [],
@@ -111,7 +111,7 @@
111111
},
112112
{
113113
"cell_type": "code",
114-
"execution_count": 3,
114+
"execution_count": 4,
115115
"id": "61030607",
116116
"metadata": {},
117117
"outputs": [],
@@ -135,7 +135,7 @@
135135
},
136136
{
137137
"cell_type": "code",
138-
"execution_count": 4,
138+
"execution_count": 5,
139139
"id": "caecc334",
140140
"metadata": {},
141141
"outputs": [
@@ -149,7 +149,7 @@
149149
"Game(title='Prisoner's Dilemma')"
150150
]
151151
},
152-
"execution_count": 4,
152+
"execution_count": 5,
153153
"metadata": {},
154154
"output_type": "execute_result"
155155
}
@@ -189,7 +189,7 @@
189189
},
190190
{
191191
"cell_type": "code",
192-
"execution_count": null,
192+
"execution_count": 6,
193193
"id": "843ba7f3",
194194
"metadata": {},
195195
"outputs": [
@@ -203,7 +203,7 @@
203203
"Game(title='Another Prisoner's Dilemma')"
204204
]
205205
},
206-
"execution_count": 5,
206+
"execution_count": 6,
207207
"metadata": {},
208208
"output_type": "execute_result"
209209
}
@@ -233,7 +233,7 @@
233233
},
234234
{
235235
"cell_type": "code",
236-
"execution_count": 6,
236+
"execution_count": 7,
237237
"id": "5ee752c4",
238238
"metadata": {},
239239
"outputs": [
@@ -270,7 +270,7 @@
270270
},
271271
{
272272
"cell_type": "code",
273-
"execution_count": 7,
273+
"execution_count": 8,
274274
"id": "a81c06c7",
275275
"metadata": {},
276276
"outputs": [
@@ -280,7 +280,7 @@
280280
"pygambit.nash.NashComputationResult"
281281
]
282282
},
283-
"execution_count": 7,
283+
"execution_count": 8,
284284
"metadata": {},
285285
"output_type": "execute_result"
286286
}
@@ -300,7 +300,7 @@
300300
},
301301
{
302302
"cell_type": "code",
303-
"execution_count": 8,
303+
"execution_count": 9,
304304
"id": "bd395180",
305305
"metadata": {},
306306
"outputs": [
@@ -310,7 +310,7 @@
310310
"1"
311311
]
312312
},
313-
"execution_count": 8,
313+
"execution_count": 9,
314314
"metadata": {},
315315
"output_type": "execute_result"
316316
}
@@ -329,7 +329,7 @@
329329
},
330330
{
331331
"cell_type": "code",
332-
"execution_count": 9,
332+
"execution_count": 10,
333333
"id": "76570ebc",
334334
"metadata": {},
335335
"outputs": [
@@ -342,7 +342,7 @@
342342
"[[Rational(0, 1), Rational(1, 1)], [Rational(0, 1), Rational(1, 1)]]"
343343
]
344344
},
345-
"execution_count": 9,
345+
"execution_count": 10,
346346
"metadata": {},
347347
"output_type": "execute_result"
348348
}
@@ -354,7 +354,7 @@
354354
},
355355
{
356356
"cell_type": "code",
357-
"execution_count": 10,
357+
"execution_count": 11,
358358
"id": "6e8cfcde",
359359
"metadata": {},
360360
"outputs": [
@@ -364,7 +364,7 @@
364364
"pygambit.gambit.MixedStrategyProfileRational"
365365
]
366366
},
367-
"execution_count": 10,
367+
"execution_count": 11,
368368
"metadata": {},
369369
"output_type": "execute_result"
370370
}
@@ -385,7 +385,7 @@
385385
},
386386
{
387387
"cell_type": "code",
388-
"execution_count": 11,
388+
"execution_count": 12,
389389
"id": "980bf6b1",
390390
"metadata": {},
391391
"outputs": [
@@ -431,7 +431,7 @@
431431
},
432432
{
433433
"cell_type": "code",
434-
"execution_count": 3,
434+
"execution_count": 5,
435435
"id": "701aa52a",
436436
"metadata": {},
437437
"outputs": [
@@ -441,13 +441,13 @@
441441
"['PrisonersDilemma', 'PrisonersDilemmaTestgame']"
442442
]
443443
},
444-
"execution_count": 3,
444+
"execution_count": 5,
445445
"metadata": {},
446446
"output_type": "execute_result"
447447
}
448448
],
449449
"source": [
450-
"gbt.catalog.games(game_type=\"nfg\")"
450+
"gbt.catalog.games(game_type=\"nfg\", num_players=2)"
451451
]
452452
},
453453
{
@@ -460,7 +460,7 @@
460460
},
461461
{
462462
"cell_type": "code",
463-
"execution_count": 3,
463+
"execution_count": 14,
464464
"id": "6db7a29a",
465465
"metadata": {},
466466
"outputs": [
@@ -474,7 +474,7 @@
474474
"Game(title='Two person Prisoner's Dilemma game')"
475475
]
476476
},
477-
"execution_count": 3,
477+
"execution_count": 14,
478478
"metadata": {},
479479
"output_type": "execute_result"
480480
}
@@ -500,7 +500,7 @@
500500
},
501501
{
502502
"cell_type": "code",
503-
"execution_count": null,
503+
"execution_count": 15,
504504
"id": "f58eaa77",
505505
"metadata": {},
506506
"outputs": [],
@@ -518,21 +518,10 @@
518518
},
519519
{
520520
"cell_type": "code",
521-
"execution_count": null,
521+
"execution_count": 16,
522522
"id": "4119a2ac",
523523
"metadata": {},
524-
"outputs": [
525-
{
526-
"data": {
527-
"text/plain": [
528-
"pygambit.gambit.Game"
529-
]
530-
},
531-
"execution_count": 13,
532-
"metadata": {},
533-
"output_type": "execute_result"
534-
}
535-
],
524+
"outputs": [],
536525
"source": [
537526
"# gbt.read_nfg(\"prisoners_dilemma.nfg\")"
538527
]

src/pygambit/catalog/catalog.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,10 @@ def __init_subclass__(cls, **kwargs):
9393
cls._extract_metadata_from_game(cls._cached_game)
9494

9595

96-
def games(game_type: Literal["all", "nfg", "efg"] = "all") -> list[str]:
96+
def games(
97+
game_type: Literal["all", "nfg", "efg"] = "all",
98+
num_players: int | None = None,
99+
) -> list[str]:
97100
"""
98101
Return a list of catalog game names.
99102
@@ -104,6 +107,8 @@ def games(game_type: Literal["all", "nfg", "efg"] = "all") -> list[str]:
104107
- "all": return all games
105108
- "nfg": return only normal-form (strategic) games
106109
- "efg": return only extensive-form games
110+
num_players : int | None, default None
111+
If specified, only return games with the given number of players.
107112
108113
Returns
109114
-------
@@ -116,6 +121,8 @@ def get_all_subclasses(cls):
116121
for subclass in cls.__subclasses__():
117122
if subclass.__name__ not in ["CatalogGameFromFile"] and (
118123
game_type == "all" or subclass.game_type == game_type
124+
) and (
125+
num_players is None or subclass.num_players == num_players
119126
):
120127
all_subclasses.append(subclass.__name__)
121128
all_subclasses.extend(get_all_subclasses(subclass))

0 commit comments

Comments
 (0)