diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c0a8cbbc9..872c5ebaa 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -17,7 +17,7 @@ jobs: name: clang-format runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Run clang-format style check for C/C++ uses: jidicula/clang-format-action@v4.15.0 with: @@ -29,7 +29,7 @@ jobs: runs-on: ubuntu-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@v5 + - uses: actions/checkout@v6 - name: Install dependencies run: | sudo apt-key adv --fetch-keys http://repos.codelite.org/CodeLite.asc @@ -45,14 +45,14 @@ jobs: runs-on: ubuntu-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@v5 + - uses: actions/checkout@v6 - uses: chartboost/ruff-action@v1 flake8: runs-on: ubuntu-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@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 with: python-version: "3.12" @@ -62,7 +62,7 @@ jobs: runs-on: ubuntu-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@v5 + - uses: actions/checkout@v6 - name: Setup Python uses: actions/setup-python@v6 with: diff --git a/.github/workflows/osxbinary.yml b/.github/workflows/osxbinary.yml index 025da0132..54a2af93f 100644 --- a/.github/workflows/osxbinary.yml +++ b/.github/workflows/osxbinary.yml @@ -13,10 +13,10 @@ on: jobs: macos-13: - runs-on: macos-13 + 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@v5 + - uses: actions/checkout@v6 - name: Install dependencies run: | brew install automake autoconf @@ -37,5 +37,5 @@ jobs: - run: make osx-dmg - uses: actions/upload-artifact@v5 with: - name: artifact-osx-13 + name: artifact-osx-14 path: "*.dmg" diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 44af9bb9b..803659d4b 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -21,7 +21,7 @@ jobs: python-version: ['3.9', '3.13'] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: @@ -41,14 +41,14 @@ jobs: run: pytest macos-13: - runs-on: macos-13 + 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 + - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: @@ -64,14 +64,14 @@ jobs: run: pytest macos-14: - runs-on: macos-14 + runs-on: macos-15 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 + - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: @@ -94,7 +94,7 @@ jobs: python-version: ['3.13'] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: diff --git a/.github/workflows/tools.yml b/.github/workflows/tools.yml index 4cd26bc61..373cd44bf 100644 --- a/.github/workflows/tools.yml +++ b/.github/workflows/tools.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-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@v5 + - uses: actions/checkout@v6 - name: Install dependencies run: | sudo apt-key adv --fetch-keys http://repos.codelite.org/CodeLite.asc @@ -41,10 +41,10 @@ jobs: sudo make install macos: - runs-on: macos-13 + 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@v5 + - uses: actions/checkout@v6 - name: Install dependencies run: brew install automake autoconf wxwidgets - run: aclocal @@ -56,14 +56,14 @@ jobs: - run: make osx-dmg - uses: actions/upload-artifact@v5 with: - name: artifact-osx-13 + name: artifact-osx-14 path: "*.dmg" macos-14: - runs-on: macos-14 + runs-on: macos-15 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@v5 + - uses: actions/checkout@v6 - name: Install dependencies run: brew install automake autoconf wxwidgets - run: aclocal @@ -75,7 +75,7 @@ jobs: - run: make osx-dmg - uses: actions/upload-artifact@v5 with: - name: artifact-osx-14 + name: artifact-osx-15 path: "*.dmg" windows: @@ -85,7 +85,7 @@ jobs: run: shell: msys2 {0} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: install: mingw-w64-x86_64-toolchain make automake autoconf diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 7a128e639..bff183887 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -17,7 +17,7 @@ jobs: runs-on: windows-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: diff --git a/ChangeLog b/ChangeLog index da05cf682..118118491 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,6 @@ # Changelog -## [16.4.1] - unreleased +## [16.4.1] - 2025-12-17 ### Fixed - Fixed a regression in which null outcomes in strategic game tables were not handled correctly @@ -15,7 +15,7 @@ mixed behavior profiles (#616) -## [16.3.2] - unreleased +## [16.3.2] - 2025-12-04 ### Fixed - Parsing of output of `gambit-logit` in the graphical interface did not handle the diff --git a/configure.ac b/configure.ac index e0170be0b..1266f5e8a 100644 --- a/configure.ac +++ b/configure.ac @@ -20,7 +20,7 @@ dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. dnl -AC_INIT([gambit],[16.4.0]) +AC_INIT([gambit],[16.4.1]) AC_CONFIG_SRCDIR([src/gambit.h]) AM_INIT_AUTOMAKE([subdir-objects foreign]) dnl AC_CONFIG_MACRO_DIR([m4]) diff --git a/contrib/mac/Info.plist b/contrib/mac/Info.plist index a17bd7905..15deeb647 100644 --- a/contrib/mac/Info.plist +++ b/contrib/mac/Info.plist @@ -19,13 +19,13 @@ CFBundleSignature ???? CFBundleVersion - 16.4.0 + 16.4.1 CFBundleShortVersionString - 16.4.0 + 16.4.1 CFBundleGetInfoString - Gambit version 16.4.0, (c) 1994-2025 The Gambit Project + Gambit version 16.4.1, (c) 1994-2025 The Gambit Project CFBundleLongVersionString - 16.4.0, (c) 1994-2025 The Gambit Project + 16.4.1, (c) 1994-2025 The Gambit Project NSHumanReadableCopyright Copyright 1994-2025 The Gambit Project LSRequiresCarbon diff --git a/doc/conf.py b/doc/conf.py index 57de0b53a..35d034efa 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -55,7 +55,7 @@ # The short X.Y version. version = "16.4" # The full version, including alpha/beta/rc tags. -release = "16.4.0" +release = "16.4.1" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/tools.convert.rst b/doc/tools.convert.rst index 7db467c7c..3c4f8d416 100644 --- a/doc/tools.convert.rst +++ b/doc/tools.convert.rst @@ -40,7 +40,7 @@ Example invocation for HTML output:: $ gambit-convert -O html 2x2.nfg Convert games among various file formats - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL

