Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
88e17db
Backport version bump of upload-artifact to 16.2 maintenance branch
tturocy Jan 8, 2025
105dbac
Remove class structure for Nash equilibrium algorithms
tturocy Jan 14, 2025
6240732
Add a static build of OSX graphical interface
EdwinB12 Jan 13, 2025
64ecf8a
Updates to PureStrategyProfile
tturocy Jan 29, 2025
d27e16d
Some cleanup of linear algebra sublibrary
tturocy Feb 3, 2025
5295d31
Fix to writing correctly the serialised game to a named file.
tturocy Mar 20, 2025
cd813a0
Rewrite some Game internals to use STL algorithms and iterators inste…
tturocy Mar 20, 2025
41dc9ee
Remove GetAction(int) from Game as part of deprecating access-by-inde…
tturocy Mar 21, 2025
c8c2046
Remove GetActionProb(int) from GameInfoset.
tturocy Mar 21, 2025
70ee889
Bump jidicula/clang-format-action from 4.14.0 to 4.15.0
dependabot[bot] Mar 24, 2025
6ef5d57
Rationalise implementation of outcome objects
tturocy Mar 24, 2025
c308a1b
Add missing MixedBehaviorProfile.infoset_regret and MixedBehaviorProf…
tturocy Mar 25, 2025
02cd061
Regression fix for serialising game when filename is specified.
tturocy Mar 28, 2025
ef6e67b
Regression fix for premature invalidation of object.
tturocy Mar 27, 2025
f038c28
Merge branch 'maint16_3'
tturocy Mar 28, 2025
4a3f021
Correct regression in extracting a MixedStrategy for a player
tturocy Mar 28, 2025
a65784d
Change GamePlayerRep::m_infosets from Array to std::vector.
d-kad Mar 28, 2025
b5897f9
Merge branch 'maint16_2' into maint16_3
tturocy Mar 28, 2025
107eeaa
Merge branch 'maint16_3'
tturocy Mar 28, 2025
a9fbcf1
Modernisation of some MixedStrategyProfile-related operations.
tturocy Mar 28, 2025
8f93587
Change GameTreeInfosetRep::m_members from Array to std::vector.
d-kad Mar 29, 2025
8994b3a
Separate implementation of player-specific and overall min/max payoffs.
tturocy Mar 31, 2025
6790db5
Improvements to clang-tidy checks
tturocy Apr 1, 2025
6ccbdeb
Remove mentions in help strings of command-line options which are not…
tturocy Apr 2, 2025
dab6a39
Fix bugs in Cython copy_tree and move_tree
d-kad Apr 4, 2025
0bb6ddf
Merge branch 'maint16_2' into maint16_3
tturocy Apr 9, 2025
e487cb4
Merge branch 'maint16_3'
tturocy Apr 9, 2025
7381f3e
Maintenance and update to project configuration and metadata
tturocy Apr 9, 2025
152b17b
Address some common compiler warnings.
tturocy Apr 9, 2025
70690db
Migrate creation and deletion of strategies to `GameRep`
tturocy Apr 15, 2025
9591cd4
Rationalise organisation of core directory
tturocy Apr 15, 2025
0a04bab
Implement tracking of node count of game trees.
d-kad Mar 29, 2025
58f66f5
Make players a data member of the base game, and STLify.
d-kad Apr 2, 2025
3e5cc45
Simplification and modernisation in game representation
tturocy Apr 15, 2025
8d1989d
Make GameRep::BuildComputedValues logically const
tturocy Apr 23, 2025
7ab1937
change m_outcomes from Array to std::vector and move them to GameRep
d-kad Apr 26, 2025
feec4ec
Fix bug in m_numNodes counter when doing operations involving deletion
d-kad May 2, 2025
a4b4936
add m_numNonterminalNodes field to GameRep
d-kad May 2, 2025
ca9256b
Remove GameNodeRep::GetChild(int) and implement children as a std::ve…
tturocy May 1, 2025
c17c911
In `GameTableRep`, store results table as `std::vector` instead of `A…
tturocy May 6, 2025
488290c
Use std::vector in NewTable
tturocy May 6, 2025
73abea1
Change GameInfosetRep::m_actions to std::vector
d-kad May 2, 2025
53c5e5c
Change GameInfosetRep::m_probs from Gambit::Array to std::vector
d-kad May 6, 2025
5b7788a
Convert GamePlayerRep::m_strategies from Array to std::vector
tturocy May 12, 2025
229f495
Implement collection classes for games.
tturocy May 1, 2025
7df3d34
Implement plays consistent with a node, information set, or action
d-kad May 9, 2025
b31be34
Expose access to action map for a strategy
tturocy Jan 28, 2025
ec360a5
Tests for the creation of the reduced strategic form from an extensiv…
rahulsavani Jun 11, 2025
e53af64
Implement an iterator in the Nodes class that starts from the root no…
d-kad Jun 21, 2025
795a4e6
Added #include <stack>
d-kad Jun 24, 2025
226982e
Refactor implementation of GameTreeRep::IsPerfectRecall, extend tests
d-kad Jun 24, 2025
f706eb6
Added #include <optional>
d-kad Jun 24, 2025
830a98a
Populate action_consequences_by_player when traversing the tree in Is…
d-kad Jun 26, 2025
331f5c1
Simplify IsPerfectRecall
d-kad Jun 27, 2025
1f6c050
Make behaviour of a strategy a map
tturocy Jun 11, 2025
d914361
Removed cached data from infoset
tturocy Jun 11, 2025
87a4305
Simplify GetNextSibling
tturocy Jun 11, 2025
76a8156
Remove ptr member
tturocy Jun 11, 2025
0a47e33
Remove whichbranch member
tturocy Jun 11, 2025
000aecf
Update implementation of GetAction
tturocy Jun 14, 2025
bb8289a
added 5 tests covering noPR/AM examples for which the RSF algo works
d-kad Jun 20, 2025
d9012b0
Add an auxiliary function GameTreeRep::BuildPlayerConsequences
d-kad Jun 27, 2025
d1ba690
Optimised BuildReducedStratsPR: recursive builder of strategies for a…
d-kad Jun 28, 2025
cf2f50e
Merge branch 'issue_440' into issue_533
d-kad Jun 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,12 @@ Checks: |
-modernize-avoid-c-arrays,
-modernize-pass-by-value,
-modernize-use-nodiscard,
-modernize-concat-nested-namespaces,
cppcoreguidelines-pro-type-cstyle-cast,
cppcoreguidelines-pro-type-member-init,
cppcoreguidelines-prefer-member-initializer,
misc-const-correctness
WarningsAsErrors: '*'
# Don't bother with wxWidgets headers
HeaderFilterRegex: '^((?!labenski).)*$'
AnalyzeTemporaryDtors: false
HeaderFilterRegex: '.*'
FormatStyle: none
User: arbiter
CheckOptions:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Run clang-format style check for C/C++
uses: jidicula/clang-format-action@v4.14.0
uses: jidicula/clang-format-action@v4.15.0
with:
clang-format-version: '17'
check-path: 'src'
Expand Down
37 changes: 37 additions & 0 deletions .github/workflows/osxbinary.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: MacOS static GUI binary

on:
push:
tags:
- 'v*'
schedule:
- cron: '0 6 * * 4'

jobs:
macos-13:
runs-on: macos-13
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
brew install automake autoconf
curl -L -O https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.6/wxWidgets-3.2.6.tar.bz2
tar xjf wxWidgets-3.2.6.tar.bz2
cd wxWidgets-3.2.6
mkdir build-release
cd build-release
../configure --disable-shared --disable-sys-libs
make -j4
sudo make install
- run: aclocal
- run: automake --add-missing
- run: autoconf
- run: ./configure
- run: make
- run: sudo make install
- run: make osx-dmg
- uses: actions/upload-artifact@v4
with:
name: artifact-osx-13
path: "*.dmg"
56 changes: 51 additions & 5 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
strategy:
matrix:
python-version: ['3.9', '3.12']
python-version: ['3.9', '3.13']

steps:
- uses: actions/checkout@v4
Expand All @@ -21,23 +21,69 @@ jobs:
- name: Set up dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools cython pytest wheel lxml numpy scipy
pip install setuptools build cython pytest pytest-skip-slow wheel lxml numpy scipy
- name: Build source distribution
run:
python setup.py sdist
python -m build
- name: Build from source distribution
run: |
cd dist
pip install -v pygambit*.tar.gz
- name: Run tests
run: pytest

macos-13:
runs-on: macos-13
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
strategy:
matrix:
python-version: ['3.13']

steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Set up dependencies
run: |
python -m pip install --upgrade pip
pip install cython pytest pytest-skip-slow wheel lxml numpy scipy
- name: Build extension
run: |
python -m pip install -v .
- name: Run tests
run: pytest

macos-14:
runs-on: macos-14
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
strategy:
matrix:
python-version: ['3.13']

steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Set up dependencies
run: |
python -m pip install --upgrade pip
pip install cython pytest pytest-skip-slow wheel lxml numpy scipy
- name: Build extension
run: |
python -m pip install -v .
- name: Run tests
run: pytest

windows:
runs-on: windows-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
strategy:
matrix:
python-version: ['3.12']
python-version: ['3.13']

steps:
- uses: actions/checkout@v4
Expand All @@ -48,7 +94,7 @@ jobs:
- name: Set up dependencies
run: |
python -m pip install --upgrade pip
pip install cython pytest wheel lxml numpy scipy
pip install cython pytest pytest-skip-slow wheel lxml numpy scipy
- name: Build extension
run: |
python -m pip install -v .
Expand Down
25 changes: 3 additions & 22 deletions .github/workflows/tools.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ jobs:
make
sudo make install

macos-13:
runs-on: macos-13
macos:
runs-on: macos-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
Expand All @@ -50,26 +50,7 @@ jobs:
- run: make osx-dmg
- uses: actions/upload-artifact@v4
with:
name: artifact-osx-13
path: "*.dmg"

macos-14:
runs-on: macos-14
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: brew install automake autoconf wxwidgets
- run: aclocal
- run: automake --add-missing
- run: autoconf
- run: ./configure
- run: make
- run: sudo make install
- run: make osx-dmg
- uses: actions/upload-artifact@v4
with:
name: artifact-osx-14
name: artifact-osx
path: "*.dmg"

windows:
Expand Down
26 changes: 24 additions & 2 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,28 @@

## [16.4.0] - unreleased

### Removed
### General
- Officially added support for Python 3.13.

### Removed
- The deprecated functions `Game.read_game`, `Game.parse_game` and `Game.write` functions have
been removed as planned. (#357)

### Added
- Implement `GetPlays()` (C++) and `get_plays` (Python) to compute the set of terminal nodes consistent
with a node, information set, or action (#517)
- Implement `GameStrategyRep::GetAction` (C++) and `Strategy.action` (Python) retrieving the action
prescribed by a strategy at an information set
- Tests for creation of the reduced strategic form from an extensive-form game (currently only
for games with perfect recall)


## [16.3.1] - unreleased

### Fixed
- Corrected a regression in which information sets were prematurely invalidated (and therefore
`delete this` called on them) when removing the last node from an information set.


## [16.3.0] - 2025-01-13

Expand Down Expand Up @@ -50,6 +67,12 @@
Explorer, as GTE no longer reads files in this format.


## [16.2.2] - unreleased

### Fixed
- `Game.copy_tree` and `Game.move_tree` implementations reversed the roles of the
`src` and `dest` nodes (#499)

## [16.2.1] - 2025-01-06

### Fixed
Expand All @@ -60,7 +83,6 @@
- Attempting to call the default constructor on Game objects (rather than one of the factory
functions) now raises a more informative exception (#463)


## [16.2.0] - 2024-04-05

### Fixed
Expand Down
31 changes: 17 additions & 14 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,8 @@ EXTRA_DIST = \
src/README.rst

core_SOURCES = \
src/core/core.h \
src/core/util.h \
src/core/array.h \
src/core/list.h \
src/core/vector.h \
Expand Down Expand Up @@ -312,12 +314,7 @@ game_SOURCES = \
src/games/nash.h

linalg_SOURCES = \
src/solvers/linalg/basis.cc \
src/solvers/linalg/basis.h \
src/solvers/linalg/bfs.h \
src/solvers/linalg/btableau.cc \
src/solvers/linalg/btableau.h \
src/solvers/linalg/btableau.imp \
src/solvers/linalg/lpsolve.cc \
src/solvers/linalg/lpsolve.h \
src/solvers/linalg/lpsolve.imp \
Expand Down Expand Up @@ -391,6 +388,7 @@ gambit_enummixed_SOURCES = \
src/solvers/enummixed/clique.h \
src/solvers/enummixed/enummixed.cc \
src/solvers/enummixed/enummixed.h \
src/tools/util.h \
src/tools/enummixed/enummixed.cc

gambit_nashsupport_SOURCES = \
Expand Down Expand Up @@ -419,11 +417,13 @@ gambit_enumpoly_SOURCES = \
src/solvers/enumpoly/efgpoly.cc \
src/solvers/enumpoly/nfgpoly.cc \
src/solvers/enumpoly/enumpoly.h \
src/tools/util.h \
src/tools/enumpoly/enumpoly.cc

gambit_enumpure_SOURCES = \
${core_SOURCES} ${game_SOURCES} \
src/solvers/enumpure/enumpure.h \
src/tools/util.h \
src/tools/enumpure/enumpure.cc

gambit_gnm_SOURCES = \
Expand All @@ -440,6 +440,7 @@ gambit_ipa_SOURCES = \
src/solvers/ipa/ipa.cc \
src/solvers/ipa/ipa.h \
src/tools/gt/nfggt.cc \
src/tools/util.h \
src/tools/gt/nfgipa.cc

gambit_lcp_SOURCES = \
Expand All @@ -448,13 +449,15 @@ gambit_lcp_SOURCES = \
src/solvers/lcp/efglcp.cc \
src/solvers/lcp/nfglcp.cc \
src/solvers/lcp/lcp.h \
src/tools/util.h \
src/tools/lcp/lcp.cc

gambit_liap_SOURCES = \
${core_SOURCES} ${game_SOURCES} \
src/solvers/liap/efgliap.cc \
src/solvers/liap/nfgliap.cc \
src/solvers/liap/liap.h \
src/tools/util.h \
src/tools/liap/liap.cc

gambit_logit_SOURCES = \
Expand All @@ -466,21 +469,22 @@ gambit_logit_SOURCES = \
src/solvers/logit/logit.h \
src/solvers/logit/efglogit.cc \
src/solvers/logit/nfglogit.cc \
src/tools/util.h \
src/tools/logit/logit.cc

gambit_lp_SOURCES = \
${core_SOURCES} ${game_SOURCES} \
${linalg_SOURCES} \
src/solvers/lp/efglp.cc \
src/solvers/lp/efglp.h \
src/solvers/lp/nfglp.cc \
src/solvers/lp/nfglp.h \
src/solvers/lp/lp.cc \
src/solvers/lp/lp.h \
src/tools/util.h \
src/tools/lp/lp.cc

gambit_simpdiv_SOURCES = \
${core_SOURCES} ${game_SOURCES} \
src/solvers/simpdiv/simpdiv.cc \
src/solvers/simpdiv/simpdiv.h \
src/tools/util.h \
src/tools/simpdiv/nfgsimpdiv.cc

gambit_SOURCES = \
Expand Down Expand Up @@ -634,8 +638,7 @@ msw-msi:
light -ext WixUIExtension gambit.wixobj

clang-tidy:
clang-tidy ${top_srcdir}/src/core/*.cc -- --std=c++17 -I ${top_srcdir}/src -I ${top_srcdir}/src/labenski/include -DVERSION="" ${WX_CXXFLAGS}
clang-tidy ${top_srcdir}/src/games/*.cc ${top_srcdir}/src/games/*/*.cc -- --std=c++17 -I ${top_srcdir}/src -I ${top_srcdir}/src/labenski/include -DVERSION="" ${WX_CXXFLAGS}
clang-tidy ${top_srcdir}/src/solvers/*/*.cc -- --std=c++17 -I ${top_srcdir}/src -I ${top_srcdir}/src/labenski/include -DVERSION="" ${WX_CXXFLAGS}
clang-tidy ${top_srcdir}/src/tools/*/*.cc -- --std=c++17 -I ${top_srcdir}/src -I ${top_srcdir}/src/labenski/include -DVERSION="" ${WX_CXXFLAGS}
clang-tidy ${top_srcdir}/src/gui/*.cc -- --std=c++17 -I ${top_srcdir}/src -I ${top_srcdir}/src/labenski/include -DVERSION="" ${WX_CXXFLAGS}
clang-tidy ${top_srcdir}/src/core/*.cc -- --std=c++17 -I ${top_srcdir}/src -DVERSION=""
clang-tidy ${top_srcdir}/src/games/*.cc ${top_srcdir}/src/games/*/*.cc -- --std=c++17 -I ${top_srcdir}/src -DVERSION=""
clang-tidy ${top_srcdir}/src/solvers/*/*.cc -- --std=c++17 -I ${top_srcdir}/src -DVERSION=""
clang-tidy ${top_srcdir}/src/tools/*/*.cc -- --std=c++17 -I ${top_srcdir}/src -DVERSION=""
Loading
Loading