Releases: GAMS-dev/gamspy
Releases · GAMS-dev/gamspy
Release list
v1.26.2
GAMSPy 1.26.2 (2026-07-16)
New features
- #711: Implements
toGraph()method to expressions, operations, and symbols.toGraphreturns agraphviz.Digraph
of the underlying expression tree for inspection. For anEquationthis graphs the definition of the equation and
for other symbols its definition.graphvizis added as an optional dependency.
Bug fixes
- #741: Fixes a bug where creating a symbol with empty records from an empty iterable (e.g.
[],set(),range(0)) raised aValueErrorabout inconsistent dimensionality.
Empty iterables are now accepted and produce a symbol with no records. - #862: Fixes a bug where indexing a symbol with a set that is a superset of the declared domain raised a
ValidationError, even though GAMS accepts it. Domain compatibility is now checked in both directions, so both subset and superset index sets on the same domain chain are allowed (e.g. indexingGgRtpc(r, sub_t)withRtpc(r, t)wheresub_tis a subset oft).
Improved documentation
- #857: Adds a "How SDDP Works" page to the SDDP documentation: the cut algebra, the forward and backward passes, and the lower bound.
v1.26.1
GAMSPy 1.26.1 (2026-07-09)
Improvements in existing functionality
- #858: Add
diagfunction togamspy.mathmodule. - #859: Improve the docstrings of
gamspy.math.projectandgamspy.math.aggregatefunctions. - #860: Improve the performance of loop control structures by employing the new newOrChangedNoData option in GAMS.
Bug fixes
- #856: Fix debugging level keep bug when container.addGamsCode is called.
- #860: Fixes a false domain violation when indexing a symbol with a nested implicit set that spans multiple positions. The nested set's positions are now expanded correctly so subsequent indices stay aligned with the declared domain.
v1.26.0
GAMSPy 1.26.0 (2026-07-06)
New features
- #527: Add toDense function to implicit symbols so that indexed, sliced, transposed or permuted references can be converted to a dense array.
Bug fixes
- #744: Fixes a bug where certain solve options (e.g. iteration_limit and time_limit) would incorrectly persist across subsequent model.solve() calls in case the subsequent solves do not redefine those options. These are now properly reset between solves unless explicitly specified.
- #850: Fix false negatives in domain validation in particular conditional expressions.
- #854: Revert breaking change in miro symbol column names.
Improved documentation
- #821: Improve documentation SEO: add canonical URLs, Open Graph/Twitter card tags, an auto-generated
sitemap.xml, curated meta descriptions on key pages, and alt text for all images.
Miscellaneous internal changes
- #852: Allow nosolve licenses in GAMSPy.
v1.25.0
GAMSPy 1.25.0 (2026-06-27)
New features
- #485:
Container.readnow accepts adictforsymbol_namesto rename symbols on read. Keys are the symbol names in the source (GDX file or container) and values are the names of the symbols to create in the container, e.g.m.read(path, symbol_names={"X": "A"}). - #813: Added the new
gamspy.formulations.sddpmodule implementing Stochastic Dual Dynamic Programming for multi-stage stochastic LPs.
Improvements in existing functionality
- #830: Speed up frozen solves. Modifiable records are now written directly into the in-memory GAMS database (GMD), removing the intermediate GAMS Transfer container. This cuts frozen solve time by roughly 20-35% on large models.
- #849: Keep the order of expressions when it involves conditions on the left.
v1.24.2
GAMSPy 1.24.2 (2026-06-25)
New features
- #746: Allow adding elements to the universe via UniverseAlias.addElements
Bug fixes
- #848: Fix missing semicolon in GAMS code added to allow control flow structures.
v1.24.1
GAMSPy 1.24.1 (2026-06-24)
Bug fixes
- #630: Fix symbol.toDense bug when the records of the symbol is None.
- #670: Fix the behavior of monitor_process_tree_memory option. Setting this option True will cause GAMSPy to record the
high-memory mark for the GAMS process tree and print that information at the end of the script. - #846: Add paranthesis to the representation of negative gp.Number objects since GAMS does not support expression like 3 + -7. It must be like 3 + (-7).
- #847: Fix missing gdx file issue in control loops.
v1.24.0
GAMSPy 1.24.0 (2026-06-17)
New features
- #815: Allow providing a regex to exclude symbol comparisons in gamspy gdx diff command.
- #842: Support GAMS runtime ElseIf and Else blocks via context managers.
- #843: Support while statement of GAMS via gp.While context manager.
Improvements in existing functionality
- #811: Improve the error message in case the container is not provided in model creation.
- #822: Improve the error message in case the file does not exist in the provided path for the license file.
- #825: Load records lazily after assignments and solve statements.
- #826: Load records that come from NEOS backend lazily.
- #827: Load records that come from GAMS Engine backend lazily.
- #828: Do not immediately load records from GAMS in case the container is created with a GDX file. Load the records only when the user asks for the records.
- #829: If the installed license is a free personal license, automatically install highs, ipopt, miles, shot and reshop.
Bug fixes
- #809: Show PATHNLP in the licensed solvers list in gamspy show license command if the license allows using PATHNLP solver.
- #819: Fixed
gp.deserializeleaving the implicit attributes of deserializedVariableandEquationsymbols with an empty domain. - #824: Fix LaTeX representation of literals in symbol indices.
- #833: Fix missing paranthesis in "~symbol" operations in chained expressions.
- #839: Fix special value representation in gp.Number.
Deprecations
- #825: Remove UEL, domain violation and duplicate records related functions from container.
Miscellaneous internal changes
- #812: Improve the typing of the 'records' argument of symbols.
- #814: Skip equation definition checks in case container.addGamsCode is used.
v1.23.1
GAMSPy 1.23.1 (2026-05-07)
New features
- #794: Allow providing symbol_names argument as a dict in container.write().
- #803: Add Gaussian Error Linear Unit (GELU) activation function.
Improvements in existing functionality
- #794: Include UELs in the gdx file generated with container.write().
Throw deprecation warning when 'mode' argument is provided in container.write for future deprecation. - #807: Adjusted cta.py for correct usage of GAMSPy with GAMS Connect.
Bug fixes
- #802: Fixed equality sign bug in certain multi condition expressions.
- #804: Fix domain validation for SetExpression objects as domain elements.
Miscellaneous internal changes
- #803: Add test for GELU activation function.
- #806: Add additional tests to make sure that GTP container to GP container conversion works as expected.
v1.23.0
GAMSPy 1.23.0 (2026-04-27)
New features
- #795: Add support for RNN for TorchSequential.
- #796: Add Gated Recurrent Units (GRU) formulation.
Add support for GRU for TorchSequential. - #797: Support GAMS for statements via a context manager. The syntax is as follows: with gp.For(index, start, end, step, direction): ...
- #799: Implement projection and aggregation functions in gamspy.math module.
Improvements in existing functionality
- #722: Reset symbol records to its default values in case symbol.setRecords(None) is called.
- #796: Add dunder str method for all Neural network formulations.
Improved documentation
- #798: Add a note in the documentation about the requirement of CMU serif font to generate a pdf file with model.toLatex function.
CI/CD changes
- #791: Replace pip-audit with uv audit.
- #801: Use uv trixie slim images to avoid pulling bigger images than necessary.
Miscellaneous internal changes
- #795: Add tests for RNN in TorchSequential formulations.
- #796: Add new tests for GRU.
Add tests for GRU in TorchSequential formulations.
v1.22.0
GAMSPy 1.22.0 (2026-04-09)
New features
- #770: Add Recurrent Neural Networks (RNN) formulations.
- #787: Support "if" control structure of GAMS via gp.If context manager. Support "Break" and "Continue" via functions in gp.Loop.
Improvements in existing functionality
- #782: Import pandas and numpy lazily.
Bug fixes
- #792: UniverseAlias.records call now returns all previously registered elements in the universe instead of the labels of all the data in the container.
Improved documentation
- #789: Update the installation page for on-prem license server license installation.
Miscellaneous internal changes
- #770: Restructured neural network tests.