GAMSPy 1.28.0 (2026-09-15)#
New features#
#880: Add the package wide option
STRICT_POWER_OPERATORwhich makes**generaterPowerfor every exponent, matching the GAMS**operator exactly.#889: Add typed symbol accessors to
Container:getSet,getAlias,getUniverseAlias,getParameter,getVariable,getEquation, andgetSymbol(name, type)which narrows its return type to the requested symbol type.
Improvements in existing functionality#
#878: Internal performance improvements for generateRecords.
#879: Setting records, converting them to and from numpy, and looking up UELs are all faster now, especially for symbols with large domains.
#890: Every GAMSPy exception now derives from the new
GamspyBaseException, so a singleexceptclause can handle any GAMSPy failure.GamspyExceptionkeeps covering only GAMS execution errors.#897: Added
gamspy install solver --licensedto install every add-on solver permitted by the active license, andgamspy uninstall solver --unlicensedto uninstall installed add-on solvers no longer permitted by it.#899: Add the package wide option
LICENSE_PATH(also settable via theGAMSPY_LICENSE_PATHenvironment variable) to use a license file without installing it.
Bug fixes#
#880: Map
**with a fractional exponent (e.g.x ** 2.9998) torPowerinstead ofpower, which used to round it to the nearest integer.#881: Make SDDP training, simulation, and cut-selection bound evaluation work with the bundled demo license.
#883: Merge the solver configuration of the
cuoptrelease archive into thegamsconfig.yamlof the GAMS system directory instead of overwriting it.#887: An explicitly passed empty
Containeris no longer ignored inside aContainercontext manager andAlias/UniverseAliasredeclarations no longer emit a duplicate declaration.#890: whereMaxAbs now reports the record with the largest magnitude instead of None when that record holds a negative value.
#893:
set_optionsnow raisesValidationErrorfor an unrecognized option name instead of silently accepting it.#900:
Model.freezenow raises aValidationErrorif a variable of the model ends with the reserved_varsuffix instead of letting GAMS fix that variable to zero, and a failedfreezeno longer leaves the model in a frozen state.
Improved documentation#
#890: Add examples in the docstrings of
find*,count*,where*, andshapefunctions.#902: Fix swapped left and right gradients in the piecewise linear functions example.
CI/CD changes#
#882: Remove deprecated prek auto-update command. Use prek update instead.
Miscellaneous internal changes#
#886: Refactor test suite to decrease duplication.
#892: Type check the
formulationsmodules withtyinstead of excluding them.