diff --git a/doc/manual/_static/css/custom.css b/doc/manual/_static/css/custom.css index 98b51f368..7db716235 100644 --- a/doc/manual/_static/css/custom.css +++ b/doc/manual/_static/css/custom.css @@ -176,4 +176,19 @@ a .download:before { linear-gradient(-45deg, transparent 75%, #ddd 75%); background-size: var(--size) var(--size); background-position: 0 0, 0 calc(var(--size)/2), calc(var(--size)/2) calc(var(--size)/-2), calc(var(--size)/-2) 0; +} + +/* Adding VIBes + IPE logos in the lateral menu */ +.sidebar-tree li.toctree-l1 > a.reference.internal:has(+ input#toctree-checkbox-8) { + background:url("../logos/logos_vibes_ipe.png") no-repeat center / contain; +} + +.sidebar-tree li.toctree-l1 > a.reference.internal:has(+ input#toctree-checkbox-8):hover { + background: url("../logos/logos_vibes_ipe.png") no-repeat center / contain, + var(--color-sidebar-item-background--hover); +} + +.sidebar-tree li.toctree-l1 > a.reference.internal.current:has(+ input#toctree-checkbox-8) { + background: url("../logos/logos_vibes_ipe.png") no-repeat center / contain, + var(--color-sidebar-item-background--current); } \ No newline at end of file diff --git a/doc/manual/_static/logos/logo_ipe.png b/doc/manual/_static/logos/logo_ipe.png new file mode 100644 index 000000000..51867a2f7 Binary files /dev/null and b/doc/manual/_static/logos/logo_ipe.png differ diff --git a/doc/manual/_static/logos/logo_vibes.png b/doc/manual/_static/logos/logo_vibes.png new file mode 100644 index 000000000..75bb5cd5a Binary files /dev/null and b/doc/manual/_static/logos/logo_vibes.png differ diff --git a/doc/manual/_static/logos/logos_vibes_ipe.png b/doc/manual/_static/logos/logos_vibes_ipe.png new file mode 100644 index 000000000..e4b90c9ad Binary files /dev/null and b/doc/manual/_static/logos/logos_vibes_ipe.png differ diff --git a/doc/manual/manual/contractors/index.rst b/doc/manual/manual/contractors/index.rst index b46ca7ec9..2f3dea786 100644 --- a/doc/manual/manual/contractors/index.rst +++ b/doc/manual/manual/contractors/index.rst @@ -1,5 +1,5 @@ -Contractors -=========== +Contractors, separators +======================= .. toctree:: diff --git a/doc/manual/manual/intervals/BoolInterval_class.rst b/doc/manual/manual/intervals/BoolInterval_class.rst new file mode 100644 index 000000000..4d7b264b7 --- /dev/null +++ b/doc/manual/manual/intervals/BoolInterval_class.rst @@ -0,0 +1,80 @@ +.. _sec-intervals-boolinterval-class: + +The BoolInterval enumeration +============================ + + Main author: `Simon Rohou `_ + +A :class:`~codac2.BoolInterval` (Boolean interval) is a compact representation of an +uncertain truth value. It is primarily used as a **reliable return type** for predicates +evaluated under uncertainties (interval inputs, rounding effects, geometric tolerances, etc.). + +Definition +---------- + +Let :math:`\mathbb{B}=\{\mathsf{false},\mathsf{true}\}`. A boolean interval represents a subset +of :math:`\mathbb{B}`: :math:`[b]\subseteq\mathbb{B}`. + +In Codac, ``BoolInterval`` is an enumeration of four canonical values: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [boolinterval-class-1-beg] + :end-before: [boolinterval-class-1-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [boolinterval-class-1-beg] + :end-before: [boolinterval-class-1-end] + :dedent: 4 + + +Two useful set values are: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: src.py + :language: py + :start-after: [boolinterval-class-2-beg] + :end-before: [boolinterval-class-2-end] + :dedent: 4 + + .. group-tab:: C++ + + .. literalinclude:: src.cpp + :language: c++ + :start-after: [boolinterval-class-2-beg] + :end-before: [boolinterval-class-2-end] + :dedent: 4 + + +Operations on ``BoolInterval`` are documented below: + +.. doxygenfunction:: codac2::operator&(BoolInterval x, BoolInterval y) + :project: codac + +.. doxygenfunction:: codac2::operator|(BoolInterval x, BoolInterval y) + :project: codac + +.. doxygenfunction:: codac2::operator&&(BoolInterval x, BoolInterval y) + :project: codac + +.. doxygenfunction:: codac2::operator||(BoolInterval x, BoolInterval y) + :project: codac + +.. doxygenfunction:: codac2::operator~(BoolInterval x) + :project: codac + + +.. admonition:: Technical documentation + + See the `C++ API documentation of the BoolInterval class <../../api/html/codac2___bool_interval_8h.html>`_. \ No newline at end of file diff --git a/doc/manual/manual/intervals/index.rst b/doc/manual/manual/intervals/index.rst index cdbc3828f..368899992 100644 --- a/doc/manual/manual/intervals/index.rst +++ b/doc/manual/manual/intervals/index.rst @@ -8,6 +8,7 @@ Codac provides data structures for handling basic interval sets. These structure - :ref:`The Interval class `: represents a real bounded interval :math:`[x^{-},x^{+}]`. - :ref:`The IntervalVector class ` (or ``IntervalRow``): represents a vector (or row) where each component is an interval. - ``IntervalMatrix``: represents a matrix where each element is an interval. +- :ref:`The BoolInterval class `: represents a Boolean interval. .. toctree:: @@ -16,6 +17,7 @@ Codac provides data structures for handling basic interval sets. These structure Interval_class.rst .. Vector_class.rst IntervalVector_class.rst + BoolInterval_class.rst .. What is an interval? The Interval class diff --git a/doc/manual/manual/intervals/src.cpp b/doc/manual/manual/intervals/src.cpp index cf43b4fb0..ca3508748 100644 --- a/doc/manual/manual/intervals/src.cpp +++ b/doc/manual/manual/intervals/src.cpp @@ -14,6 +14,26 @@ using namespace std; using namespace codac2; +TEST_CASE("BoolInterval class - manual") +{ + { + // [boolinterval-class-1-beg] + BoolInterval::FALSE; // certainly false + BoolInterval::TRUE; // certainly true + BoolInterval::UNKNOWN; // undetermined + BoolInterval::EMPTY; // inconsistent / impossible + // [boolinterval-class-1-end] + } + /* + { + // [boolinterval-class-2-beg] + BoolInterval::UNKNOWN == BoolInterval::TRUE | BoolInterval::FALSE + BoolInterval::EMPTY == BoolInterval::TRUE & BoolInterval::FALSE + // [boolinterval-class-2-end] + } + */ +} + TEST_CASE("Interval class - manual") { #if 0 diff --git a/doc/manual/manual/intervals/src.py b/doc/manual/manual/intervals/src.py index 633fde7be..53fb7d499 100644 --- a/doc/manual/manual/intervals/src.py +++ b/doc/manual/manual/intervals/src.py @@ -14,6 +14,21 @@ class TestIntervalManual(unittest.TestCase): + def tests_BoolInterval_manual(test): + + # [boolinterval-class-1-beg] + BoolInterval.FALSE # certainly false + BoolInterval.TRUE # certainly true + BoolInterval.UNKNOWN # undetermined + BoolInterval.EMPTY # inconsistent / impossible + # [boolinterval-class-1-end] + + # [boolinterval-class-2-beg] + BoolInterval.UNKNOWN == BoolInterval.TRUE | BoolInterval.FALSE + BoolInterval.EMPTY == BoolInterval.TRUE & BoolInterval.FALSE + # [boolinterval-class-2-end] + + def tests_Interval_manual(test): # [interval-class-1-beg]