# Change Log All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). Note: This is the Changelog file of `opengen` - the Python interface of OpEn ## [0.11.0] - 31 March 2026 ### Added - ROS2 package generation support via `BuildConfiguration.with_ros2(...)`, including auto-generated ROS2 templates, launcher, messages, and package wrapper code - Dedicated ROS2 tests covering package generation, build configuration behavior, rendered custom package settings, and end-to-end execution of a generated ROS2 node - More informative TCP solver error payloads, including clearer dimension/parameter validation failures and propagated solver-side failure messages - Additional unit tests for `BuildConfiguration`, `OcpSolution`, `AffineSpace`, `RosConfiguration`, and `SetYCalculator`, increasing Python coverage to 93% ### Changed - Extended `RosConfiguration` so it can be used for both ROS and ROS2 package generation - Breaking change: the direct interface (Python bindings) now has an API which mirrors that of the TCP interface: the method `solve` returns either a solution or an error object. Website documentation is updated. New unit tests are implemented. Note that `solver.run()` does not return the solution object directly, but rather works in the same way as the TCP interface: it returns a response object (instance of `SolverResponse`), on which the method `.get()` returns either a `SolverStatus` or `SolverError`. - Added helpful `__repr__` methods to generated Python binding response/status/error objects, TCP solver response/error objects, and `GeneratedOptimizer` for easier inspection and debugging - Updated generated TCP server and C interface templates to work with the richer Rust solver error model and expose better failure information to clients. Updated auto-generated `CMakeLists.txt` file. Tighter unit tests. - ROS2 generated packages now publish detailed `error_code` and `error_message` fields, plus `STATUS_INVALID_REQUEST`, so invalid requests and solver failures are reported explicitly instead of being silently ignored - Extended GitHub Actions CI to run Python, OCP, and generated-code tests on Windows, and fixed multiple Windows-specific code generation, path, encoding, TCP, and C/CMake compatibility issues. - ROS/ROS2 messages: using `uint64` instead of `uint8` to avoid overflow - Tighter checks of provided arguments in build configuration - Added `pytest` to the optional `dev` dependencies and documented local test, benchmark, and coverage workflows for Python and Rust contributors - Restructured folder structure of entire repo: opengen moved to folder `python` ### Fixed - Generated ROS and ROS2 wrappers now accept any meaningful positive `initial_penalty` instead of requiring values greater than `1.0` - Generated ROS and ROS2 result messages now use wide iteration counters so `inner_iterations` and `outer_iterations` cannot overflow - ROS2 generated packages now use `uint16` for `error_code`, matching the current positive error-code range while keeping the wire format compact - MATLAB-related Python docs now reference the new `python/` package layout instead of the removed `open-codegen/` path - ROS2 integration tests now clean stale nested `colcon` build artifacts and preserve the active shell environment more reliably in micromamba/conda setups - Fixed issues in `__init__.py`: lazy imports and discoverability - Now checking whether the constraints have the correct dimension before attempting to build an optimizer ## [0.10.1] - 2026-03-25 ### Changed - Introduced `pyproject.toml` for packaging the Python library; constrained the versions of dependencies therein ## [0.10.0] - 2026-03-19 ### Added - New high-level `opengen.ocp` package for constructing optimal control problems from dynamics, stage/terminal costs, named parameters, and OCP-oriented constraints - Support for both single-shooting and multiple-shooting formulations, including penalty- and ALM-based constraint lowering - `GeneratedOptimizer` wrapper with `solve(x0=..., xref=...)` API and persistent optimizer metadata via `optimizer_manifest.json` plus `rollout.casadi` - Continuous-time dynamics discretization helpers in `opengen.ocp.DynamicsDiscretizer`, including Euler, midpoint, Heun, RK4, and multistep discretizations - Extended `OcpSolution` with solver diagnostics such as cost, penalty, iteration counts, infeasibility, fixed-point residual, and Lagrange multipliers - Detailed documentation available [here](https://alphaville.github.io/optimization-engine/docs/python-ocp-1), incl. Google Colab notebooks, and updated [API docs](https://alphaville.github.io/optimization-engine/api-dox/html/index.html) ### Changed - Changed the default penalty weight update factor to `1.75` - Added and refined OCP documentation, docstrings, notebook examples, and automated tests - Improved readability of printed OCP solver results ### Fixed - Avoid duplicate builder log messages by disabling propagation to the root logger - Use reliable package version lookup when recording the installed CasADi version in optimizer manifests - Check valid version in `with_version` ## [0.9.6] - 2026-03-14 ### Fixed - Clippy fixes (minor) ## [0.9.5] - 2026-03-10 ### Changed - Removed dependence on `pkg_resources` (issue #380) - Additional unit tests: increased coverage to 92% ## [0.9.4] - 2025-05-08 ### Fixed - Fixed issues with cross compilation (each sub-project has its own `.cargo/config.toml`) and updated [documentation](https://alphaville.github.io/optimization-engine/docs/python-advanced#cross-compilation) ### Changed - Rename auto-generated bindings file from `.cargo/config` to `.cargo/config.toml` (backwards compatible change) - Updated min cmake version from 2.8 to 3.5 - Updated auto-generated example C/C++ bindings ## [0.9.3] - 2024-12-06 ### Changed - Email alias in `setup.py` ## [0.9.2] - 2024-11-05 ### Fixed - In CasADi-generated C files some functions are made static to avoid clashes when creating multiple solvers ## [0.9.1] - 2024-10-14 ### Changed - Handling kill code in TCP server interface to get rid of warning ## [0.9.0] - 2024-08-15 ### Added * Support for affine spaces in code generation (see `opengen.constraints.AffineSpace`) * TCP solver status can be printed ## [0.8.1] - 2024-07-17 ### Added * Python direct interface support for ARM-based Macs * Updated GitHub Actions to use the macos-latest runner * Updated GitHub Actions to use Python3.12 (required for above) ## [0.8.0] - 2024-03-20 ### Added * Code generation support for Sphere2 ## [0.7.1] - 2022-02-14 ### Added * Method `.build` returns a dictionary with information that can assist debugging ### Changed * Default argument in `.with_preconditioning` * Updated all docstrings to be sphinx-compatible * New [API docs](https://alphaville.github.io/optimization-engine/api-dox/html/) ## [0.7.0] - 2022-10-11 ### Added * Code generation and support for preconditioning ## [0.6.13] - 2022-8-12 ### Changed * Removing timestamps from auto-generated files * Removing random strings from function names (no mangling) ## [0.6.12] - 2022-8-8 ### Fixed * Got rid of Rust warnings for generated code ## [0.6.11] - 2022-3-10 ### Fixed * Changed f-strings (`f"{variable}"`) to `.format` for python3.5 compatibility * Fixed typo in `tcp_server.rs` ## [0.6.9] - 2022-1-24 ### Fixed * Forced use of clap v2 because migration required for v3 ## [0.6.8] - 2021-12-3 ### Fixed * Fixed bug in python code file generation for Windows users ## [0.6.7] - 2021-11-1 ### Added * Support for simplices and ell1 balls via code generation ## [0.6.6] - 2021-10-27 ### Added * Support for [`rpmalloc`](https://github.com/EmbarkStudios/rpmalloc-rs) and [`jemalloc`](https://github.com/gnzlbg/jemallocator) using `BuildConfiguration.with_allocator` * Implementation/testing of projection on simplices (`simplex.py`) (addresses #234) * Implementation/testing of projection on Ball-1 (`ball1.py`) (addresses #238) * `# Safety` section in auto-generated unsafe auto-generated Rust code ### Removed * Unnecessary `#[no_mangle]`s in auto-generated Rust code ### Changed * Took care of most clippy warnings in Rust and auto-generated Rust code ## [0.6.5] - 2021-04-16 ### Changed * Include `VERSION` file in `MANIFEST.in` (included in Python package) * Bump versions: `cbindgen`: `0.8 --> 0.20.*` and `libc`: `0.2.0 -> 0.2.*` ## [0.6.4] - 2020-10-21 ### Added * Accessing Rust from Python directly using PyO3 ### Fixed * List of authors in `Cargo.toml` is generated properly * Fixed bug when curvature is zero ### Changed * `enable_tcp_interface` previously gave a `DeprecationWarning`; now it raises it. In a future version, it will be removed. ## [0.6.3] - 2020-10-06 ### Fixed * Fixed bug #210: Cartesian products in code generation * Fixed bug #211: `OptimizerTcpManager` and remote connections ## [0.6.2] - 2020-09-27 ### Fixed * Fixed issue with TCP connections in Release mode (PR #206) ## [0.6.1] - 2020-09-10 ### Changed * `OptimizerTcpManager`: ip and port can be set dynamically ## [0.6.0] - 2020-09-03 ### Added * Support for half-spaces in problem constraints * Added checks for `segments` in `CartesianProduct` ### Changed * Dropping first argument in `Cartesian` (`dimension`) as it is unnecessary * Documented class `CartesianProduct` * Dropped `dimension` from constructor of `CartesianProduct` (breaking change) ### Fixed * Issue #185: ROS config parameters are ignored ## [0.5.0] - 2020-05-12 ### Fixed * Prevent multiple log messages from printing * Check if TCP port is available before starting server ### Added * Auto-generation of ROS packages * Cost value at solution is returned ### Changed * Reorganised template files into folders ### Removed ## [0.4.1] - 2020-04-13 ### Fixed * Project-specific `icasadi` dependency * Project-specific `tcp_iface` TCP interface * Fixed `lbfgs` typo [0.11.0]: https://github.com/alphaville/optimization-engine/compare/opengen-0.10.1...opengen-0.11.0 [0.10.1]: https://github.com/alphaville/optimization-engine/compare/opengen-0.10.0...opengen-0.10.1 [0.10.0]: https://github.com/alphaville/optimization-engine/compare/opengen-0.9.6...opengen-0.10.0 [0.9.6]: https://github.com/alphaville/optimization-engine/compare/opengen-0.9.5...opengen-0.9.6 [0.9.5]: https://github.com/alphaville/optimization-engine/compare/opengen-0.9.4...opengen-0.9.5 [0.9.4]: https://github.com/alphaville/optimization-engine/compare/opengen-0.9.3...opengen-0.9.4 [0.9.3]: https://github.com/alphaville/optimization-engine/compare/opengen-0.9.2...opengen-0.9.3 [0.9.2]: https://github.com/alphaville/optimization-engine/compare/opengen-0.9.1...opengen-0.9.2 [0.9.1]: https://github.com/alphaville/optimization-engine/compare/opengen-0.9.0...opengen-0.9.1 [0.9.0]: https://github.com/alphaville/optimization-engine/compare/opengen-0.8.1...opengen-0.9.0 [0.8.1]: https://github.com/alphaville/optimization-engine/compare/v0.9.0...opengen-0.8.1 [0.8.1]: https://github.com/alphaville/optimization-engine/compare/v0.9.0...opengen-0.8.1 [0.8.0]: https://github.com/alphaville/optimization-engine/compare/opengen-0.7.1...opengen-0.8.0 [0.7.1]: https://github.com/alphaville/optimization-engine/compare/opengen-0.7.0...opengen-0.7.1 [0.7.0]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.13...opengen-0.7.0 [0.6.13]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.12...opengen-0.6.13 [0.6.12]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.11...opengen-0.6.12 [0.6.11]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.9...opengen-0.6.11 [0.6.9]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.8...opengen-0.6.9 [0.6.8]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.7...opengen-0.6.8 [0.6.7]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.6...opengen-0.6.7 [0.6.6]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.5...opengen-0.6.6 [0.6.5]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.4...opengen-0.6.5 [0.6.4]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.3...opengen-0.6.4 [0.6.3]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.2...opengen-0.6.3 [0.6.2]: https://github.com/alphaville/optimization-engine/compare/opengen-0.6.1...opengen-0.6.2 [0.6.1]: https://github.com/alphaville/optimization-engine/compare/opengen-v0.6.0...opengen-0.6.1 [0.6.0]: https://github.com/alphaville/optimization-engine/compare/opengen-v0.5.0...opengen-0.6.0 [0.5.0]: https://github.com/alphaville/optimization-engine/compare/opengen-0.4.1...opengen-v0.5.0 [0.4.1]: https://github.com/alphaville/optimization-engine/compare/opengen-0.4.1...master