Skip to content

Commit 2f69c57

Browse files
committed
Merge branch 'master' into dev_terminology
# Conflicts: # doc/tutorials/03_stripped_down_poker.ipynb # src/games/stratmixed.h # src/pygambit/nash.pxi # src/tools/liap/liap.cc # tests/test_behav.py # tests/test_nash.py
2 parents 8512263 + 8d5854f commit 2f69c57

132 files changed

Lines changed: 4071 additions & 2385 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"features": {
44
"ghcr.io/devcontainers/features/python:1": {
55
"installTools": true,
6-
"version": "3.11"
6+
"version": "3.14"
77
},
88
"ghcr.io/devcontainers-contrib/features/gdbgui:2": {
99
"version": "latest"

.github/ISSUE_TEMPLATE/tutorial_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ body:
3232
description: Add links to any research papers or other resources the author will need to write this tutorial.
3333
value: "`[Markdown link text](url)`"
3434
validations:
35-
required: false
35+
required: false

.github/workflows/lint.yml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,7 @@ name: Linters and coding standards checks
22

33
on:
44
push:
5-
paths-ignore:
6-
- 'doc/**'
7-
- '.github/ISSUE_TEMPLATE/**'
8-
- 'README.md'
95
pull_request:
10-
paths-ignore:
11-
- 'doc/**'
12-
- '.github/ISSUE_TEMPLATE/**'
13-
- 'README.md'
146

157
jobs:
168
clang-format:
@@ -55,7 +47,7 @@ jobs:
5547
- uses: actions/checkout@v5
5648
- uses: actions/setup-python@v6
5749
with:
58-
python-version: "3.12"
50+
python-version: "3.14"
5951
- uses: py-actions/flake8@v2
6052

6153
cython-lint:
@@ -66,7 +58,7 @@ jobs:
6658
- name: Setup Python
6759
uses: actions/setup-python@v6
6860
with:
69-
python-version: "3.12"
61+
python-version: "3.14"
7062
- name: Install Python packages
7163
run: python -m pip install cython-lint
7264
- name: cython-lint

.github/workflows/osxbinary.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@ name: MacOS static GUI binary
22

33
on:
44
push:
5-
paths-ignore:
6-
- 'doc/**'
7-
- '.github/ISSUE_TEMPLATE/**'
8-
- 'README.md'
95
tags:
106
- 'v*'
117
schedule:
128
- cron: '0 6 * * 4'
139

1410
jobs:
1511
macos-13:
16-
runs-on: macos-13
12+
runs-on: macos-14
1713
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
1814
steps:
1915
- uses: actions/checkout@v5
@@ -37,5 +33,5 @@ jobs:
3733
- run: make osx-dmg
3834
- uses: actions/upload-artifact@v5
3935
with:
40-
name: artifact-osx-13
36+
name: artifact-osx-14
4137
path: "*.dmg"

.github/workflows/python.yml

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,15 @@ name: pygambit Python extension
22

33
on:
44
push:
5-
paths-ignore:
6-
- 'doc/**'
7-
- '.github/ISSUE_TEMPLATE/**'
8-
- 'README.md'
95
pull_request:
10-
paths-ignore:
11-
- 'doc/**'
12-
- '.github/ISSUE_TEMPLATE/**'
13-
- 'README.md'
146

157
jobs:
168
linux:
179
runs-on: ubuntu-latest
1810
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
1911
strategy:
2012
matrix:
21-
python-version: ['3.9', '3.13']
13+
python-version: ['3.10', '3.14']
2214

2315
steps:
2416
- uses: actions/checkout@v5
@@ -29,7 +21,9 @@ jobs:
2921
- name: Set up dependencies
3022
run: |
3123
python -m pip install --upgrade pip
32-
pip install setuptools build cython pytest pytest-skip-slow wheel lxml numpy scipy nbformat nbclient ipykernel
24+
pip install setuptools build cython wheel
25+
pip install -r tests/requirements.txt
26+
pip install -r doc/requirements.txt
3327
- name: Build source distribution
3428
run:
3529
python -m build
@@ -38,20 +32,14 @@ jobs:
3832
cd dist
3933
pip install -v pygambit*.tar.gz
4034
- name: Run tests
41-
run: |
42-
if [ "${{ matrix.python-version }}" = "3.9" ]; then
43-
# Python 3.9 on linux skips the notebook execution test (notebooks may require newer kernels/deps)
44-
pytest -q -k 'not test_execute_notebook'
45-
else
46-
pytest
47-
fi
35+
run: pytest --run-tutorials
4836

4937
macos-13:
50-
runs-on: macos-13
38+
runs-on: macos-14
5139
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
5240
strategy:
5341
matrix:
54-
python-version: ['3.13']
42+
python-version: ['3.14']
5543

5644
steps:
5745
- uses: actions/checkout@v4
@@ -62,19 +50,20 @@ jobs:
6250
- name: Set up dependencies
6351
run: |
6452
python -m pip install --upgrade pip
65-
pip install cython pytest pytest-skip-slow wheel lxml numpy scipy nbformat nbclient ipykernel
53+
pip install setuptools build cython wheel
54+
pip install -r tests/requirements.txt
6655
- name: Build extension
6756
run: |
6857
python -m pip install -v .
6958
- name: Run tests
7059
run: pytest
7160

7261
macos-14:
73-
runs-on: macos-14
62+
runs-on: macos-15
7463
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
7564
strategy:
7665
matrix:
77-
python-version: ['3.13']
66+
python-version: ['3.14']
7867

7968
steps:
8069
- uses: actions/checkout@v4
@@ -85,19 +74,21 @@ jobs:
8574
- name: Set up dependencies
8675
run: |
8776
python -m pip install --upgrade pip
88-
pip install cython pytest pytest-skip-slow wheel lxml numpy scipy nbformat nbclient ipykernel
77+
pip install setuptools build cython wheel
78+
pip install -r tests/requirements.txt
79+
pip install -r doc/requirements.txt
8980
- name: Build extension
9081
run: |
9182
python -m pip install -v .
9283
- name: Run tests
93-
run: pytest
84+
run: pytest --run-tutorials
9485

9586
windows:
9687
runs-on: windows-latest
9788
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
9889
strategy:
9990
matrix:
100-
python-version: ['3.13']
91+
python-version: ['3.14']
10192

10293
steps:
10394
- uses: actions/checkout@v5
@@ -108,9 +99,11 @@ jobs:
10899
- name: Set up dependencies
109100
run: |
110101
python -m pip install --upgrade pip
111-
pip install cython pytest pytest-skip-slow wheel lxml numpy scipy nbformat nbclient ipykernel
102+
pip install setuptools build cython wheel
103+
pip install -r tests/requirements.txt
104+
pip install -r doc/requirements.txt
112105
- name: Build extension
113106
run: |
114107
python -m pip install -v .
115108
- name: Run tests
116-
run: pytest
109+
run: pytest --run-tutorials

.github/workflows/tools.yml

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,7 @@ name: Build executables
22

33
on:
44
push:
5-
paths-ignore:
6-
- 'doc/**'
7-
- '.github/ISSUE_TEMPLATE/**'
8-
- 'README.md'
95
pull_request:
10-
paths-ignore:
11-
- 'doc/**'
12-
- '.github/ISSUE_TEMPLATE/**'
13-
- 'README.md'
146

157
jobs:
168
linux:
@@ -41,7 +33,7 @@ jobs:
4133
sudo make install
4234
4335
macos:
44-
runs-on: macos-13
36+
runs-on: macos-14
4537
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
4638
steps:
4739
- uses: actions/checkout@v5
@@ -56,11 +48,11 @@ jobs:
5648
- run: make osx-dmg
5749
- uses: actions/upload-artifact@v5
5850
with:
59-
name: artifact-osx-13
51+
name: artifact-osx-14
6052
path: "*.dmg"
6153

6254
macos-14:
63-
runs-on: macos-14
55+
runs-on: macos-15
6456
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
6557
steps:
6658
- uses: actions/checkout@v5
@@ -75,7 +67,7 @@ jobs:
7567
- run: make osx-dmg
7668
- uses: actions/upload-artifact@v5
7769
with:
78-
name: artifact-osx-14
70+
name: artifact-osx-15
7971
path: "*.dmg"
8072

8173
windows:
@@ -99,7 +91,7 @@ jobs:
9991
run: |
10092
mkdir installer
10193
cp gambit* installer
102-
"${WIX}bin/candle" gambit.wxs
94+
"${WIX}bin/candle" build_support/msw/gambit.wxs
10395
"${WIX}bin/light" -ext WixUIExtension gambit.wixobj
10496
- uses: actions/upload-artifact@v5
10597
with:

.github/workflows/wheels.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ name: pygambit wheels
33

44
on:
55
push:
6-
paths-ignore:
7-
- 'doc/**'
8-
- '.github/ISSUE_TEMPLATE/**'
9-
- 'README.md'
106
tags:
117
- 'v*'
128
schedule:

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ _build
2020
build
2121
*.egg-info
2222
*.pyc
23+
*.so
2324

2425
config.guess
2526
config.sub
@@ -42,3 +43,5 @@ Gambit.app/*
4243
*.so
4344
doc/tutorials/games/*.nfg
4445
doc/tutorials/games/*.efg
46+
*.dmg
47+
Gambit.app/*

.readthedocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ formats: all
88
build:
99
os: ubuntu-22.04
1010
tools:
11-
python: "3.13"
11+
python: "3.14"
1212
apt_packages:
1313
- libgmp-dev
1414
- pandoc

ChangeLog

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,24 @@
77
are always drawn and indicators are always drawn if an information set spans multiple levels.
88
- In `pygambit`, indexing the children of a node by a string inteprets the string as an action label,
99
not a label of a child node. In addition, indexing by an action object is now supported. (#587)
10+
- In `pygambit`, `min_payoff` and `max_payoff` (for both games and players) now refers to payoffs in
11+
any play of the game; previously this referred only to the set of outcomes. (#498)
1012

1113
### Added
1214
- Tests for EFG Nash solvers -- `enumpoly_solve`, `lp_solve`, `lcp_solve` -- in behavior stratgegies
15+
- In `pygambit`, `Node` objects now have a read-only property `own_prior_action` and `Infoset` objects
16+
have a read-only property `own_prior_actions` to retrieve the last action or the set of last actions
17+
taken by the player before reaching the node or information set, respectively. (#582)
18+
- In `pygambit`, `Node` objects now have a read-only property `is_strategy_reachable` to determine
19+
if the node is reachable by at least one pure strategy profile. This proves useful for identifying
20+
unreachable parts of the game tree in games with absent-mindedness. (#629)
1321

1422
### Removed
1523
- Eliminating dominated actions has been removed from the GUI as it was implementing a non-standard
1624
formulation of dominance. (#612)
25+
- The C++ method for computing subgame perfect equilibria with selected methods has been removed
26+
(and as a result from the `enumpure`, `lp`, and `lcp` command-line tools); this will be replaced
27+
with new and more customisable approaches. (#639)
1728

1829
## [16.4.1] - unreleased
1930

@@ -22,6 +33,12 @@
2233
when changing the number of strategies in the game (#571)
2334
- Fixed improper shared pointer handling when writing a .nfg file based on a game in
2435
extensive form.
36+
- Fixed a regression in the GUI in which unique action labels were not being generated when
37+
adding a move via drag-and-drop of a player icon (#618)
38+
- Fixed a regression generating null pointer dereference errors when setting the outcome of
39+
a node to the null outcome (#625, #647)
40+
- Fixed a regression in calculating payoff quantities for mixed strategy profiles derived from
41+
mixed behavior profiles (#616)
2542

2643

2744
## [16.3.2] - unreleased

0 commit comments

Comments
 (0)