Skip to content

Commit f07312b

Browse files
committed
Merge branch 'master' into dev_matrix_isa
# Conflicts: # src/core/matrix.imp # src/core/recarray.h
2 parents df4de2f + 47e86f3 commit f07312b

263 files changed

Lines changed: 2917 additions & 1049 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.

.github/workflows/lint.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
name: clang-format
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v5
12+
- uses: actions/checkout@v6
1313
- name: Run clang-format style check for C/C++
1414
uses: jidicula/clang-format-action@v4.16.0
1515
with:
@@ -21,7 +21,7 @@ jobs:
2121
runs-on: ubuntu-latest
2222
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
2323
steps:
24-
- uses: actions/checkout@v5
24+
- uses: actions/checkout@v6
2525
- name: Install dependencies
2626
run: |
2727
sudo apt-key adv --fetch-keys http://repos.codelite.org/CodeLite.asc
@@ -37,14 +37,14 @@ jobs:
3737
runs-on: ubuntu-latest
3838
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
3939
steps:
40-
- uses: actions/checkout@v5
40+
- uses: actions/checkout@v6
4141
- uses: chartboost/ruff-action@v1
4242

4343
flake8:
4444
runs-on: ubuntu-latest
4545
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
4646
steps:
47-
- uses: actions/checkout@v5
47+
- uses: actions/checkout@v6
4848
- uses: actions/setup-python@v6
4949
with:
5050
python-version: "3.14"
@@ -54,7 +54,7 @@ jobs:
5454
runs-on: ubuntu-latest
5555
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
5656
steps:
57-
- uses: actions/checkout@v5
57+
- uses: actions/checkout@v6
5858
- name: Setup Python
5959
uses: actions/setup-python@v6
6060
with:

.github/workflows/osxbinary.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: macos-14
1313
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
1414
steps:
15-
- uses: actions/checkout@v5
15+
- uses: actions/checkout@v6
1616
- name: Install dependencies
1717
run: |
1818
brew install automake autoconf

.github/workflows/python.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
python-version: ['3.10', '3.14']
1414

1515
steps:
16-
- uses: actions/checkout@v5
16+
- uses: actions/checkout@v6
1717
- name: Set up Python ${{ matrix.python-version }}
1818
uses: actions/setup-python@v6
1919
with:
@@ -42,7 +42,7 @@ jobs:
4242
python-version: ['3.14']
4343

4444
steps:
45-
- uses: actions/checkout@v4
45+
- uses: actions/checkout@v6
4646
- name: Set up Python ${{ matrix.python-version }}
4747
uses: actions/setup-python@v6
4848
with:
@@ -67,7 +67,7 @@ jobs:
6767
python-version: ['3.14']
6868

6969
steps:
70-
- uses: actions/checkout@v4
70+
- uses: actions/checkout@v6
7171
- name: Set up Python ${{ matrix.python-version }}
7272
uses: actions/setup-python@v6
7373
with:
@@ -92,7 +92,7 @@ jobs:
9292
python-version: ['3.14']
9393

9494
steps:
95-
- uses: actions/checkout@v5
95+
- uses: actions/checkout@v6
9696
- name: Set up Python ${{ matrix.python-version }}
9797
uses: actions/setup-python@v6
9898
with:

.github/workflows/tools.yml

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
runs-on: ubuntu-latest
1010
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
1111
steps:
12-
- uses: actions/checkout@v5
12+
- uses: actions/checkout@v6
1313
- name: Install dependencies
1414
run: |
1515
sudo apt-key adv --fetch-keys http://repos.codelite.org/CodeLite.asc
@@ -33,42 +33,17 @@ jobs:
3333
sudo make install
3434
3535
macos:
36-
runs-on: macos-14
37-
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
38-
steps:
39-
- uses: actions/checkout@v5
40-
- name: Install dependencies
41-
run: brew install automake autoconf wxwidgets
42-
- run: aclocal
43-
- run: automake --add-missing
44-
- run: autoconf
45-
- run: ./configure
46-
- run: make
47-
- run: sudo make install
48-
- run: make osx-dmg
49-
- uses: actions/upload-artifact@v6
50-
with:
51-
name: artifact-osx-14
52-
path: "*.dmg"
53-
54-
macos-14:
5536
runs-on: macos-15
5637
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
5738
steps:
58-
- uses: actions/checkout@v5
39+
- uses: actions/checkout@v6
5940
- name: Install dependencies
6041
run: brew install automake autoconf wxwidgets
6142
- run: aclocal
6243
- run: automake --add-missing
6344
- run: autoconf
6445
- run: ./configure
6546
- run: make
66-
- run: sudo make install
67-
- run: make osx-dmg
68-
- uses: actions/upload-artifact@v6
69-
with:
70-
name: artifact-osx-15
71-
path: "*.dmg"
7247

7348
windows:
7449
runs-on: windows-latest
@@ -77,7 +52,7 @@ jobs:
7752
run:
7853
shell: msys2 {0}
7954
steps:
80-
- uses: actions/checkout@v5
55+
- uses: actions/checkout@v6
8156
- uses: msys2/setup-msys2@v2
8257
with:
8358
install: mingw-w64-x86_64-toolchain make automake autoconf

.github/workflows/wheels.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: windows-latest
1414

1515
steps:
16-
- uses: actions/checkout@v5
16+
- uses: actions/checkout@v6
1717
- name: Set up Python
1818
uses: actions/setup-python@v6
1919
with:

ChangeLog

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,44 @@
11
# Changelog
22

