Skip to content

Commit ed1fdb9

Browse files
[MERGE] Merge branch 'release/1.19.0' into 'master'
Release/1.19.0 See merge request devel/gamspy!738
2 parents cd940e1 + 993bf77 commit ed1fdb9

59 files changed

Lines changed: 2739 additions & 1948 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
uses: softprops/action-gh-release@v2
4545
with:
4646
tag_name: ${{ github.ref_name }}
47-
name: Release ${{ github.ref_name }}
47+
name: ${{ github.ref_name }}
4848
body_path: ${{ steps.notes.outputs.path }}
4949
draft: false
5050
prerelease: false

.gitlab-ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ autoupgrade:
5959
- git fetch origin $CI_COMMIT_REF_NAME
6060
# Force the local checkout to exactly match the remote branch
6161
- git checkout -B $CI_COMMIT_REF_NAME origin/$CI_COMMIT_REF_NAME
62-
- pip install --upgrade pip && pip install pre-commit uv
63-
- pre-commit autoupdate
62+
- pip install --upgrade pip && pip install prek uv
63+
- prek auto-update
6464
- uv lock --upgrade
6565

6666
- |

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ repos:
1717
rev: v1.5.0
1818
hooks:
1919
- id: detect-secrets
20-
args: ['--baseline', '.secrets.baseline']
20+
args: [ --baseline, .secrets.baseline, --exclude-files, ^docs/user/notebooks/]
2121
- repo: https://github.com/astral-sh/ruff-pre-commit
22-
rev: v0.14.11
22+
rev: v0.14.14
2323
hooks:
2424
# Run the linter.
2525
- id: ruff-check

.secrets.baseline

