Repository navigation
v1.28.0
·
266 commits
to develop
since this release
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.