Two person 2 x 2 game with unique mixed equilibrium

@@ -55,7 +55,7 @@ Example invocation for LaTeX output:: $ gambit-convert -O sgame 2x2.nfg Convert games among various file formats - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL \begin{game}{2}{2}[Player 1][Player 2] diff --git a/doc/tools.enummixed.rst b/doc/tools.enummixed.rst index 8a2432672..0ad3abd0e 100644 --- a/doc/tools.enummixed.rst +++ b/doc/tools.enummixed.rst @@ -70,7 +70,7 @@ in Figure 2 of Selten (International Journal of Game Theory, $ gambit-enummixed e02.nfg Compute Nash equilibria by enumerating extreme points - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1,0,0,1,0 @@ -82,7 +82,7 @@ information using the `-c` switch:: $ gambit-enummixed -c e02.nfg Compute Nash equilibria by enumerating extreme points - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1,0,0,1,0 diff --git a/doc/tools.enumpoly.rst b/doc/tools.enumpoly.rst index f3c46bd9a..2e211c885 100644 --- a/doc/tools.enumpoly.rst +++ b/doc/tools.enumpoly.rst @@ -98,7 +98,7 @@ Computing equilibria of the strategic game :download:`e01.nfg $ gambit-enumpoly e01.nfg Compute Nash equilibria by solving polynomial systems - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1.000000,0.000000,1.000000,0.000000,0.000000,1.000000 diff --git a/doc/tools.enumpure.rst b/doc/tools.enumpure.rst index 407461fd0..a179a267e 100644 --- a/doc/tools.enumpure.rst +++ b/doc/tools.enumpure.rst @@ -66,7 +66,7 @@ Computing the pure-strategy equilibria of extensive game :download:`e02.efg $ gambit-enumpure e02.efg Search for Nash equilibria in pure strategies - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1,0,0,0,1,0 @@ -77,7 +77,7 @@ strategies:: $ gambit-enumpure -S e02.efg Search for Nash equilibria in pure strategies - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1,0,0,1,0 @@ -88,7 +88,7 @@ only one information set; therefore the set of solutions is larger:: $ gambit-enumpure -A e02.efg Search for Nash equilibria in pure strategies - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1,0,1,0,1,0 diff --git a/doc/tools.gnm.rst b/doc/tools.gnm.rst index 88ca23eb4..2051b07b0 100644 --- a/doc/tools.gnm.rst +++ b/doc/tools.gnm.rst @@ -88,7 +88,7 @@ the reduced strategic form of the example in Figure 2 of Selten $ gambit-gnm e02.nfg Compute Nash equilibria using a global Newton method Gametracer version 0.2, Copyright (C) 2002, Ben Blum and Christian Shelton - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1,0,2.99905e-12,0.5,0.5 diff --git a/doc/tools.ipa.rst b/doc/tools.ipa.rst index 219faa95b..e4054fbc3 100644 --- a/doc/tools.ipa.rst +++ b/doc/tools.ipa.rst @@ -55,7 +55,7 @@ the reduced strategic form of the example in Figure 2 of Selten $ gambit-ipa e02.nfg Compute Nash equilibria using iterated polymatrix approximation Gametracer version 0.2, Copyright (C) 2002, Ben Blum and Christian Shelton - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1.000000,0.000000,0.000000,1.000000,0.000000 diff --git a/doc/tools.lcp.rst b/doc/tools.lcp.rst index 486ce6c20..b106a101e 100644 --- a/doc/tools.lcp.rst +++ b/doc/tools.lcp.rst @@ -9,7 +9,7 @@ computes Nash equilibria by finding solutions to a linear complementarity problem. For extensive games, the program uses the sequence form representation of the extensive game, as defined by Koller, Megiddo, and von Stengel [KolMegSte94]_, and applies the -algorithm developed by Lemke. For strategic games, the program using +algorithm developed by Lemke. For strategic games, the program uses the method of Lemke and Howson [LemHow64]_. There exist strategic games for which some equilibria cannot be located by this method; see Shapley [Sha74]_. @@ -79,7 +79,7 @@ Computing an equilibrium of extensive game :download:`e02.efg $ gambit-lcp e02.efg Compute Nash equilibria by solving a linear complementarity program - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1,0,1/2,1/2,1/2,1/2 diff --git a/doc/tools.liap.rst b/doc/tools.liap.rst index 561059d45..d341d4dac 100644 --- a/doc/tools.liap.rst +++ b/doc/tools.liap.rst @@ -85,7 +85,7 @@ Computing an equilibrium in mixed strategies of :download:`e02.efg $ gambit-liap e02.nfg Compute Nash equilibria by minimizing the Lyapunov function - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,0.998701,0.000229,0.001070,0.618833,0.381167 diff --git a/doc/tools.logit.rst b/doc/tools.logit.rst index 59eaf7e52..172633e07 100644 --- a/doc/tools.logit.rst +++ b/doc/tools.logit.rst @@ -108,7 +108,7 @@ in Figure 2 of Selten (International Journal of Game Theory, $ gambit-logit e02.nfg Compute a branch of the logit equilibrium correspondence - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL 0.000000,0.333333,0.333333,0.333333,0.5,0.5 diff --git a/doc/tools.lp.rst b/doc/tools.lp.rst index f032fee9e..75edf2ebb 100644 --- a/doc/tools.lp.rst +++ b/doc/tools.lp.rst @@ -65,7 +65,7 @@ strategies each, with a unique equilibrium in mixed strategies:: $ gambit-lp 2x2const.nfg Compute Nash equilibria by solving a linear program - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1/3,2/3,1/3,2/3 diff --git a/doc/tools.simpdiv.rst b/doc/tools.simpdiv.rst index 324025dd6..5ebfe3087 100644 --- a/doc/tools.simpdiv.rst +++ b/doc/tools.simpdiv.rst @@ -92,7 +92,7 @@ Computing an equilibrium in mixed strategies of :download:`e02.efg $ gambit-simpdiv e02.nfg Compute Nash equilibria using simplicial subdivision - Gambit version 16.4.0, Copyright (C) 1994-2025, The Gambit Project + Gambit version 16.4.1, Copyright (C) 1994-2025, The Gambit Project This is free software, distributed under the GNU GPL NE,1,0,0,1,0 diff --git a/gambit.wxs b/gambit.wxs index 7563a8404..1c83e6b5f 100644 --- a/gambit.wxs +++ b/gambit.wxs @@ -1,6 +1,6 @@ - + diff --git a/pyproject.toml b/pyproject.toml index 1206c9a1b..0172c6986 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "pygambit" -version = "16.4.0" +version = "16.4.1" description = "The package for computation in game theory" readme = "src/README.rst" requires-python = ">=3.9" diff --git a/src/gui/gameframe.cc b/src/gui/gameframe.cc index b99aa496e..b468566fb 100644 --- a/src/gui/gameframe.cc +++ b/src/gui/gameframe.cc @@ -489,6 +489,10 @@ void gbtGameFrame::MakeMenus() viewMenu->Append(GBT_MENU_VIEW_STRATEGIC, _("&Strategic game"), wxT("Display the reduced strategic representation ") wxT("of the game"), true); + if (!m_doc->GetGame()->IsTree()) { + viewMenu->Check(GBT_MENU_VIEW_STRATEGIC, true); + viewMenu->Enable(GBT_MENU_VIEW_STRATEGIC, false); + } auto *formatMenu = new wxMenu; AppendBitmapItem(formatMenu, GBT_MENU_FORMAT_LAYOUT, _("&Layout"), diff --git a/src/pygambit/__init__.py b/src/pygambit/__init__.py index 7c7607874..3ad1cc43b 100644 --- a/src/pygambit/__init__.py +++ b/src/pygambit/__init__.py @@ -28,4 +28,4 @@ supports, # noqa: F401 ) -__version__ = "16.4.0" +__version__ = "16.4.1" diff --git a/src/pygambit/game.pxi b/src/pygambit/game.pxi index 082b08b62..b426ff58f 100644 --- a/src/pygambit/game.pxi +++ b/src/pygambit/game.pxi @@ -1488,7 +1488,7 @@ class Game: except KeyError: raise KeyError(f"{funcname}(): no information set with label '{infoset}'") raise TypeError( - f"{funcname}(): {argname} must be Infoset or str, not {node.__class__.__name__}" + f"{funcname}(): {argname} must be Infoset or str, not {infoset.__class__.__name__}" ) def _resolve_action(self,