Skip to content

Releases: GAMS-dev/gamspy

v1.26.2

Choose a tag to compare

@github-actions github-actions released this 16 Jul 14:25

GAMSPy 1.26.2 (2026-07-16)

New features

  • #711: Implements toGraph() method to expressions, operations, and symbols. toGraph returns a graphviz.Digraph
    of the underlying expression tree for inspection. For an Equation this graphs the definition of the equation and
    for other symbols its definition. graphviz is 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 a ValueError about 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. indexing GgRtpc(r, sub_t) with Rtpc(r, t) where sub_t is a subset of t).

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

Choose a tag to compare

@github-actions github-actions released this 10 Jul 09:17

GAMSPy 1.26.1 (2026-07-09)

Improvements in existing functionality

  • #858: Add diag function to gamspy.math module.
  • #859: Improve the docstrings of gamspy.math.project and gamspy.math.aggregate functions.
  • #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

Choose a tag to compare

@github-actions github-actions released this 06 Jul 15:23

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

Choose a tag to compare

@github-actions github-actions released this 27 Jun 20:08

GAMSPy 1.25.0 (2026-06-27)

New features

  • #485: Container.read now accepts a dict for symbol_names to 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.sddp module 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

Choose a tag to compare

@github-actions github-actions released this 26 Jun 13:31

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

Choose a tag to compare

@github-actions github-actions released this 24 Jun 15:00

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

Choose a tag to compare

@github-actions github-actions released this 18 Jun 18:54

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.deserialize leaving the implicit attributes of deserialized Variable and Equation symbols 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

Choose a tag to compare

@github-actions github-actions released this 08 May 08:50

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

Choose a tag to compare

@github-actions github-actions released this 06 May 21:13

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

Choose a tag to compare

@github-actions github-actions released this 09 Apr 19:21

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.