Teaching toolkit for the ELTE Game Theory course: solvers, game library, and Jupyter-friendly visualizations.
Project description
gtlab - Game Theory Lab
A teaching toolkit for the ELTE Game Theory course. It consolidates the solvers, example games, and Jupyter visualizations that previously lived (duplicated) in six separate Colab notebooks into one installable, extensible package.
Install
pip install -e ".[full]" # full = nashpy + pulp extras (recommended in Colab)
pip install -e . # core only (numpy / scipy / matplotlib / pandas)
Quick start
import gtlab
gtlab.apply_rc() # shared matplotlib styling (call once)
from gtlab.games import prisoners_dilemma
prisoners_dilemma().solve() # annotated bimatrix in a Jupyter cell
Build your own game:
import numpy as np
from gtlab import NormalFormGame
g = NormalFormGame(
A=np.array([[3, 0], [5, 1]]),
B=np.array([[3, 5], [0, 1]]),
row_actions=["Cooperate", "Defect"],
col_actions=["Cooperate", "Defect"],
name="My Game",
)
g.explain()
Architecture
The design separates the three concerns that were tangled together in the notebooks:
gtlab/
├── core/ game classes - hold data, expose a thin API
│ ├── normal_form.py NormalFormGame
│ ├── zero_sum.py ZeroSumGame
│ ├── correlated.py CorrelatedGame
│ ├── stochastic.py StochasticGame
│ ├── extensive_form.py ExtensiveFormGame
│ └── bayesian.py PostedPrice, FirstPriceAuction, SecondPriceAuction
├── solvers/ pure algorithms - numpy in, numpy/dict out, no display
│ ├── best_response.py nash.py dominance.py
│ ├── pareto.py linprog.py value_iteration.py
│ ├── welfare.py learning.py correlated.py
├── viz/ display layer - ONE theme, formatters, HTML, plots
│ ├── theme.py format.py html.py plots.py
└── games/ ready-made example games + REGISTRY
Rule of thumb: math goes in solvers/, rendering goes in viz/, and the
classes in core/ just wire them together. A theme tweak is one edit in
viz/theme.py; a new algorithm is one file in solvers/; a new example is one
factory in games/.
Extending
| To add… | …do this |
|---|---|
| a new example game | write a factory in games/, add it to REGISTRY |
| a new algorithm | add a pure function in solvers/, export it |
| a new game type | add a class in core/ that calls solvers + viz |
| restyle output | edit viz/theme.py (colors / CSS / rcParams) |
Tests
pip install -e ".[dev]"
pytest
The solver layer has golden-value tests so refactors stay behavior-preserving.
Notebook migration
Each lecture notebook drops its ~2,000-line engine class and imports from
gtlab instead, keeping only narrative and example-specific calls. As of
0.2.0 the package covers the full notebook surface: every solver, plot
(plot_tree, plot_mixed, plot_frontier, ...), parameter sweep, styled
walkthrough (explain, iesds_explain, *_detail, verify_*), Monte-Carlo
simulate, and the GeneralSumSG / CheapTalkGame models. The methods the
notebooks relied on (.summary(), .solve(), .explain(), .plot_*()) are
preserved on the core classes.
# old: 1,800 lines of NormalFormGame defined inline
# new:
from gtlab.games import prisoners_dilemma
prisoners_dilemma().solve(show_br=True, show_ne=True)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gtlab-0.2.2.tar.gz.
File metadata
- Download URL: gtlab-0.2.2.tar.gz
- Upload date:
- Size: 98.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9b137a8da0b8bada2475b26106ab727bc43bac82a5fdeeaf89fff9d74a719e2
|
|
| MD5 |
b8086eef963a03d58f06c9b9479b82aa
|
|
| BLAKE2b-256 |
cba48c29672fc9993c4854ec7eda38ce3e198d8f2cce23c2ef8bd973c0183d60
|
Provenance
The following attestation bundles were made for gtlab-0.2.2.tar.gz:
Publisher:
publish.yml on tamastheactual/gtlab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gtlab-0.2.2.tar.gz -
Subject digest:
e9b137a8da0b8bada2475b26106ab727bc43bac82a5fdeeaf89fff9d74a719e2 - Sigstore transparency entry: 1732991299
- Sigstore integration time:
-
Permalink:
tamastheactual/gtlab@2b983c8d269cc54be56be734616ac4a12e1c3a44 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/tamastheactual
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2b983c8d269cc54be56be734616ac4a12e1c3a44 -
Trigger Event:
push
-
Statement type:
File details
Details for the file gtlab-0.2.2-py3-none-any.whl.
File metadata
- Download URL: gtlab-0.2.2-py3-none-any.whl
- Upload date:
- Size: 104.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a95f90cfa49d275408bb55ce0f31b5f717ae0e23637734358a660ebedb838c6b
|
|
| MD5 |
a42b7ac83368c2c7d1c7b7677ee6a56e
|
|
| BLAKE2b-256 |
f227ac1cecabadae1fbb1e5c18a62544c01d1619859fc5444cf8f7b2956548d3
|
Provenance
The following attestation bundles were made for gtlab-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on tamastheactual/gtlab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gtlab-0.2.2-py3-none-any.whl -
Subject digest:
a95f90cfa49d275408bb55ce0f31b5f717ae0e23637734358a660ebedb838c6b - Sigstore transparency entry: 1732991317
- Sigstore integration time:
-
Permalink:
tamastheactual/gtlab@2b983c8d269cc54be56be734616ac4a12e1c3a44 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/tamastheactual
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2b983c8d269cc54be56be734616ac4a12e1c3a44 -
Trigger Event:
push
-
Statement type: