|
1 | | -# Changelog |
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to GemsPy are documented here. |
| 4 | + |
| 5 | +## [0.1.0] - 2026-04-30 |
| 6 | + |
| 7 | +### Study folder structure |
| 8 | + |
| 9 | +Studies are now loaded from a conventional directory layout via `load_study(study_dir)`: |
| 10 | + |
| 11 | +``` |
| 12 | +<study>/ |
| 13 | + input/ |
| 14 | + system.yml # component topology and connections |
| 15 | + model-libraries/*.yml # model library files |
| 16 | + data-series/ # time-series parameter files (TSV) |
| 17 | + data-series/modeler-scenariobuilder.dat # optional scenario mapping |
| 18 | +``` |
| 19 | + |
| 20 | +The `Study` object (pairing a `System` with a `DataBase`) is the single input to `SimulationSession`. |
| 21 | + |
| 22 | +### Optimization configuration (`optim-config.yml`) |
| 23 | + |
| 24 | +A new `optim-config.yml` file controls all aspects of a simulation run: |
| 25 | + |
| 26 | +- **`resolution.mode`** — four strategies: `frontal`, `sequential-subproblems`, `parallel-subproblems`, `benders-decomposition` |
| 27 | +- **`resolution.block_length` / `block_overlap`** — time-window size and overlap for sequential/parallel modes |
| 28 | +- **`time_scope`** — `first_time_step` / `last_time_step` |
| 29 | +- **`scenario_scope.nb_scenarios`** — number of Monte-Carlo scenarios to run |
| 30 | +- **`solver_options`** — solver name (default: HiGHS), log verbosity, and free-form solver parameters |
| 31 | +- **`models[].model_decomposition`** — per-model assignment of variables, constraints, and objective contributions to `master`, `subproblems`, or `master-and-subproblems` (used for Benders decomposition) |
| 32 | +- **`models[].out_of_bounds_processing`** — per-constraint handling of time indices that fall outside the horizon (`cyclic` or `drop`) |
| 33 | + |
| 34 | +### Scenario builder |
| 35 | + |
| 36 | +`modeler-scenariobuilder.dat` maps Monte-Carlo scenario indices to data-series column indices on a per-scenario-group basis, allowing different components to draw from different stochastic draws. |
| 37 | + |
| 38 | +### Vectorized solver |
| 39 | + |
| 40 | +The internal optimizer was migrated from a scalar OR-Tools pipeline to a fully vectorized [linopy](https://github.com/PyPSA/linopy) / xarray pipeline. All constraints for all components, time steps, and scenarios are now built in a single pass and solved in one call — significantly reducing build time for large horizons. |
| 41 | + |
| 42 | +### Removed |
| 43 | +- OR-Tools dependency. |
| 44 | + |
| 45 | +--- |
| 46 | + |
| 47 | +## [0.0.6] - 2025 |
| 48 | + |
| 49 | +### Added |
| 50 | +- Math operators `floor`, `ceil`, `min`, and `max` in the GemsPy expression language, with `max`/`min` accepting a variadic argument list (`argList` grammar rule). |
| 51 | +- Support for complex variable bounds expressions: operator expansion now runs before bounds evaluation, enabling expressions such as `min(p_max_cluster, min_gen_mod * unit_count * p_max_unit)`. |
| 52 | +- `visitTimeShiftExpr` and `visitTimeIndexExpr` in the expression visitor interface. |
| 53 | +- `AGENTS.md` and agent guidance documentation. |
| 54 | +- Status and quality badges in README. |
| 55 | + |
| 56 | +### Fixed |
| 57 | +- O(T²) list-copy performance bug in `CopyVisitor.addition` (now O(T)). |
| 58 | +- Pandas and Pydantic deprecation warnings resolved. |
| 59 | +- `floor`/`ceil`/`max`/`min` visitor implementations in `LinearExpressionBuilder`. |
| 60 | +- Degree of `floor`/`ceil`/`max`/`min` returns `inf` for non-constant operands. |
| 61 | + |
| 62 | +--- |
| 63 | + |
| 64 | +## [0.0.5] - 2025 |
| 65 | + |
| 66 | +### Added |
| 67 | +- `load_input_system`: load and validate an input system into memory from a file path. |
| 68 | + |
| 69 | +--- |
| 70 | + |
| 71 | +## [0.0.4] - 2025 |
| 72 | + |
| 73 | +### Removed |
| 74 | +- PyPSA → GEMS converter and related files (out of scope). |
| 75 | + |
| 76 | +--- |
| 77 | + |
| 78 | +## [0.0.3] - 2025 |
| 79 | + |
| 80 | +### Changed |
| 81 | +- Version naming aligned; package prepared for PyPI upload. |
| 82 | +- README revised to consistently use GEMS / GemsPy naming. |
| 83 | + |
| 84 | +--- |
| 85 | + |
| 86 | +## [0.0.2] - 2025 |
| 87 | + |
| 88 | +### Changed |
| 89 | +- Initial PyPI preparation: project metadata, classifiers, and packaging configuration. |
0 commit comments