3-
## [16.5.0] - unreleased
3+
## [16.5.0] - 2026-01-05
4+
5+
### Fixed
6+
- Sequence-form based equilibrium-finding methods returned incorrect output on games with
7+
outcomes at non-terminal nodes. (#654)
48

59
### Added
610
- Implement `IsAbsentMinded()` on information sets (C++) and `Infoset.is_absent_minded` (Python)
711
to detect if an information is absent-minded.
12+
- Tests for EFG Nash solvers -- `enumpoly_solve`, `lp_solve`, `lcp_solve` -- in behavior strategies
13+
- In `pygambit`, `Node` objects now have a read-only property `own_prior_action` and `Infoset` objects
14+
have a read-only property `own_prior_actions` to retrieve the last action or the set of last actions
15+
taken by the player before reaching the node or information set, respectively. (#582)
16+
- In `pygambit`, `Node` objects now have a read-only property `is_strategy_reachable` to determine
17+
if the node is reachable by at least one pure strategy profile. This proves useful for identifying
18+
unreachable parts of the game tree in games with absent-mindedness. (#629)
819

920
### Changed
21+
- Labels for players, outcomes, strategies, and actions are expected to be non-empty and unique within
22+
the relevant scope (games for players and outcomes, players for strategies, and information sets for
23+
actions). `pygambit` now issues a `FutureWarning` if a label is changed that does not conform to these
24+
expectations. There is now an optional flag `normalize_labels` to `read_*` which will automatically
25+
fill in non-confirming sets of labels. In version 16.6 these will be enforced; invalid label sets will
26+
generate an error and files will be normalized automatically on read. (#614)
27+
- Terminology for agent-form calculations on extensive games has been clarified. Mixed behavior profiles
28+
distinguish "agent" regret and liap values from their strategy-based analogs. Methods which compute
29+
using the agent-form - specifically `enumpure_solve` and `liap_solve`, now clarify this by being named
30+
differently in `pygambit`. (#617)
31+
- For clarity, the `stop_after` and `max_depth` arguments to `lcp_solve` are no longer permitted when solving using
32+
the sequence form. These actually had no effect in previous versions. (#671)
1033
- In the graphical interface, removed option to configure information set link drawing; information sets
1134
are always drawn and indicators are always drawn if an information set spans multiple levels.
1235
- In `pygambit`, indexing the children of a node by a string inteprets the string as an action label,
1336
not a label of a child node. In addition, indexing by an action object is now supported. (#587)
1437
- In `pygambit`, `min_payoff` and `max_payoff` (for both games and players) now refers to payoffs in
1538
any play of the game; previously this referred only to the set of outcomes. (#498)
16-
17-
### Added
18-
- Tests for EFG Nash solvers -- `enumpoly_solve`, `lp_solve`, `lcp_solve` -- in behavior stratgegies
19-
- In `pygambit`, `Node` objects now have a read-only property `own_prior_action` and `Infoset` objects
20-
have a read-only property `own_prior_actions` to retrieve the last action or the set of last actions
21-
taken by the player before reaching the node or information set, respectively. (#582)
22-
- In `pygambit`, `Node` objects now have a read-only property `is_strategy_reachable` to determine
23-
if the node is reachable by at least one pure strategy profile. This proves useful for identifying
24-
unreachable parts of the game tree in games with absent-mindedness. (#629)
39+
- In `pygambit`, calls to `sort_infosets` are no longer required to normalise the game representation.
40+
Iteration ordering of information sets and their members is ensured internally. `sort_infosets`
41+
is therefore now a no-op and is deprecated; it will be removed in a future version.
2542

2643
### Removed
2744
- Eliminating dominated actions has been removed from the GUI as it was implementing a non-standard
@@ -30,7 +47,7 @@
3047
(and as a result from the `enumpure`, `lp`, and `lcp` command-line tools); this will be replaced
3148
with new and more customisable approaches. (#639)
3249

33-
## [16.4.1] - unreleased
50+
## [16.4.1] - 2025-12-17
3451

3552
### Fixed
3653
- Fixed a regression in which null outcomes in strategic game tables were not handled correctly
@@ -45,7 +62,7 @@
4562
mixed behavior profiles (#616)
4663

4764

48-
## [16.3.2] - unreleased
65+
## [16.3.2] - 2025-12-04
4966

5067
### Fixed
5168
- Parsing of output of `gambit-logit` in the graphical interface did not handle the

Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
##
22
## This file is part of Gambit
3-
## Copyright (c) 1994-2025, The Gambit Project (https://www.gambit-project.org)
3+
## Copyright (c) 1994-2026, The Gambit Project (https://www.gambit-project.org)
44
##
55
## FILE: Makefile.am
66
## Top-level automake input file for Gambit

build_support/GAMBIT_VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
16.4.0
1+
16.5.0

contrib/games/myerson_fig_4_2.efg

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
EFG 2 R "Myerson (1991) Fig 4.2" { "Player 1" "Player 2" }
2+
"An example from Myerson (1991) Fig 4.2 which has an agent Nash equilibrium that is
3+
not a Nash equilibrium"
4+
5+
p "" 1 1 "" { "A1" "B1" } 0
6+
p "" 2 1 "" { "W2" "X2" } 0
7+
p "" 1 2 "" { "Y1" "Z1" } 0
8+
t "" 1 "" { 3, 0 }
9+
t "" 2 "" { 0, 0 }
10+
p "" 1 2 "" { "Y1" "Z1" } 0
11+
t "" 3 "" { 2, 3 }
12+
t "" 4 "" { 4, 1 }
13+
p "" 2 1 "" { "W2" "X2" } 0
14+
t "" 5 "" { 2, 3 }
15+
t "" 6 "" { 3, 2 }

doc/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949

5050
# General information about the project.
5151
project = "Gambit"
52-
copyright = "1994-2025, The Gambit Project" # noqa
52+
copyright = "1994-2026, The Gambit Project" # noqa
5353

5454
# The version info for the project you're documenting, acts as replacement for
5555
# |version| and |release|, also used in various other places throughout the

0 commit comments

Comments
 (0)