From 13f19b27a920b07053d4d271e0c802eed4561189 Mon Sep 17 00:00:00 2001
From: Pantelis Sopasakis
Date: Sat, 28 Mar 2026 12:35:55 +0000
Subject: [PATCH 1/6] cleanup folder structure
- fewer folders at /
- remove appveyor.yml
---
.github/dependabot.yml | 2 +-
.github/workflows/ci.yml | 14 +-
.github/workflows/clippy.yml | 13 +-
.github/workflows/rustfmt.yml | 13 +-
appveyor.yml | 74 -
docs/{ => content}/algorithm.md | 0
docs/{ => content}/cite_open.md | 0
docs/{ => content}/contributing.mdx | 28 +-
docs/{ => content}/docker.md | 0
docs/{ => content}/example-nav.md | 0
docs/{ => content}/example-nmpc.md | 0
docs/{ => content}/example_bnp_py.md | 0
docs/{ => content}/example_estimation_py.md | 0
docs/{ => content}/example_invpend_py.md | 0
docs/{ => content}/example_navigation_py.mdx | 0
.../example_navigation_ros_codegen.md | 0
docs/{ => content}/example_rosenbrock_py.mdx | 0
docs/{ => content}/example_tanks_py.md | 0
docs/{ => content}/faq.md | 0
docs/{ => content}/installation.md | 14 +-
docs/{ => content}/matlab-examples.md | 0
docs/{ => content}/matlab-interface.md | 0
docs/{ => content}/open-intro.md | 0
docs/{ => content}/openrust-alm.md | 4 +-
docs/{ => content}/openrust-arithmetic.mdx | 0
docs/{ => content}/openrust-basic.md | 6 +-
docs/{ => content}/openrust-features.mdx | 0
docs/{ => content}/python-advanced.mdx | 2 +-
docs/{ => content}/python-bindings.md | 0
docs/{ => content}/python-c.mdx | 0
docs/{ => content}/python-examples.md | 0
docs/{ => content}/python-interface.md | 0
docs/{ => content}/python-ocp-1.mdx | 0
docs/{ => content}/python-ocp-2.md | 0
docs/{ => content}/python-ocp-3.md | 0
docs/{ => content}/python-ocp-4.md | 0
docs/{ => content}/python-ros.md | 0
docs/{ => content}/python-ros2.mdx | 0
docs/{ => content}/python-tcp-ip.md | 0
docs/{ => content}/udp-sockets.md | 0
docs/sphinx/Makefile | 20 +
docs/sphinx/make.bat | 35 +
docs/sphinx/source/conf.py | 44 +
docs/sphinx/source/index.rst | 27 +
docs/website/README.md | 59 +
docs/website/blog/2019-02-28-new-version.md | 20 +
docs/website/blog/2019-03-01-blog.md | 10 +
docs/website/blog/2019-03-02-superscs.md | 12 +
docs/website/blog/2019-03-03-risk-averse.md | 10 +
.../blog/2019-03-05-matlab-raspberry.md | 83 +
docs/website/blog/2019-03-05-udp-sockets.md | 10 +
docs/website/blog/2019-03-06-talk-to-us.md | 21 +
.../blog/2019-03-15-pure-rust-optimization.md | 12 +
docs/website/blog/2019-03-19-rust-robotics.md | 17 +
.../blog/2019-03-21-fast-udp-connection.md | 13 +
docs/website/blog/2022-07-30-blog.md | 12 +
.../blog/2026-03-21-python-ocp-module.md | 34 +
docs/website/docusaurus.config.js | 176 ++
docs/website/package.json | 19 +
docs/website/publish.sh | 5 +
docs/website/sidebars.js | 43 +
docs/website/src/css/custom.css | 787 ++++++
docs/website/src/pages/help.js | 50 +
docs/website/src/pages/index.js | 483 ++++
docs/website/src/pages/users.js | 47 +
.../src/theme/prism-include-languages.js | 38 +
docs/website/static/css/codeblock.css | 39 +
docs/website/static/css/custom.css | 383 +++
docs/website/static/img/115ba54c2ad0.gif | Bin 0 -> 1368131 bytes
docs/website/static/img/6f6ea4f8d194.gif | Bin 0 -> 7526601 bytes
docs/website/static/img/about-open.png | Bin 0 -> 66162 bytes
docs/website/static/img/bnp.png | Bin 0 -> 17752 bytes
docs/website/static/img/bnp_1.png | Bin 0 -> 41115 bytes
docs/website/static/img/bnp_2.png | Bin 0 -> 18190 bytes
docs/website/static/img/bnp_3.png | Bin 0 -> 42929 bytes
docs/website/static/img/bnp_4.png | Bin 0 -> 20773 bytes
docs/website/static/img/bnp_5.png | Bin 0 -> 39491 bytes
docs/website/static/img/bnp_6.png | Bin 0 -> 18613 bytes
docs/website/static/img/box.png | Bin 0 -> 23829 bytes
docs/website/static/img/bullseye.svg | 67 +
docs/website/static/img/cart_schematic.jpg | Bin 0 -> 37496 bytes
docs/website/static/img/chat.jpeg | Bin 0 -> 8837 bytes
docs/website/static/img/docker.gif | Bin 0 -> 1594890 bytes
docs/website/static/img/e8f236af8d38.gif | Bin 0 -> 2382005 bytes
docs/website/static/img/edge_intelligence.png | Bin 0 -> 13402 bytes
docs/website/static/img/examples_almpm.jpg | Bin 0 -> 23355 bytes
docs/website/static/img/examples_bnp_nmpc.jpg | Bin 0 -> 21244 bytes
.../img/examples_estimation_chaotic.jpg | Bin 0 -> 23774 bytes
docs/website/static/img/examples_invpend.jpg | Bin 0 -> 22004 bytes
.../img/examples_navigation_gvehicle.jpg | Bin 0 -> 21465 bytes
.../static/img/examples_rosenbrock.jpg | Bin 0 -> 19979 bytes
docs/website/static/img/examples_tanks.jpg | Bin 0 -> 23532 bytes
.../img/external-link-square-alt-solid.svg | 1 +
.../static/img/f1-10-main-car_orig.png | Bin 0 -> 168414 bytes
docs/website/static/img/favicon.png | Bin 0 -> 4489 bytes
docs/website/static/img/fbe.png | Bin 0 -> 50095 bytes
docs/website/static/img/happy.png | Bin 0 -> 90555 bytes
docs/website/static/img/hsk.png | Bin 0 -> 58372 bytes
docs/website/static/img/husky.jpg | Bin 0 -> 58682 bytes
docs/website/static/img/husky_video.mp4 | Bin 0 -> 1026602 bytes
docs/website/static/img/i_tanks.png | Bin 0 -> 8620 bytes
docs/website/static/img/invpend_1.png | Bin 0 -> 34218 bytes
docs/website/static/img/invpend_2.png | Bin 0 -> 17995 bytes
docs/website/static/img/lv-oc-sol-2.jpg | Bin 0 -> 100416 bytes
docs/website/static/img/lv-oc-sol.jpg | Bin 0 -> 102084 bytes
docs/website/static/img/matlab_logo.png | Bin 0 -> 22952 bytes
docs/website/static/img/mav.png | Bin 0 -> 61536 bytes
docs/website/static/img/mhe.png | Bin 0 -> 93069 bytes
docs/website/static/img/microchip.svg | 67 +
docs/website/static/img/mpc56.png | Bin 0 -> 100359 bytes
docs/website/static/img/nav-oc-sol-refs.jpg | Bin 0 -> 112738 bytes
docs/website/static/img/nav-oc-sol-theta.jpg | Bin 0 -> 94616 bytes
.../website/static/img/nav-oc-sol-xy-obst.jpg | Bin 0 -> 97203 bytes
docs/website/static/img/nav-oc-sol-xy.jpg | Bin 0 -> 97724 bytes
docs/website/static/img/nav-oc-sol-xyt.jpg | Bin 0 -> 101707 bytes
...tructed_navigation_trajectories_python.png | Bin 0 -> 23359 bytes
docs/website/static/img/ocp-inputs.png | Bin 0 -> 28520 bytes
docs/website/static/img/ocp-states.png | Bin 0 -> 41435 bytes
.../website/static/img/open-functionality.jpg | Bin 0 -> 31713 bytes
docs/website/static/img/open-promo.gif | Bin 0 -> 461227 bytes
docs/website/static/img/open.png | Bin 0 -> 2491 bytes
docs/website/static/img/openbenchmark.png | Bin 0 -> 14592 bytes
.../static/img/python-iface-workflow.jpg | Bin 0 -> 102584 bytes
docs/website/static/img/python-interfaces.jpg | Bin 0 -> 68203 bytes
docs/website/static/img/python_estimation.png | Bin 0 -> 67731 bytes
.../static/img/python_estimation_data.png | Bin 0 -> 45081 bytes
docs/website/static/img/rocket.svg | 1 +
docs/website/static/img/ros2-robot.png | Bin 0 -> 14224 bytes
docs/website/static/img/rpi.jpeg | Bin 0 -> 20895 bytes
docs/website/static/img/rust1.jpeg | Bin 0 -> 29585 bytes
docs/website/static/img/rustybot.jpeg | Bin 0 -> 24396 bytes
docs/website/static/img/saturn.png | Bin 0 -> 3558 bytes
docs/website/static/img/tanks_1.png | Bin 0 -> 26482 bytes
docs/website/static/img/tanks_2.png | Bin 0 -> 20757 bytes
docs/website/static/img/track.gif | Bin 0 -> 239870 bytes
docs/website/static/img/udp_socket.png | Bin 0 -> 7149 bytes
.../img/unobstructed_navigation_python.png | Bin 0 -> 25129 bytes
...tructed_navigation_trajectories_python.png | Bin 0 -> 17461 bytes
docs/website/static/js/legacy-docs.js | 93 +
docs/website/static/js/mathjax-config.js | 18 +
matlab/OpEnTcpOptimizer.m | 898 +++++++
matlab/README.md | 8 +-
matlab/nmpc_open_alm_constraints.mat | Bin 0 -> 1971772 bytes
matlab/untitled.m | 8 +
matlab/untitled2.m | 15 +
matlab/untitled3.m | 15 +
rust/Cargo.toml | 134 ++
Makefile.toml => rust/Makefile.toml | 2 +-
rust/examples/README.md | 6 +
rust/examples/alm_pm.rs | 99 +
rust/examples/panoc_ex1.rs | 65 +
rust/examples/panoc_ex2.rs | 72 +
rust/examples/pm.rs | 114 +
rust/katex-header.html | 20 +
rust/src/alm/alm_cache.rs | 170 ++
rust/src/alm/alm_factory.rs | 599 +++++
rust/src/alm/alm_optimizer.rs | 1606 +++++++++++++
rust/src/alm/alm_optimizer_status.rs | 310 +++
rust/src/alm/alm_problem.rs | 193 ++
rust/src/alm/mod.rs | 105 +
rust/src/alm/tests.rs | 918 +++++++
rust/src/cholesky_factorizer.rs | 317 +++
rust/src/constraints/affine_space.rs | 182 ++
rust/src/constraints/ball1.rs | 86 +
rust/src/constraints/ball2.rs | 71 +
rust/src/constraints/ballinf.rs | 78 +
rust/src/constraints/ballp.rs | 303 +++
rust/src/constraints/cartesian_product.rs | 179 ++
rust/src/constraints/epigraph_squared_norm.rs | 177 ++
rust/src/constraints/finite.rs | 122 +
rust/src/constraints/halfspace.rs | 110 +
rust/src/constraints/hyperplane.rs | 109 +
rust/src/constraints/mod.rs | 82 +
rust/src/constraints/no_constraints.rs | 35 +
rust/src/constraints/rectangle.rs | 106 +
rust/src/constraints/simplex.rs | 105 +
rust/src/constraints/soc.rs | 97 +
rust/src/constraints/sphere2.rs | 101 +
rust/src/constraints/tests.rs | 2134 +++++++++++++++++
rust/src/constraints/zero.rs | 38 +
rust/src/core/fbs/fbs_cache.rs | 53 +
rust/src/core/fbs/fbs_engine.rs | 110 +
rust/src/core/fbs/fbs_optimizer.rs | 155 ++
rust/src/core/fbs/mod.rs | 54 +
rust/src/core/fbs/tests.rs | 244 ++
rust/src/core/mod.rs | 72 +
rust/src/core/panoc/mod.rs | 13 +
rust/src/core/panoc/panoc_cache.rs | 307 +++
rust/src/core/panoc/panoc_engine.rs | 711 ++++++
rust/src/core/panoc/panoc_optimizer.rs | 454 ++++
rust/src/core/panoc/tests.rs | 218 ++
rust/src/core/problem.rs | 64 +
rust/src/core/solver_status.rs | 87 +
rust/src/lib.rs | 149 ++
rust/src/lipschitz_estimator.rs | 386 +++
rust/src/matrix_operations.rs | 335 +++
rust/src/mocks.rs | 303 +++
rust/src/numeric.rs | 10 +
rust/src/tests.rs | 26 +
199 files changed, 16337 insertions(+), 129 deletions(-)
delete mode 100644 appveyor.yml
rename docs/{ => content}/algorithm.md (100%)
rename docs/{ => content}/cite_open.md (100%)
rename docs/{ => content}/contributing.mdx (93%)
rename docs/{ => content}/docker.md (100%)
rename docs/{ => content}/example-nav.md (100%)
rename docs/{ => content}/example-nmpc.md (100%)
rename docs/{ => content}/example_bnp_py.md (100%)
rename docs/{ => content}/example_estimation_py.md (100%)
rename docs/{ => content}/example_invpend_py.md (100%)
rename docs/{ => content}/example_navigation_py.mdx (100%)
rename docs/{ => content}/example_navigation_ros_codegen.md (100%)
rename docs/{ => content}/example_rosenbrock_py.mdx (100%)
rename docs/{ => content}/example_tanks_py.md (100%)
rename docs/{ => content}/faq.md (100%)
rename docs/{ => content}/installation.md (92%)
rename docs/{ => content}/matlab-examples.md (100%)
rename docs/{ => content}/matlab-interface.md (100%)
rename docs/{ => content}/open-intro.md (100%)
rename docs/{ => content}/openrust-alm.md (98%)
rename docs/{ => content}/openrust-arithmetic.mdx (100%)
rename docs/{ => content}/openrust-basic.md (98%)
rename docs/{ => content}/openrust-features.mdx (100%)
rename docs/{ => content}/python-advanced.mdx (99%)
rename docs/{ => content}/python-bindings.md (100%)
rename docs/{ => content}/python-c.mdx (100%)
rename docs/{ => content}/python-examples.md (100%)
rename docs/{ => content}/python-interface.md (100%)
rename docs/{ => content}/python-ocp-1.mdx (100%)
rename docs/{ => content}/python-ocp-2.md (100%)
rename docs/{ => content}/python-ocp-3.md (100%)
rename docs/{ => content}/python-ocp-4.md (100%)
rename docs/{ => content}/python-ros.md (100%)
rename docs/{ => content}/python-ros2.mdx (100%)
rename docs/{ => content}/python-tcp-ip.md (100%)
rename docs/{ => content}/udp-sockets.md (100%)
create mode 100644 docs/sphinx/Makefile
create mode 100644 docs/sphinx/make.bat
create mode 100644 docs/sphinx/source/conf.py
create mode 100644 docs/sphinx/source/index.rst
create mode 100644 docs/website/README.md
create mode 100644 docs/website/blog/2019-02-28-new-version.md
create mode 100644 docs/website/blog/2019-03-01-blog.md
create mode 100644 docs/website/blog/2019-03-02-superscs.md
create mode 100644 docs/website/blog/2019-03-03-risk-averse.md
create mode 100644 docs/website/blog/2019-03-05-matlab-raspberry.md
create mode 100644 docs/website/blog/2019-03-05-udp-sockets.md
create mode 100644 docs/website/blog/2019-03-06-talk-to-us.md
create mode 100644 docs/website/blog/2019-03-15-pure-rust-optimization.md
create mode 100644 docs/website/blog/2019-03-19-rust-robotics.md
create mode 100644 docs/website/blog/2019-03-21-fast-udp-connection.md
create mode 100644 docs/website/blog/2022-07-30-blog.md
create mode 100644 docs/website/blog/2026-03-21-python-ocp-module.md
create mode 100644 docs/website/docusaurus.config.js
create mode 100644 docs/website/package.json
create mode 100755 docs/website/publish.sh
create mode 100644 docs/website/sidebars.js
create mode 100644 docs/website/src/css/custom.css
create mode 100644 docs/website/src/pages/help.js
create mode 100644 docs/website/src/pages/index.js
create mode 100644 docs/website/src/pages/users.js
create mode 100644 docs/website/src/theme/prism-include-languages.js
create mode 100644 docs/website/static/css/codeblock.css
create mode 100644 docs/website/static/css/custom.css
create mode 100644 docs/website/static/img/115ba54c2ad0.gif
create mode 100644 docs/website/static/img/6f6ea4f8d194.gif
create mode 100644 docs/website/static/img/about-open.png
create mode 100644 docs/website/static/img/bnp.png
create mode 100644 docs/website/static/img/bnp_1.png
create mode 100644 docs/website/static/img/bnp_2.png
create mode 100644 docs/website/static/img/bnp_3.png
create mode 100644 docs/website/static/img/bnp_4.png
create mode 100644 docs/website/static/img/bnp_5.png
create mode 100644 docs/website/static/img/bnp_6.png
create mode 100644 docs/website/static/img/box.png
create mode 100644 docs/website/static/img/bullseye.svg
create mode 100644 docs/website/static/img/cart_schematic.jpg
create mode 100644 docs/website/static/img/chat.jpeg
create mode 100644 docs/website/static/img/docker.gif
create mode 100644 docs/website/static/img/e8f236af8d38.gif
create mode 100644 docs/website/static/img/edge_intelligence.png
create mode 100644 docs/website/static/img/examples_almpm.jpg
create mode 100644 docs/website/static/img/examples_bnp_nmpc.jpg
create mode 100644 docs/website/static/img/examples_estimation_chaotic.jpg
create mode 100644 docs/website/static/img/examples_invpend.jpg
create mode 100644 docs/website/static/img/examples_navigation_gvehicle.jpg
create mode 100644 docs/website/static/img/examples_rosenbrock.jpg
create mode 100644 docs/website/static/img/examples_tanks.jpg
create mode 100644 docs/website/static/img/external-link-square-alt-solid.svg
create mode 100644 docs/website/static/img/f1-10-main-car_orig.png
create mode 100644 docs/website/static/img/favicon.png
create mode 100644 docs/website/static/img/fbe.png
create mode 100644 docs/website/static/img/happy.png
create mode 100644 docs/website/static/img/hsk.png
create mode 100644 docs/website/static/img/husky.jpg
create mode 100644 docs/website/static/img/husky_video.mp4
create mode 100644 docs/website/static/img/i_tanks.png
create mode 100644 docs/website/static/img/invpend_1.png
create mode 100644 docs/website/static/img/invpend_2.png
create mode 100644 docs/website/static/img/lv-oc-sol-2.jpg
create mode 100644 docs/website/static/img/lv-oc-sol.jpg
create mode 100644 docs/website/static/img/matlab_logo.png
create mode 100644 docs/website/static/img/mav.png
create mode 100644 docs/website/static/img/mhe.png
create mode 100644 docs/website/static/img/microchip.svg
create mode 100644 docs/website/static/img/mpc56.png
create mode 100644 docs/website/static/img/nav-oc-sol-refs.jpg
create mode 100644 docs/website/static/img/nav-oc-sol-theta.jpg
create mode 100644 docs/website/static/img/nav-oc-sol-xy-obst.jpg
create mode 100644 docs/website/static/img/nav-oc-sol-xy.jpg
create mode 100644 docs/website/static/img/nav-oc-sol-xyt.jpg
create mode 100644 docs/website/static/img/obstructed_navigation_trajectories_python.png
create mode 100644 docs/website/static/img/ocp-inputs.png
create mode 100644 docs/website/static/img/ocp-states.png
create mode 100644 docs/website/static/img/open-functionality.jpg
create mode 100644 docs/website/static/img/open-promo.gif
create mode 100644 docs/website/static/img/open.png
create mode 100644 docs/website/static/img/openbenchmark.png
create mode 100644 docs/website/static/img/python-iface-workflow.jpg
create mode 100644 docs/website/static/img/python-interfaces.jpg
create mode 100644 docs/website/static/img/python_estimation.png
create mode 100644 docs/website/static/img/python_estimation_data.png
create mode 100644 docs/website/static/img/rocket.svg
create mode 100644 docs/website/static/img/ros2-robot.png
create mode 100644 docs/website/static/img/rpi.jpeg
create mode 100644 docs/website/static/img/rust1.jpeg
create mode 100644 docs/website/static/img/rustybot.jpeg
create mode 100644 docs/website/static/img/saturn.png
create mode 100644 docs/website/static/img/tanks_1.png
create mode 100644 docs/website/static/img/tanks_2.png
create mode 100644 docs/website/static/img/track.gif
create mode 100644 docs/website/static/img/udp_socket.png
create mode 100644 docs/website/static/img/unobstructed_navigation_python.png
create mode 100644 docs/website/static/img/unobstructed_navigation_trajectories_python.png
create mode 100644 docs/website/static/js/legacy-docs.js
create mode 100644 docs/website/static/js/mathjax-config.js
create mode 100644 matlab/OpEnTcpOptimizer.m
create mode 100644 matlab/nmpc_open_alm_constraints.mat
create mode 100644 matlab/untitled.m
create mode 100644 matlab/untitled2.m
create mode 100644 matlab/untitled3.m
create mode 100644 rust/Cargo.toml
rename Makefile.toml => rust/Makefile.toml (94%)
create mode 100644 rust/examples/README.md
create mode 100644 rust/examples/alm_pm.rs
create mode 100644 rust/examples/panoc_ex1.rs
create mode 100644 rust/examples/panoc_ex2.rs
create mode 100644 rust/examples/pm.rs
create mode 100644 rust/katex-header.html
create mode 100644 rust/src/alm/alm_cache.rs
create mode 100644 rust/src/alm/alm_factory.rs
create mode 100644 rust/src/alm/alm_optimizer.rs
create mode 100644 rust/src/alm/alm_optimizer_status.rs
create mode 100644 rust/src/alm/alm_problem.rs
create mode 100644 rust/src/alm/mod.rs
create mode 100644 rust/src/alm/tests.rs
create mode 100644 rust/src/cholesky_factorizer.rs
create mode 100644 rust/src/constraints/affine_space.rs
create mode 100644 rust/src/constraints/ball1.rs
create mode 100644 rust/src/constraints/ball2.rs
create mode 100644 rust/src/constraints/ballinf.rs
create mode 100644 rust/src/constraints/ballp.rs
create mode 100644 rust/src/constraints/cartesian_product.rs
create mode 100644 rust/src/constraints/epigraph_squared_norm.rs
create mode 100644 rust/src/constraints/finite.rs
create mode 100644 rust/src/constraints/halfspace.rs
create mode 100644 rust/src/constraints/hyperplane.rs
create mode 100644 rust/src/constraints/mod.rs
create mode 100644 rust/src/constraints/no_constraints.rs
create mode 100644 rust/src/constraints/rectangle.rs
create mode 100644 rust/src/constraints/simplex.rs
create mode 100644 rust/src/constraints/soc.rs
create mode 100644 rust/src/constraints/sphere2.rs
create mode 100644 rust/src/constraints/tests.rs
create mode 100644 rust/src/constraints/zero.rs
create mode 100644 rust/src/core/fbs/fbs_cache.rs
create mode 100644 rust/src/core/fbs/fbs_engine.rs
create mode 100644 rust/src/core/fbs/fbs_optimizer.rs
create mode 100644 rust/src/core/fbs/mod.rs
create mode 100644 rust/src/core/fbs/tests.rs
create mode 100644 rust/src/core/mod.rs
create mode 100644 rust/src/core/panoc/mod.rs
create mode 100644 rust/src/core/panoc/panoc_cache.rs
create mode 100644 rust/src/core/panoc/panoc_engine.rs
create mode 100644 rust/src/core/panoc/panoc_optimizer.rs
create mode 100644 rust/src/core/panoc/tests.rs
create mode 100644 rust/src/core/problem.rs
create mode 100644 rust/src/core/solver_status.rs
create mode 100644 rust/src/lib.rs
create mode 100644 rust/src/lipschitz_estimator.rs
create mode 100644 rust/src/matrix_operations.rs
create mode 100644 rust/src/mocks.rs
create mode 100644 rust/src/numeric.rs
create mode 100644 rust/src/tests.rs
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 40f23173..9463fb9e 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -6,6 +6,6 @@
version: 2
updates:
- package-ecosystem: "cargo"
- directory: "/"
+ directory: "/rust"
schedule:
interval: "weekly"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7afc917a..0f23e9ef 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -36,10 +36,12 @@ jobs:
rustflags: ""
- name: Cargo tests
+ working-directory: rust
run: cargo test
- name: Cargo tests (RP and JEM)
if: runner.os != 'Windows'
+ working-directory: rust
run: |
cargo test --features rp
cargo test --features jem
@@ -79,7 +81,7 @@ jobs:
with:
python-version: "3.12"
cache: "pip"
- cache-dependency-path: open-codegen/pyproject.toml
+ cache-dependency-path: python/pyproject.toml
- uses: egor-tensin/setup-clang@v1
if: runner.os == 'Linux'
@@ -111,14 +113,14 @@ jobs:
- name: Install Python package
if: runner.os == 'Windows'
- working-directory: open-codegen
+ working-directory: python
run: |
python -m pip install --upgrade pip
python -m pip install .
- name: Run Python test.py
if: runner.os == 'Windows'
- working-directory: open-codegen
+ working-directory: python
env:
PYTHONPATH: .
run: python -W ignore test/test.py -v
@@ -201,7 +203,7 @@ jobs:
with:
python-version: "3.12"
cache: "pip"
- cache-dependency-path: open-codegen/pyproject.toml
+ cache-dependency-path: python/pyproject.toml
- name: Run OCP Python tests
if: runner.os != 'Windows'
@@ -209,14 +211,14 @@ jobs:
- name: Install Python package
if: runner.os == 'Windows'
- working-directory: open-codegen
+ working-directory: python
run: |
python -m pip install --upgrade pip
python -m pip install .
- name: Run OCP Python tests
if: runner.os == 'Windows'
- working-directory: open-codegen
+ working-directory: python
env:
PYTHONPATH: .
run: python -W ignore test/test_ocp.py -v
diff --git a/.github/workflows/clippy.yml b/.github/workflows/clippy.yml
index aa1efe3d..594af46e 100644
--- a/.github/workflows/clippy.yml
+++ b/.github/workflows/clippy.yml
@@ -8,14 +8,11 @@ jobs:
clippy_check:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
+ - uses: actions/checkout@v5
+ - uses: actions-rust-lang/setup-rust-toolchain@v1
with:
- profile: minimal
toolchain: stable
- override: true
components: clippy
- - uses: actions-rs/clippy-check@v1
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- args: --examples
+ - name: Cargo clippy
+ working-directory: rust
+ run: cargo clippy --all-targets --all-features --examples
diff --git a/.github/workflows/rustfmt.yml b/.github/workflows/rustfmt.yml
index 102f0e3d..aa7e8c7c 100644
--- a/.github/workflows/rustfmt.yml
+++ b/.github/workflows/rustfmt.yml
@@ -10,14 +10,11 @@ jobs:
name: Rustfmt
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
+ - uses: actions/checkout@v5
+ - uses: actions-rust-lang/setup-rust-toolchain@v1
with:
- profile: minimal
toolchain: stable
- override: true
components: rustfmt
- - uses: actions-rs/cargo@v1
- with:
- command: fmt
- args: --all -- --check
+ - name: Cargo fmt
+ working-directory: rust
+ run: cargo fmt --all -- --check
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index e91d5115..00000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,74 +0,0 @@
-#This Appveyor configuration file is based on the configuration
-#file of the following project:
-#
-#https://github.com/starkat99/appveyor-rust/
-#
-
-## Operating System (VM environment) ##
-
-# Rust needs at least Visual Studio 2013 Appveyor OS for MSVC targets.
-os: Visual Studio 2015
-
-
-environment:
- matrix:
-
-### MSVC Toolchains ###
-
- # Stable 64-bit MSVC
- - channel: stable
- target: x86_64-pc-windows-msvc
- # Stable 32-bit MSVC
- # - channel: stable
- # target: i686-pc-windows-msvc
-
-### GNU Toolchains ###
-
- # Stable 64-bit GNU
- # - channel: stable
- # target: x86_64-pc-windows-gnu
- # Stable 32-bit GNU
- # - channel: stable
- # target: i686-pc-windows-gnu
-
-### Allowed failures ###
-
-# See Appveyor documentation for specific details. In short, place any channel or targets you wish
-# to allow build failures on (usually nightly at least is a wise choice). This will prevent a build
-# or test failure in the matching channels/targets from failing the entire build.
-#matrix:
-# allow_failures:
-# - channel: nightly
-
-# If you only care about stable channel build failures, uncomment the following line:
- #- channel: beta
-
-## Install Script ##
-
-# This is the most important part of the Appveyor configuration. This installs the version of Rust
-# specified by the 'channel' and 'target' environment variables from the build matrix. This uses
-# rustup to install Rust.
-#
-# For simple configurations, instead of using the build matrix, you can simply set the
-# default-toolchain and default-host manually here.
-install:
- - appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
- - rustup-init -yv --default-toolchain %channel% --default-host %target%
- - set PATH=%PATH%;%USERPROFILE%\.cargo\bin
- - rustc -vV
- - cargo -vV
-
-## Build Script ##
-
-# 'cargo test' takes care of building for us, so disable Appveyor's build stage. This prevents
-# the "directory does not contain a project or solution file" error.
-build: false
-
-# Uses 'cargo test' to run tests and build. Alternatively, the project may call compiled programs
-#directly or perform other testing commands. Rust will automatically be placed in the PATH
-# environment variable.
-test_script:
- - cargo add roots
- - cargo add ndarray --features approx
- - cargo build
- - cargo test --verbose %cargoflags%
diff --git a/docs/algorithm.md b/docs/content/algorithm.md
similarity index 100%
rename from docs/algorithm.md
rename to docs/content/algorithm.md
diff --git a/docs/cite_open.md b/docs/content/cite_open.md
similarity index 100%
rename from docs/cite_open.md
rename to docs/content/cite_open.md
diff --git a/docs/contributing.mdx b/docs/content/contributing.mdx
similarity index 93%
rename from docs/contributing.mdx
rename to docs/content/contributing.mdx
index 7671c872..a3541427 100644
--- a/docs/contributing.mdx
+++ b/docs/content/contributing.mdx
@@ -90,12 +90,12 @@ We follow [this style guide](https://www.python.org/dev/peps/pep-0008) and its [
### Website
-This documentation is generated with Docusaurus - read a detailed guide [here](https://github.com/alphaville/optimization-engine/blob/master/website/README.md).
+This documentation is generated with Docusaurus - read a detailed guide [here](https://github.com/alphaville/optimization-engine/blob/master/docs/website/README.md).
-- All docs are in `docs/`
-- Blog entries are in `website/blog/`
+- All docs are in `docs/content/`
+- Blog entries are in `docs/website/blog/`
-To start the website locally (at [http://localhost:3000/optimization-engine](http://localhost:3000/optimization-engine)) change directory to `website` and run `yarn start`. To update the website, execute `./publish.sh` (you need to be a collaborator on github).
+To start the website locally (at [http://localhost:3000/optimization-engine](http://localhost:3000/optimization-engine)) change directory to `docs/website` and run `yarn start`. To update the website, execute `./publish.sh` from there (you need to be a collaborator on github).
## Using Git
When using Git, keep in mind the following guidelines:
@@ -172,9 +172,9 @@ This will have to be a new PR.
Checklist:
- - Updated [CHANGELOG](https://github.com/alphaville/optimization-engine/blob/master/open-codegen/CHANGELOG.md): bump version, write summary of changes
+ - Updated [CHANGELOG](https://github.com/alphaville/optimization-engine/blob/master/python/CHANGELOG.md): bump version, write summary of changes
- Updated [VERSION]: bump version
- - Review [`pyproject.toml`](https://github.com/alphaville/optimization-engine/blob/master/open-codegen/pyproject.toml)
+ - Review [`pyproject.toml`](https://github.com/alphaville/optimization-engine/blob/master/python/pyproject.toml)
- Resolve all associated issues on GitHub
- Write new unit tests if necessary
- Update the API documentation
@@ -230,7 +230,7 @@ GIT_USER=alphaville \
USE_SSH=true \
yarn deploy
```
-from within `website/`. Then, update the opengen API docs too;
+from within `docs/website/`. Then, update the opengen API docs too;
just push a commit with message starting with `[docit]`.
You can also issue a commit without git-add. Run
@@ -241,9 +241,9 @@ git commit -m '[docit] update api docs' --allow-empty
[CHANGELOG]: https://github.com/alphaville/optimization-engine/blob/master/CHANGELOG.md
-[VERSION]: https://github.com/alphaville/optimization-engine/blob/master/open-codegen/VERSION
-[Cargo.toml]: https://github.com/alphaville/optimization-engine/blob/master/Cargo.toml
-[setup.py]: https://github.com/alphaville/optimization-engine/blob/master/open-codegen/setup.py
+[VERSION]: https://github.com/alphaville/optimization-engine/blob/master/python/VERSION
+[Cargo.toml]: https://github.com/alphaville/optimization-engine/blob/master/rust/Cargo.toml
+[setup.py]: https://github.com/alphaville/optimization-engine/blob/master/python/setup.py
[release v0.4.0]: https://github.com/alphaville/optimization-engine/releases/tag/v0.4.0
[bug]: https://github.com/alphaville/optimization-engine/issues/new?template=bug_report.md
[issues on github]: https://github.com/alphaville/optimization-engine/issues
@@ -261,10 +261,10 @@ it is best to use a dedicated Python virtual environment.
### Set up a virtual environment
-From within `open-codegen/`, create and activate a virtual environment:
+From within `python/`, create and activate a virtual environment:
```bash
-cd open-codegen
+cd python
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
@@ -300,7 +300,7 @@ cargo check
### Run the Python and code-generation tests
-From within `open-codegen/`, run the following tests after you activate `venv`
+From within `python/`, run the following tests after you activate `venv`
```bash
# Activate venv first
@@ -318,7 +318,7 @@ environment also contains a working ROS2 installation together with `ros2` and
For example:
```bash
-cd open-codegen
+cd python
micromamba activate ros_env
pip install .
python -W ignore test/test_ros2.py -v
diff --git a/docs/docker.md b/docs/content/docker.md
similarity index 100%
rename from docs/docker.md
rename to docs/content/docker.md
diff --git a/docs/example-nav.md b/docs/content/example-nav.md
similarity index 100%
rename from docs/example-nav.md
rename to docs/content/example-nav.md
diff --git a/docs/example-nmpc.md b/docs/content/example-nmpc.md
similarity index 100%
rename from docs/example-nmpc.md
rename to docs/content/example-nmpc.md
diff --git a/docs/example_bnp_py.md b/docs/content/example_bnp_py.md
similarity index 100%
rename from docs/example_bnp_py.md
rename to docs/content/example_bnp_py.md
diff --git a/docs/example_estimation_py.md b/docs/content/example_estimation_py.md
similarity index 100%
rename from docs/example_estimation_py.md
rename to docs/content/example_estimation_py.md
diff --git a/docs/example_invpend_py.md b/docs/content/example_invpend_py.md
similarity index 100%
rename from docs/example_invpend_py.md
rename to docs/content/example_invpend_py.md
diff --git a/docs/example_navigation_py.mdx b/docs/content/example_navigation_py.mdx
similarity index 100%
rename from docs/example_navigation_py.mdx
rename to docs/content/example_navigation_py.mdx
diff --git a/docs/example_navigation_ros_codegen.md b/docs/content/example_navigation_ros_codegen.md
similarity index 100%
rename from docs/example_navigation_ros_codegen.md
rename to docs/content/example_navigation_ros_codegen.md
diff --git a/docs/example_rosenbrock_py.mdx b/docs/content/example_rosenbrock_py.mdx
similarity index 100%
rename from docs/example_rosenbrock_py.mdx
rename to docs/content/example_rosenbrock_py.mdx
diff --git a/docs/example_tanks_py.md b/docs/content/example_tanks_py.md
similarity index 100%
rename from docs/example_tanks_py.md
rename to docs/content/example_tanks_py.md
diff --git a/docs/faq.md b/docs/content/faq.md
similarity index 100%
rename from docs/faq.md
rename to docs/content/faq.md
diff --git a/docs/installation.md b/docs/content/installation.md
similarity index 92%
rename from docs/installation.md
rename to docs/content/installation.md
index 22d4e95f..836a00fa 100644
--- a/docs/installation.md
+++ b/docs/content/installation.md
@@ -66,8 +66,8 @@ need to create such an environment, then activate it, and lastly, install
`opengen` as above using `pip`. That is, you need to run:
```console
-virtualenv -p python3.6 venv36
-source venv36/bin/activate
+virtualenv -p python3.13 venv
+source venv/bin/activate
pip install opengen
```
@@ -122,11 +122,11 @@ If you want to contribute to OpEn, you should rather *fork* OpEn on [github](htt
### Install opengen
-Go intro `optimization-engine/open-codegen` and create a virtual environment:
+Go into `optimization-engine/python` and create a virtual environment:
```sh
-cd optimization-engine/open-codegen
-virtualenv -p python3.6 venvopen
+cd optimization-engine/python
+virtualenv -p python3.13 venvopen
source venvopen/bin/activate
python setup.py install
```
@@ -139,7 +139,7 @@ Use the above virtual environment (`venvopen`) in PyCharm:
- go to Run > Edit Configurations > Add new configuration
- Script path: specify `main.py`
-- Working dir: `optimization-engine/open-codegen/opengen`
+- Working dir: `optimization-engine/python/opengen`
- Python interpreter: `venvopen`
### Install OpEn in Rust
@@ -153,6 +153,6 @@ cargo build
```
If you need to use `opengen` - the Python interface of OpEn - with a local
-version of the Rust library, use `with_open_version(local_path=...)` in
+version of the Rust library, use `with_open_version(local_path="/path/to/optimization-engine/rust")` in
your code. Read the [advanced options](python-advanced#build-options)
for details.
diff --git a/docs/matlab-examples.md b/docs/content/matlab-examples.md
similarity index 100%
rename from docs/matlab-examples.md
rename to docs/content/matlab-examples.md
diff --git a/docs/matlab-interface.md b/docs/content/matlab-interface.md
similarity index 100%
rename from docs/matlab-interface.md
rename to docs/content/matlab-interface.md
diff --git a/docs/open-intro.md b/docs/content/open-intro.md
similarity index 100%
rename from docs/open-intro.md
rename to docs/content/open-intro.md
diff --git a/docs/openrust-alm.md b/docs/content/openrust-alm.md
similarity index 98%
rename from docs/openrust-alm.md
rename to docs/content/openrust-alm.md
index 44d0ad75..f9f6bf8f 100644
--- a/docs/openrust-alm.md
+++ b/docs/content/openrust-alm.md
@@ -115,7 +115,7 @@ fn main() {
}
```
-A complete example is available at [`pm.rs`](https://github.com/alphaville/optimization-engine/blob/master/examples/pm.rs).
+A complete example is available at [`pm.rs`](https://github.com/alphaville/optimization-engine/blob/master/rust/examples/pm.rs).
## Augmented Lagrangian
@@ -323,7 +323,7 @@ the norm-distance of $F_1(u)$ from $C$. We see that this is indeed below $\delta
## Additional Examples
-See [`alm_pm.rs`](https://github.com/alphaville/optimization-engine/blob/master/examples/alm_pm.rs).
+See [`alm_pm.rs`](https://github.com/alphaville/optimization-engine/blob/master/rust/examples/alm_pm.rs).
[`AlmOptimizer`]: https://docs.rs/optimization_engine/*/optimization_engine/alm/struct.AlmOptimizer.html
[`AlmFactory`]: https://docs.rs/optimization_engine/*/optimization_engine/alm/struct.AlmFactory.html
diff --git a/docs/openrust-arithmetic.mdx b/docs/content/openrust-arithmetic.mdx
similarity index 100%
rename from docs/openrust-arithmetic.mdx
rename to docs/content/openrust-arithmetic.mdx
diff --git a/docs/openrust-basic.md b/docs/content/openrust-basic.md
similarity index 98%
rename from docs/openrust-basic.md
rename to docs/content/openrust-basic.md
index 719ffd6d..fde4e607 100644
--- a/docs/openrust-basic.md
+++ b/docs/content/openrust-basic.md
@@ -220,7 +220,7 @@ fn main() {
}
```
-This example can be found in [`examples/panoc_ex1.rs`](https://github.com/alphaville/optimization-engine/blob/master/examples/panoc_ex1.rs).
+This example can be found in [`examples/panoc_ex1.rs`](https://github.com/alphaville/optimization-engine/blob/master/rust/examples/panoc_ex1.rs).
## Solving parametric problems
@@ -361,8 +361,8 @@ the imposition of a maximum allowed duration, the exit status will be
## Examples
-- [`panoc_ex1.rs`](https://github.com/alphaville/optimization-engine/blob/master/examples/panoc_ex1.rs)
-- [`panoc_ex2.rs`](https://github.com/alphaville/optimization-engine/blob/master/examples/panoc_ex2.rs)
+- [`panoc_ex1.rs`](https://github.com/alphaville/optimization-engine/blob/master/rust/examples/panoc_ex1.rs)
+- [`panoc_ex2.rs`](https://github.com/alphaville/optimization-engine/blob/master/rust/examples/panoc_ex2.rs)
diff --git a/docs/openrust-features.mdx b/docs/content/openrust-features.mdx
similarity index 100%
rename from docs/openrust-features.mdx
rename to docs/content/openrust-features.mdx
diff --git a/docs/python-advanced.mdx b/docs/content/python-advanced.mdx
similarity index 99%
rename from docs/python-advanced.mdx
rename to docs/content/python-advanced.mdx
index a9b5a8fa..0eb6dc5b 100644
--- a/docs/python-advanced.mdx
+++ b/docs/content/python-advanced.mdx
@@ -200,7 +200,7 @@ All build options are shown below
| `with_target_system` | Target system (to be used when you need to cross-compile) |
| `with_build_c_bindings` | Enalbe generation of C/C++ bindings |
| `with_rebuild` | Whether to do a clean build |
-| `with_open_version` | Use a certain version of OpEn (see [all versions]), e.g., `with_open_version("0.6.0")`, or a local version of OpEn (this is useful when you want to download the latest version of OpEn from github). You can do so using `with_open_version(local_path="/path/to/open/")`. |
+| `with_open_version` | Use a certain version of OpEn (see [all versions]), e.g., `with_open_version("0.6.0")`, or a local version of OpEn (this is useful when you want to download the latest version of OpEn from github). You can do so using `with_open_version(local_path="/path/to/open/rust")`. |
|`with_allocator` | Available in `opengen >= 0.6.6`. Compile with a different memory allocator. The available allocators are the entries of `RustAllocator`. OpEn currently supports [Jemalloc](https://github.com/gnzlbg/jemallocator) and [Rpmalloc](https://github.com/EmbarkStudios/rpmalloc-rs).|
[all versions]: https://crates.io/crates/optimization_engine/versions
diff --git a/docs/python-bindings.md b/docs/content/python-bindings.md
similarity index 100%
rename from docs/python-bindings.md
rename to docs/content/python-bindings.md
diff --git a/docs/python-c.mdx b/docs/content/python-c.mdx
similarity index 100%
rename from docs/python-c.mdx
rename to docs/content/python-c.mdx
diff --git a/docs/python-examples.md b/docs/content/python-examples.md
similarity index 100%
rename from docs/python-examples.md
rename to docs/content/python-examples.md
diff --git a/docs/python-interface.md b/docs/content/python-interface.md
similarity index 100%
rename from docs/python-interface.md
rename to docs/content/python-interface.md
diff --git a/docs/python-ocp-1.mdx b/docs/content/python-ocp-1.mdx
similarity index 100%
rename from docs/python-ocp-1.mdx
rename to docs/content/python-ocp-1.mdx
diff --git a/docs/python-ocp-2.md b/docs/content/python-ocp-2.md
similarity index 100%
rename from docs/python-ocp-2.md
rename to docs/content/python-ocp-2.md
diff --git a/docs/python-ocp-3.md b/docs/content/python-ocp-3.md
similarity index 100%
rename from docs/python-ocp-3.md
rename to docs/content/python-ocp-3.md
diff --git a/docs/python-ocp-4.md b/docs/content/python-ocp-4.md
similarity index 100%
rename from docs/python-ocp-4.md
rename to docs/content/python-ocp-4.md
diff --git a/docs/python-ros.md b/docs/content/python-ros.md
similarity index 100%
rename from docs/python-ros.md
rename to docs/content/python-ros.md
diff --git a/docs/python-ros2.mdx b/docs/content/python-ros2.mdx
similarity index 100%
rename from docs/python-ros2.mdx
rename to docs/content/python-ros2.mdx
diff --git a/docs/python-tcp-ip.md b/docs/content/python-tcp-ip.md
similarity index 100%
rename from docs/python-tcp-ip.md
rename to docs/content/python-tcp-ip.md
diff --git a/docs/udp-sockets.md b/docs/content/udp-sockets.md
similarity index 100%
rename from docs/udp-sockets.md
rename to docs/content/udp-sockets.md
diff --git a/docs/sphinx/Makefile b/docs/sphinx/Makefile
new file mode 100644
index 00000000..d0c3cbf1
--- /dev/null
+++ b/docs/sphinx/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = source
+BUILDDIR = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/sphinx/make.bat b/docs/sphinx/make.bat
new file mode 100644
index 00000000..747ffb7b
--- /dev/null
+++ b/docs/sphinx/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=source
+set BUILDDIR=build
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.https://www.sphinx-doc.org/
+ exit /b 1
+)
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/docs/sphinx/source/conf.py b/docs/sphinx/source/conf.py
new file mode 100644
index 00000000..f580a304
--- /dev/null
+++ b/docs/sphinx/source/conf.py
@@ -0,0 +1,44 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# For the full list of built-in configuration values, see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+import os
+import sys
+sys.path.insert(0, os.path.abspath("../../../python/opengen"))
+
+
+def skip(app, what, name, obj, would_skip, options):
+ if name == "__init__":
+ return False
+ return would_skip
+
+
+def setup(app):
+ app.connect("autodoc-skip-member", skip)
+
+# -- Project information -----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
+
+
+project = 'OpEn'
+copyright = '2022, Pantelis Sopasakis'
+author = 'Pantelis Sopasakis'
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+extensions = [
+ 'sphinx.ext.autodoc',
+ 'sphinx.ext.mathjax',
+]
+
+templates_path = ['_templates']
+exclude_patterns = ['test/*']
+
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_theme = 'sphinx_rtd_theme'
+html_static_path = []
diff --git a/docs/sphinx/source/index.rst b/docs/sphinx/source/index.rst
new file mode 100644
index 00000000..5a5c6619
--- /dev/null
+++ b/docs/sphinx/source/index.rst
@@ -0,0 +1,27 @@
+.. OpEn documentation master file, created by
+ sphinx-quickstart on Sat Nov 26 02:57:18 2022.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Opengen API docs
+================================
+
+This is the opengen API documentation. Check out the main `OpEn documentation page `_ to get started with OpEn.
+
+You can get a list of all `modules `_ here.
+
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Contents:
+
+
+
+Contents
+==================
+
+* `Modules `_
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/docs/website/README.md b/docs/website/README.md
new file mode 100644
index 00000000..4357f6ca
--- /dev/null
+++ b/docs/website/README.md
@@ -0,0 +1,59 @@
+This website now uses Docusaurus v3.
+
+# Development
+
+Install dependencies:
+
+```sh
+yarn
+```
+
+Start the local dev server:
+
+```sh
+yarn start
+```
+
+Build the production site:
+
+```sh
+yarn build
+```
+
+Preview the production build locally:
+
+```sh
+yarn serve
+```
+
+Deploy to GitHub Pages:
+
+```sh
+yarn deploy
+```
+
+# Project Layout
+
+```
+optimization-engine/
+ docs/
+ content/ # documentation markdown files
+ sphinx/ # Sphinx API docs
+ website/
+ blog/ # blog posts
+ src/
+ css/
+ pages/
+ static/
+ img/
+ js/
+ docusaurus.config.js
+ sidebars.js
+ package.json
+```
+
+# Notes
+
+- The docs content lives under `/docs/content`.
+- Legacy inline MathJax and widget scripts are stripped at build time, and equivalent site-wide support is loaded from `docs/website/static/js`.
+- Sidebar ordering now lives in `docs/website/sidebars.js`.
diff --git a/docs/website/blog/2019-02-28-new-version.md b/docs/website/blog/2019-02-28-new-version.md
new file mode 100644
index 00000000..7d4eeb2d
--- /dev/null
+++ b/docs/website/blog/2019-02-28-new-version.md
@@ -0,0 +1,20 @@
+---
+title: First Release of OpEn
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+This is the first release of **Optimization Engine** (OpEn) and we're very excited about it!
+
+
+
+## Additional Info
+
+Mauris vestibulum ullamcorper nibh, ut semper purus pulvinar ut. Donec volutpat orci sit amet mauris malesuada, non pulvinar augue aliquam. Vestibulum ultricies at urna ut suscipit. Morbi iaculis, erat at imperdiet semper, ipsum nulla sodales erat, eget tincidunt justo dui quis justo. Pellentesque dictum bibendum diam at aliquet. Sed pulvinar, dolor quis finibus ornare, eros odio facilisis erat, eu rhoncus nunc dui sed ex. Nunc gravida dui massa, sed ornare arcu tincidunt sit amet. Maecenas efficitur sapien neque, a laoreet libero feugiat ut.
+
+Nulla facilisi. Maecenas sodales nec purus eget posuere. Sed sapien quam, pretium a risus in, porttitor dapibus erat. Sed sit amet fringilla ipsum, eget iaculis augue. Integer sollicitudin tortor quis ultricies aliquam. Suspendisse fringilla nunc in tellus cursus, at placerat tellus scelerisque. Sed tempus elit a sollicitudin rhoncus. Nulla facilisi. Morbi nec dolor dolor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras et aliquet lectus. Pellentesque sit amet eros nisi. Quisque ac sapien in sapien congue accumsan. Nullam in posuere ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin lacinia leo a nibh fringilla pharetra.
+
+Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin venenatis lectus dui, vel ultrices ante bibendum hendrerit. Aenean egestas feugiat dui id hendrerit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur in tellus laoreet, eleifend nunc id, viverra leo. Proin vulputate non dolor vel vulputate. Curabitur pretium lobortis felis, sit amet finibus lorem suscipit ut. Sed non mollis risus. Duis sagittis, mi in euismod tincidunt, nunc mauris vestibulum urna, at euismod est elit quis erat. Phasellus accumsan vitae neque eu placerat. In elementum arcu nec tellus imperdiet, eget maximus nulla sodales. Curabitur eu sapien eget nisl sodales fermentum.
+
+Phasellus pulvinar ex id commodo imperdiet. Praesent odio nibh, sollicitudin sit amet faucibus id, placerat at metus. Donec vitae eros vitae tortor hendrerit finibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque vitae purus dolor. Duis suscipit ac nulla et finibus. Phasellus ac sem sed dui dictum gravida. Phasellus eleifend vestibulum facilisis. Integer pharetra nec enim vitae mattis. Duis auctor, lectus quis condimentum bibendum, nunc dolor aliquam massa, id bibendum orci velit quis magna. Ut volutpat nulla nunc, sed interdum magna condimentum non. Sed urna metus, scelerisque vitae consectetur a, feugiat quis magna. Donec dignissim ornare nisl, eget tempor risus malesuada quis.
\ No newline at end of file
diff --git a/docs/website/blog/2019-03-01-blog.md b/docs/website/blog/2019-03-01-blog.md
new file mode 100644
index 00000000..487f1f61
--- /dev/null
+++ b/docs/website/blog/2019-03-01-blog.md
@@ -0,0 +1,10 @@
+---
+title: UAV navigation at ECC19
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+
+
+Our paper titled "Aerial navigation in obstructed environments with embedded nonlinear model predictive control" (authors: E. Small, P. Sopasakis, E. Fresk, P. Patrinos and G. Nikolakopoulos) has been accepted for publication in European Control Conference, 2019.
diff --git a/docs/website/blog/2019-03-02-superscs.md b/docs/website/blog/2019-03-02-superscs.md
new file mode 100644
index 00000000..e59606e3
--- /dev/null
+++ b/docs/website/blog/2019-03-02-superscs.md
@@ -0,0 +1,12 @@
+---
+title: "SuperSCS: OpEn's sister project"
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+[SuperSCS](https://kul-forbes.github.io/scs/) is a sister project of **OpEn**.
+
+SuperSCS is a fast solver for large-scale conic problems. It is written in C and can be interfaced from a lot of different programming languages.
+
+The paper titled "SuperSCS: fast and accurate large-scale conic optimization" (authors: P. Sopasakis, K. Menounou, P. Patrinos) has been accepted at European Control Conference 2019.
diff --git a/docs/website/blog/2019-03-03-risk-averse.md b/docs/website/blog/2019-03-03-risk-averse.md
new file mode 100644
index 00000000..7cba7e1b
--- /dev/null
+++ b/docs/website/blog/2019-03-03-risk-averse.md
@@ -0,0 +1,10 @@
+---
+title: Risk-averse optimal control
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+Our paper titled "Risk-averse risk-constrained optimal control," (authors: P. Sopasakis, M. Schuurmans, P. Patrinos) has been accepted for publication in European Control Conference 2019.
+
+This work is accompanied by the MATLAB toolbox [`marietta`](https://github.com/kul-forbes/risk-averse) which is distributed under the MIT open source license.
\ No newline at end of file
diff --git a/docs/website/blog/2019-03-05-matlab-raspberry.md b/docs/website/blog/2019-03-05-matlab-raspberry.md
new file mode 100644
index 00000000..06ed1f9b
--- /dev/null
+++ b/docs/website/blog/2019-03-05-matlab-raspberry.md
@@ -0,0 +1,83 @@
+---
+title: OpEn on Raspberry Pi
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+Here we give an example of building a parametric optimizer in MATLAB, which will run on a **Raspberry Pi**. The parametric optimizer will listen for requests on a **UDP socket**. We will then establish a connection to the optimizer, remotely, and consume the service.
+
+
+
+
+
+**NOTE:** Please, read the documentation of the [MATLAB interface](../../../../docs/matlab-interface) and the [UDP communication protocol](../../../../docs/udp-sockets) first.
+
+In MATLAB, we run the following script:
+
+```matlab
+nu = 6; % number of decision variables
+np = 2; % number of parameters
+
+u = casadi.SX.sym('u', nu); % decision variables
+p = casadi.SX.sym('p', np); % parameters
+
+phi = rosenbrock(u, p); % cost function phi(u; p) (Rosenbrock)
+
+constraints = OpEnConstraints.make_ball_at_origin(1.0);
+
+build_config = open_build_config();
+build_config.target = 'rpi';
+build_config.build_mode = 'release';
+build_config.udp_interface.bind_address = '0.0.0.0';
+build_config.udp_interface.port = 3498;
+
+open_generate_code(build_config, constraints, u, p, phi);
+```
+
+Note that we have specified that the target hardware is a raspberry pi, `rpi` (equivalently `arm-unknown-linux-gnueabihf`), the bind address is `0.0.0.0` (so that the service will bind on all valid IP addresses) and the port is `3498`. We have also set the `build_mode` to `release` for maximum performance.
+
+After we execute the script, the code generator will have created a new project at
+
+```text
+build/autogenerated_optimizer/
+```
+
+We then copy the binary file from
+
+```text
+build/autogenerated_optimizer/target/arm-unknown-linux-gnueabihf/release
+```
+
+onto our Raspberry Pi and execute it.
+
+Then, on our PC (assuming we run on Linux), we run:
+
+```bash
+netcat -u {ip_address_of_raspberry} 3498
+```
+
+where `{ip_address_of_raspberry}` is the IP address (or domain name) of our Raspberry. This will start a console, where we can send data to the PI. For example, we write
+
+```json
+{"parameter":[50, 100]}
+```
+
+and press Enter, to receive:
+
+
+```json
+{
+ "p" : [50.0, 100.0],
+ "u" : [1.2597243950, 1.3938323941, 1.6995734606, 2.6752011118, 7.0289056698, 49.3661825375],
+ "n" : 88,
+ "f" : -5.243242641581731,
+ "dt" : "1.207756ms"
+}
+```
+
+So, **what do you think**? Let us know by providing some feedback (you can reach us live [**here**](../../../2019/03/06/talk-to-us)).
+
+If you like **OpEn**, please give it [**a star on github**](https://github.com/alphaville/optimization-engine).
+
+If you find a bug, please create [**an issue on on github**](https://github.com/alphaville/optimization-engine/issues/new).
\ No newline at end of file
diff --git a/docs/website/blog/2019-03-05-udp-sockets.md b/docs/website/blog/2019-03-05-udp-sockets.md
new file mode 100644
index 00000000..0ba3ccd8
--- /dev/null
+++ b/docs/website/blog/2019-03-05-udp-sockets.md
@@ -0,0 +1,10 @@
+---
+title: OpEn UDP socket interface
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+You may now auto-generate an **Optimization Engine** module, which solves parametric optimization problems (such as model predictive control problems) and can be consumed over **UDP sockets**! Read more [here](https://alphaville.github.io/optimization-engine/docs/matlab-interface). This way, the parametric optimizer can be easily called from any programming language. More importantly, the code generation can be carried out in one line of code, while, if necessary, it can be fully configured.
+
+
\ No newline at end of file
diff --git a/docs/website/blog/2019-03-06-talk-to-us.md b/docs/website/blog/2019-03-06-talk-to-us.md
new file mode 100644
index 00000000..356e7bdd
--- /dev/null
+++ b/docs/website/blog/2019-03-06-talk-to-us.md
@@ -0,0 +1,21 @@
+---
+title: Let's talk
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+
+
+
+
+
+
+Are you interested in **OpEn**? You may join our growing community:
+
+- Join us on [Discord](https://discord.gg/mfYpn4V)
+- or on [Gitter](https://gitter.im/alphaville/optimization-engine)
diff --git a/docs/website/blog/2019-03-15-pure-rust-optimization.md b/docs/website/blog/2019-03-15-pure-rust-optimization.md
new file mode 100644
index 00000000..03c58c23
--- /dev/null
+++ b/docs/website/blog/2019-03-15-pure-rust-optimization.md
@@ -0,0 +1,12 @@
+---
+title: "OpEn: a pure Rust optimizer"
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+The majority of optimization packages in Rust, such as [IPOPT](https://crates.io/crates/ipopt), [OSQP](https://crates.io/crates/osqp), [NLOPT](https://crates.io/crates/nlopt), are essentially bindings (interfaces) to other software. There are a few pure-Rust packages, such as [rustimization](https://crates.io/crates/rustimization), [argmin](https://crates.io/crates/argmin), they implement algorithms which are not suitable for embedded nonconvex optimization.
+
+
+
+**OpEn** is the first **pure-Rust** package
diff --git a/docs/website/blog/2019-03-19-rust-robotics.md b/docs/website/blog/2019-03-19-rust-robotics.md
new file mode 100644
index 00000000..5f3de67c
--- /dev/null
+++ b/docs/website/blog/2019-03-19-rust-robotics.md
@@ -0,0 +1,17 @@
+---
+title: Rust for robots
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+
+Is the **Rust** programming language the future of robotics? [Some](https://medium.com/luosrobotics/why-rust-is-the-future-of-robotics-81d7fb68fe37) claim that its memory and thread safety model and the fact that it can run on embedded and bare metal devices makes it the perfect candidate for robotics.
+
+
+
+Despite its young age, Rust has all but failed to go unnoticed: a [stackoverflow survey](https://insights.stackoverflow.com/survey/2018/#most-loved-dreaded-and-wanted) revealed that Rust is the top most loved programming language and nowhere around the 25 most dreaded ones.
+
+Rust comes with all the perks of high-level languages (such as C++ and Java) related to code structure and organisation, the capabilities and efficiency of low-level languages (such as C), plus it is t**Rust**worthy.
+
+This is why we decided to write **OpEn** in Rust.
\ No newline at end of file
diff --git a/docs/website/blog/2019-03-21-fast-udp-connection.md b/docs/website/blog/2019-03-21-fast-udp-connection.md
new file mode 100644
index 00000000..2f6606d4
--- /dev/null
+++ b/docs/website/blog/2019-03-21-fast-udp-connection.md
@@ -0,0 +1,13 @@
+---
+title: Faster UDP connection
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+After a recent update, the [UDP interface](/optimization-engine/docs/udp-sockets) if **OpEn** is now significantly faster. Make sure you use version `0.2.2` or later.
+
+
+
+Coming up: TCP interface
+
diff --git a/docs/website/blog/2022-07-30-blog.md b/docs/website/blog/2022-07-30-blog.md
new file mode 100644
index 00000000..fd42f151
--- /dev/null
+++ b/docs/website/blog/2022-07-30-blog.md
@@ -0,0 +1,12 @@
+---
+title: Autonomous Racing of Scale Vehicles at SMC22
+author: Giuseppe Silano
+authorURL: https://giuseppesilano.net
+authorImageURL: https://giuseppesilano.net/images/headshot.jpg
+---
+
+
+
+Our paper titled "A Nonlinear Model Predictive Control Strategy for Autonomous Racing of Scale Vehicles" (authors: V. Cataffo, G. Silano, L. Iannelli, V. Puig and G. Glielmo) has been accepted for publication in IEEE International Conference on Systems, Man, and Cybernetics (SMC), 2022.
+
+A preprint is available here.
diff --git a/docs/website/blog/2026-03-21-python-ocp-module.md b/docs/website/blog/2026-03-21-python-ocp-module.md
new file mode 100644
index 00000000..c5b08b8b
--- /dev/null
+++ b/docs/website/blog/2026-03-21-python-ocp-module.md
@@ -0,0 +1,34 @@
+---
+title: New Python OCP Module for Optimal Control and MPC
+author: Pantelis Sopasakis
+authorURL: https://github.com/alphaville
+authorImageURL: https://avatars.githubusercontent.com/u/125415?v=4
+---
+
+
+
+OpEn now comes with a Python OCP module that facilitates the design of optimal control problems in a direct and intuitive way.
+
+With the new module, you can describe the key ingredients of an optimal control problem from Python, including:
+
+- stage and terminal costs
+- system dynamics
+- state and input constraints
+- problem parameters and defaults
+
+This makes it much easier to formulate nonlinear optimal control problems and model predictive control (MPC) schemes before generating an embedded optimizer with OpEn.
+
+
+
+The new OCP workflow is documented in the Python OCP guide:
+
+- [Getting started with the OCP module](/optimization-engine/docs/python-ocp-1)
+- [OCP problem formulation](/optimization-engine/docs/python-ocp-2)
+- [Building the optimizer](/optimization-engine/docs/python-ocp-3)
+- [Running closed-loop simulations](/optimization-engine/docs/python-ocp-4)
+
+If you want to try it right away, you can also run the Colab notebook:
+
+- [Try the Python OCP module in Google Colab](https://colab.research.google.com/drive/17vbVUbqcah9seIg17aN6bW0-T15FWrBo?usp=sharing)
+
+This functionality was introduced in `opengen` version `0.10.0a1`, and it opens the door to a smoother workflow for designing optimal controllers and MPC applications directly in Python.
diff --git a/docs/website/docusaurus.config.js b/docs/website/docusaurus.config.js
new file mode 100644
index 00000000..59e6f016
--- /dev/null
+++ b/docs/website/docusaurus.config.js
@@ -0,0 +1,176 @@
+const {themes} = require('prism-react-renderer');
+
+const baseUrl = '/optimization-engine/';
+
+const users = [
+ {
+ caption: 'alphaville',
+ image: 'img/box.png',
+ infoLink: 'https://alphaville.github.io',
+ pinned: true,
+ },
+];
+
+function preprocessLegacyMarkdown({fileContent}) {
+ return fileContent
+ .replace(/