Lines changed: 7 additions & 245 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,6 @@
9090
{
9191
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
9292
},
93-
{
94-
"path": "detect_secrets.filters.common.is_baseline_file",
95-
"filename": ".secrets.baseline"
96-
},
9793
{
9894
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
9995
"min_level": 2
@@ -124,249 +120,15 @@
124120
},
125121
{
126122
"path": "detect_secrets.filters.heuristic.is_templated_secret"
123+
},
124+
{
125+
"path": "detect_secrets.filters.regex.should_exclude_file",
126+
"pattern": [
127+
"^docs/user/notebooks/"
128+
]
127129
}
128130
],
129131
"results": {
130-
"docs/user/notebooks/clsp.ipynb": [
131-
{
132-
"type": "Base64 High Entropy String",
133-
"filename": "docs/user/notebooks/clsp.ipynb",
134-
"hashed_secret": "bb627434731f5f33c8fcc0002872ca242fc03504",
135-
"is_verified": false,
136-
"line_number": 1445
137-
},
138-
{
139-
"type": "Hex High Entropy String",
140-
"filename": "docs/user/notebooks/clsp.ipynb",
141-
"hashed_secret": "ddcc6520ef0a2310197e6077e695264969277472",
142-
"is_verified": false,
143-
"line_number": 2619
144-
}
145-
],
146-
"docs/user/notebooks/clsp_colab.ipynb": [
147-
{
148-
"type": "Base64 High Entropy String",
149-
"filename": "docs/user/notebooks/clsp_colab.ipynb",
150-
"hashed_secret": "bb627434731f5f33c8fcc0002872ca242fc03504",
151-
"is_verified": false,
152-
"line_number": 1460
153-
},
154-
{
155-
"type": "Hex High Entropy String",
156-
"filename": "docs/user/notebooks/clsp_colab.ipynb",
157-
"hashed_secret": "ddcc6520ef0a2310197e6077e695264969277472",
158-
"is_verified": false,
159-
"line_number": 2634
160-
}
161-
],
162-
"docs/user/notebooks/nurses.ipynb": [
163-
{
164-
"type": "Base64 High Entropy String",
165-
"filename": "docs/user/notebooks/nurses.ipynb",
166-
"hashed_secret": "181cbf5064ca8290c09305cf24060581ee70088c",
167-
"is_verified": false,
168-
"line_number": 1007
169-
},
170-
{
171-
"type": "Base64 High Entropy String",
172-
"filename": "docs/user/notebooks/nurses.ipynb",
173-
"hashed_secret": "127bf07a78f871487be9cfbb76b9c29b902fbc50",
174-
"is_verified": false,
175-
"line_number": 1046
176-
},
177-
{
178-
"type": "Base64 High Entropy String",
179-
"filename": "docs/user/notebooks/nurses.ipynb",
180-
"hashed_secret": "cef09f381e9a2f05b79936bfc5fb72ea99f58b08",
181-
"is_verified": false,
182-
"line_number": 1281
183-
},
184-
{
185-
"type": "Base64 High Entropy String",
186-
"filename": "docs/user/notebooks/nurses.ipynb",
187-
"hashed_secret": "a5ef9b01b0ca8cc1844842b851f78b181c06165a",
188-
"is_verified": false,
189-
"line_number": 1313
190-
},
191-
{
192-
"type": "Hex High Entropy String",
193-
"filename": "docs/user/notebooks/nurses.ipynb",
194-
"hashed_secret": "ddcc6520ef0a2310197e6077e695264969277472",
195-
"is_verified": false,
196-
"line_number": 1403
197-
}
198-
],
199-
"docs/user/notebooks/nurses_colab.ipynb": [
200-
{
201-
"type": "Base64 High Entropy String",
202-
"filename": "docs/user/notebooks/nurses_colab.ipynb",
203-
"hashed_secret": "181cbf5064ca8290c09305cf24060581ee70088c",
204-
"is_verified": false,
205-
"line_number": 1022
206-
},
207-
{
208-
"type": "Base64 High Entropy String",
209-
"filename": "docs/user/notebooks/nurses_colab.ipynb",
210-
"hashed_secret": "127bf07a78f871487be9cfbb76b9c29b902fbc50",
211-
"is_verified": false,
212-
"line_number": 1061
213-
},
214-
{
215-
"type": "Base64 High Entropy String",
216-
"filename": "docs/user/notebooks/nurses_colab.ipynb",
217-
"hashed_secret": "cef09f381e9a2f05b79936bfc5fb72ea99f58b08",
218-
"is_verified": false,
219-
"line_number": 1296
220-
},
221-
{
222-
"type": "Base64 High Entropy String",
223-
"filename": "docs/user/notebooks/nurses_colab.ipynb",
224-
"hashed_secret": "a5ef9b01b0ca8cc1844842b851f78b181c06165a",
225-
"is_verified": false,
226-
"line_number": 1328
227-
},
228-
{
229-
"type": "Hex High Entropy String",
230-
"filename": "docs/user/notebooks/nurses_colab.ipynb",
231-
"hashed_secret": "ddcc6520ef0a2310197e6077e695264969277472",
232-
"is_verified": false,
233-
"line_number": 1418
234-
}
235-
],
236-
"docs/user/notebooks/pickstock.ipynb": [
237-
{
238-
"type": "Base64 High Entropy String",
239-
"filename": "docs/user/notebooks/pickstock.ipynb",
240-
"hashed_secret": "5f2ac0a725fbdb05f197b51a14b9b12707ca2890",
241-
"is_verified": false,
242-
"line_number": 535
243-
},
244-
{
245-
"type": "Base64 High Entropy String",
246-
"filename": "docs/user/notebooks/pickstock.ipynb",
247-
"hashed_secret": "5592bfd00b4d6407217d23234250bb7ad0e631eb",
248-
"is_verified": false,
249-
"line_number": 579
250-
},
251-
{
252-
"type": "Base64 High Entropy String",
253-
"filename": "docs/user/notebooks/pickstock.ipynb",
254-
"hashed_secret": "ee85ca8add17ed65d833f570a4561a9717ac9d52",
255-
"is_verified": false,
256-
"line_number": 847
257-
},
258-
{
259-
"type": "Base64 High Entropy String",
260-
"filename": "docs/user/notebooks/pickstock.ipynb",
261-
"hashed_secret": "3d14de9b758df0de2672e7cc4d66490336034070",
262-
"is_verified": false,
263-
"line_number": 892
264-
}
265-
],
266-
"docs/user/notebooks/pickstock_colab.ipynb": [
267-
{
268-
"type": "Base64 High Entropy String",
269-
"filename": "docs/user/notebooks/pickstock_colab.ipynb",
270-
"hashed_secret": "5f2ac0a725fbdb05f197b51a14b9b12707ca2890",
271-
"is_verified": false,
272-
"line_number": 541
273-
},
274-
{
275-
"type": "Base64 High Entropy String",
276-
"filename": "docs/user/notebooks/pickstock_colab.ipynb",
277-
"hashed_secret": "5592bfd00b4d6407217d23234250bb7ad0e631eb",
278-
"is_verified": false,
279-
"line_number": 585
280-
},
281-
{
282-
"type": "Base64 High Entropy String",
283-
"filename": "docs/user/notebooks/pickstock_colab.ipynb",
284-
"hashed_secret": "ee85ca8add17ed65d833f570a4561a9717ac9d52",
285-
"is_verified": false,
286-
"line_number": 853
287-
},
288-
{
289-
"type": "Base64 High Entropy String",
290-
"filename": "docs/user/notebooks/pickstock_colab.ipynb",
291-
"hashed_secret": "3d14de9b758df0de2672e7cc4d66490336034070",
292-
"is_verified": false,
293-
"line_number": 898
294-
}
295-
],
296-
"docs/user/notebooks/tsp.ipynb": [
297-
{
298-
"type": "Base64 High Entropy String",
299-
"filename": "docs/user/notebooks/tsp.ipynb",
300-
"hashed_secret": "3bca72d93dfc5758e621d9f1ae339214466813f7",
301-
"is_verified": false,
302-
"line_number": 185
303-
},
304-
{
305-
"type": "Base64 High Entropy String",
306-
"filename": "docs/user/notebooks/tsp.ipynb",
307-
"hashed_secret": "d9e7a289a14e7f325cb99dfe30d3e5d4338a5ab1",
308-
"is_verified": false,
309-
"line_number": 361
310-
},
311-
{
312-
"type": "Base64 High Entropy String",
313-
"filename": "docs/user/notebooks/tsp.ipynb",
314-
"hashed_secret": "d46eb772be25bd60768fe663b96be28711f1c175",
315-
"is_verified": false,
316-
"line_number": 497
317-
},
318-
{
319-
"type": "Base64 High Entropy String",
320-
"filename": "docs/user/notebooks/tsp.ipynb",
321-
"hashed_secret": "6e15db5a63ea26c0d006d17508b00aa234772f7d",
322-
"is_verified": false,
323-
"line_number": 514
324-
},
325-
{
326-
"type": "Base64 High Entropy String",
327-
"filename": "docs/user/notebooks/tsp.ipynb",
328-
"hashed_secret": "dfbcf4660ba8fa3d2e04f8cf427c2a4b2e3c6b27",
329-
"is_verified": false,
330-
"line_number": 531
331-
}
332-
],
333-
"docs/user/notebooks/tsp_colab.ipynb": [
334-
{
335-
"type": "Base64 High Entropy String",
336-
"filename": "docs/user/notebooks/tsp_colab.ipynb",
337-
"hashed_secret": "3bca72d93dfc5758e621d9f1ae339214466813f7",
338-
"is_verified": false,
339-
"line_number": 182
340-
},
341-
{
342-
"type": "Base64 High Entropy String",
343-
"filename": "docs/user/notebooks/tsp_colab.ipynb",
344-
"hashed_secret": "d9e7a289a14e7f325cb99dfe30d3e5d4338a5ab1",
345-
"is_verified": false,
346-
"line_number": 358
347-
},
348-
{
349-
"type": "Base64 High Entropy String",
350-
"filename": "docs/user/notebooks/tsp_colab.ipynb",
351-
"hashed_secret": "d46eb772be25bd60768fe663b96be28711f1c175",
352-
"is_verified": false,
353-
"line_number": 494
354-
},
355-
{
356-
"type": "Base64 High Entropy String",
357-
"filename": "docs/user/notebooks/tsp_colab.ipynb",
358-
"hashed_secret": "6e15db5a63ea26c0d006d17508b00aa234772f7d",
359-
"is_verified": false,
360-
"line_number": 511
361-
},
362-
{
363-
"type": "Base64 High Entropy String",
364-
"filename": "docs/user/notebooks/tsp_colab.ipynb",
365-
"hashed_secret": "dfbcf4660ba8fa3d2e04f8cf427c2a4b2e3c6b27",
366-
"is_verified": false,
367-
"line_number": 528
368-
}
369-
],
370132
"tests/integration/test_engine.py": [
371133
{
372134
"type": "Secret Keyword",
@@ -377,5 +139,5 @@
377139
}
378140
]
379141
},
380-
"generated_at": "2025-10-09T10:06:42Z"
142+
"generated_at": "2026-01-27T21:53:18Z"
381143
}

