diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index f4b497ab..d09b0f3e 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -8,47 +8,50 @@ on: jobs: test: runs-on: ubuntu-22.04 - + steps: - name: Checkout repository uses: actions/checkout@v4 - + - name: Set up Python 3.11 uses: actions/setup-python@v5 with: python-version: '3.11' cache: 'pip' - + - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - - - name: Download Antares v9.3.2 release + + - name: Download Antares release run: | - echo "Downloading Antares v9.3.2..." - curl -L -f -o antares-9.3.2-Ubuntu-22.04.tar.gz \ - https://github.com/AntaresSimulatorTeam/Antares_Simulator/releases/download/v9.3.2/antares-9.3.2-Ubuntu-22.04.tar.gz - - if [ ! -f "antares-9.3.2-Ubuntu-22.04.tar.gz" ]; then + source versions/antares-simulator.txt + echo "Downloading Antares v${ANTARES_SIMULATOR_VERSION}..." + curl -L -f -o antares-${ANTARES_SIMULATOR_VERSION}-Ubuntu-22.04.tar.gz \ + https://github.com/AntaresSimulatorTeam/Antares_Simulator/releases/download/v${ANTARES_SIMULATOR_VERSION}/antares-${ANTARES_SIMULATOR_VERSION}-Ubuntu-22.04.tar.gz + + if [ ! -f "antares-${ANTARES_SIMULATOR_VERSION}-Ubuntu-22.04.tar.gz" ]; then echo "Error: Download failed" exit 1 fi - - echo "Download successful. File size: $(ls -lh antares-9.3.2-Ubuntu-22.04.tar.gz | awk '{print $5}')" - + + echo "Download successful. File size: $(ls -lh antares-${ANTARES_SIMULATOR_VERSION}-Ubuntu-22.04.tar.gz | awk '{print $5}')" + - name: Extract Antares binaries run: | + source versions/antares-simulator.txt echo "Extracting archive..." - tar -xzf antares-9.3.2-Ubuntu-22.04.tar.gz - + tar -xzf antares-${ANTARES_SIMULATOR_VERSION}-Ubuntu-22.04.tar.gz --strip-components=1 --one-top-level=antares-${ANTARES_SIMULATOR_VERSION}-Ubuntu-22.04 + - name: Run end-to-end tests run: | python -m pytest tests/e2e_tests -v - + - name: Cleanup if: always() run: | - rm -f antares-9.3.2-Ubuntu-22.04.tar.gz - rm -rf antares-9.3.2-Ubuntu-22.04 - echo "Cleanup completed" \ No newline at end of file + source versions/antares-simulator.txt + rm -f antares-${ANTARES_SIMULATOR_VERSION}-Ubuntu-22.04.tar.gz + rm -rf antares-${ANTARES_SIMULATOR_VERSION}-Ubuntu-22.04 + echo "Cleanup completed" diff --git a/doc/0_Home/2_core_concepts.md b/doc/0_Home/2_core_concepts.md index f4d44c57..8e31c769 100644 --- a/doc/0_Home/2_core_concepts.md +++ b/doc/0_Home/2_core_concepts.md @@ -1,3 +1,7 @@ +--- +description: Explore GEMS key design principles — graph-based algebraic modelling, solver-independent syntax, YAML-based configuration, and support for LP, MIP, and MILP energy optimisation problems. +--- +
@@ -16,6 +20,119 @@ This language **differs from traditional optimization languages** in several way
diff --git a/doc/0_Home/4_release_notes.md b/doc/0_Home/4_release_notes.md
index 07daad32..6a67732b 100644
--- a/doc/0_Home/4_release_notes.md
+++ b/doc/0_Home/4_release_notes.md
@@ -6,18 +6,29 @@
# Release Notes
-## Version 0.2.0
+## v0.3.0 | *22-04-2026*
-**Release Date:** *26/03/2026*
+### Added
+* Add the raw YAML files in the Overview section ([PR36](https://github.com/AntaresSimulatorTeam/GEMS/pull/93))
+* Add GitHub Action for automatically verifying the latest released antares-simulator version ([PR36-bis](https://github.com/AntaresSimulatorTeam/GEMS/pull/85))
-* Update the appearance of the documentation ([PR32](https://github.com/AntaresSimulatorTeam/GEMS/pull/66))
-* Clarify the distinction between Antares Modeler and Antares Solver ([PR32](https://github.com/AntaresSimulatorTeam/GEMS/pull/66))
-* Dynamic visualization of libraries ([PR31](https://github.com/AntaresSimulatorTeam/GEMS/pull/63))
+### Changed
+* Upgrade SEO ([PR38](https://github.com/AntaresSimulatorTeam/GEMS/pull/97))
+* Use the newest version of Antares-Legacy-Models Library for Quick Start Example 2 ([PR35](https://github.com/AntaresSimulatorTeam/GEMS/pull/86))
+* Update the documentation area-connection part in Hybrid Studies ([PR34](https://github.com/AntaresSimulatorTeam/GEMS/pull/84))
+
+## v0.2.0 | *26-03-2026*
+
+### Added
* Document floor, ceil, max, min operators ([PR30](https://github.com/AntaresSimulatorTeam/GEMS/pull/62))
+* Dynamic visualization of libraries ([PR31](https://github.com/AntaresSimulatorTeam/GEMS/pull/63))
+### Changed
+* Update the appearance of the documentation ([PR32](https://github.com/AntaresSimulatorTeam/GEMS/pull/66))
+* Clarify the distinction between Antares Modeler and Antares Solver ([PR32](https://github.com/AntaresSimulatorTeam/GEMS/pull/66))
-## Version 0.1.0
-**Release Date:** *22/01/2026*
+## v0.1.0 | *22-01-2026*
+### Added
* Initialization of the documentation
\ No newline at end of file
diff --git a/doc/1_Overview/1_Architecture.md b/doc/1_Overview/1_Architecture.md
index eb4d2940..c354148a 100644
--- a/doc/1_Overview/1_Architecture.md
+++ b/doc/1_Overview/1_Architecture.md
@@ -1,3 +1,7 @@
+---
+description: Learn how GEMS architecture differs from classical OOME architectures by externalising model definitions into YAML files, enabling solver-agnostic and reusable energy system models.
+---
+
diff --git a/doc/1_Overview/2_glossary.md b/doc/1_Overview/2_glossary.md
index 1004968e..b44e3749 100644
--- a/doc/1_Overview/2_glossary.md
+++ b/doc/1_Overview/2_glossary.md
@@ -1,3 +1,7 @@
+---
+description: GEMS glossary — definitions of core concepts including libraries, models, components, ports, connections, system files, and data series used in the GEMS framework.
+---
+
diff --git a/doc/2_Getting_Started/1A_modeler_installation.md b/doc/2_Getting_Started/1A_modeler_installation.md
index a42547b1..fd44232e 100644
--- a/doc/2_Getting_Started/1A_modeler_installation.md
+++ b/doc/2_Getting_Started/1A_modeler_installation.md
@@ -1,3 +1,7 @@
+---
+description: Step-by-step installation guide for Antares Simulator's GEMS interpreter (Antares Modeler) — download, extract, and configure the GEMS interpreter within Antares Simulator.
+---
+
@@ -81,7 +85,7 @@ Let’s check if Modeler is working correctly.
- Use the Hybrid Study tutorial :
- Refer to the tutorial inside the [Interoperability — Antares Hybrid Mode](../4_Interoperability/3_hybrid.md) section
+ Refer to the tutorial inside the [Interoperability — Antares Hybrid Mode](../4_Interoperability/3_hybrid/1_overview.md) section
- Run the following commands :
```bash
diff --git a/doc/2_Getting_Started/2B_QSE_unit_commitment.md b/doc/2_Getting_Started/2B_QSE_unit_commitment.md
index 378b99ea..e883c30b 100644
--- a/doc/2_Getting_Started/2B_QSE_unit_commitment.md
+++ b/doc/2_Getting_Started/2B_QSE_unit_commitment.md
@@ -12,6 +12,11 @@ This tutorial demonstrates a simple example of a **unit commitment** problem sta
The study folder is on the [GEMS Github repository](https://github.com/AntaresSimulatorTeam/GEMS/tree/main/resources/Documentation_Examples/QSE/QSE_2_Unit_Commitment).
+
@@ -27,8 +31,6 @@ From a documentation perspective, the User Guide is organized into **four comple
This separation is fundamental to understanding how [GEMS](../index.md) systems are written, interpreted, validated, and analysed.
----
-
## Mathematical Syntax
The **GEMS Framework Mathematical Syntax** represents set of rules for creating mathematical expressions which will be used in building an optimization problem.
@@ -48,8 +50,6 @@ Mathematical syntax focuses exclusively on *equations and rules*. It does not de
See: [**Mathematical Syntax and Rules**](./2_mathematical_syntax.md)
----
-
## File Structure
The **GEMS Framework File Structure** defines how components are **declared, structured, and connected** to form a system, and how these systems can be translated as optimization problems, using YAML files.
diff --git a/doc/3_User_Guide/2_mathematical_syntax.md b/doc/3_User_Guide/2_mathematical_syntax.md
index d2fde095..5787c011 100644
--- a/doc/3_User_Guide/2_mathematical_syntax.md
+++ b/doc/3_User_Guide/2_mathematical_syntax.md
@@ -1,3 +1,7 @@
+---
+description: Reference for GEMS mathematical expression syntax — operators, variables, parameters, port fields, linearity conditions, and time and scenario indexing mechanisms.
+---
+
@@ -100,11 +104,11 @@ If a variable is time-dependent (or scenario-dependent), it can only be used in
## Ports
-Ports are the mechanism by which models exchange linear expressions. A port has one or more fields with each field carrying a linear expression. **Mathematical Expression Syntax** allows users to reference port fields in expressions using the notation `port_id.field_id`. This is essentially a way to use linear expressions coming from other connected models.
+Ports are the mechanism by which models exchange mathematical expressions. A port has one or more fields with each field carrying an expression. **Mathematical Expression Syntax** allows users to reference port fields in expressions using the notation `port_id.field_id`. This is essentially a way to use expressions coming from other connected models.
-When using a port field in an expression, the same dependency rules apply: if linear expressions of a port varies by time or scenario (which is deduced from how it’s defined – typically depending on time-dependent variables or parameters), then it can only be used in time-dependent or scenario-dependent constraints respectively.
+When using a port field in an expression, the same dependency rules apply: if the expression of a port varies by time or scenario (which is deduced from how it’s defined – typically depending on time-dependent variables or parameters), then it can only be used in time-dependent or scenario-dependent constraints respectively.
-If a port’s linear expressions need to be used in a time-independent manner (for example, when calculating a sum over the full time horizon), an aggregator must be applied to remove the time index. See the section on the [**Time Summation Operator**](#time-summation-full-horizon-sumx) for details. A practical implementation is provided in [`basic_models_library.yml`](https://github.com/AntaresSimulatorTeam/GEMS/blob/main/libraries/basic_models_library.yml) where the `emmision_port` is used to support pollutant-related constraints.
+If a port’s expressions need to be used in a time-independent manner (for example, when calculating a sum over the full time horizon), an aggregator must be applied to remove the time index. See the section on the [**Time Summation Operator**](#time-summation-full-horizon-sumx) for details. A practical implementation is provided in [`basic_models_library.yml`](https://github.com/AntaresSimulatorTeam/GEMS/blob/main/libraries/basic_models_library.yml) where the `emission_port` is used to support pollutant-related constraints.
### Port Operator
diff --git a/doc/4_Interoperability/1_PyPSA_to_GEMS_converter/1_overview.md b/doc/4_Interoperability/1_PyPSA_to_GEMS_converter/1_overview.md
index 11bbc723..c39b9dba 100644
--- a/doc/4_Interoperability/1_PyPSA_to_GEMS_converter/1_overview.md
+++ b/doc/4_Interoperability/1_PyPSA_to_GEMS_converter/1_overview.md
@@ -1,3 +1,7 @@
+---
+description: Overview of the PyPSA-to-GEMS Converter — an open-source Python package that exports PyPSA networks as GEMS study folders, supporting linear OPF and stochastic optimisation.
+---
+
diff --git a/doc/4_Interoperability/2_antares_legacy.md b/doc/4_Interoperability/2_antares_legacy.md
deleted file mode 100644
index 47c4bca2..00000000
--- a/doc/4_Interoperability/2_antares_legacy.md
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-This consists of an area from Solver framework with a constant demand of 60 MW throughout one week and a wind farm component made from the renewable model from the basic-models-library.
- -Concerning the connection between the area and the renewable component, it's configured by these yaml files:
- -library.yml :
- -
-library:
- id: example_library
-
- port-types:
- - id: flow
- description: A port that transfers a power flow.
- fields:
- - id: flow
- area-connection:
- - injection-field: flow
-
- models:
- - id: renewable
- parameters:
- - id: generation
- time-dependent: true
- scenario-dependent: true
- ports:
- - id: balance_port
- type: flow
- port-field-definitions:
- - port: balance_port
- field: flow
- definition: generation
-
-
-system.yml :
- -
-system:
- id: system
-
- components:
-
- - id: wind_farm
- model: example_library.renewable
- parameters:
- - id: generation
- time-dependent: true
- scenario-dependent: true
- value: wind
-
- area-connections:
- - component: wind_farm
- port: balance_port
- area: Area
-
-
-
+
+
+
+injection-to-balance- prefix):
+port-field-definitions:
+ - port: balance_port
+ field: flow_field
+ definition: flat_production # positive production
+
+ -):
+port-field-definitions:
+ - port: balance_port
+ field: flow_field
+ definition: -flat_load # negative load
+
+ spillage-boundThis connection is intended to limit the spillage optimization variable. The convention is the same as for the balance constraint: make the production positive, with no - prefix:
port-field-definitions:
+ - port: spillage_port
+ field: to-area-bound
+ definition: flat_production # positive production
+
+
+unsupplied-energy-boundThis connection is intended to limit the unsupplied energy optimization variable. Here, make the load positive, with no - prefix:
port-field-definitions:
+ - port: unsup_energy_port
+ field: from-area-bound
+ definition: flat_load # positive load
+
+
+
+
+
+
+
+
+This consists of an area from Solver framework with a constant demand of 60 MW throughout one week and a wind farm component made from the renewable model from the basic-models-library.
+ +Concerning the connection between the area and the renewable component, it's configured by these yaml files:
+ +library.yml :
+ +
+library:
+ id: example_library
+
+ port-types:
+ - id: flow_port
+ description: A port that transfers a power flow.
+ fields:
+ - id: flow_field
+ area-connection:
+ injection-to-balance: flow_field
+ spillage-bound:
+ unsupplied-energy-bound:
+
+ models:
+ - id: renewable
+ parameters:
+ - id: generation
+ time-dependent: true
+ scenario-dependent: true
+ ports:
+ - id: balance_port
+ type: flow_port
+ port-field-definitions:
+ - port: balance_port
+ field: flow_field
+ definition: generation
+
+
+system.yml :
+ +
+system:
+ id: system
+
+ components:
+ - id: wind_farm
+ model: example_library.renewable
+ parameters:
+ - id: generation
+ time-dependent: true
+ scenario-dependent: true
+ value: wind
+
+ area-connections:
+ - component: wind_farm
+ port: balance_port
+ area: Area
+
+
+
+
+
-
-
-
-
diff --git a/doc/6_Support_Contributing/4_pr_management.md b/doc/6_Support_Contributing/4_pr_management.md
new file mode 100644
index 00000000..32096047
--- /dev/null
+++ b/doc/6_Support_Contributing/4_pr_management.md
@@ -0,0 +1,411 @@
+# GEMS Ecosystem — Developer Guidelines
+
+This document defines the **standard development, branching, versioning, CI/CD, and release workflow** across all official GEMS ecosystem repositories.
+
+---
+
+## Repositories in Scope
+
+| Repository | Purpose |
+|---|---|
+| [GEMS](https://github.com/AntaresSimulatorTeam/GEMS) | Language specification, model libraries, documentation |
+| [AntaresLegacyModels-to-GEMS-Converter](https://github.com/AntaresSimulatorTeam/AntaresLegacyModels-to-GEMS-Converter) | Converts Antares legacy studies to GEMS format |
+| [PyPSA-to-GEMS-Converter](https://github.com/AntaresSimulatorTeam/PyPSA-to-GEMS-Converter) | Converts PyPSA networks to GEMS studies |
+
+---
+
+## 1. Starting a Change
+
+Every change **must start from a tracked GitHub Issue** in the relevant repository.
+
+The issue must describe:
+
+- purpose of the change
+- compatibility impact
+- applicable process ID (see Section 3)
+
+PRs without an associated issue are only allowed for trivial documentation fixes or emergency hotfixes.
+
+---
+
+## 2. Branch Management
+
+### Core Branches
+
+| Branch | Role |
+|---|---|
+| `main` | Production state. Every commit is a tagged release. |
+| `develop` | Integration branch for the next release. Updated via PRs only. |
+
+Direct commits to `main` or `develop` are **not allowed**.
+
+### Working Branch Types
+
+| Type | Purpose |
+|---|---|
+| `feature/...` | New functionality |
+| `bugfix/...` | Bug fixes |
+| `refactor/...` | Internal restructuring |
+| `perf/...` | Performance improvements |
+| `docs/...` | Documentation changes |
+| `chore/...` | Maintenance, dependency updates |
+| `release/vX.Y.Z` | Release preparation |
+| `hotfix/vX.Y.Z` | Urgent post-release corrections |
+
+### Naming Convention
+
+```
+
-
-
-
-