From fdbb45509fadf2396d46498a2df2cb594ac6e8d9 Mon Sep 17 00:00:00 2001 From: godardma Date: Thu, 10 Sep 2026 14:32:22 +0200 Subject: [PATCH 1/9] [sep] first implementation of SepImage (C++ only) --- examples/04_explored_area/CMakeLists.txt | 7 +- examples/04_explored_area/main_peibos.cpp | 59 +++++++ src/core/CMakeLists.txt | 2 + .../analytic/codac2_AnalyticFunction.h | 2 +- src/core/separators/codac2_SepImage.cpp | 18 ++ src/core/separators/codac2_SepImage.h | 159 ++++++++++++++++++ 6 files changed, 245 insertions(+), 2 deletions(-) create mode 100644 examples/04_explored_area/main_peibos.cpp create mode 100644 src/core/separators/codac2_SepImage.cpp create mode 100644 src/core/separators/codac2_SepImage.h diff --git a/examples/04_explored_area/CMakeLists.txt b/examples/04_explored_area/CMakeLists.txt index cf9ef35ce..44d9b1807 100644 --- a/examples/04_explored_area/CMakeLists.txt +++ b/examples/04_explored_area/CMakeLists.txt @@ -31,4 +31,9 @@ add_executable(${PROJECT_NAME} main.cpp) target_compile_options(${PROJECT_NAME} PUBLIC ${CODAC_CXX_FLAGS}) target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${CODAC_INCLUDE_DIRS}) - target_link_libraries(${PROJECT_NAME} PUBLIC ${CODAC_LIBRARIES}) \ No newline at end of file + target_link_libraries(${PROJECT_NAME} PUBLIC ${CODAC_LIBRARIES}) + + add_executable(main_peibos main_peibos.cpp) + target_compile_options(main_peibos PUBLIC ${CODAC_CXX_FLAGS}) + target_include_directories(main_peibos SYSTEM PUBLIC ${CODAC_INCLUDE_DIRS}) + target_link_libraries(main_peibos PUBLIC ${CODAC_LIBRARIES}) \ No newline at end of file diff --git a/examples/04_explored_area/main_peibos.cpp b/examples/04_explored_area/main_peibos.cpp new file mode 100644 index 000000000..0729f5ab1 --- /dev/null +++ b/examples/04_explored_area/main_peibos.cpp @@ -0,0 +1,59 @@ +#include + +using namespace std; +using namespace codac2; + +int main() +{ + // {psi0,Sigma} is a gnomonic atlas of the box [-1,1]^2 + VectorVar X(1); + AnalyticFunction psi0 ({X},{X[0],1}); + + OctaSym id ({1, 2}); + OctaSym s ({-2, 1}); + + vector Sigma ({id,s,s*s,s.invert()}); + + // In this box, we consider that the x-axis is the width of the linear sensor + // and the y-axis is the time + VectorVar y (2); + auto t = 4.0*y[0]; + auto L = 0.5*y[1]; + + // The image of [-1,1]^2 by both functions is the area swept + AnalyticFunction f1 ({y},{t+L*(-cos(t)),sin(t)+L}); + AnalyticFunction f2 ({y},{sin(t)+L,2.+t+L*(-cos(t))}); + + // For the SepImage, we need a contractor on the initial set + IntervalVector X0 = IntervalVector::constant(2,{-1,1}); + CtcWrapper ctc_in (X0); + + // Separator on the area seen by a first robot + SepImage sep1 (f1,psi0,Sigma,0.1,ctc_in); + // Separator on the area seen by a second robot + SepImage sep2 (f2,psi0,Sigma,0.1,ctc_in); + + // Graphical setup + + IntervalVector Y0 ({{-6,5},{-4,7}}); + + Figure2D fig1 ("robot1",GraphicOutput::VIBES); + Figure2D fig2 ("robot2",GraphicOutput::VIBES); + Figure2D fig_union ("union, seen by at least one",GraphicOutput::VIBES); + Figure2D fig_inter ("intersection, seen by both",GraphicOutput::VIBES); + + fig1.set_axes(Y0); + fig2.set_axes(Y0); + fig_union.set_axes(Y0); + fig_inter.set_axes(Y0); + + fig1.set_window_properties({50,50},{500,500}); + fig2.set_window_properties({600,50},{500,500}); + fig_union.set_window_properties({50,600},{500,500}); + fig_inter.set_window_properties({600,600},{500,500}); + + fig1.pave(Y0,sep1,0.1); + fig2.pave(Y0,sep2,0.1); + fig_union.pave(Y0,sep1|sep2,0.1); + fig_inter.pave(Y0,sep1&sep2,0.1); +} \ No newline at end of file diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 4ad18aaa0..1573630ce 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -237,6 +237,8 @@ ${CMAKE_CURRENT_SOURCE_DIR}/separators/codac2_SepCtcPair.h ${CMAKE_CURRENT_SOURCE_DIR}/separators/codac2_SepEllipse.cpp ${CMAKE_CURRENT_SOURCE_DIR}/separators/codac2_SepEllipse.h + ${CMAKE_CURRENT_SOURCE_DIR}/separators/codac2_SepImage.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/separators/codac2_SepImage.h ${CMAKE_CURRENT_SOURCE_DIR}/separators/codac2_SepInter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/separators/codac2_SepInter.h ${CMAKE_CURRENT_SOURCE_DIR}/separators/codac2_SepInverse.h diff --git a/src/core/functions/analytic/codac2_AnalyticFunction.h b/src/core/functions/analytic/codac2_AnalyticFunction.h index 0fe6fd645..a8928b619 100644 --- a/src/core/functions/analytic/codac2_AnalyticFunction.h +++ b/src/core/functions/analytic/codac2_AnalyticFunction.h @@ -214,7 +214,7 @@ namespace codac2 Parallelepiped parallelepiped_eval(const Args&... x) const { this->check_valid_inputs(x...); - assert_release(this->input_size() < this->output_size() && + assert_release(this->input_size() <= this->output_size() && "Parallelepiped evaluation requires more outputs than inputs."); assert_release(this->input_size() > 0 && "Parallelepiped evaluation requires at least one input."); diff --git a/src/core/separators/codac2_SepImage.cpp b/src/core/separators/codac2_SepImage.cpp new file mode 100644 index 000000000..6a5da8153 --- /dev/null +++ b/src/core/separators/codac2_SepImage.cpp @@ -0,0 +1,18 @@ +/** + * codac2_SepImage.cpp + * ---------------------------------------------------------------------------- + * \date 2026 + * \author Maël Godard + * \copyright Copyright 2024 Codac Team + * \license GNU Lesser General Public License (LGPL) + */ + +#include "codac2_SepImage.h" +#include "codac2_CtcPolar.h" + +using namespace codac2; + +BoxPair SepImage::separate(const IntervalVector& x) const +{ + return _sep.front()->separate(x); +} \ No newline at end of file diff --git a/src/core/separators/codac2_SepImage.h b/src/core/separators/codac2_SepImage.h new file mode 100644 index 000000000..07268b538 --- /dev/null +++ b/src/core/separators/codac2_SepImage.h @@ -0,0 +1,159 @@ +/** + * \file codac2_SepImage.h + * ---------------------------------------------------------------------------- + * \date 2026 + * \author Maël Godard + * \copyright Copyright 2025 Codac Team + * \license GNU Lesser General Public License (LGPL) + */ + +#pragma once + +#include "codac2_Sep.h" +#include "codac2_Collection.h" +#include "codac2_Paving.h" +#include "codac2_PavingNode.h" +#include "codac2_Subpaving.h" +#include "codac2_AnalyticFunction.h" +#include "codac2_peibos.h" +#include "codac2_CtcUnion.h" +#include "codac2_CtcWrapper.h" +#include "codac2_CtcIdentity.h" +#include "codac2_SepCtcPair.h" +#include "codac2_SepInverse.h" +#include "codac2_SepWrapper.h" +#include "codac2_SepInter.h" +#include "codac2_pave.h" +#include + +namespace codac2 +{ + class SepImage : public Sep + { + public: + + SepImage(AnalyticFunction& f, AnalyticFunction& psi_0, std::vector& Sigma, double epsilon, CtcBase& ctc_init, double epsilon_pave = -1) + :Sep(f.output_size()) + { + // Using PEIBOS to get the boundary of the image set + int dim = f.output_size(); + auto v_par = PEIBOS(f,psi_0,Sigma,epsilon); + + IntervalVector X0 (dim); + ctc_init.contract(X0); + + auto Y0 = f.eval(X0); + Y0.inflate(Y0.min_diam()/10.); + + // Contractor on the boundary + CtcUnion ctc_union (dim); + for (const auto& par : v_par) + ctc_union |= CtcWrapper(par); + + SepCtcPair sep_boundary(CtcIdentity(dim), ctc_union); + + // paving resolution, can be tuned + if (epsilon_pave == -1) + epsilon_pave = Y0.min_diam()/50.; + + // Initial paving, with only an outer aproximation + PavingInOut p = pave(Y0,sep_boundary,epsilon_pave); + + // Determination of the inner connected subsets + auto v_cs = p.connected_subsets(PavingInOut::outer_complem); + std::list> cs_to_color; + for (const auto& cs: v_cs) + { + IntervalVector max_box = IntervalVector::empty(dim); + for (const auto& box : cs.boxes()) + if (box.volume()>max_box.volume()) + max_box=box; + + CtcInverse ctc_inv (f, max_box.mid()); + IntervalVector X0_copy (X0); + ctc_inv.contract(X0_copy); + ctc_init.contract(X0_copy); + if (!X0_copy.is_empty()) + cs_to_color.push_back(std::make_shared(cs)); + } + + // Turning the previously identified connected subsets as inner (displayed green) + auto visitor = [&](std::shared_ptr> n) + { + std::list boxes_to_color; + for (const auto& cs : cs_to_color) + for (const auto& box : cs->boxes()) + boxes_to_color.push_back(box); + + IntervalVector h = n->hull(); + IntervalVector u = n->unknown(); + + for (const auto& bi : boxes_to_color) + { + IntervalVector bih = bi & h; + if (!bih.is_empty()) + { + if (std::get<0>(n->boxes()).is_empty()) + { + n->set_boxes(std::make_tuple(std::get<1>(n->boxes()),std::get<0>(n->boxes()))); + return false; + } + + std::list lbi; + + for (const auto& bj : boxes_to_color) + { + IntervalVector bjh = bj & h; + if (!bjh.is_empty()) + lbi.push_back(bjh); + } + + IntervalVector prev_x_in = IntervalVector::empty(dim); + + while (h != prev_x_in) + { + prev_x_in = IntervalVector(h); + + for (const auto& li : lbi) + { + std::list d = h.diff(li); + + if (!d.empty()) + { + + IntervalVector hi = IntervalVector::empty(dim); + for (const auto& di : d) + hi |= (h & di); + h &= hi; + + } + } + } + + n->set_boxes(std::make_tuple(hull(lbi)|u, h)); + return true; + } + } + return true; + }; + + // Use the visitor to color the inner regions + p.tree()->visit(visitor); + + // Create a separator on this paving + SepWrapper sep_paving(p); + + // By construction, we know that we have the whole image set. + // What is outside of the paving box Y0 is for sure ouside of it. + SepInter sep_inter = sep_paving&Y0; + + _sep.push_back(sep_inter); + } + + BoxPair separate(const IntervalVector& x) const; + + protected: + + Collection _sep; + }; +} \ No newline at end of file From b7718689acdf6deefaf9bf2fcd265f7d718932ee Mon Sep 17 00:00:00 2001 From: godardma Date: Thu, 10 Sep 2026 14:36:51 +0200 Subject: [PATCH 2/9] [sep] first implementation of SepImage (C++ only) --- examples/04_explored_area/main_peibos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/04_explored_area/main_peibos.cpp b/examples/04_explored_area/main_peibos.cpp index 0729f5ab1..580291872 100644 --- a/examples/04_explored_area/main_peibos.cpp +++ b/examples/04_explored_area/main_peibos.cpp @@ -18,7 +18,7 @@ int main() // and the y-axis is the time VectorVar y (2); auto t = 4.0*y[0]; - auto L = 0.5*y[1]; + auto L = 0.4*y[1]; // The image of [-1,1]^2 by both functions is the area swept AnalyticFunction f1 ({y},{t+L*(-cos(t)),sin(t)+L}); From 28613cf8cc945f76b80eecf929cabbba7e38b11a Mon Sep 17 00:00:00 2001 From: godardma Date: Tue, 15 Sep 2026 11:41:28 +0200 Subject: [PATCH 3/9] [sep] minor improvement to SepImage --- src/core/separators/codac2_SepImage.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/core/separators/codac2_SepImage.h b/src/core/separators/codac2_SepImage.h index 07268b538..175de80e0 100644 --- a/src/core/separators/codac2_SepImage.h +++ b/src/core/separators/codac2_SepImage.h @@ -26,6 +26,9 @@ #include "codac2_pave.h" #include +// TO DELETE +#include + namespace codac2 { class SepImage : public Sep @@ -42,9 +45,6 @@ namespace codac2 IntervalVector X0 (dim); ctc_init.contract(X0); - auto Y0 = f.eval(X0); - Y0.inflate(Y0.min_diam()/10.); - // Contractor on the boundary CtcUnion ctc_union (dim); for (const auto& par : v_par) @@ -52,6 +52,10 @@ namespace codac2 SepCtcPair sep_boundary(CtcIdentity(dim), ctc_union); + IntervalVector Y0 (dim); + ctc_union.contract(Y0); + Y0.inflate(Y0.min_diam()/10.); + // paving resolution, can be tuned if (epsilon_pave == -1) epsilon_pave = Y0.min_diam()/50.; @@ -73,6 +77,10 @@ namespace codac2 IntervalVector X0_copy (X0); ctc_inv.contract(X0_copy); ctc_init.contract(X0_copy); + + if (X0_copy == X0) + printf("was not able to determine inner areas\n"); + if (!X0_copy.is_empty()) cs_to_color.push_back(std::make_shared(cs)); } From 632799b243a08da8ea123065324a9593f809e194 Mon Sep 17 00:00:00 2001 From: godardma Date: Tue, 15 Sep 2026 15:31:18 +0200 Subject: [PATCH 4/9] [sep] V2 of SepImage (more robust) --- .../parallelepiped/parallelepiped_eval.rst | 2 +- examples/04_explored_area/main_peibos.cpp | 48 ++++++++----------- src/core/separators/codac2_SepImage.h | 40 +++++++++++++--- 3 files changed, 54 insertions(+), 36 deletions(-) diff --git a/doc/manual/manual/functions/parallelepiped/parallelepiped_eval.rst b/doc/manual/manual/functions/parallelepiped/parallelepiped_eval.rst index 92a58eb57..f56f29a40 100644 --- a/doc/manual/manual/functions/parallelepiped/parallelepiped_eval.rst +++ b/doc/manual/manual/functions/parallelepiped/parallelepiped_eval.rst @@ -9,7 +9,7 @@ Parallelepiped inclusion function Use case -------- -Consider a function :math:`\mathbf{f}:\mathbb{R}^n\to\mathbb{R}^m`. In the case where :math:`0 -// TO DELETE -#include - namespace codac2 { class SepImage : public Sep @@ -75,14 +72,43 @@ namespace codac2 CtcInverse ctc_inv (f, max_box.mid()); IntervalVector X0_copy (X0); + bool could_contract = false; + ctc_inv.contract(X0_copy); ctc_init.contract(X0_copy); - if (X0_copy == X0) - printf("was not able to determine inner areas\n"); + if (X0_copy != X0) + { + could_contract = true; + if (!X0_copy.is_empty()) + cs_to_color.push_back(std::make_shared(cs)); + } + + // if the CtcInverse was not able to conclude directly, we subdivide the initial box + + if (!could_contract) + { + std::vector boxes; + split(X0_copy,0.125,boxes); + for (auto box: boxes) + { + IntervalVector box_copy (box); + ctc_inv.contract(box); + ctc_init.contract(box); + if (box != box_copy) + { + could_contract = true; + if (!box.is_empty()) + { + cs_to_color.push_back(std::make_shared(cs)); + break; + } + } + } + } - if (!X0_copy.is_empty()) - cs_to_color.push_back(std::make_shared(cs)); + if (!could_contract) + printf("warning, the SepImage was not able to conclude on the inner regions\n"); } // Turning the previously identified connected subsets as inner (displayed green) From af105800e2f8e26bc453e4dac4a9158b504f3a0f Mon Sep 17 00:00:00 2001 From: godardma Date: Tue, 15 Sep 2026 18:50:37 +0200 Subject: [PATCH 5/9] [py] python binding for SepImage --- .../manual/contractors/analytic/sep_image.png | Bin 0 -> 59606 bytes .../manual/contractors/analytic/sepimage.rst | 436 ++++++++++++++++++ examples/04_explored_area/main_peibos.cpp | 20 +- examples/04_explored_area/main_peibos.py | 42 ++ python/src/core/CMakeLists.txt | 1 + python/src/core/codac2_py_core.cpp | 2 + .../core/separators/codac2_py_SepImage.cpp | 43 ++ src/core/separators/codac2_SepImage.h | 44 +- src/core/separators/codac2_SepTest.h | 2 + 9 files changed, 574 insertions(+), 16 deletions(-) create mode 100644 doc/manual/manual/contractors/analytic/sep_image.png create mode 100644 doc/manual/manual/contractors/analytic/sepimage.rst create mode 100644 examples/04_explored_area/main_peibos.py create mode 100644 python/src/core/separators/codac2_py_SepImage.cpp diff --git a/doc/manual/manual/contractors/analytic/sep_image.png b/doc/manual/manual/contractors/analytic/sep_image.png new file mode 100644 index 0000000000000000000000000000000000000000..81258cf785466a0805f2c08b167fc6bff61d0e3e GIT binary patch literal 59606 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 z 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 DX&4K{ literal 0 HcmV?d00001 diff --git a/doc/manual/manual/contractors/analytic/sepimage.rst b/doc/manual/manual/contractors/analytic/sepimage.rst new file mode 100644 index 000000000..86cc50926 --- /dev/null +++ b/doc/manual/manual/contractors/analytic/sepimage.rst @@ -0,0 +1,436 @@ +.. _sec-ctc-analytic-ctcinverse: + +The CtcInverse contractor +========================= + + Main author: `Simon Rohou `_ + +Definition +---------- + +Consider a function :math:`\mathbf{f}:\mathbb{R}^n\to \mathbb{R}^p`. The ``CtcInverse`` contractor allows one to handle constraints of the form :math:`\mathbf{f}(\mathbf{x})\in\mathbb{Y}` by contracting input boxes :math:`[\mathbf{x}]\in\mathbb{IR}^n` while preserving all solutions consistent with the constraint set :math:`\mathbb{Y}`. + +:math:`\mathbb{Y}` is a constraint set on the codomain of :math:`\mathbf{f}`. Note that contractors are typically used when :math:`\mathbb{Y}` is thin (*e.g.*, equality constraints). For thick sets (inequalities), separators are often preferable to obtain both outer and inner approximations, and faster computations. + +In Codac, :math:`\mathbb{Y}` can be represented in two main ways: + +.. important:: + + **(i) Box representation** + + When :math:`\mathbb{Y}` is given as a box :math:`[\mathbf{y}]`, the constraint reads: :math:`\mathbf{f}(\mathbf{x}) \in [\mathbf{y}]`. + + **(ii) Contractor representation** + + More generally, :math:`\mathbb{Y}` may be any output set representable by a contractor + :math:`\mathcal{C}_{\mathbb{Y}}`: :math:`\mathbf{f}(\mathbf{x}) \in \mathcal{C}_{\mathbb{Y}}`. + + In this case, :math:`\mathcal{C}_{\mathbb{Y}}` is any contractor acting on boxes in :math:`\mathbb{R}^p`. + +In the current version of Codac (v2), ``CtcInverse`` is the successor of the v1 ``CtcFunction`` contractor (renamed for clarity). It is also closely related to the ``CtcFwdBwd`` of the `IBEX library `_. + + +Construction and basic usage +---------------------------- + +The typical workflow is: + +1. Define analytic variables (scalar, vector, matrix) associated with the domain of the function. +2. Build an :class:`~codac2.AnalyticFunction`. +3. Instantiate ``CtcInverse`` with a codomain constraint (a box :math:`[\mathbf{y}]` or a contractor :math:`\mathcal{C}_{\mathbb{Y}}`). +4. Contract an input box :math:`[\mathbf{x}]` or pave the contractor in the domain space. + + +Dealing with equalities and inequalities +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Equalities are expressed with a degenerate interval (or box) in the codomain, *e.g.*: + +- :math:`f(x)=0` is encoded as :math:`f(x)\in[0,0]`. + +Inequalities are encoded by widening the codomain interval(s). For instance: + +- :math:`f(x)\leqslant 0` is encoded as :math:`f(x)\in[-\infty,0]`. + +In the case of inequalities, the use of the equivalent ``SepInverse`` separator should be preferred for efficiency reasons or in order to obtain an inner approximation. + + +Example +^^^^^^^ + +Consider for instance Himmelblau's function: + +.. math:: + + f(\mathbf{x}) = (x_1^2 + x_2 - 11)^2 + (x_1 + x_2^2 - 7)^2. + +To represent the vectors :math:`\mathbf{x}\in\mathbb{R}^n` consistent with the constraint :math:`f(\mathbf{x})=50`, a ``CtcInverse`` contractor can be built as follows: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [ctcinv-1-beg] + :end-before: [ctcinv-1-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [ctcinv-1-beg] + :end-before: [ctcinv-1-end] + :dedent: 4 + + .. group-tab:: Matlab + + .. literalinclude:: src.m + :language: matlab + :start-after: [ctcinv-1-beg] + :end-before: [ctcinv-1-end] + :dedent: 0 + +The contractor can be used as an operator to contract a :math:`n`-d box :math:`[\mathbf{x}]`. + +Note that the contraction may be fast but not minimal, depending on your analytic expression. Therefore, you can also combine a ``CtcInverse`` with a ``CtcFixpoint`` to apply the contraction procedure repeatedly until a fixpoint is reached on the same box. The following code corresponds to a contraction revealed in the next figure, which shows contraction cases in blue and their fixpoint counterparts in red. + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [ctcinv-2-beg] + :end-before: [ctcinv-2-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [ctcinv-2-beg] + :end-before: [ctcinv-2-end] + :dedent: 4 + + .. group-tab:: Matlab + + .. literalinclude:: src.m + :language: matlab + :start-after: [ctcinv-2-beg] + :end-before: [ctcinv-2-end] + :dedent: 0 + +.. figure:: ./himmelblau_boxes.png + :width: 400px + +As any other contractor, a ``CtcInverse`` can also be involved in a paver in order to reveal the constraint set: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [ctcinv-3-beg] + :end-before: [ctcinv-3-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [ctcinv-3-beg] + :end-before: [ctcinv-3-end] + :dedent: 4 + + .. group-tab:: Matlab + + .. literalinclude:: src.m + :language: matlab + :start-after: [ctcinv-3-beg] + :end-before: [ctcinv-3-end] + :dedent: 0 + +Which produces the following output: + +.. figure:: ./himmelblau_50.png + :width: 400px + + Outer approximation of the solution set for :math:`f(\mathbf{x})\in[50,50]`. This paving result reveals three connected subsets approximated with outer boxes. Blue parts are guaranteed not to contain solutions. + +We recall that for thick solution sets, one should prefer the use of the ``SepInverse`` separator in order to get both outer and inner approximations. For instance, the solution set associated with :math:`f(\mathbf{x})\leqslant 50` corresponds to: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [ctcinv-4-beg] + :end-before: [ctcinv-4-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [ctcinv-4-beg] + :end-before: [ctcinv-4-end] + :dedent: 4 + + .. group-tab:: Matlab + + .. literalinclude:: src.m + :language: matlab + :start-after: [ctcinv-4-beg] + :end-before: [ctcinv-4-end] + :dedent: 0 + + +.. figure:: ./himmelblau_50_inner.png + :width: 400px + + Inner and outer approximations of the solution set for :math:`f(\mathbf{x})\leqslant 50`, equivalent to :math:`f(\mathbf{x})\in[0,50]`, obtained by paving a separator ``SepInverse(f, [0,50])``. Green parts are boxes containing only vectors consistent with the constraint. + +Finally, it is easy to consider disjunction of constraints by making a union of contractors. For instance, the solution set + +.. math:: + :label: himmelblau_union + + \mathbb{X}=\left\{\mathbf{x}, \left(f(\mathbf{x}) = 50\right) \lor \left(f(\mathbf{x}) = 150\right) \lor \left(f(\mathbf{x}) = 250\right)\right\} + +can be easily approximated by the following union of contractors: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [ctcinv-5-beg] + :end-before: [ctcinv-5-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [ctcinv-5-beg] + :end-before: [ctcinv-5-end] + :dedent: 4 + + .. group-tab:: Matlab + + .. literalinclude:: src.m + :language: matlab + :start-after: [ctcinv-5-beg] + :end-before: [ctcinv-5-end] + :dedent: 0 + +.. figure:: ./himmelblau_50_150_250.png + :width: 400px + + Outer approximation of the solution set :math:`\mathbb{X}` for :eq:`himmelblau_union`. + + +.. from codac import * +.. +.. # Example of Himmelblau's function +.. a = 11; b = 7 +.. x = VectorVar(2) +.. f = AnalyticFunction([x], sqr(sqr(x[0])+x[1]-a)+sqr(x[0]+sqr(x[1])-b)) +.. +.. c1 = CtcInverse(f, 50) +.. c2 = CtcInverse(f, 150) +.. c3 = CtcInverse(f, 250) +.. +.. g = Figure2D("test", GraphicOutput.VIBES | GraphicOutput.IPE) +.. g.set_axes(axis(0,[-6,6]), axis(1,[-6,6])) +.. g.pave([[-6,6],[-6,6]], c1|c2|c3, 1e-2) + + +Possible usages of ``CtcInverse`` with respect to domain and codomain types +----------------------------------------------------------------------------- + +:math:`\mathbf{f}:\mathbb{R}^n\to \mathbb{R}^p` is the most classical case, but Codac provides generic solutions to define a wide variety of expressions such as functions defined as :math:`\mathbf{f}:X\to Y`, where: + +- :math:`X` denotes the domain of :math:`\mathbf{f}` with the following cases: + + * :math:`X=\mathbb{R}`: one scalar input ; + * :math:`X=\mathbb{R}^n`: one :math:`n`-d vector input ; + * :math:`X=\mathbb{R}^{n\times m}`: one :math:`n\times m` matrix input ; + * :math:`X=\mathbb{R}\times\mathbb{R}^{n}\times\mathbb{R}`: several types of mixed inputs, with no restrictions on order or number. + +- :math:`Y` denotes the codomain of :math:`\mathbf{f}`, that can be either :math:`\mathbb{R}`, :math:`\mathbb{R}^p` or :math:`\mathbb{R}^{p\times q}`. + +.. role:: bg-ok +.. role:: bg-bok +.. role:: bg-noa +.. role:: bg-title +.. role:: vertical +.. role:: medskip + +.. role:: raw-html(raw) + :format: html + +.. |okk| replace:: :bg-ok:`✓` +.. |bok| replace:: :bg-bok:`✓` +.. |noa| replace:: :bg-noa:`✗ (C++ only)` +.. |ms| replace:: :medskip:`-` + + +The following table lists the combinations implemented in Codac. +The :bg-ok:`✓` cases correspond to efficient contractions involving centered form expressions, while :bg-bok:`✓` refer to classical forward/backward propagations. +Note that since Codac's design is based on C++ template programming, the most generic use-cases of the ``CtcInverse`` are not available in Python or Matlab. + +.. tabs:: + + .. group-tab:: Python + + .. table:: Possible usages of ``CtcInverse`` + :name: ctcinverse-table-py + + +-----------------------------------------------------+-------------------------------------------------------------------------------------------+ + | | Output :math:`Y` | + | +-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}` |ms| | :math:`\mathbb{R}^n` |ms| | :math:`\mathbb{R}^{r\times c}` |ms| | + +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | Input(s) :math:`X` | :math:`\mathbb{R}` | |okk| | |okk| | |noa| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}^n` | |okk| | |okk| | |noa| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}^{r\times c}` | |okk| | |okk| | |noa| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | any mixed types | |okk| | |okk| | |noa| | + +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ + + NB: *any mixed types* does not include matrix types yet. + + .. group-tab:: C++ + + .. table:: Possible usages of ``CtcInverse`` + :name: ctcinverse-table-cpp + + +-----------------------------------------------------+-------------------------------------------------------------------------------------------+ + | | Output :math:`Y` | + | +-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}` |ms| | :math:`\mathbb{R}^n` |ms| | :math:`\mathbb{R}^{r\times c}` |ms| | + +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | Input(s) :math:`X` | :math:`\mathbb{R}` | |bok| | |bok| | |bok| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}^n` | |okk| | |okk| | |bok| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}^{r\times c}` | |bok| | |bok| | |bok| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | any mixed types | |bok| | |bok| | |bok| | + +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ + + .. group-tab:: Matlab + + .. table:: Possible usages of ``CtcInverse`` + :name: ctcinverse-table-matlab + + +-----------------------------------------------------+-------------------------------------------------------------------------------------------+ + | | Output :math:`Y` | + | +-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}` |ms| | :math:`\mathbb{R}^n` |ms| | :math:`\mathbb{R}^{r\times c}` |ms| | + +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | Input(s) :math:`X` | :math:`\mathbb{R}` | |okk| | |okk| | |noa| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}^n` | |okk| | |okk| | |noa| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | :math:`\mathbb{R}^{r\times c}` | |okk| | |okk| | |noa| | + | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ + | | any mixed types | |okk| | |okk| | |noa| | + +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ + + NB: *any mixed types* does not include matrix types yet. + + +Not-in constraints: ``CtcInverseNotIn`` +--------------------------------------- + +When the constraint is a complement constraint :math:`\mathbf{f}(\mathbf{x})\notin\mathbb{Y}`, Codac provides ``CtcInverseNotIn`` which internally builds a union of inverse contractors over the complementary parts of :math:`\mathbb{Y}`. + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [ctcinv-6-beg] + :end-before: [ctcinv-6-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [ctcinv-6-beg] + :end-before: [ctcinv-6-end] + :dedent: 4 + + .. group-tab:: Matlab + + .. literalinclude:: src.m + :language: matlab + :start-after: [ctcinv-6-beg] + :end-before: [ctcinv-6-end] + :dedent: 0 + + +Miscellaneous +------------- + +Access to the underlying function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The underlying analytic function can be accessed through ``.fnc()`` (useful for dimension checks or meta-programming). + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [ctcinv-7-beg] + :end-before: [ctcinv-7-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [ctcinv-7-beg] + :end-before: [ctcinv-7-end] + :dedent: 4 + + .. group-tab:: Matlab + + .. literalinclude:: src.m + :language: matlab + :start-after: [ctcinv-7-beg] + :end-before: [ctcinv-7-end] + :dedent: 0 + +Centered form option +^^^^^^^^^^^^^^^^^^^^ + +For some signatures (see :bg-ok:`✓` in the table), ``CtcInverse`` can leverage centered-form +expressions to improve contraction. +The constructor exposes: + +- ``with_centered_form`` (default: ``true``): enable/disable centered-form based steps. + +Disabling it can be useful to reduce computation cost when forward/backward propagation is +sufficient for your application, or for comparisons with the centered form. + + +.. admonition:: Technical documentation + + See the C++ API documentation: + + - ``CtcInverse``: `codac2_CtcInverse.h <../../../api/html/codac2___ctc_inverse_8h.html>`_ + - ``CtcInverseNotIn``: `codac2_CtcInverseNotIn.h <../../../api/html/codac2___ctc_inverse_not_in_8h.html>`_ \ No newline at end of file diff --git a/examples/04_explored_area/main_peibos.cpp b/examples/04_explored_area/main_peibos.cpp index c6a698a8f..f9bb8f850 100644 --- a/examples/04_explored_area/main_peibos.cpp +++ b/examples/04_explored_area/main_peibos.cpp @@ -23,29 +23,23 @@ int main() auto t = 1.2*y[1]; // We construct the trajectory of the robot - AnalyticFunction traj ({y},{pow(t,3)-t, 1-sqr(t)}); + auto traj = vec(pow(t,3)-t, 1-sqr(t)); // We need its derivative to compute the orthogonal to the trajectory (for the sensor) - AnalyticFunction dtraj ({y},{3*sqr(t)-1, -2*t}); - auto dtraj_norm = sqrt(sqr(dtraj(y)[0])+sqr(dtraj(y)[1])); + auto dtraj = vec(3*sqr(t)-1, -2*t); + auto dtraj_norm = sqrt(sqr(dtraj[0])+sqr(dtraj[1])); // The image of the box [-1,1]^2 by f is the swept area - AnalyticFunction f ({y},{traj(y)[0]-L*dtraj(y)[1]/dtraj_norm, traj(y)[1]+L*dtraj(y)[0]/dtraj_norm}); + AnalyticFunction f ({y},{traj[0]-L*dtraj[1]/dtraj_norm, traj[1]+L*dtraj[0]/dtraj_norm}); // For the SepImage, we need a contractor on the initial set (here a simple box) IntervalVector X0 = IntervalVector::constant(2,{-1,1}); CtcWrapper ctc_in (X0); - // Separator on the area seen by a first robot + // Separator on the area seen by a robot SepImage sep (f,psi0,Sigma,0.01,ctc_in); - // Graphical setup + // Visualizing the separator IntervalVector Y0 ({{-0.8,0.8},{-0.7,1.3}}); - Figure2D fig ("swept_area",GraphicOutput::VIBES); - fig.set_axes(Y0); - fig.set_window_properties({50,50},{500,500}); - - // to visualize the separator - fig.pave(Y0,sep,0.01); - + DefaultFigure::pave(Y0,sep,0.01); } \ No newline at end of file diff --git a/examples/04_explored_area/main_peibos.py b/examples/04_explored_area/main_peibos.py new file mode 100644 index 000000000..d5b55bd57 --- /dev/null +++ b/examples/04_explored_area/main_peibos.py @@ -0,0 +1,42 @@ +from codac import * +import numpy as np + +if __name__=="__main__": + set_nb_threads(max_threads()) + + # {psi0,Sigma} is a gnomonic atlas of the box [-1,1]^2 + X = VectorVar(1) + psi0 = AnalyticFunction([X],[X[0],1]) + + id = OctaSym([1,2]) + s = OctaSym([-2,1]) + + Sigma = [id,s,s*s,s.invert()] + + # In this box, we consider that the x-axis is the width of the linear sensor + # and the y-axis is the time + y = VectorVar(2) + L = 0.1*y[0] + t = 1.2*y[1] + + # We construct the trajectory of the robot + traj = vec(pow(t,3)-t,1-sqr(t)) + # We need its derivative to compute the orthogonal to the trajectory (for the sensor) + dtraj = vec(3*sqr(t)-1, -2*t) + dtraj_norm = sqrt(sqr(dtraj[0])+sqr(dtraj[1])) + + # The image of the box [-1,1]^2 by f is the swept area + f = AnalyticFunction([y], [traj[0]-L*dtraj[1]/dtraj_norm, traj[1]+L*dtraj[0]/dtraj_norm]) + + # For the SepImage, we need a contractor on the initial set (here a simple box) + X0 = IntervalVector.constant(2,[-1,1]) + ctc_in = CtcWrapper(X0) + + # Separator on the area seen by a robot + sep = SepImage(f,psi0,Sigma,0.01,ctc_in) + + # Visualizing the separator + Y0 = IntervalVector([[-0.8,0.8],[-0.7,1.3]]) + + DefaultFigure.pave(Y0,sep,0.01) + diff --git a/python/src/core/CMakeLists.txt b/python/src/core/CMakeLists.txt index 25221ecb7..c8a7c7a43 100644 --- a/python/src/core/CMakeLists.txt +++ b/python/src/core/CMakeLists.txt @@ -107,6 +107,7 @@ separators/codac2_py_SepCross.cpp separators/codac2_py_SepCtcBoundary.cpp separators/codac2_py_SepCtcPair.cpp + separators/codac2_py_SepImage.cpp separators/codac2_py_SepInter.cpp separators/codac2_py_SepInverse.cpp separators/codac2_py_SepNot.cpp diff --git a/python/src/core/codac2_py_core.cpp b/python/src/core/codac2_py_core.cpp index 3b0f73931..f0cefd778 100644 --- a/python/src/core/codac2_py_core.cpp +++ b/python/src/core/codac2_py_core.cpp @@ -145,6 +145,7 @@ void export_SepChi(py::module& m, py::class_& pysep); void export_SepCross(py::module& m, py::class_& pysep); void export_SepCtcBoundary(py::module& m, py::class_& pysep); void export_SepCtcPair(py::module& m, py::class_& pysep); +void export_SepImage(py::module& m, py::class_& pysep); void export_SepInter(py::module& m, py::class_& sep); void export_SepInverse(py::module& m, py::class_& sep); void export_SepNot(py::module& m, py::class_& sep); @@ -330,6 +331,7 @@ PYBIND11_MODULE(_core, m) export_SepCross(m,py_sep); export_SepCtcBoundary(m,py_sep); export_SepCtcPair(m,py_sep); + export_SepImage(m,py_sep); export_SepInter(m,py_sep); export_SepInverse(m,py_sep); export_SepNot(m,py_sep); diff --git a/python/src/core/separators/codac2_py_SepImage.cpp b/python/src/core/separators/codac2_py_SepImage.cpp new file mode 100644 index 000000000..f74045158 --- /dev/null +++ b/python/src/core/separators/codac2_py_SepImage.cpp @@ -0,0 +1,43 @@ +/** + * Codac binding (core) + * ---------------------------------------------------------------------------- + * \date 2026 + * \author Maël Godard + * \copyright Copyright 2026 Codac Team + * \license GNU Lesser General Public License (LGPL) + */ + +#include +#include +#include +#include +#include +#include +#include +#include "codac2_py_Sep.h" +#include "codac2_py_SepImage_docs.h" // Generated file from Doxygen XML (doxygen2docstring.py): + +using namespace std; +using namespace codac2; +namespace py = pybind11; +using namespace pybind11::literals; + +void export_SepImage(py::module& m, py::class_& pysep) +{ + py::class_ exported(m, "SepImage", pysep, SEPIMAGE_MAIN); + exported + + .def(py::init( + [](const AnalyticFunction& f, const AnalyticFunction& psi_0, const std::vector& Sigma, double epsilon, const CtcBase& ctc_init, double epsilon_pave) + { + return std::make_unique(f,psi_0, Sigma, epsilon, ctc_init.copy(), epsilon_pave); + }), + SEPIMAGE_SEPIMAGE_CONST_ANALYTICFUNCTION_VECTORTYPE_REF_CONST_ANALYTICFUNCTION_VECTORTYPE_REF_CONST_VECTOR_OCTASYM_REF_DOUBLE_CONST_C_REF_DOUBLE, + "f"_a, "psi_0"_a, "Sigma"_a, "epsilon"_a, "ctc_init"_a, "epsilon_pave"_a = -1) + + .def("separate", &SepImage::separate, + BOXPAIR_SEPIMAGE_SEPARATE_CONST_INTERVALVECTOR_REF_CONST, + "x"_a) + + ; +} \ No newline at end of file diff --git a/src/core/separators/codac2_SepImage.h b/src/core/separators/codac2_SepImage.h index 0af9bc33b..512771ef0 100644 --- a/src/core/separators/codac2_SepImage.h +++ b/src/core/separators/codac2_SepImage.h @@ -28,17 +28,32 @@ namespace codac2 { + /** + * \brief A separator on the direct image of a set by a function. It relies on a boundary approach + */ class SepImage : public Sep { public: - SepImage(AnalyticFunction& f, AnalyticFunction& psi_0, std::vector& Sigma, double epsilon, CtcBase& ctc_init, double epsilon_pave = -1) + /** + * \brief Constructor of the separator + * + * \param f The analytic function \f$\mathbf{f}:\mathbb{R}^n\rightarrow\mathbb{R}^p,p\geq n\f$ + * \param psi_0 The transformation function \f$\psi_0:\mathbb{R}^m\rightarrow\mathbb{R}^n\f$ to construct the atlas + * \param Sigma The set of symmetry operators \f$\sigma\f$ to construct the atlas + * \param epsilon The maximum diameter of the boxes to split \f$[-1,1]^m\f$ before computing the parallelepiped inclusions + * \param ctc_init The contractor on the initial set + * \param epsilon_pave An optionnal parameter to custom the resolution of the paving step + */ + template + requires IsCtcBaseOrPtr + SepImage(const AnalyticFunction& f, const AnalyticFunction& psi_0, const std::vector& Sigma, double epsilon, const C& ctc_init, double epsilon_pave = -1) :Sep(f.output_size()) { // Using PEIBOS to get the boundary of the image set int dim = f.output_size(); auto v_par = PEIBOS(f,psi_0,Sigma,epsilon); - + IntervalVector X0 (dim); ctc_init.contract(X0); @@ -60,7 +75,7 @@ namespace codac2 // Initial paving, with only an outer aproximation PavingInOut p = pave(Y0,sep_boundary,epsilon_pave); - // Determination of the inner connected subsets + // Determination of the inner connected susets auto v_cs = p.connected_subsets(PavingInOut::outer_complem); std::list> cs_to_color; for (const auto& cs: v_cs) @@ -183,7 +198,30 @@ namespace codac2 _sep.push_back(sep_inter); } + + /** + * \brief Constructor of the separator + * + * \param f The analytic function \f$\mathbf{f}:\mathbb{R}^n\rightarrow\mathbb{R}^p,p\geq n\f$ + * \param psi_0 The transformation function \f$\psi_0:\mathbb{R}^m\rightarrow\mathbb{R}^n\f$ to construct the atlas + * \param Sigma The set of symmetry operators \f$\sigma\f$ to construct the atlas + * \param epsilon The maximum diameter of the boxes to split \f$[-1,1]^m\f$ before computing the parallelepiped inclusions + * \param ctc_init A shared pointer to the contractor on the initial set + * \param epsilon_pave An optionnal parameter to custom the resolution of the paving step + */ + template + requires IsCtcBaseOrPtr + SepImage(const AnalyticFunction& f, const AnalyticFunction& psi_0, const std::vector& Sigma, double epsilon, const std::shared_ptr& ctc_init, double epsilon_pave = -1) + : SepImage(f, psi_0, Sigma, epsilon, *ctc_init, epsilon_pave) + { } + /** + * \brief Separates the box. + * + * \param x The box to separate. + * + * \return A box pair according to separator arithmetics. + */ BoxPair separate(const IntervalVector& x) const; protected: diff --git a/src/core/separators/codac2_SepTest.h b/src/core/separators/codac2_SepTest.h index bae989c9e..48fb6cc71 100644 --- a/src/core/separators/codac2_SepTest.h +++ b/src/core/separators/codac2_SepTest.h @@ -39,6 +39,8 @@ namespace codac2 * \brief Separates the box. Both the inner and outer are either empty or the box itself. * * \param x The box to separate. + * + * \return A box pair according to separator arithmetics. */ BoxPair separate(const IntervalVector& x) const; From b5b938356f596a98a1abc25bd29bd5d45cfb874b Mon Sep 17 00:00:00 2001 From: godardma Date: Tue, 15 Sep 2026 18:51:20 +0200 Subject: [PATCH 6/9] [doc] empty SepImage doc --- .../manual/contractors/analytic/sepimage.rst | 436 ------------------ 1 file changed, 436 deletions(-) diff --git a/doc/manual/manual/contractors/analytic/sepimage.rst b/doc/manual/manual/contractors/analytic/sepimage.rst index 86cc50926..e69de29bb 100644 --- a/doc/manual/manual/contractors/analytic/sepimage.rst +++ b/doc/manual/manual/contractors/analytic/sepimage.rst @@ -1,436 +0,0 @@ -.. _sec-ctc-analytic-ctcinverse: - -The CtcInverse contractor -========================= - - Main author: `Simon Rohou `_ - -Definition ----------- - -Consider a function :math:`\mathbf{f}:\mathbb{R}^n\to \mathbb{R}^p`. The ``CtcInverse`` contractor allows one to handle constraints of the form :math:`\mathbf{f}(\mathbf{x})\in\mathbb{Y}` by contracting input boxes :math:`[\mathbf{x}]\in\mathbb{IR}^n` while preserving all solutions consistent with the constraint set :math:`\mathbb{Y}`. - -:math:`\mathbb{Y}` is a constraint set on the codomain of :math:`\mathbf{f}`. Note that contractors are typically used when :math:`\mathbb{Y}` is thin (*e.g.*, equality constraints). For thick sets (inequalities), separators are often preferable to obtain both outer and inner approximations, and faster computations. - -In Codac, :math:`\mathbb{Y}` can be represented in two main ways: - -.. important:: - - **(i) Box representation** - - When :math:`\mathbb{Y}` is given as a box :math:`[\mathbf{y}]`, the constraint reads: :math:`\mathbf{f}(\mathbf{x}) \in [\mathbf{y}]`. - - **(ii) Contractor representation** - - More generally, :math:`\mathbb{Y}` may be any output set representable by a contractor - :math:`\mathcal{C}_{\mathbb{Y}}`: :math:`\mathbf{f}(\mathbf{x}) \in \mathcal{C}_{\mathbb{Y}}`. - - In this case, :math:`\mathcal{C}_{\mathbb{Y}}` is any contractor acting on boxes in :math:`\mathbb{R}^p`. - -In the current version of Codac (v2), ``CtcInverse`` is the successor of the v1 ``CtcFunction`` contractor (renamed for clarity). It is also closely related to the ``CtcFwdBwd`` of the `IBEX library `_. - - -Construction and basic usage ----------------------------- - -The typical workflow is: - -1. Define analytic variables (scalar, vector, matrix) associated with the domain of the function. -2. Build an :class:`~codac2.AnalyticFunction`. -3. Instantiate ``CtcInverse`` with a codomain constraint (a box :math:`[\mathbf{y}]` or a contractor :math:`\mathcal{C}_{\mathbb{Y}}`). -4. Contract an input box :math:`[\mathbf{x}]` or pave the contractor in the domain space. - - -Dealing with equalities and inequalities -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Equalities are expressed with a degenerate interval (or box) in the codomain, *e.g.*: - -- :math:`f(x)=0` is encoded as :math:`f(x)\in[0,0]`. - -Inequalities are encoded by widening the codomain interval(s). For instance: - -- :math:`f(x)\leqslant 0` is encoded as :math:`f(x)\in[-\infty,0]`. - -In the case of inequalities, the use of the equivalent ``SepInverse`` separator should be preferred for efficiency reasons or in order to obtain an inner approximation. - - -Example -^^^^^^^ - -Consider for instance Himmelblau's function: - -.. math:: - - f(\mathbf{x}) = (x_1^2 + x_2 - 11)^2 + (x_1 + x_2^2 - 7)^2. - -To represent the vectors :math:`\mathbf{x}\in\mathbb{R}^n` consistent with the constraint :math:`f(\mathbf{x})=50`, a ``CtcInverse`` contractor can be built as follows: - -.. tabs:: - - .. group-tab:: Python - - .. literalinclude:: src.py - :language: py - :start-after: [ctcinv-1-beg] - :end-before: [ctcinv-1-end] - :dedent: 4 - - .. group-tab:: C++ - - .. literalinclude:: src.cpp - :language: c++ - :start-after: [ctcinv-1-beg] - :end-before: [ctcinv-1-end] - :dedent: 4 - - .. group-tab:: Matlab - - .. literalinclude:: src.m - :language: matlab - :start-after: [ctcinv-1-beg] - :end-before: [ctcinv-1-end] - :dedent: 0 - -The contractor can be used as an operator to contract a :math:`n`-d box :math:`[\mathbf{x}]`. - -Note that the contraction may be fast but not minimal, depending on your analytic expression. Therefore, you can also combine a ``CtcInverse`` with a ``CtcFixpoint`` to apply the contraction procedure repeatedly until a fixpoint is reached on the same box. The following code corresponds to a contraction revealed in the next figure, which shows contraction cases in blue and their fixpoint counterparts in red. - -.. tabs:: - - .. group-tab:: Python - - .. literalinclude:: src.py - :language: py - :start-after: [ctcinv-2-beg] - :end-before: [ctcinv-2-end] - :dedent: 4 - - .. group-tab:: C++ - - .. literalinclude:: src.cpp - :language: c++ - :start-after: [ctcinv-2-beg] - :end-before: [ctcinv-2-end] - :dedent: 4 - - .. group-tab:: Matlab - - .. literalinclude:: src.m - :language: matlab - :start-after: [ctcinv-2-beg] - :end-before: [ctcinv-2-end] - :dedent: 0 - -.. figure:: ./himmelblau_boxes.png - :width: 400px - -As any other contractor, a ``CtcInverse`` can also be involved in a paver in order to reveal the constraint set: - -.. tabs:: - - .. group-tab:: Python - - .. literalinclude:: src.py - :language: py - :start-after: [ctcinv-3-beg] - :end-before: [ctcinv-3-end] - :dedent: 4 - - .. group-tab:: C++ - - .. literalinclude:: src.cpp - :language: c++ - :start-after: [ctcinv-3-beg] - :end-before: [ctcinv-3-end] - :dedent: 4 - - .. group-tab:: Matlab - - .. literalinclude:: src.m - :language: matlab - :start-after: [ctcinv-3-beg] - :end-before: [ctcinv-3-end] - :dedent: 0 - -Which produces the following output: - -.. figure:: ./himmelblau_50.png - :width: 400px - - Outer approximation of the solution set for :math:`f(\mathbf{x})\in[50,50]`. This paving result reveals three connected subsets approximated with outer boxes. Blue parts are guaranteed not to contain solutions. - -We recall that for thick solution sets, one should prefer the use of the ``SepInverse`` separator in order to get both outer and inner approximations. For instance, the solution set associated with :math:`f(\mathbf{x})\leqslant 50` corresponds to: - -.. tabs:: - - .. group-tab:: Python - - .. literalinclude:: src.py - :language: py - :start-after: [ctcinv-4-beg] - :end-before: [ctcinv-4-end] - :dedent: 4 - - .. group-tab:: C++ - - .. literalinclude:: src.cpp - :language: c++ - :start-after: [ctcinv-4-beg] - :end-before: [ctcinv-4-end] - :dedent: 4 - - .. group-tab:: Matlab - - .. literalinclude:: src.m - :language: matlab - :start-after: [ctcinv-4-beg] - :end-before: [ctcinv-4-end] - :dedent: 0 - - -.. figure:: ./himmelblau_50_inner.png - :width: 400px - - Inner and outer approximations of the solution set for :math:`f(\mathbf{x})\leqslant 50`, equivalent to :math:`f(\mathbf{x})\in[0,50]`, obtained by paving a separator ``SepInverse(f, [0,50])``. Green parts are boxes containing only vectors consistent with the constraint. - -Finally, it is easy to consider disjunction of constraints by making a union of contractors. For instance, the solution set - -.. math:: - :label: himmelblau_union - - \mathbb{X}=\left\{\mathbf{x}, \left(f(\mathbf{x}) = 50\right) \lor \left(f(\mathbf{x}) = 150\right) \lor \left(f(\mathbf{x}) = 250\right)\right\} - -can be easily approximated by the following union of contractors: - -.. tabs:: - - .. group-tab:: Python - - .. literalinclude:: src.py - :language: py - :start-after: [ctcinv-5-beg] - :end-before: [ctcinv-5-end] - :dedent: 4 - - .. group-tab:: C++ - - .. literalinclude:: src.cpp - :language: c++ - :start-after: [ctcinv-5-beg] - :end-before: [ctcinv-5-end] - :dedent: 4 - - .. group-tab:: Matlab - - .. literalinclude:: src.m - :language: matlab - :start-after: [ctcinv-5-beg] - :end-before: [ctcinv-5-end] - :dedent: 0 - -.. figure:: ./himmelblau_50_150_250.png - :width: 400px - - Outer approximation of the solution set :math:`\mathbb{X}` for :eq:`himmelblau_union`. - - -.. from codac import * -.. -.. # Example of Himmelblau's function -.. a = 11; b = 7 -.. x = VectorVar(2) -.. f = AnalyticFunction([x], sqr(sqr(x[0])+x[1]-a)+sqr(x[0]+sqr(x[1])-b)) -.. -.. c1 = CtcInverse(f, 50) -.. c2 = CtcInverse(f, 150) -.. c3 = CtcInverse(f, 250) -.. -.. g = Figure2D("test", GraphicOutput.VIBES | GraphicOutput.IPE) -.. g.set_axes(axis(0,[-6,6]), axis(1,[-6,6])) -.. g.pave([[-6,6],[-6,6]], c1|c2|c3, 1e-2) - - -Possible usages of ``CtcInverse`` with respect to domain and codomain types ------------------------------------------------------------------------------ - -:math:`\mathbf{f}:\mathbb{R}^n\to \mathbb{R}^p` is the most classical case, but Codac provides generic solutions to define a wide variety of expressions such as functions defined as :math:`\mathbf{f}:X\to Y`, where: - -- :math:`X` denotes the domain of :math:`\mathbf{f}` with the following cases: - - * :math:`X=\mathbb{R}`: one scalar input ; - * :math:`X=\mathbb{R}^n`: one :math:`n`-d vector input ; - * :math:`X=\mathbb{R}^{n\times m}`: one :math:`n\times m` matrix input ; - * :math:`X=\mathbb{R}\times\mathbb{R}^{n}\times\mathbb{R}`: several types of mixed inputs, with no restrictions on order or number. - -- :math:`Y` denotes the codomain of :math:`\mathbf{f}`, that can be either :math:`\mathbb{R}`, :math:`\mathbb{R}^p` or :math:`\mathbb{R}^{p\times q}`. - -.. role:: bg-ok -.. role:: bg-bok -.. role:: bg-noa -.. role:: bg-title -.. role:: vertical -.. role:: medskip - -.. role:: raw-html(raw) - :format: html - -.. |okk| replace:: :bg-ok:`✓` -.. |bok| replace:: :bg-bok:`✓` -.. |noa| replace:: :bg-noa:`✗ (C++ only)` -.. |ms| replace:: :medskip:`-` - - -The following table lists the combinations implemented in Codac. -The :bg-ok:`✓` cases correspond to efficient contractions involving centered form expressions, while :bg-bok:`✓` refer to classical forward/backward propagations. -Note that since Codac's design is based on C++ template programming, the most generic use-cases of the ``CtcInverse`` are not available in Python or Matlab. - -.. tabs:: - - .. group-tab:: Python - - .. table:: Possible usages of ``CtcInverse`` - :name: ctcinverse-table-py - - +-----------------------------------------------------+-------------------------------------------------------------------------------------------+ - | | Output :math:`Y` | - | +-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}` |ms| | :math:`\mathbb{R}^n` |ms| | :math:`\mathbb{R}^{r\times c}` |ms| | - +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | Input(s) :math:`X` | :math:`\mathbb{R}` | |okk| | |okk| | |noa| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}^n` | |okk| | |okk| | |noa| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}^{r\times c}` | |okk| | |okk| | |noa| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | any mixed types | |okk| | |okk| | |noa| | - +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ - - NB: *any mixed types* does not include matrix types yet. - - .. group-tab:: C++ - - .. table:: Possible usages of ``CtcInverse`` - :name: ctcinverse-table-cpp - - +-----------------------------------------------------+-------------------------------------------------------------------------------------------+ - | | Output :math:`Y` | - | +-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}` |ms| | :math:`\mathbb{R}^n` |ms| | :math:`\mathbb{R}^{r\times c}` |ms| | - +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | Input(s) :math:`X` | :math:`\mathbb{R}` | |bok| | |bok| | |bok| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}^n` | |okk| | |okk| | |bok| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}^{r\times c}` | |bok| | |bok| | |bok| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | any mixed types | |bok| | |bok| | |bok| | - +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ - - .. group-tab:: Matlab - - .. table:: Possible usages of ``CtcInverse`` - :name: ctcinverse-table-matlab - - +-----------------------------------------------------+-------------------------------------------------------------------------------------------+ - | | Output :math:`Y` | - | +-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}` |ms| | :math:`\mathbb{R}^n` |ms| | :math:`\mathbb{R}^{r\times c}` |ms| | - +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | Input(s) :math:`X` | :math:`\mathbb{R}` | |okk| | |okk| | |noa| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}^n` | |okk| | |okk| | |noa| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | :math:`\mathbb{R}^{r\times c}` | |okk| | |okk| | |noa| | - | +--------------------------------+-------------------------+---------------------------+-------------------------------------+ - | | any mixed types | |okk| | |okk| | |noa| | - +--------------------+--------------------------------+-------------------------+---------------------------+-------------------------------------+ - - NB: *any mixed types* does not include matrix types yet. - - -Not-in constraints: ``CtcInverseNotIn`` ---------------------------------------- - -When the constraint is a complement constraint :math:`\mathbf{f}(\mathbf{x})\notin\mathbb{Y}`, Codac provides ``CtcInverseNotIn`` which internally builds a union of inverse contractors over the complementary parts of :math:`\mathbb{Y}`. - -.. tabs:: - - .. group-tab:: Python - - .. literalinclude:: src.py - :language: py - :start-after: [ctcinv-6-beg] - :end-before: [ctcinv-6-end] - :dedent: 4 - - .. group-tab:: C++ - - .. literalinclude:: src.cpp - :language: c++ - :start-after: [ctcinv-6-beg] - :end-before: [ctcinv-6-end] - :dedent: 4 - - .. group-tab:: Matlab - - .. literalinclude:: src.m - :language: matlab - :start-after: [ctcinv-6-beg] - :end-before: [ctcinv-6-end] - :dedent: 0 - - -Miscellaneous -------------- - -Access to the underlying function -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The underlying analytic function can be accessed through ``.fnc()`` (useful for dimension checks or meta-programming). - -.. tabs:: - - .. group-tab:: Python - - .. literalinclude:: src.py - :language: py - :start-after: [ctcinv-7-beg] - :end-before: [ctcinv-7-end] - :dedent: 4 - - .. group-tab:: C++ - - .. literalinclude:: src.cpp - :language: c++ - :start-after: [ctcinv-7-beg] - :end-before: [ctcinv-7-end] - :dedent: 4 - - .. group-tab:: Matlab - - .. literalinclude:: src.m - :language: matlab - :start-after: [ctcinv-7-beg] - :end-before: [ctcinv-7-end] - :dedent: 0 - -Centered form option -^^^^^^^^^^^^^^^^^^^^ - -For some signatures (see :bg-ok:`✓` in the table), ``CtcInverse`` can leverage centered-form -expressions to improve contraction. -The constructor exposes: - -- ``with_centered_form`` (default: ``true``): enable/disable centered-form based steps. - -Disabling it can be useful to reduce computation cost when forward/backward propagation is -sufficient for your application, or for comparisons with the centered form. - - -.. admonition:: Technical documentation - - See the C++ API documentation: - - - ``CtcInverse``: `codac2_CtcInverse.h <../../../api/html/codac2___ctc_inverse_8h.html>`_ - - ``CtcInverseNotIn``: `codac2_CtcInverseNotIn.h <../../../api/html/codac2___ctc_inverse_not_in_8h.html>`_ \ No newline at end of file From 32ca7104bf383ed78b651245a3ddd1726734180d Mon Sep 17 00:00:00 2001 From: godardma Date: Wed, 16 Sep 2026 15:55:53 +0200 Subject: [PATCH 7/9] [doc] doc for SepImage --- doc/manual/index.rst | 1 + .../manual/contractors/analytic/index.rst | 3 +- .../manual/contractors/analytic/sep_image.png | Bin 59606 -> 55293 bytes .../contractors/analytic/sep_image_fine.png | Bin 0 -> 59606 bytes .../manual/contractors/analytic/sepimage.rst | 176 ++++++++++++++++++ .../manual/contractors/analytic/src.cpp | 37 ++++ doc/manual/manual/contractors/analytic/src.py | 33 ++++ doc/manual/manual/contractors/index.rst | 4 + .../manual/extensions/capd/peibos_capd.rst | 2 +- doc/manual/manual/functions/peibos/peibos.rst | 2 +- .../core/separators/codac2_py_SepImage.cpp | 1 - src/core/separators/codac2_SepImage.h | 1 + 12 files changed, 256 insertions(+), 4 deletions(-) create mode 100644 doc/manual/manual/contractors/analytic/sep_image_fine.png diff --git a/doc/manual/index.rst b/doc/manual/index.rst index 29fe3a84a..50cc9462f 100644 --- a/doc/manual/index.rst +++ b/doc/manual/index.rst @@ -283,6 +283,7 @@ User manual * SepNot * SepAction * Analytic separators + * :ref:`sec-ctc-analytic-sepimage` * SepInverse * SepTransform * Geometrical separators diff --git a/doc/manual/manual/contractors/analytic/index.rst b/doc/manual/manual/contractors/analytic/index.rst index d0e781ade..65b9a5d3f 100644 --- a/doc/manual/manual/contractors/analytic/index.rst +++ b/doc/manual/manual/contractors/analytic/index.rst @@ -4,5 +4,6 @@ Analytic contractors .. toctree:: Directed operators + sepimage.rst ctcinverse.rst - CtcInverseNotIn \ No newline at end of file + CtcInverseNotIn diff --git a/doc/manual/manual/contractors/analytic/sep_image.png b/doc/manual/manual/contractors/analytic/sep_image.png index 81258cf785466a0805f2c08b167fc6bff61d0e3e..a11e6806f6bb4c4e26e4e18057023431675dbdde 100644 GIT binary patch literal 55293 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 literal 59606 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 z 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 DX&4K{ diff --git a/doc/manual/manual/contractors/analytic/sep_image_fine.png b/doc/manual/manual/contractors/analytic/sep_image_fine.png new file mode 100644 index 0000000000000000000000000000000000000000..81258cf785466a0805f2c08b167fc6bff61d0e3e GIT binary patch literal 59606 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 z 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 DX&4K{ literal 0 HcmV?d00001 diff --git a/doc/manual/manual/contractors/analytic/sepimage.rst b/doc/manual/manual/contractors/analytic/sepimage.rst index e69de29bb..2d0dac5b3 100644 --- a/doc/manual/manual/contractors/analytic/sepimage.rst +++ b/doc/manual/manual/contractors/analytic/sepimage.rst @@ -0,0 +1,176 @@ +.. _sec-ctc-analytic-sepimage: + +The SepImage separator +====================== + + Main author: `Maël Godard `_ + +Definition +---------- + +Consider a function :math:`\mathbf{f}:\mathbb{R}^n\to \mathbb{R}^p`. +The ``SepImage`` separator allows one to handle constraints of the form :math:`\mathbf{y}\in\mathbf{f}(\mathbb{X})` +by separating input boxes :math:`[\mathbf{y}]\in\mathbb{IR}^p`. + +Construction and basic usage +---------------------------- + +The ``SepImage`` relies on a boundary approach to compute the image set. The boundary of the initial set needs to be +covered by a :ref:`gnomonic atlas `. To compute the image of the boundary, +the initial box :math:`\left[-1,1\right]^m` can be subdivided up to a size :math:`\epsilon` and the image of each resulting box +is computed. Note that if one chooses to take :math:`\epsilon=2`, only one computation will be done per chart of the atlas. + +Once this image of the boundary has been computed, the ``SepImage`` needs to a way to characterize if a point is inside or +outside of the image set. To do so, it looks for an antecedent of the point in the initial set. An additionnal contractor on +the initial set is then required. + +The typical workflow is: + +1. Define analytic variables (scalar, vector, matrix) associated with the domain of the function. +2. Build an :class:`~codac2.AnalyticFunction`. +3. Define a gnomonic atlas on the boundary of the initial set +4. Define a contractor on this same initial set +5. Instantiate ``SepImage`` the atlas, the function, the resolution :math:`\epsilon` and the contractor. +6. Contract an input box :math:`[\mathbf{y}]` or pave the separator in the image space. + +Example +------- + +Consider that we want to construct a separator on the image of the unit circle by the function + +.. math:: + \mathbf{f}(\mathbf{x})= + \left( + \begin{array}{c} + 3(x_{1}+1)\\ + x_{2}+ 0.5\sin (3 x_{1}) + \end{array} + \right) + +This function can be constructed in codac as follows + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [sepimage-1-beg] + :end-before: [sepimage-1-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [sepimage-1-beg] + :end-before: [sepimage-1-end] + :dedent: 4 + +We then need a contractor for the unit disk, and gnomonic atlas for its boundary (the unit circle). +For the atlas, the image of :math:`\left[-1,1\right]` by the function + +.. math:: + \psi_{0} = + \left( + \begin{array}{c} + \cos\left(x\cdot\frac{\pi}{2}\right)\\ + \sin\left(x\cdot\frac{\pi}{2}\right) + \end{array} + \right) + +is half of the unit cicle. The other half can be obtained with a rotation of :math:`\pi` rad. Such atlas +is constucted in codac as + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [sepimage-2-beg] + :end-before: [sepimage-2-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [sepimage-2-beg] + :end-before: [sepimage-2-end] + :dedent: 4 + +In this example, the constraint on the initial set can be seen as a distance constraint. It can be treated as an inversion as follows : + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [sepimage-3-beg] + :end-before: [sepimage-3-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [sepimage-3-beg] + :end-before: [sepimage-3-end] + :dedent: 4 + +The separator can then be constructed and used, for example with a paver to get both an inner and an outer approximation of the image set. +The resulting paving is showed in the next figure. + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [sepimage-4-beg] + :end-before: [sepimage-4-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [sepimage-4-beg] + :end-before: [sepimage-4-end] + :dedent: 4 + +.. figure:: ./sep_image.png + :width: 400px + :align: center + +With a lower resolution, the performances of the separator improve as shown in the following figure. + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [sepimage-5-beg] + :end-before: [sepimage-5-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [sepimage-5-beg] + :end-before: [sepimage-5-end] + :dedent: 4 + +.. figure:: ./sep_image_fine.png + :width: 400px + :align: center + +A more complex example is available on the public github repository. It treats the topic of the explored area, +which is a classical problem in robotics. + +* `Python version `_ +* `C++ version `_ diff --git a/doc/manual/manual/contractors/analytic/src.cpp b/doc/manual/manual/contractors/analytic/src.cpp index 2b8438005..adbffa9de 100644 --- a/doc/manual/manual/contractors/analytic/src.cpp +++ b/doc/manual/manual/contractors/analytic/src.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -86,4 +87,40 @@ TEST_CASE("CtcInverse - manual") CHECK(c.fnc().input_size() == 2); CHECK(c.fnc().output_size() == 1); } +} + +TEST_CASE("SepImage - manual") +{ + { + // [sepimage-1-beg] + VectorVar y (2); + AnalyticFunction f ({y},{3.*(y[0]+1),y[1]+0.5*sin(3.*y[0])}); + // [sepimage-1-end] + + // [sepimage-2-beg] + // {psi0,Sigma} is a gnomonic atlas of the unit circle + VectorVar X(1); + AnalyticFunction psi0 ({X},{cos(X[0]*PI/2.),sin(X[0]*PI/2.)}); + + OctaSym id ({1, 2}); + OctaSym s ({-1, -2}); + + vector Sigma ({id,s}); + // [sepimage-2-end] + + // [sepimage-3-beg] + AnalyticFunction h ({y},sqrt(sqr(y[0])+sqr(y[1]))); + CtcInverse ctc_in (h,Interval(0,1)); + // [sepimage-3-end] + + // [sepimage-4-beg] + SepImage sep1 (f,psi0,Sigma,0.125,ctc_in); + DefaultFigure::pave({{-0.5,6.5},{-1.5,1.5}},sep1,0.05); + // [sepimage-4-end] + + // [sepimage-5-beg] + SepImage sep2 (f,psi0,Sigma,0.0625,ctc_in); + DefaultFigure::pave({{-0.5,6.5},{-1.5,1.5}},sep2,0.05); + // [sepimage-5-end] + } } \ No newline at end of file diff --git a/doc/manual/manual/contractors/analytic/src.py b/doc/manual/manual/contractors/analytic/src.py index 60505c4dd..2631ba291 100644 --- a/doc/manual/manual/contractors/analytic/src.py +++ b/doc/manual/manual/contractors/analytic/src.py @@ -106,5 +106,38 @@ def tests_CtcInverse_manual(test): assert c.fnc().output_size() == 1 # [ctcinv-7-end] +def tests_SepImage_manual(test): + + # [sepimage-1-beg] + y = VectorVar(2) + f = AnalyticFunction([y], [3.*(y[0]+1),y[1]+0.5*sin(3.*y[0])]) + # [sepimage-1-end] + + # [sepimage-2-beg] + # {psi0,Sigma} is a gnomonic atlas of the box [-1,1]^2 + X = VectorVar(1) + psi0 = AnalyticFunction([X],[cos(X[0]*PI/2.),sin(X[0]*PI/2.)]) + + id = OctaSym([1,2]) + s = OctaSym([-1,-2]) + + Sigma = [id,s] + # [sepimage-2-end] + + # [sepimage-3-beg] + h = AnalyticFunction([y],sqrt(sqr(y[0])+sqr(y[1]))) + ctc_in = CtcInverse(h,Interval(0,1)) + # [sepimage-3-end] + + # [sepimage-4-beg] + sep = SepImage(f,psi0,Sigma,0.125,ctc_in) + DefaultFigure.pave([[-0.5,6.5],[-1.5,1.5]],sep,0.05) + # [sepimage-4-end] + + # [sepimage-5-beg] + sep = SepImage(f,psi0,Sigma,0.0625,ctc_in) + DefaultFigure.pave([[-0.5,6.5],[-1.5,1.5]],sep,0.05) + # [sepimage-5-end] + if __name__ == '__main__': unittest.main() \ No newline at end of file diff --git a/doc/manual/manual/contractors/index.rst b/doc/manual/manual/contractors/index.rst index 9b2537821..8e6eea3c8 100644 --- a/doc/manual/manual/contractors/index.rst +++ b/doc/manual/manual/contractors/index.rst @@ -5,6 +5,7 @@ Contractors, separators .. toctree:: CtcInter + SepImage CtcInverse CtcLohner CtcDist @@ -77,6 +78,9 @@ Overview of contractors and separators * - ``CtcAction`` - ``SepAction`` + * - — + - :ref:`SepImage ` + * - :ref:`CtcInverse ` - ``SepInverse`` diff --git a/doc/manual/manual/extensions/capd/peibos_capd.rst b/doc/manual/manual/extensions/capd/peibos_capd.rst index 3fae692b3..453a7303f 100644 --- a/doc/manual/manual/extensions/capd/peibos_capd.rst +++ b/doc/manual/manual/extensions/capd/peibos_capd.rst @@ -15,7 +15,7 @@ Considering a dynamical system :math:`\dot{\mathbf{x}}=\gamma(\mathbf{x})`, the Gnomonic atlas -------------- -To handle the boundary of the initial set :math:`\mathbb{X}_0`, the PEIBOS tool relies on a gnomonic atlas. See :ref:`subsec-functions-peibos-gnomonic-atals`. +To handle the boundary of the initial set :math:`\mathbb{X}_0`, the PEIBOS tool relies on a gnomonic atlas. See :ref:`subsec-functions-peibos-gnomonic-atlas`. Use --- diff --git a/doc/manual/manual/functions/peibos/peibos.rst b/doc/manual/manual/functions/peibos/peibos.rst index aaa1bcdd0..ca2b3dd5c 100644 --- a/doc/manual/manual/functions/peibos/peibos.rst +++ b/doc/manual/manual/functions/peibos/peibos.rst @@ -12,7 +12,7 @@ The PEIBOS tool provides a way to compute the Parallelepipedic Enclosure of the Let us consider an initial set :math:`\mathbb{X}_0 \subset \mathbb{R}^n` with its boundary :math:`\partial \mathbb{X}_0`. Considering a function :math:`\mathbf{f}:\mathbb{R}^n \to \mathbb{R}^p`, :math:`n \leq p`, the PEIBOS tool allows to compute the set :math:`\mathbf{Y}=\left\{ \mathbf{f}(\mathbf{x}) \mid \mathbf{x} \in \partial \mathbb{X}_0 \right\}`. -.. _subsec-functions-peibos-gnomonic-atals: +.. _subsec-functions-peibos-gnomonic-atlas: Gnomonic atlas -------------- diff --git a/python/src/core/separators/codac2_py_SepImage.cpp b/python/src/core/separators/codac2_py_SepImage.cpp index f74045158..62b3ca5d9 100644 --- a/python/src/core/separators/codac2_py_SepImage.cpp +++ b/python/src/core/separators/codac2_py_SepImage.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include "codac2_py_Sep.h" #include "codac2_py_SepImage_docs.h" // Generated file from Doxygen XML (doxygen2docstring.py): diff --git a/src/core/separators/codac2_SepImage.h b/src/core/separators/codac2_SepImage.h index 512771ef0..dd8ce939d 100644 --- a/src/core/separators/codac2_SepImage.h +++ b/src/core/separators/codac2_SepImage.h @@ -15,6 +15,7 @@ #include "codac2_PavingNode.h" #include "codac2_Subpaving.h" #include "codac2_AnalyticFunction.h" +#include "codac2_OctaSym.h" #include "codac2_peibos.h" #include "codac2_CtcUnion.h" #include "codac2_CtcWrapper.h" From 456ab24b449918f7b1dce56307187eba84f7c4d1 Mon Sep 17 00:00:00 2001 From: godardma Date: Wed, 16 Sep 2026 17:22:25 +0200 Subject: [PATCH 8/9] [doc] correct typo in doc for SepImage --- doc/manual/manual/contractors/analytic/sepimage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/manual/manual/contractors/analytic/sepimage.rst b/doc/manual/manual/contractors/analytic/sepimage.rst index 2d0dac5b3..b4cc9e412 100644 --- a/doc/manual/manual/contractors/analytic/sepimage.rst +++ b/doc/manual/manual/contractors/analytic/sepimage.rst @@ -30,7 +30,7 @@ The typical workflow is: 2. Build an :class:`~codac2.AnalyticFunction`. 3. Define a gnomonic atlas on the boundary of the initial set 4. Define a contractor on this same initial set -5. Instantiate ``SepImage`` the atlas, the function, the resolution :math:`\epsilon` and the contractor. +5. Instantiate ``SepImage`` with the atlas, the function, the resolution :math:`\epsilon` and the contractor. 6. Contract an input box :math:`[\mathbf{y}]` or pave the separator in the image space. Example From 92c2e361c1d307d89c717e600229b30d0e4c6cc7 Mon Sep 17 00:00:00 2001 From: godardma Date: Wed, 16 Sep 2026 17:23:27 +0200 Subject: [PATCH 9/9] [doc] correct typo in doc for SepImage --- doc/manual/manual/contractors/analytic/sepimage.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/manual/manual/contractors/analytic/sepimage.rst b/doc/manual/manual/contractors/analytic/sepimage.rst index b4cc9e412..371b31e92 100644 --- a/doc/manual/manual/contractors/analytic/sepimage.rst +++ b/doc/manual/manual/contractors/analytic/sepimage.rst @@ -36,7 +36,7 @@ The typical workflow is: Example ------- -Consider that we want to construct a separator on the image of the unit circle by the function +Consider that we want to construct a separator on the image of the unit disk by the function .. math:: \mathbf{f}(\mathbf{x})= @@ -67,7 +67,7 @@ This function can be constructed in codac as follows :end-before: [sepimage-1-end] :dedent: 4 -We then need a contractor for the unit disk, and gnomonic atlas for its boundary (the unit circle). +We then need a contractor for the unit disk, and a gnomonic atlas for its boundary (the unit circle). For the atlas, the image of :math:`\left[-1,1\right]` by the function .. math::