AGENTS.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
## Project Overview
2+
3+
GAMSPy is built with Python. The codebase is organized into the following layers:
4+
5+
### Root Folders
6+
- `src/`: Source code
7+
- `tests/`: Unit and integration tests.
8+
- `docs/`: Sphinx documentation.
9+
- `scripts/`: Development, build, and performance scripts.
10+
- `ci/`: Yaml files for Gitlab CI jobs.
11+
12+
### Core Architecture (`src/gamspy` folder)
13+
- `_symbols/` - Implementation of the main symbols in GAMSPy such as Set, Parameter, Variable, Equation and Alias.
14+
- `_backend/` - Implementation of different backends such as GAMS Engine and NEOS Server to solve models.
15+
- `_cli/` - GAMSPy CLI implementation.
16+
- `_algebra/` - Implementation of other structures to help developing models such as Expression, Domain, Number, Sum, Product, Smin, and Smax.
17+
- `formulations/` - Implementation of different formulations including machine learning and neural network formulations.
18+
- `math` - Math related expressions.
19+
- `_container.py` - Implementation of the Container.
20+
- `_model.py` - Implementation of the model.
21+
22+
## Setting Up A Development Environment
23+
- Run `uv sync --group dev --group test --group doc` to get the necessary environment for development.
24+
- If a virtual environment is not already activated, run `source .venv/bin/activate` to activate the environment.
25+
- Run `uv pip install -e .` before you do any changes.
26+
27+
## Testing
28+
- You can find all available markers in `pyproject.toml`.
29+
- Run `pytest -m 'unit'` to run all unit tests.
30+
- Run `pytest -m 'integration'` to run all integration tests.
31+
- Run `pytest -m 'model_library'` to run all models in the model library. This requires a GAMS license. Install GAMS license with `gamspy install license $ACCESS_CODE` if `ACCESS_CODE` is available in the environment variables or if it exists in the `.env` file. If `ACCESS_CODE` is not available, do not run model_library tests.
32+
- Run `pytest -m 'doc'` to run documentation tests.
33+
34+
## Documentation
35+
- Run `cd docs && make html` to build the documentation.
36+
- Run `cd docs && make linkchecker` to check the validitiy of the links in the documentation.
37+
38+
## Validating Changes
39+
- Always run `prek run --all-files` before declaring any work complete, then fix all errors before moving forward.
40+
- Always run `pytest -m 'unit or integration'` before declaring any work complete, then fix all errors before moving forward.
41+
42+
43+
## Coding Guidelines
44+
- Follow ruff rules specified in pyproject.toml for formatting and linting.
45+
46+
47+
### Code Quality
48+
49+
- If you create any temporary new files, scripts, or helper files for iteration, clean up these files by removing them at the end of the task
50+
- Never duplicate imports. Always reuse existing imports if they are present.
51+
- Always use type annotations.
52+
- Do not duplicate code. Always look for existing utility functions, helpers, or patterns in the codebase before implementing new functionality. Reuse and extend existing code whenever possible.

CHANGELOG.rst

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,29 @@
1+
GAMSPy 1.19.0 (2026-01-27)
2+
==========================
3+
4+
Improvements in existing functionality
5+
--------------------------------------
6+
- #763: Accept Path-like load_from argument in container.loadRecordsFromGdx function.
7+
8+
Bug fixes
9+
---------
10+
- #763: Make loadRecordsFromGdx respect .synchronize attribute of symbols.
11+
12+
Improved documentation
13+
----------------------
14+
- #752: Add more examples in API reference.
15+
16+
CI/CD changes
17+
-------------
18+
- #757: Replace pre-commit with prek.
19+
20+
Miscellaneous internal changes
21+
------------------------------
22+
- #725: Add a new example showing the usage of solution pools.
23+
- #751: Add AGENTS.md file to guide coding agents.
24+
- #756: Move dev, test and doc dependencies to depedency groups instead of optional dependencies.
25+
- #758: Update the validation error message that is raised in case debugging_level is not set.
26+
127
GAMSPy 1.18.4 (2026-01-10)
228
==========================
329

0 commit comments

Comments
 (0)