diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..780060a2 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 05230886c7594d5c2e517b68f35c2d81 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/api/index.doctree b/.doctrees/api/index.doctree new file mode 100644 index 00000000..49fc4c4f Binary files /dev/null and b/.doctrees/api/index.doctree differ diff --git a/.doctrees/api/modeling/Annotation.doctree b/.doctrees/api/modeling/Annotation.doctree new file mode 100644 index 00000000..7eba408a Binary files /dev/null and b/.doctrees/api/modeling/Annotation.doctree differ diff --git a/.doctrees/api/modeling/Column.doctree b/.doctrees/api/modeling/Column.doctree new file mode 100644 index 00000000..3adb953d Binary files /dev/null and b/.doctrees/api/modeling/Column.doctree differ diff --git a/.doctrees/api/modeling/Constant.doctree b/.doctrees/api/modeling/Constant.doctree new file mode 100644 index 00000000..595fc198 Binary files /dev/null and b/.doctrees/api/modeling/Constant.doctree differ diff --git a/.doctrees/api/modeling/Ctr.doctree b/.doctrees/api/modeling/Ctr.doctree new file mode 100644 index 00000000..8a6d6131 Binary files /dev/null and b/.doctrees/api/modeling/Ctr.doctree differ diff --git a/.doctrees/api/modeling/Env.doctree b/.doctrees/api/modeling/Env.doctree new file mode 100644 index 00000000..da09f254 Binary files /dev/null and b/.doctrees/api/modeling/Env.doctree differ diff --git a/.doctrees/api/modeling/Expr.doctree b/.doctrees/api/modeling/Expr.doctree new file mode 100644 index 00000000..56c77ebf Binary files /dev/null and b/.doctrees/api/modeling/Expr.doctree differ diff --git a/.doctrees/api/modeling/LinExpr.doctree b/.doctrees/api/modeling/LinExpr.doctree new file mode 100644 index 00000000..ad74a5ae Binary files /dev/null and b/.doctrees/api/modeling/LinExpr.doctree differ diff --git a/.doctrees/api/modeling/Model.doctree b/.doctrees/api/modeling/Model.doctree new file mode 100644 index 00000000..7bd196c1 Binary files /dev/null and b/.doctrees/api/modeling/Model.doctree differ diff --git a/.doctrees/api/modeling/Param.doctree b/.doctrees/api/modeling/Param.doctree new file mode 100644 index 00000000..69fc88e9 Binary files /dev/null and b/.doctrees/api/modeling/Param.doctree differ diff --git a/.doctrees/api/modeling/QuadExpr.doctree b/.doctrees/api/modeling/QuadExpr.doctree new file mode 100644 index 00000000..457ce7e6 Binary files /dev/null and b/.doctrees/api/modeling/QuadExpr.doctree differ diff --git a/.doctrees/api/modeling/Row.doctree b/.doctrees/api/modeling/Row.doctree new file mode 100644 index 00000000..2f606c19 Binary files /dev/null and b/.doctrees/api/modeling/Row.doctree differ diff --git a/.doctrees/api/modeling/SolutionDual.doctree b/.doctrees/api/modeling/SolutionDual.doctree new file mode 100644 index 00000000..cee49852 Binary files /dev/null and b/.doctrees/api/modeling/SolutionDual.doctree differ diff --git a/.doctrees/api/modeling/SolutionPrimal.doctree b/.doctrees/api/modeling/SolutionPrimal.doctree new file mode 100644 index 00000000..347182bc Binary files /dev/null and b/.doctrees/api/modeling/SolutionPrimal.doctree differ diff --git a/.doctrees/api/modeling/TempCtr.doctree b/.doctrees/api/modeling/TempCtr.doctree new file mode 100644 index 00000000..6d5cf66e Binary files /dev/null and b/.doctrees/api/modeling/TempCtr.doctree differ diff --git a/.doctrees/api/modeling/TempVar.doctree b/.doctrees/api/modeling/TempVar.doctree new file mode 100644 index 00000000..a40c2b79 Binary files /dev/null and b/.doctrees/api/modeling/TempVar.doctree differ diff --git a/.doctrees/api/modeling/Var.doctree b/.doctrees/api/modeling/Var.doctree new file mode 100644 index 00000000..66edcf15 Binary files /dev/null and b/.doctrees/api/modeling/Var.doctree differ diff --git a/.doctrees/api/modeling/index.doctree b/.doctrees/api/modeling/index.doctree new file mode 100644 index 00000000..377d3233 Binary files /dev/null and b/.doctrees/api/modeling/index.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/BranchAndBound.doctree b/.doctrees/api/optimizers/branch-and-bound/BranchAndBound.doctree new file mode 100644 index 00000000..3dc0e8ac Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/BranchAndBound.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/BranchAndBoundCallback.doctree b/.doctrees/api/optimizers/branch-and-bound/BranchAndBoundCallback.doctree new file mode 100644 index 00000000..9a877ac2 Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/BranchAndBoundCallback.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.doctree b/.doctrees/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.doctree new file mode 100644 index 00000000..40dcab9e Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/branching-rules/index.doctree b/.doctrees/api/optimizers/branch-and-bound/branching-rules/index.doctree new file mode 100644 index 00000000..87f5f0d9 Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/branching-rules/index.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/index.doctree b/.doctrees/api/optimizers/branch-and-bound/index.doctree new file mode 100644 index 00000000..51a520f4 Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/index.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/BestBound.doctree b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/BestBound.doctree new file mode 100644 index 00000000..8eddfe93 Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/BestBound.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.doctree b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.doctree new file mode 100644 index 00000000..63f69b0c Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.doctree b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.doctree new file mode 100644 index 00000000..f09f9ee5 Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.doctree b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.doctree new file mode 100644 index 00000000..ab8ffae0 Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.doctree differ diff --git a/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/index.doctree b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/index.doctree new file mode 100644 index 00000000..31d100ba Binary files /dev/null and b/.doctrees/api/optimizers/branch-and-bound/node-selection-rules/index.doctree differ diff --git a/.doctrees/api/optimizers/callbacks/Callback.doctree b/.doctrees/api/optimizers/callbacks/Callback.doctree new file mode 100644 index 00000000..172643a5 Binary files /dev/null and b/.doctrees/api/optimizers/callbacks/Callback.doctree differ diff --git a/.doctrees/api/optimizers/callbacks/CallbackEvent.doctree b/.doctrees/api/optimizers/callbacks/CallbackEvent.doctree new file mode 100644 index 00000000..168cbc84 Binary files /dev/null and b/.doctrees/api/optimizers/callbacks/CallbackEvent.doctree differ diff --git a/.doctrees/api/optimizers/callbacks/LazyCutCallback.doctree b/.doctrees/api/optimizers/callbacks/LazyCutCallback.doctree new file mode 100644 index 00000000..2595fef1 Binary files /dev/null and b/.doctrees/api/optimizers/callbacks/LazyCutCallback.doctree differ diff --git a/.doctrees/api/optimizers/callbacks/UserCutCallback.doctree b/.doctrees/api/optimizers/callbacks/UserCutCallback.doctree new file mode 100644 index 00000000..a1f4ac4c Binary files /dev/null and b/.doctrees/api/optimizers/callbacks/UserCutCallback.doctree differ diff --git a/.doctrees/api/optimizers/callbacks/index.doctree b/.doctrees/api/optimizers/callbacks/index.doctree new file mode 100644 index 00000000..f0d912c8 Binary files /dev/null and b/.doctrees/api/optimizers/callbacks/index.doctree differ diff --git a/.doctrees/api/optimizers/column-generation/ColumnGeneration.doctree b/.doctrees/api/optimizers/column-generation/ColumnGeneration.doctree new file mode 100644 index 00000000..2e7de0a6 Binary files /dev/null and b/.doctrees/api/optimizers/column-generation/ColumnGeneration.doctree differ diff --git a/.doctrees/api/optimizers/column-generation/DantzigWolfeDecomposition.doctree b/.doctrees/api/optimizers/column-generation/DantzigWolfeDecomposition.doctree new file mode 100644 index 00000000..1018f4a9 Binary files /dev/null and b/.doctrees/api/optimizers/column-generation/DantzigWolfeDecomposition.doctree differ diff --git a/.doctrees/api/optimizers/column-generation/index.doctree b/.doctrees/api/optimizers/column-generation/index.doctree new file mode 100644 index 00000000..d895d268 Binary files /dev/null and b/.doctrees/api/optimizers/column-generation/index.doctree differ diff --git a/.doctrees/api/optimizers/glpk/GLPK.doctree b/.doctrees/api/optimizers/glpk/GLPK.doctree new file mode 100644 index 00000000..b522cbfe Binary files /dev/null and b/.doctrees/api/optimizers/glpk/GLPK.doctree differ diff --git a/.doctrees/api/optimizers/glpk/index.doctree b/.doctrees/api/optimizers/glpk/index.doctree new file mode 100644 index 00000000..743e6fb7 Binary files /dev/null and b/.doctrees/api/optimizers/glpk/index.doctree differ diff --git a/.doctrees/api/optimizers/gurobi/Gurobi.doctree b/.doctrees/api/optimizers/gurobi/Gurobi.doctree new file mode 100644 index 00000000..8ef3a0a9 Binary files /dev/null and b/.doctrees/api/optimizers/gurobi/Gurobi.doctree differ diff --git a/.doctrees/api/optimizers/gurobi/index.doctree b/.doctrees/api/optimizers/gurobi/index.doctree new file mode 100644 index 00000000..c9b142ad Binary files /dev/null and b/.doctrees/api/optimizers/gurobi/index.doctree differ diff --git a/.doctrees/api/optimizers/index.doctree b/.doctrees/api/optimizers/index.doctree new file mode 100644 index 00000000..6e45708e Binary files /dev/null and b/.doctrees/api/optimizers/index.doctree differ diff --git a/.doctrees/api/optimizers/mosek/Mosek.doctree b/.doctrees/api/optimizers/mosek/Mosek.doctree new file mode 100644 index 00000000..b2574451 Binary files /dev/null and b/.doctrees/api/optimizers/mosek/Mosek.doctree differ diff --git a/.doctrees/api/optimizers/mosek/index.doctree b/.doctrees/api/optimizers/mosek/index.doctree new file mode 100644 index 00000000..1a8f6471 Binary files /dev/null and b/.doctrees/api/optimizers/mosek/index.doctree differ diff --git a/.doctrees/api/problems/ProblemsFLP.doctree b/.doctrees/api/problems/ProblemsFLP.doctree new file mode 100644 index 00000000..f1a64e01 Binary files /dev/null and b/.doctrees/api/problems/ProblemsFLP.doctree differ diff --git a/.doctrees/api/problems/ProblemsGAP.doctree b/.doctrees/api/problems/ProblemsGAP.doctree new file mode 100644 index 00000000..4db17ceb Binary files /dev/null and b/.doctrees/api/problems/ProblemsGAP.doctree differ diff --git a/.doctrees/api/problems/ProblemsKP.doctree b/.doctrees/api/problems/ProblemsKP.doctree new file mode 100644 index 00000000..8488150f Binary files /dev/null and b/.doctrees/api/problems/ProblemsKP.doctree differ diff --git a/.doctrees/api/problems/ProblemsMKP.doctree b/.doctrees/api/problems/ProblemsMKP.doctree new file mode 100644 index 00000000..55bfc3d6 Binary files /dev/null and b/.doctrees/api/problems/ProblemsMKP.doctree differ diff --git a/.doctrees/api/problems/ProblemsSRP.doctree b/.doctrees/api/problems/ProblemsSRP.doctree new file mode 100644 index 00000000..584ecd4c Binary files /dev/null and b/.doctrees/api/problems/ProblemsSRP.doctree differ diff --git a/.doctrees/api/problems/index.doctree b/.doctrees/api/problems/index.doctree new file mode 100644 index 00000000..921450d2 Binary files /dev/null and b/.doctrees/api/problems/index.doctree differ diff --git a/.doctrees/api/tolerances.doctree b/.doctrees/api/tolerances.doctree new file mode 100644 index 00000000..8609995f Binary files /dev/null and b/.doctrees/api/tolerances.doctree differ diff --git a/.doctrees/developer_guide/build-the-doc.doctree b/.doctrees/developer_guide/build-the-doc.doctree new file mode 100644 index 00000000..0d2d49bd Binary files /dev/null and b/.doctrees/developer_guide/build-the-doc.doctree differ diff --git a/.doctrees/developer_guide/index.doctree b/.doctrees/developer_guide/index.doctree new file mode 100644 index 00000000..1b49a7e6 Binary files /dev/null and b/.doctrees/developer_guide/index.doctree differ diff --git a/.doctrees/developer_guide/tests.doctree b/.doctrees/developer_guide/tests.doctree new file mode 100644 index 00000000..2482a7bf Binary files /dev/null and b/.doctrees/developer_guide/tests.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 00000000..77c0b6c0 Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/examples/facility-location-problem.doctree b/.doctrees/examples/facility-location-problem.doctree new file mode 100644 index 00000000..b9e72a4f Binary files /dev/null and b/.doctrees/examples/facility-location-problem.doctree differ diff --git a/.doctrees/examples/generalized-assignment-problem.doctree b/.doctrees/examples/generalized-assignment-problem.doctree new file mode 100644 index 00000000..8134c2d5 Binary files /dev/null and b/.doctrees/examples/generalized-assignment-problem.doctree differ diff --git a/.doctrees/examples/index.doctree b/.doctrees/examples/index.doctree new file mode 100644 index 00000000..a9f69d94 Binary files /dev/null and b/.doctrees/examples/index.doctree differ diff --git a/.doctrees/examples/knapsack-problem.doctree b/.doctrees/examples/knapsack-problem.doctree new file mode 100644 index 00000000..5af046d2 Binary files /dev/null and b/.doctrees/examples/knapsack-problem.doctree differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 00000000..d4acac15 Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/installation/global_installation.doctree b/.doctrees/installation/global_installation.doctree new file mode 100644 index 00000000..71e76b59 Binary files /dev/null and b/.doctrees/installation/global_installation.doctree differ diff --git a/.doctrees/installation/index.doctree b/.doctrees/installation/index.doctree new file mode 100644 index 00000000..a952c03e Binary files /dev/null and b/.doctrees/installation/index.doctree differ diff --git a/.doctrees/installation/linking.doctree b/.doctrees/installation/linking.doctree new file mode 100644 index 00000000..e6399827 Binary files /dev/null and b/.doctrees/installation/linking.doctree differ diff --git a/.doctrees/installation/local_installation.doctree b/.doctrees/installation/local_installation.doctree new file mode 100644 index 00000000..f1fc2d3d Binary files /dev/null and b/.doctrees/installation/local_installation.doctree differ diff --git a/.doctrees/installation/mosek-and-socp.doctree b/.doctrees/installation/mosek-and-socp.doctree new file mode 100644 index 00000000..d49f48c5 Binary files /dev/null and b/.doctrees/installation/mosek-and-socp.doctree differ diff --git a/.doctrees/installation/options.doctree b/.doctrees/installation/options.doctree new file mode 100644 index 00000000..1f382e92 Binary files /dev/null and b/.doctrees/installation/options.doctree differ diff --git a/.doctrees/tutorials/decomposition_methods/benders.doctree b/.doctrees/tutorials/decomposition_methods/benders.doctree new file mode 100644 index 00000000..2215c276 Binary files /dev/null and b/.doctrees/tutorials/decomposition_methods/benders.doctree differ diff --git a/.doctrees/tutorials/decomposition_methods/dantzig_wolfe.doctree b/.doctrees/tutorials/decomposition_methods/dantzig_wolfe.doctree new file mode 100644 index 00000000..1cb41ee4 Binary files /dev/null and b/.doctrees/tutorials/decomposition_methods/dantzig_wolfe.doctree differ diff --git a/.doctrees/tutorials/decomposition_methods/index.doctree b/.doctrees/tutorials/decomposition_methods/index.doctree new file mode 100644 index 00000000..9004abb2 Binary files /dev/null and b/.doctrees/tutorials/decomposition_methods/index.doctree differ diff --git a/.doctrees/tutorials/getting_started/index.doctree b/.doctrees/tutorials/getting_started/index.doctree new file mode 100644 index 00000000..4d0743f4 Binary files /dev/null and b/.doctrees/tutorials/getting_started/index.doctree differ diff --git a/.doctrees/tutorials/getting_started/modeling_optimization_problems.doctree b/.doctrees/tutorials/getting_started/modeling_optimization_problems.doctree new file mode 100644 index 00000000..fa8216b5 Binary files /dev/null and b/.doctrees/tutorials/getting_started/modeling_optimization_problems.doctree differ diff --git a/.doctrees/tutorials/getting_started/using_an_external_solver.doctree b/.doctrees/tutorials/getting_started/using_an_external_solver.doctree new file mode 100644 index 00000000..9d65fac6 Binary files /dev/null and b/.doctrees/tutorials/getting_started/using_an_external_solver.doctree differ diff --git a/.doctrees/tutorials/index.doctree b/.doctrees/tutorials/index.doctree new file mode 100644 index 00000000..e47f639a Binary files /dev/null and b/.doctrees/tutorials/index.doctree differ diff --git a/.doctrees/tutorials/robust_optimization/dualizing.doctree b/.doctrees/tutorials/robust_optimization/dualizing.doctree new file mode 100644 index 00000000..02bd9850 Binary files /dev/null and b/.doctrees/tutorials/robust_optimization/dualizing.doctree differ diff --git a/.doctrees/tutorials/robust_optimization/index.doctree b/.doctrees/tutorials/robust_optimization/index.doctree new file mode 100644 index 00000000..f181429c Binary files /dev/null and b/.doctrees/tutorials/robust_optimization/index.doctree differ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/_sources/api/index.rst.txt b/_sources/api/index.rst.txt new file mode 100644 index 00000000..8e071892 --- /dev/null +++ b/_sources/api/index.rst.txt @@ -0,0 +1,13 @@ +.. _api: + +API +=== + +.. toctree:: + :maxdepth: 2 + :glob: + + modeling/index + optimizers/index + problems/index + tolerances diff --git a/_sources/api/modeling/Annotation.rst.txt b/_sources/api/modeling/Annotation.rst.txt new file mode 100644 index 00000000..cede135e --- /dev/null +++ b/_sources/api/modeling/Annotation.rst.txt @@ -0,0 +1,4 @@ +Annotation +========== + +.. doxygenclass:: idol::Annotation diff --git a/_sources/api/modeling/Column.rst.txt b/_sources/api/modeling/Column.rst.txt new file mode 100644 index 00000000..4f16f907 --- /dev/null +++ b/_sources/api/modeling/Column.rst.txt @@ -0,0 +1,6 @@ +.. _api_Column: + +Column +====== + +.. doxygenclass:: idol::Column diff --git a/_sources/api/modeling/Constant.rst.txt b/_sources/api/modeling/Constant.rst.txt new file mode 100644 index 00000000..910e997b --- /dev/null +++ b/_sources/api/modeling/Constant.rst.txt @@ -0,0 +1,6 @@ +.. _api_Constant: + +Constant +======== + +.. doxygenclass:: idol::Constant diff --git a/_sources/api/modeling/Ctr.rst.txt b/_sources/api/modeling/Ctr.rst.txt new file mode 100644 index 00000000..483b7feb --- /dev/null +++ b/_sources/api/modeling/Ctr.rst.txt @@ -0,0 +1,6 @@ +.. _api_Ctr: + +Ctr +=== + +.. doxygenclass:: idol::Ctr diff --git a/_sources/api/modeling/Env.rst.txt b/_sources/api/modeling/Env.rst.txt new file mode 100644 index 00000000..1eee279a --- /dev/null +++ b/_sources/api/modeling/Env.rst.txt @@ -0,0 +1,4 @@ +Env +=== + +.. doxygenclass:: idol::Env diff --git a/_sources/api/modeling/Expr.rst.txt b/_sources/api/modeling/Expr.rst.txt new file mode 100644 index 00000000..89fb9869 --- /dev/null +++ b/_sources/api/modeling/Expr.rst.txt @@ -0,0 +1,6 @@ +.. _api_Expr: + +Expr +==== + +.. doxygenclass:: idol::Expr diff --git a/_sources/api/modeling/LinExpr.rst.txt b/_sources/api/modeling/LinExpr.rst.txt new file mode 100644 index 00000000..4068df68 --- /dev/null +++ b/_sources/api/modeling/LinExpr.rst.txt @@ -0,0 +1,22 @@ +LinExpr +======= + +This class is used to represent linear expressions in the modeling interface of idol. + +It consists in a set of linear terms which represent products of keys (typically, variables) and scalars. + +.. admonition:: Example + + In this example, we create a linear expression representing the following linear expression. + + .. math:: + + 3 x_0 + 2 x_1 + + .. code-block:: cpp + + auto x = model.add_vars(Dim<1>(2), 0, Inf, Continuous, "x"); + + LinExpr lin_expr = 3 * x[0] + 2 * x[1]; + +.. doxygenclass:: idol::LinExpr diff --git a/_sources/api/modeling/Model.rst.txt b/_sources/api/modeling/Model.rst.txt new file mode 100644 index 00000000..e02e8fac --- /dev/null +++ b/_sources/api/modeling/Model.rst.txt @@ -0,0 +1,55 @@ +.. _api_model: + +Model +===== + +The Model class is probably the most central of idol. It is used to represent a mathematical optimization problem of the +following general form. + +.. math:: + + \begin{array}{lll} + \textrm{minimize } & \displaystyle \sum_{j=1}^n a_{0j}x_j + \sum_{j=1}^n\sum_{k=1}^n q_{jk}^0x_jx_k + b_0\\ + \textrm{subject to } & \displaystyle \sum_{j=1}^n a_{ij}x_j + \sum_{j=1}^n\sum_{k=1}^n q^i_{jk}x_jx_k \le b_i & i=1,...,m \\ + & l_j \le x_j \le u_j & j=1,...,m \\ + & x_j\in\mathbb Z & j\in J_I, + \end{array} + +Here, :math:`x_1, ..., x_n` are the decision variables with bounds :math:`[l_1,u_1],...,[l_n,u_n]` (possibly, +:math:`l_j = -\infty` or :math:`u_j = +\infty`). Note that some variables have integrality requirements (i.e., those whose +indices are in :math:`J_I`). Other entities are input parameters of the problem and must typically have real values +(e.g., :math:`c_j, a_{ij}, q_{jk}^i` and :math:`b_i\in\mathbb R`). Alternatively, optimization problems can also be maximization +problems. + +.. admonition:: Example: + + Here is a short example which builds and solves the following optimization problem. + + .. math:: + + \begin{array}{ll} + \textrm{minimize } & -x_0 - 1.5 x_1 + 3 \\ + \textrm{subject to } & x_0 + 2 x_1 \le 1.5 \\ + & 0 \le x_0 \le 1 \\ + & 0 \le x_1 \le 1 + \end{array} + + .. code-block:: cpp + + Env env; + + Model model(env); + + auto x = model.add_vars(Dim<1>(2), 0, 1, Continuous, "x"); + + auto c = model.add_ctr(x[0] + 2 * x[1] <= 1.5); + + model.set_obj_expr(-x[0] - 1.5 * x[1] + 3); + + model.use(Gurobi()); + + model.optimize(); + + std::cout << "Best obj = " << model.get_best_obj() << std::endl; + +.. doxygenclass:: idol::Model diff --git a/_sources/api/modeling/Param.rst.txt b/_sources/api/modeling/Param.rst.txt new file mode 100644 index 00000000..1684f2f3 --- /dev/null +++ b/_sources/api/modeling/Param.rst.txt @@ -0,0 +1,6 @@ +.. _api_Param: + +Param +===== + +.. doxygenclass:: idol::Param diff --git a/_sources/api/modeling/QuadExpr.rst.txt b/_sources/api/modeling/QuadExpr.rst.txt new file mode 100644 index 00000000..ba0e9a74 --- /dev/null +++ b/_sources/api/modeling/QuadExpr.rst.txt @@ -0,0 +1,4 @@ +QuadExpr +======== + +.. doxygenclass:: idol::QuadExpr diff --git a/_sources/api/modeling/Row.rst.txt b/_sources/api/modeling/Row.rst.txt new file mode 100644 index 00000000..c3f40773 --- /dev/null +++ b/_sources/api/modeling/Row.rst.txt @@ -0,0 +1,6 @@ +.. _api_Row: + +Row +=== + +.. doxygenclass:: idol::Row diff --git a/_sources/api/modeling/SolutionDual.rst.txt b/_sources/api/modeling/SolutionDual.rst.txt new file mode 100644 index 00000000..60b141e7 --- /dev/null +++ b/_sources/api/modeling/SolutionDual.rst.txt @@ -0,0 +1,6 @@ +.. _api_SolutionDual: + +Solution::Dual +================ + +.. doxygenclass:: idol::Solution::Dual diff --git a/_sources/api/modeling/SolutionPrimal.rst.txt b/_sources/api/modeling/SolutionPrimal.rst.txt new file mode 100644 index 00000000..1d5a4242 --- /dev/null +++ b/_sources/api/modeling/SolutionPrimal.rst.txt @@ -0,0 +1,6 @@ +.. _api_SolutionPrimal: + +Solution::Primal +================ + +.. doxygenclass:: idol::Solution::Primal diff --git a/_sources/api/modeling/TempCtr.rst.txt b/_sources/api/modeling/TempCtr.rst.txt new file mode 100644 index 00000000..ee27bcce --- /dev/null +++ b/_sources/api/modeling/TempCtr.rst.txt @@ -0,0 +1,6 @@ +.. _api_TempCtr: + +TempCtr +======= + +.. doxygenclass:: idol::TempCtr diff --git a/_sources/api/modeling/TempVar.rst.txt b/_sources/api/modeling/TempVar.rst.txt new file mode 100644 index 00000000..d6b70635 --- /dev/null +++ b/_sources/api/modeling/TempVar.rst.txt @@ -0,0 +1,6 @@ +.. _api_TempVar: + +TempVar +======= + +.. doxygenclass:: idol::TempVar diff --git a/_sources/api/modeling/Var.rst.txt b/_sources/api/modeling/Var.rst.txt new file mode 100644 index 00000000..431108bb --- /dev/null +++ b/_sources/api/modeling/Var.rst.txt @@ -0,0 +1,6 @@ +.. _api_var: + +Var +=== + +.. doxygenclass:: idol::Var diff --git a/_sources/api/modeling/index.rst.txt b/_sources/api/modeling/index.rst.txt new file mode 100644 index 00000000..7727b861 --- /dev/null +++ b/_sources/api/modeling/index.rst.txt @@ -0,0 +1,10 @@ +.. _api_modeling: + +Modeling +======== + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/api/optimizers/branch-and-bound/BranchAndBound.rst.txt b/_sources/api/optimizers/branch-and-bound/BranchAndBound.rst.txt new file mode 100644 index 00000000..b44abddf --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/BranchAndBound.rst.txt @@ -0,0 +1,31 @@ +.. _api_BranchAndBound: + +BranchAndBound +============== + +This class is an optimizer factory which creates a new branch-and-bound algorithm. +It can be used to create customized branch-and-bound algorithms with a large degree of freedom. + +.. seealso:: + + If you are not familiar with optimizers and optimizer factories, please refer to :ref:`this page `. + +.. admonition:: Example + + Here, we create a simple branch-and-bound algorithm where branching is done on integer variables which are being + relaxed. Each node is solved by the external solver GLPK. Nodes are selected according to the "best-bound" + rule while variables are selected according to the "most-infeasible" branching rule. + + The created algorithm also incorporates sub-tree exploration of maximum depth 2. + + .. code-block:: + + model.use( + BranchAndBound() + .with_node_optimizer( GLPK::ContinuousRelaxation() ) + .with_branching_rule( MostInfeasible() ) + .with_node_selection_rule( BestBound() ) + .with_subtree_depth(2) + ); + +.. doxygenclass:: idol::BranchAndBound diff --git a/_sources/api/optimizers/branch-and-bound/BranchAndBoundCallback.rst.txt b/_sources/api/optimizers/branch-and-bound/BranchAndBoundCallback.rst.txt new file mode 100644 index 00000000..5432eb88 --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/BranchAndBoundCallback.rst.txt @@ -0,0 +1,74 @@ +.. _api_BranchAndBoundCallback: + +BranchAndBoundCallback +====================== + +This class can be used to create callbacks to run on idol's :ref:`branch-and-bound implementation `. + +.. warning:: + + BranchAndBoundCallback-s is an *advanced* feature. + + Please, make sure that what you are trying do cannot be done with + a :ref:`solver-independent callback ` first, or with pre-existing callbacks, e.g., + :ref:`UserCutCallback ` or :ref:`LazyCutCallback `. + + The advantage of using a :ref:`BranchAndBoundCallback ` instead of a standard + solver-independent :ref:`Callback ` lies in the possibility to access specific information regarding + the execution of the branch-and-bound algorithm. For instance, accessing a node's information, or the current + relaxation model being solved. + +.. admonition:: Example + + Here is an example of callback which prints out the event triggering it and, when the event corresponds to `NodeLoaded`, + prints the node's model to be solved. + + .. code-block:: + + class MyCallback : public BranchAndBoundCallbackFactory { + public: + class Strategy : public BranchAndBoundCallback { + protected: + void operator()(CallbackEvent t_event) override { + + std::cout << "MyCallback is called for " << t_event << std::endl; + + if (t_event != NodeLoaded) { + return; + } + + std::cout << "The problem being solve at node " << node().id() << std::endl; + std::cout << relaxation() << std::endl; + + } + }; + + BranchAndBoundCallback *operator()() override { + return new Strategy(); + } + + [[nodiscard]] BranchAndBoundCallbackFactory *clone() const override { + return new MyCallback(*this); + } + }; + + Then, this callback can be used as follows. + + .. code-block:: + + model.use( + BranchAndBound() + .with_node_optimizer(GLPK::ContinuousRelaxation()) + .with_branching_rule(MostInfeasible()) + .with_node_selection_rule(DepthFirst()) + .with_callback(MyCallback()); + ); + +.. hint:: + + By default, most of the objects returned by BranchAndBoundCallback methods are const. If you wish to access non-const + versions (e.g., if you want to perform non-standard updates to the relaxed model or want to change the node's current + information manually), you should use the advanced interface obtained by calling ``BranchAndBoundCallback::advanced_interface``. + +.. doxygenclass:: idol::BranchAndBoundCallback + :protected-members: diff --git a/_sources/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.rst.txt b/_sources/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.rst.txt new file mode 100644 index 00000000..8024dfe2 --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.rst.txt @@ -0,0 +1,6 @@ +.. _api_MostInfeasible: + +MostInfeasible +============== + +.. doxygenclass:: idol::MostInfeasible diff --git a/_sources/api/optimizers/branch-and-bound/branching-rules/index.rst.txt b/_sources/api/optimizers/branch-and-bound/branching-rules/index.rst.txt new file mode 100644 index 00000000..fc91078b --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/branching-rules/index.rst.txt @@ -0,0 +1,10 @@ +.. _api_branching_rules: + +Branching rules +=============== + +.. toctree:: + :maxdepth: 2 + :glob: + + MostInfeasible \ No newline at end of file diff --git a/_sources/api/optimizers/branch-and-bound/index.rst.txt b/_sources/api/optimizers/branch-and-bound/index.rst.txt new file mode 100644 index 00000000..20b843b9 --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/index.rst.txt @@ -0,0 +1,13 @@ +.. _api_branch_and_bound: + +Branch-And-Bound algorithms +=========================== + +.. toctree:: + :maxdepth: 2 + :glob: + + BranchAndBound + branching-rules/index + node-selection-rules/index + BranchAndBoundCallback \ No newline at end of file diff --git a/_sources/api/optimizers/branch-and-bound/node-selection-rules/BestBound.rst.txt b/_sources/api/optimizers/branch-and-bound/node-selection-rules/BestBound.rst.txt new file mode 100644 index 00000000..06d82014 --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/node-selection-rules/BestBound.rst.txt @@ -0,0 +1,6 @@ +.. _api_BestBound: + +BestBound +========= + +.. doxygenclass:: idol::BestBound diff --git a/_sources/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.rst.txt b/_sources/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.rst.txt new file mode 100644 index 00000000..dd8e6551 --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.rst.txt @@ -0,0 +1,6 @@ +.. _api_BreadthFirst: + +BreadthFirst +============ + +.. doxygenclass:: idol::BreadthFirst diff --git a/_sources/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.rst.txt b/_sources/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.rst.txt new file mode 100644 index 00000000..933582f3 --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.rst.txt @@ -0,0 +1,6 @@ +.. _api_DepthFirst: + +DepthFirst +========== + +.. doxygenclass:: idol::DepthFirst diff --git a/_sources/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.rst.txt b/_sources/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.rst.txt new file mode 100644 index 00000000..29068ea0 --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.rst.txt @@ -0,0 +1,6 @@ +.. _api_WorstBound: + +WorstBound +========== + +.. doxygenclass:: idol::WorstBound diff --git a/_sources/api/optimizers/branch-and-bound/node-selection-rules/index.rst.txt b/_sources/api/optimizers/branch-and-bound/node-selection-rules/index.rst.txt new file mode 100644 index 00000000..290f71a7 --- /dev/null +++ b/_sources/api/optimizers/branch-and-bound/node-selection-rules/index.rst.txt @@ -0,0 +1,13 @@ +.. _api_node_selection_rules: + +Node selection rules +==================== + +.. toctree:: + :maxdepth: 2 + :glob: + + BestBound + WorstBound + DepthFirst + BreadthFirst \ No newline at end of file diff --git a/_sources/api/optimizers/callbacks/Callback.rst.txt b/_sources/api/optimizers/callbacks/Callback.rst.txt new file mode 100644 index 00000000..63c00d3a --- /dev/null +++ b/_sources/api/optimizers/callbacks/Callback.rst.txt @@ -0,0 +1,85 @@ +.. _api_Callback: + +Callback +======== + +Callbacks are user-defined functions which are invoked during the execution of branch-and-bound algorithms at certain +key steps of the procedure. These key points are called :ref:`events ` in idol. +Callback functions can be used to monitor the algorithm's progress, control its behavior, or perform additional processing. + +UserCutCallback and LazyCutCallback +----------------------------------- + +A common use of callbacks is to implement custom cut generation procedures at each node of the branch-and-bound tree. Note that +idol offers out-of-the-box callback routines for cut separation. Namely, :ref:`UserCutCallback ` +and :ref:`LazyCutCallback `. Yet, it is totally possible to define your own cut generation procedure +by using the ``Callback::add_user_cut`` and ``Callback::add_lazy_cut`` methods inside your callback. + +In a nutshell, :ref:`UserCutCallback ` (or, similarly, ``Callback::add_user_cut``) are intended for +cuts which have a potential to improve the quality of the relaxation but whose presence in the model is not necessary for the +branch-and-bound to converge to an optimal solution. :ref:`UserCutCallback ` callbacks are called when +a non-valid solution has been found. + +:ref:`LazyCutCallback ` (or, similarly, ``Callback::add_lazy_cut``), +instead, are intended to generate constraints which should be part of the model but which were omitted in the model for some reason. +A typical reason for omitting constraints in a model's definition is the large number of such constraints. +:ref:`LazyCutCallback ` callbacks are called when a valid solution has been found. + +Creating your own callback +-------------------------- + +If you want to create your own callback, you should first create a new class which inherits the ``Callback`` class and +overrides the ``operator()(CallbackEvent)`` method. + +Note that callbacks cannot be given "as-is" to an optimizer but must be passed through a ``CallbackFactory``. A callback +factory is a class whose role is to create a new callback object whenever it is needed. Every callback factories must be +a child (or little child) of the ``CallbackFactory`` class. + +.. admonition:: Example + + We now give an example of callback which prints out every valid solution found. + + .. code-block:: + + class MyCallback : public CallbackFactory { + public: + + class Strategy { // Real callback implementation + protected: + void operator()(CallbackEvent t_event) { + + if (t_event != IncumbentSolution) { + return; + } + + std::cout << primal_solution() << std::endl; + } + } + + Callback* operator()() { // Creates a new callback object + return new Strategy(); + } + + CallbackFactory* clone() const { // Creates a copy of the callback factory + return new MyCallback(*this); + } + + } + + Later, it is then possible to use this callback in compliant optimizers like :ref:`Gurobi ` or :ref:`BranchAndBound `. + + .. code-block:: + + model.use( + Gurobi().with_callback(MyCallback(); + ); + + model.optimize(); + +.. hint:: + + Note that there also exists more advanced callbacks which are specific to idol's branch-and-bound implementation. + For these advanced feature, see :ref:`BranchAndBoundCallback `. + +.. doxygenclass:: idol::Callback + :protected-members: diff --git a/_sources/api/optimizers/callbacks/CallbackEvent.rst.txt b/_sources/api/optimizers/callbacks/CallbackEvent.rst.txt new file mode 100644 index 00000000..823233be --- /dev/null +++ b/_sources/api/optimizers/callbacks/CallbackEvent.rst.txt @@ -0,0 +1,6 @@ +.. _api_CallbackEvent: + +Events +====== + +.. doxygenenum:: idol::CallbackEvent \ No newline at end of file diff --git a/_sources/api/optimizers/callbacks/LazyCutCallback.rst.txt b/_sources/api/optimizers/callbacks/LazyCutCallback.rst.txt new file mode 100644 index 00000000..2197b5f0 --- /dev/null +++ b/_sources/api/optimizers/callbacks/LazyCutCallback.rst.txt @@ -0,0 +1,60 @@ +.. _api_LazyCutCallback: + +LazyCutCallback +=============== + +Lazy cuts are essentially constraints which are part of an optimization model but which have been omitted in the current +definition of the model. Lazy cuts typically arise in models with a large number of constraints. Instead of enumerating +then all, it may be judicious to omit some of them to get a smaller optimization model. Then, the returned solution is +checked for feasibility against the whole set of constraints. If a violated constraint is identified, we add the +constraint to the model and resolve. If not, then all the constraints are satisfied and the solution is optimal for the +original model in which all constraints materializes. + +The LazyCutCallback can be used to implement lazy cut constraint generation on the fly, during the optimization process. + +Consider the following optimization problem: + +.. math:: + + \begin{align} + \min_x \ & c^\top x \\ + \text{s.t.} \ & x\in X, \\ + & \xi^\top x \le \xi_0 \quad (\xi_0,\xi) \in \Xi, + \end{align} + +in which assume that :math:`|\Xi|` is large (potentially infinite). The idea is to start by solving the following +relaxed master problem in which constraints associated to :math:`(\xi_0,\xi)` have been omitted. + +.. math:: + + \begin{align} + \min_x \ & c^\top x \\ + \text{s.t.} \ & x\in X. + \end{align} + +If we assume that this problem is feasible and bounded, we can denote by :math:`x^*` a solution of this problem. Then, +we search for a violated constraint ":math:`\xi^\top x \le \xi_0`" for some :math:`(\xi_0,\xi)\in\Xi`. Observe that +a constraint is violated if, and only if, the following holds: + +.. math:: + + \left(\exists(\xi_0,\xi)\in\Xi, \ \xi^\top x^* > \xi_0\right) + \Leftrightarrow + \left(\max_{(\xi_0,\xi)\in\Xi} \xi_0 - \xi^\top x^* < 0\right). + +Thus, the LazyCutCallback automatically solve the optimization problem on the right handside and checks for its value. +A new constraint is added if, and only if, + +.. math:: + \max_{\xi\in\Xi} \xi_0 - \xi^\top x^* < -\varepsilon, + +with :math:`\varepsilon` a given tolerance (by default, :code:`Tolerance::Feasibility`). + + +.. hint:: + + You may also be interested by a tutorial showing how you can implement a simple Benders Decomposition using lazy + cuts. :ref:`See Benders Decomposition tutorial `. + + +.. doxygenclass:: idol::LazyCutCallback \ No newline at end of file diff --git a/_sources/api/optimizers/callbacks/UserCutCallback.rst.txt b/_sources/api/optimizers/callbacks/UserCutCallback.rst.txt new file mode 100644 index 00000000..cf10e6e1 --- /dev/null +++ b/_sources/api/optimizers/callbacks/UserCutCallback.rst.txt @@ -0,0 +1,6 @@ +.. _api_UserCutCallback: + +UserCutCallback +=============== + +.. doxygenclass:: idol::UserCutCallback \ No newline at end of file diff --git a/_sources/api/optimizers/callbacks/index.rst.txt b/_sources/api/optimizers/callbacks/index.rst.txt new file mode 100644 index 00000000..fa5c54a9 --- /dev/null +++ b/_sources/api/optimizers/callbacks/index.rst.txt @@ -0,0 +1,16 @@ +.. _api_callbacks: + +Callbacks +========= + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 4 + :glob: + + CallbackEvent + Callback + LazyCutCallback + UserCutCallback diff --git a/_sources/api/optimizers/column-generation/ColumnGeneration.rst.txt b/_sources/api/optimizers/column-generation/ColumnGeneration.rst.txt new file mode 100644 index 00000000..69b0e769 --- /dev/null +++ b/_sources/api/optimizers/column-generation/ColumnGeneration.rst.txt @@ -0,0 +1,13 @@ +.. _api_ColumnGeneration: + +ColumnGeneration +================ + +.. danger:: + + Currently, the master problem must have a "convexity constraint" for the algorithm to converge. + Problems without this property will lead to undefined behavior. + + We strongly advise you to use :ref:`DantzigWolfeDecomposition ` instead. + +.. doxygenclass:: idol::ColumnGeneration diff --git a/_sources/api/optimizers/column-generation/DantzigWolfeDecomposition.rst.txt b/_sources/api/optimizers/column-generation/DantzigWolfeDecomposition.rst.txt new file mode 100644 index 00000000..167b82a2 --- /dev/null +++ b/_sources/api/optimizers/column-generation/DantzigWolfeDecomposition.rst.txt @@ -0,0 +1,12 @@ +.. _api_DantzigWolfeDecomposition: + +DantzigWolfeDecomposition +========================= + +.. hint:: + + This page documents on the DantzigWolfeDecomposition optimizer factory. Note that there is also a + :ref:`Dantzig-Wolfe decomposition tutorial ` which shows how to solve a + Generalized Assignment Problem by using a branch-and-price algorithm. + +.. doxygenclass:: idol::DantzigWolfeDecomposition diff --git a/_sources/api/optimizers/column-generation/index.rst.txt b/_sources/api/optimizers/column-generation/index.rst.txt new file mode 100644 index 00000000..7c842979 --- /dev/null +++ b/_sources/api/optimizers/column-generation/index.rst.txt @@ -0,0 +1,14 @@ +.. _api_column_generation: + +Column-Generation algorithms +============================ + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 4 + :glob: + + ColumnGeneration + DantzigWolfeDecomposition diff --git a/_sources/api/optimizers/glpk/GLPK.rst.txt b/_sources/api/optimizers/glpk/GLPK.rst.txt new file mode 100644 index 00000000..24b1b493 --- /dev/null +++ b/_sources/api/optimizers/glpk/GLPK.rst.txt @@ -0,0 +1,4 @@ +GLPK +==== + +.. doxygenclass:: idol::GLPK diff --git a/_sources/api/optimizers/glpk/index.rst.txt b/_sources/api/optimizers/glpk/index.rst.txt new file mode 100644 index 00000000..fa8cd3ab --- /dev/null +++ b/_sources/api/optimizers/glpk/index.rst.txt @@ -0,0 +1,13 @@ +.. _api_GLPK: + +GLPK interface +============== + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 2 + :glob: + + GLPK \ No newline at end of file diff --git a/_sources/api/optimizers/gurobi/Gurobi.rst.txt b/_sources/api/optimizers/gurobi/Gurobi.rst.txt new file mode 100644 index 00000000..06c2f356 --- /dev/null +++ b/_sources/api/optimizers/gurobi/Gurobi.rst.txt @@ -0,0 +1,4 @@ +Gurobi +====== + +.. doxygenclass:: idol::Gurobi diff --git a/_sources/api/optimizers/gurobi/index.rst.txt b/_sources/api/optimizers/gurobi/index.rst.txt new file mode 100644 index 00000000..400aeae9 --- /dev/null +++ b/_sources/api/optimizers/gurobi/index.rst.txt @@ -0,0 +1,13 @@ +.. _api_Gurobi: + +Gurobi interface +================ + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 2 + :glob: + + Gurobi \ No newline at end of file diff --git a/_sources/api/optimizers/index.rst.txt b/_sources/api/optimizers/index.rst.txt new file mode 100644 index 00000000..e36df96c --- /dev/null +++ b/_sources/api/optimizers/index.rst.txt @@ -0,0 +1,134 @@ +.. _api_optimizers: + +Optimizers +========== + +Introduction +------------ + +Optimizers denote the algorithms which are being used by idol to solve a given ``Model``. +They are set by using the ``Model::use`` method, as done in the following example. + +.. code-block:: cpp + + Env env; + + Model my_model(env); + + my_model.use( Gurobi() ); // setting the optimizer of my_model to Gurobi() + +Here, ``Gurobi`` is actually an ``OptimizerFactory`` which will eventually create an optimizer to solve our model. Indeed, +the "real" optimizer in this case will be an instance of ``Optimizers::Gurobi`` which will be created when necessary. + +This mechanism is what allows idol to create complex algorithms by combining optimizers together. Here is a second example +which creates a nested branch-and-price algorithm. + +.. code-block:: cpp + + auto nested_branch_and_price = + + /* The overall algorithm is a branch-and-bound */ + BranchAndBound() + + /* Each node is solved with a Dantzig-Wolfe decomposition algorithm */ + .with_node_solver( + + /* The annotation "decomposition1" is used to automatically decompose the problem */ + DantzigWolfeDecomposition(decomposition1) + + /* The master problem is solved using Gurobi */ + .with_master_optimizer(Gurobi::ContinuousRelaxation()) + + /* Each pricing problem is solved by a (nested) branch-and-bound algorithm */ + .with_pricing_solver( + + BranchAndBound() + + /* Each node is solved by a dantzig-wolfe decomposition algorithm */ + .with_nodes_solver( + + /* The annotation "decomposition2" is used to decompose the sub-problem again */ + DantzigWolfeDecomposition(decomposition2) + + /* The master problem is solved using Mosek */ + .with_master_optimizer(Mosek::ContinuousRelaxation()) + + /* The sub-problem is solved by a (nested) branch-and-bound algorithm [we could have used, e.g., Gurobi instead] */ + .with_pricing_optimizer( + + BranchAndBound() + + /* Each node is solved by GLPK */ + .with_node_solver(GLPK::ContinuousRelaxation()) + + /* Variables are selected for branching using the most-infeasible rule */ + .with_branching_rule(MostInfeasible()) + + /* Nodes are selected using the worst-bound rule */ + .with_node_selection_rule(WorstBound()) + + ) + + /* Branching constraints are applied to the pricing problem */ + .with_branching_on_master(false) + ) + /* Variables are selected for branching using the most-infeasible rule */ + .with_branching_rule(MostInfeasible()) + + /* Nodes are selected using the depth-first rule */ + .with_node_selection_rule(DepthFirst()) + ) + + /* Column generation is stabilized by dual-price smoothing */ + .with_dual_price_smoothing_stabilization(.3) + + /* Infeasible master problem are dealt with using Farkas pricing */ + .with_farkas_pricing() + + /* Branching constraints are applied to the master problem */ + .with_branching_on_master() + ) + /* Variables are selected for branching using the most-infeasible rule */ + .with_branching_rule(MostInfeasible()) + + /* Nodes are selected using the best-bound rule */ + .with_node_selection_rule(BestBound() + + /* Only informational logs will be printed (in blue) */ + .with_log_level(Info, Blue) + + /* The algorithm will run with a time limit of 3600 */ + .with_time_limit(3600) + ) + + my_model.use(nested_branch_and_price); + +Once an optimizer, or rather, an optimizer factory, has been given, the ``Model::optimize`` method can be called to actually +solve the model. + +.. code-block:: + + my_model.optimize(); + +Optimizer factories +------------------- + +Typically, a user mostly works with optimizer factories rather than with optimizers. Optimizer factories are like +"building plans" for creating actual optimizers. They usually can be recognized by their ``with_*`` functions allowing +the user to customize this plan. For instance, the ``BranchAndBound`` optimizer factory has a method ``with_node_optimizer`` +allowing the user to pass yet another optimizer factory which will be used to create optimizers for the branch-and-bound +nodes. + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 4 + :glob: + + branch-and-bound/index + column-generation/index + glpk/index + gurobi/index + mosek/index + callbacks/index diff --git a/_sources/api/optimizers/mosek/Mosek.rst.txt b/_sources/api/optimizers/mosek/Mosek.rst.txt new file mode 100644 index 00000000..ce11678d --- /dev/null +++ b/_sources/api/optimizers/mosek/Mosek.rst.txt @@ -0,0 +1,4 @@ +Mosek +===== + +.. doxygenclass:: idol::Mosek diff --git a/_sources/api/optimizers/mosek/index.rst.txt b/_sources/api/optimizers/mosek/index.rst.txt new file mode 100644 index 00000000..fde2b541 --- /dev/null +++ b/_sources/api/optimizers/mosek/index.rst.txt @@ -0,0 +1,13 @@ +.. _api_Mosek: + +Mosek interface +=============== + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 2 + :glob: + + Mosek \ No newline at end of file diff --git a/_sources/api/problems/ProblemsFLP.rst.txt b/_sources/api/problems/ProblemsFLP.rst.txt new file mode 100644 index 00000000..ed8155a7 --- /dev/null +++ b/_sources/api/problems/ProblemsFLP.rst.txt @@ -0,0 +1,4 @@ +Facility Location Problem (FLP) +=============================== + +.. doxygennamespace:: idol::Problems::FLP diff --git a/_sources/api/problems/ProblemsGAP.rst.txt b/_sources/api/problems/ProblemsGAP.rst.txt new file mode 100644 index 00000000..f550c328 --- /dev/null +++ b/_sources/api/problems/ProblemsGAP.rst.txt @@ -0,0 +1,4 @@ +Generalized Assignment Problem (GAP) +==================================== + +.. doxygennamespace:: idol::Problems::GAP diff --git a/_sources/api/problems/ProblemsKP.rst.txt b/_sources/api/problems/ProblemsKP.rst.txt new file mode 100644 index 00000000..4ce82f7f --- /dev/null +++ b/_sources/api/problems/ProblemsKP.rst.txt @@ -0,0 +1,4 @@ +Knapsack Problem (KP) +===================== + +.. doxygennamespace:: idol::Problems::KP diff --git a/_sources/api/problems/ProblemsMKP.rst.txt b/_sources/api/problems/ProblemsMKP.rst.txt new file mode 100644 index 00000000..0adce681 --- /dev/null +++ b/_sources/api/problems/ProblemsMKP.rst.txt @@ -0,0 +1,4 @@ +Multiple Knapsack Problem (MKP) +=============================== + +.. doxygennamespace:: idol::Problems::MKP diff --git a/_sources/api/problems/ProblemsSRP.rst.txt b/_sources/api/problems/ProblemsSRP.rst.txt new file mode 100644 index 00000000..793ffc56 --- /dev/null +++ b/_sources/api/problems/ProblemsSRP.rst.txt @@ -0,0 +1,4 @@ +Staff Rostering Problem (SRP) +=============================== + +.. doxygennamespace:: idol::Problems::SRP diff --git a/_sources/api/problems/index.rst.txt b/_sources/api/problems/index.rst.txt new file mode 100644 index 00000000..c3886b36 --- /dev/null +++ b/_sources/api/problems/index.rst.txt @@ -0,0 +1,10 @@ +.. _api_problems: + +Problems +======== + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/api/tolerances.rst.txt b/_sources/api/tolerances.rst.txt new file mode 100644 index 00000000..d90896c9 --- /dev/null +++ b/_sources/api/tolerances.rst.txt @@ -0,0 +1,4 @@ +Tolerances +========== + +.. doxygennamespace:: idol::Tolerance diff --git a/_sources/developer_guide/build-the-doc.rst.txt b/_sources/developer_guide/build-the-doc.rst.txt new file mode 100644 index 00000000..4d331aef --- /dev/null +++ b/_sources/developer_guide/build-the-doc.rst.txt @@ -0,0 +1,61 @@ +.. highlight:: sh +.. _dev_build_the_doc: + +Build the doc! +============== + +This page explains how to build the documentation on a local machine. + +Dependencies +------------ + +Description +^^^^^^^^^^^ + +The documentation is built using `doxygen`_ and a bunch of other tools, in particular: + +* `doxygen`_ the C++ documentation generator; +* `Sphinx`_ the python documentation generator; +* `sphinx-rtd-theme `_ a Sphinx theme used to render the + HTML version of the documentation; +* `sphinx-sitemap `_ a Sphinx extension + to generate multi-version and multi-language sitemaps.org compliant sitemaps for the HTML version + of a Sphinx documentation; +* `sphinx-copybutton `_ a Sphinx extension which + automatically adds buttons on code-blocks environments to copy its content; +* `Breathe`_ the Sphinx plugin for integrating doxygen outputs into Sphinx. + +For a detailed description on how these tools interact, please refer to `this article `_. + +Installation guide (Ubuntu) +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +:: + + sudo apt-get install doxygen # installs the last version of doxygen + + sudo apt-get install python3-sphinx # installs the last version of Sphinx + + sudo apt-get install python3-breathe # installs the last version of Breathe + + pip3 install sphinx-sitemap sphinx-rtd-theme sphinx-copybutton # installs theme and extensions + +Build instructions +------------------ + +By default, CMake automatically creates a ``doc`` target. All you have to do to build the documentation website +is to build this target. For instance, inside a ``build`` directory, the following command can be used. + +:: + + cmake .. && make doc + +Note that you do not need to use ``make`` and use the following generic command. + +:: + + cmake --build . --target doc + +.. _doxygen: https://doxygen.nl/ +.. _Sphinx: https://www.sphinx-doc.org/en/master/ +.. _Breathe: https://github.com/breathe-doc/breathe \ No newline at end of file diff --git a/_sources/developer_guide/index.rst.txt b/_sources/developer_guide/index.rst.txt new file mode 100644 index 00000000..e222b3ee --- /dev/null +++ b/_sources/developer_guide/index.rst.txt @@ -0,0 +1,11 @@ +.. _dev: + +Developer guide +=============== + +.. toctree:: + :maxdepth: 2 + :glob: + + build-the-doc + tests \ No newline at end of file diff --git a/_sources/developer_guide/tests.rst.txt b/_sources/developer_guide/tests.rst.txt new file mode 100644 index 00000000..bd9cfb10 --- /dev/null +++ b/_sources/developer_guide/tests.rst.txt @@ -0,0 +1,91 @@ +.. _tests: + +Unit and integration tests +========================== + +This page explains how to build the unit and integration tests on a local machine. + +Dependencies +------------ + +Tests are managed by the C++ unit testing framework `Catch2 `_. + +When CMake is told to create test targets, it will automatically look for an installation of Catch2 on your +machine. If it cannot be found, CMake will attempt to download Catch2 from its GitHub repository. + + +Installation guide (Ubuntu) +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: shell + + git clone https://github.com/catchorg/Catch2.git # Clone Catch2 repository + + cd Catch2 # go inside the new directory + + cmake -Bbuild -H. -DBUILD_TESTING=OFF # Create install target + + sudo cmake --build build/ --target install # Build and install + + +Build instructions +------------------ + +By default, CMake will not create test targets nor look for Catch2. To tell CMake to generate them, you +need to set the CMake option ``BUILD_TESTS`` to ``YES``. + + +.. admonition:: Example + + The following will tell CMake to create targets for tests. + + .. code-block:: + + cmake -DBUILD_TESTS=YES .. + + For instance, we can now build all the existing tests + + .. code-block:: + + make tests + + and run them. + + .. code-block:: + + ./tests/tests + +Code coverage options +--------------------- + +Code coverage is done via ``gcov``. + +If you want to active code coverage options, you shall set the CMake option ``WITH_TEST_COVERAGE`` to ``YES``. +Note that this only has an effect when ``BUILD_TESTS`` is also set to ``YES``. + +.. admonition:: Example + + The following command will tell CMake to generate targets for tests with code coverage options. + + .. code-block:: + + cmake -DBUILD_TESTS=YES -DWITH_CODE_COVERAGE=YES .. + + Then, you should build and run the tests. + + .. code-block:: + + make tests && ./tests/tests + + Once you are there, you may generate a report to a file called ``coverage.info`` by using ``gcov``. + + .. code-block:: + + lcov --directory . --capture --output-file coverage.info + +Also note that this forces ``g++`` to be used for compiling. + +.. tip:: + + Code coverage reports are also automatically generated at every push action on idol's GitHub repository and + are available on `codecov `_. diff --git a/_sources/examples/facility-location-problem.rst.txt b/_sources/examples/facility-location-problem.rst.txt new file mode 100644 index 00000000..ebd29f63 --- /dev/null +++ b/_sources/examples/facility-location-problem.rst.txt @@ -0,0 +1,6 @@ +Facility Location Problem / Branch-and-Bound +============================================ + + +.. literalinclude:: ../../examples/facility-location-problem/main.cpp + :language: cpp diff --git a/_sources/examples/generalized-assignment-problem.rst.txt b/_sources/examples/generalized-assignment-problem.rst.txt new file mode 100644 index 00000000..b48f2d98 --- /dev/null +++ b/_sources/examples/generalized-assignment-problem.rst.txt @@ -0,0 +1,5 @@ +Generalized Assignment Problem / Branch-and-Price +================================================= + +.. literalinclude:: ../../examples/generalized-assignment-problem/main.cpp + :language: cpp diff --git a/_sources/examples/index.rst.txt b/_sources/examples/index.rst.txt new file mode 100644 index 00000000..91935202 --- /dev/null +++ b/_sources/examples/index.rst.txt @@ -0,0 +1,14 @@ +.. _examples: + +Examples +======== + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 2 + + knapsack-problem + facility-location-problem + generalized-assignment-problem \ No newline at end of file diff --git a/_sources/examples/knapsack-problem.rst.txt b/_sources/examples/knapsack-problem.rst.txt new file mode 100644 index 00000000..3a2f4187 --- /dev/null +++ b/_sources/examples/knapsack-problem.rst.txt @@ -0,0 +1,5 @@ +Knapsack Problem / Gurobi +========================= + +.. literalinclude:: ../../examples/knapsack-problem/main.cpp + :language: cpp diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..1410bdfa --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,151 @@ +Welcome to idol! +================ + +.. image:: https://img.shields.io/github/license/hlefebvr/idol +.. image:: https://img.shields.io/github/v/tag/hlefebvr/idol?label=version +.. image:: https://img.shields.io/github/actions/workflow/status/hlefebvr/idol/cmake.yml?branch=main +.. image:: https://img.shields.io/github/issues-raw/hlefebvr/idol +.. image:: https://www.repostatus.org/badges/latest/wip.svg +.. image:: https://codecov.io/github/hlefebvr/idol/branch/main/graph/badge.svg?token=BWMH5522QP)](https://app.codecov.io/gh/hlefebvr/idol + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + +Idol is a C++ library for implementing complex decomposition algorithms for +mathematical optimization. + +Its main goal is to ease the development of new mathematical optimization techniques to +solve complex optimization problems. It offers a user-friendly interface to build new algorithms +on top of state-of-the-art methods like Dantzig-Wolfe decomposition, Benders decomposition or +column-and-constraint generation. + +New to idol? +------------ + +If you are new to idol, I advise you to visit our :ref:`installation guideline `. +In particular, have a look at the :ref:`local installation guideline `. +It is the easiest installation process one could think of since it automatically downloads the latest version of idol and +installs it in a local folder. It's really a mater of seconds before you can start using idol. + +.. admonition:: Example + + Idol has a user-friendly interface which should look natural to people working in optimization. For instance, + here is how one solves a Knapsack Problem using the `Gurobi `_ solver. + + .. code:: cpp + + using namespace idol; + + const unsigned int n_items = 5; + const double[] profit = { 40., 50., 100., 95., 30., }; + const double[] weight = { 2., 3.14, 1.98, 5., 3., }; + const double capacity = 10.; + + Env env; + + Model model(env); + + auto x = model.add_vars(Dim<1>(n_items), 0., 1., Binary, "x"); + + model.add_ctr(idol_Sum(j, Range(n_items), weight[j] * x[j]) <= capacity); + + model.set_obj_expr(idol_Sum(j, Range(n_items), -profits[j] * x[j]); + + model.use(Gurobi()); + + model.optimize(); + +If you want to learn more about idol's modeling interface, be sure to visit :ref:`beginner tutorials `. + +If you are more experienced, you may want to have a look at our :ref:`decomposition methods tutorials `. + +Is this a MIP solver? +--------------------- + +The idol library is not a MIP solver in itself. Indeed, it typically needs to call external +solvers (e.g., `GLPK `_ or `Gurobi `_) +as a sub-routine of more complex algorithmic schemes (e.g., column generation). +The idea is to work hand in hand with existing fine-tuned and well-engineered optimization +softwares to enhance their possibilities to solve e.g., larger problems or problems which +cannot directly be modeled as MIPs (e.g., :math:`\Sigma_i^P`-hard problems). + +Each subproblem is then solved by an external and dedicated solver. +Currently, the following external solvers can be interfaced: + +* `Gurobi `_; +* `Mosek `_; +* `GLPK `_. + +Current features +---------------- + +.. warning:: + + Handling quadratic expressions is an experimental feature and extreme care should be taken if used. + +Interfacing external optimization solvers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The idol library can be used to interface external solvers like `GLPK `_ +or `Gurobi `_ to solve standalone MI(N)LPs. It offers a unified and common +interface to every solver including standard parameters and branch-and-bound callbacks. +Thus, you can write your code once and test it with different solvers! + +Generic Branch-and-Bound algorithms +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Idol allows its user to create custom branch-and-bound scheme very easily where almost everything can be tweaked. + +* *Node agnostic implementation*. The branch-and-bound algorithm can work with any node type as long as the user properly + defines how nodes must be updated. A default node type is already implemented for classical variable branching. This + node type can also be inherited, e.g., to enrich the information carried out from each parent node to its children. +* *Customizable branching rule*. The default branching rules include: most-infeasible rule. +* *Customizable node selection rule*. The default node selection rules include: best-bound, worst-bound, depth-first, breadth-first. +* *Callbacks*. The user can specify its own callback to locally or globally modify a node's problem, submit heuristic solutions, + or influence the execution of the overall algorithm. +* *Branch-and-bound with phases*. Independently on any of the above settings, the B&B algorithm supports sub-trees exploration + to reach valid solutions to the original problem as quick as possible. + +**Features to come/desired features** + +* *Parallelization of the algorithm*. +* *New branching rules*: pseudo-cost, strong-branching and reliability branching. +* *Default cutting planes*. + +Generic Column Generation and Dantzig-Wolfe decomposition +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Idol can be used to build and custom column-generation algorithms with the following features. + +* *Infeasible master problem procedures*. Idol can handle an infeasible master problem by resorting to Farkas pricing or + by adding artificial variables to the original problem (note that if this fails, idol will then switch to pure phase I + so as to exactly prove infeasibility). +* *Automatic pool clean up*. If the master problem contains too many variables, they can be automatically removed. This can be + all controlled by user parameters. +* *Stabilization via dual price smoothing*. The column generation procedure can be stabilized using dual price smoothing + controlled by user inputs. +* *Parallel pricing*. Each pricing problem can be solved in parallel by means of a single parameter. +* *Nested column generation*. A key idea of idol is that every optimizer is seen as a black-box to solve a given optimization model. + As such, a column-generation algorithm can easily be "plugged in" any algorithmic phase. For instance, solving the pricing of + a column-generation algorithm can be done by yet another column-generation algorithm. + +**Features to come/desired features** + +* *Handling identical sub-systems*. +* *Ryan-and-Foster* branching rule. + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 2 + + self + installation/index + tutorials/index + examples/index + api/index + developer_guide/index + +* :ref:`genindex` diff --git a/_sources/installation/global_installation.rst.txt b/_sources/installation/global_installation.rst.txt new file mode 100644 index 00000000..c5b49950 --- /dev/null +++ b/_sources/installation/global_installation.rst.txt @@ -0,0 +1,96 @@ +.. _basics_installation: + +.. role:: bash(code) + :language: bash + +Global installation +=================== + +The installation process is managed by the CMake build system. You will therefore need to have it +installed on your computer (at least version 3.22 is required but it may work with earlier versions). + +.. hint:: + + If you simply want to "try out" idol, we advise you to opt for a :ref:`local installation `. + +Creating the :bash:`install` target +----------------------------------- + +The first step is to create a :bash:`build` directory. +This is where the library will be compiled before being installed (i.e., copied) on your system. + +.. code-block:: bash + + mkdir build + cd build + +Then, you should call CMake in order to create some targets (in particular, the :bash:`idol` and the :bash:`install` target). +To do so, we recommend you to specify some options in order to link with external solvers that you may have +already installed on your computer. + +.. attention:: + + By default, (i.e., if no options are given to CMake) idol will not be linked with any external solver. + See the last section on this page for more details. + +.. code-block:: bash + + cmake .. + +.. admonition:: Example for Gurobi + + Here is an example of possible CMake command which will create the necessary targets for installing idol with Gurobi. + + .. code-block:: bash + + cmake -DUSE_GUROBI=YES .. + + Note that this example assumes that your environment variable :bash:`GUROBI_HOME` has been correctly configured + (see `this official Gurobi page `_). + +Building +-------- + +Now that targets have been created, we can build idol by running the following command. + +.. code-block:: bash + + make idol + +This will compile the idol C++ library and make it ready to be installed (i.e., copied) on your computer. + +Installing +---------- + +If you want to install idol on your computer, run the following command. + +.. code-block:: bash + + sudo make install + +.. hint:: + + Here, you need superuser rights in order to install idol globally. If you want to install idol on a specific folder, + you may also use the :bash:`CMAKE_INSTALL_PREFIX` CMake option to change the destination folder. + + .. code-block:: bash + + cmake -CMAKE_INSTALL_PREFIX=/my/custom/installation/folder .. + make install + +Linking with external solvers +------------------------------ + +To link idol with external solvers, specific options need to be passed to CMake. +A detailed list of such options can be found on :ref:`this page `. + +.. hint:: + + Here is a quick guide on how to pass options to CMake. Say you want + to pass the option :bash:`MY_OPTION` to CMake with the value :bash:`MY_VALUE`. Then, you should run the following + command (inside :bash:`build/`). + + .. code-block:: bash + + cmake -DMY_OPTION=MY_VALUE .. + diff --git a/_sources/installation/index.rst.txt b/_sources/installation/index.rst.txt new file mode 100644 index 00000000..9a5bdc51 --- /dev/null +++ b/_sources/installation/index.rst.txt @@ -0,0 +1,28 @@ +.. _installation: + +Installation guidelines +======================= + +Welcome to idol! You are here on the installation guidelines. + +Installation types +------------------ + +There are two ways of installing idol: + +* :ref:`A global installation ` installs idol globally on your computer (e.g., in `/usr/lib`). +* :ref:`A local installation ` lets CMake automatically download and manage idol's installation on a sub-folder of your + CMake project. + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 1 + :glob: + + global_installation + options + linking + local_installation + mosek-and-socp diff --git a/_sources/installation/linking.rst.txt b/_sources/installation/linking.rst.txt new file mode 100644 index 00000000..d0b5e64d --- /dev/null +++ b/_sources/installation/linking.rst.txt @@ -0,0 +1,48 @@ +.. _linking: + +.. role:: bash(code) + :language: bash + +Linking your C++ project with idol +================================== + +Idol is built with and for CMake (even though it is still possible to link using :bash:`Makefile` or pure :bash:`gcc, clang, ...`). + +If you are using CMake, here is a minimal :bash:`CMakeLists.txt` which creates a new executable target linked with idol. + +.. code-block:: cmake + + cmake_minimum_required(VERSION 3.22) + project(my_project) + + set(CMAKE_CXX_STANDARD 17) + + add_executable(my_target main.cpp) + + find_package(idol REQUIRED) ## Here, we search for the installed library idol + + target_link_library(my_target PUBLIC idol) ## Here, we ask CMake to link with idol + +Note that this will also work when idol is linked with an external solver like Gurobi, Mosek or GLPK. + +The following :bash:`main.cpp` is then a minimal example. + +.. code-block:: cpp + + #include + #include + + int main(int t_argc, const char** t_argv) { + + Env env; + + Model model(env); + + Var x(env, 0., 1., Binary, "x"); + model.add(x); + + // ... + + return 0; + } + diff --git a/_sources/installation/local_installation.rst.txt b/_sources/installation/local_installation.rst.txt new file mode 100644 index 00000000..fcd629ca --- /dev/null +++ b/_sources/installation/local_installation.rst.txt @@ -0,0 +1,87 @@ +.. _installation_local: + +.. role:: bash(code) + :language: bash + +Local installation +================== + +This page is dedicated to local installations of idol. This is the easiest way to get your project working with +idol without installing it globally on your computer. + +.. hint:: + + If you want to install idol globally, please read our :ref:`global installation guide `. + +The idea behind local installations is to let CMake download and manage the installation of idol in a sub-folder of your +project. This is done by using the CMake :bash:`FetchContent_*` directives. + +Using this method, you can also explicitly specify the desired version of idol which you want to use. + +We provide here a minimal :bash:`CMakeLists.txt`. + +.. code-block:: cmake + + cmake_minimum_required(VERSION 3.23) + project(my_project) + + set(CMAKE_CXX_STANDARD 17) + + include(FetchContent) + + # Define your CMake options here + set(USE_GUROBI YES) # For instance, tell CMake to link idol with Gurobi + + # Tell CMake which version of idol you desire + FetchContent_Declare( + idol + GIT_REPOSITORY https://github.com/hlefebvr/idol.git + GIT_TAG origin/main # You may also use a tag, e.g., v0.2.4-alpha + ) + + # Ask CMake to download idol and install it to a sub-folder + FetchContent_MakeAvailable(idol) + + # Normal executable definition + add_executable(my_target main.cpp) + + # Link your CMake target with idol as classically done + target_link_libraries(my_target PUBLIC idol) + +.. hint:: + + As you have seen, some options must be set in CMake in order to tell it to link idol with external solvers. + This is done with the :bash:`set` CMake function. Say you want + to set the option :bash:`MY_OPTION` to the value :bash:`MY_VALUE`. Then, you should add the following + function call. + + .. code-block:: bash + + set(MY_OPTION MY_VALUE) + +.. seealso:: + + A list of all possible options which can be set can be found on the :ref:`global installation guide `. + In particular, you will find options to link with Gurobi, Mosek and GLPK. + +Then, here is a starting :bash:`main.cpp`. + +.. code-block:: cpp + + #include + #include // Note that we do not include + + int main(int t_argc, const char** t_argv) { + + Env env; + + Model model(env); + + Var x(env, 0., 1., Binary, "x"); + model.add(x); + + // ... + + return 0; + } + diff --git a/_sources/installation/mosek-and-socp.rst.txt b/_sources/installation/mosek-and-socp.rst.txt new file mode 100644 index 00000000..a271e9f8 --- /dev/null +++ b/_sources/installation/mosek-and-socp.rst.txt @@ -0,0 +1,56 @@ +.. _mosek_and_socp: + +Using idol with Eigen +===================== + +This page elaborates on some operations made by idol which require usage of the `Eigen `_ +C++ library. + +We first explain how to link idol with Eigen, then discuss several operations which require the use of Eigen. + +.. warning:: + + Calling functionalities which require Eigen without have linked idol with Eigen will result in an Exception being + thrown. + +"Linking" with Eigen +-------------------- + +Eigen is header-only C++ library. In that sense, no installation is required. One only needs to download Eigen's source +code in order to make their header files accessible. + +Then, all you have to do in order to "link" with Eigen is to set the ``USE_EIGEN`` CMake +option to ``YES``. + +.. admonition:: Example + + This example shows you have to create an install target for idol with Mosek and Eigen. + + .. code-block:: + + cmake -DUSE_MOSEK=YES -DUSE_EIGEN=YES .. + + +Interfacing Mosek for solving QPs and SOCPs +------------------------------------------- + +The interface of idol +is based on functional expressions, e.g., like + +.. math:: + + \sum_{j=1}^n a_{ij}x_j + \sum_{j=1}^n\sum_{k=1}^n q_{jk}^ix_jx_k \le b_i. + +The C++ Mosek interface, instead, is based on conic expressions, e.g., like + +.. math:: + + (x_0, \textbf{Fx}) \in \mathcal Q^n, + +where :math:`\mathcal Q^n` denotes the second-order cone and :math:`F` is some matrix related to :math:`Q^i`. + +In order to compute :math:`F` and thus, to make the conversion between the Mosek interface and +the idol interface, one needs to compute an eigen value decomposition. + +This is automatically done by idol using `Eigen `_. + diff --git a/_sources/installation/options.rst.txt b/_sources/installation/options.rst.txt new file mode 100644 index 00000000..df130753 --- /dev/null +++ b/_sources/installation/options.rst.txt @@ -0,0 +1,125 @@ +.. _cmake_options: + +.. role:: bash(code) + :language: bash + +List of CMake options +===================== + +Linking with external solvers +----------------------------- + +For Gurobi (commercial solver) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To link with Gurobi, you will need to pass the :bash:`USE_GUROBI` CMake option with value :bash:`YES`. + +By default, CMake will look for Gurobi inside the folder indicated by the environment variable :bash:`GUROBI_HOME` +(see `this official Gurobi page `_). +Note that it is also possible to pass the CMake option :bash:`GUROBI_DIR=/path/to/gurobi/install/dir` in order to specify +another directory to look for Gurobi. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with Gurobi. + + .. code-block:: bash + + cmake -DUSE_GUROBI=YES -DGUROBI_DIR=/path/to/gurobi/install/dir .. + + If you are doing a *local installation*, then the same can be achieved as follows. + + .. code-block:: bash + + set(USE_GUROBI YES) + set(GUROBI_DIR /path/to/gurobi/install/dir) + + +For Mosek (commercial solver) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To link with Mosek, you will need to pass the :bash:`USE_MOSEK` CMake option with value :bash:`YES`. + +By default, CMake will look for Mosek inside the folder indicated by the environment variable :bash:`MOSEK_HOME`. +Note that it is also possible to pass the CMake option :bash:`MOSEK_DIR=/path/to/mosek/install/dir` in order to specify +another directory to look for Mosek. + +Note that :bash:`MOSEK_HOME` (or equivalently :bash:`MOSEK_DIR`) should point to the Mosek installation folder where +folders :bash:`h` and :bash:`bin` can be found. For instance, :bash:`MOSEK_HOME=/home//mosek/10.0/tools/platform/linux64x86`. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with Mosek. + + .. code-block:: bash + + cmake -DUSE_MOSEK=YES -DMOSEK_DIR=/path/to/mosek/install/dir .. + + If you are doing a *local installation*, then the same can be achieved as follows. + + .. code-block:: bash + + set(USE_MOSEK YES) + set(MOSEK_DIR /path/to/mosek/install/dir) + +.. attention:: + + If you intend to use Mosek for solving QPs or SOCPs, please :ref:`read this `. + +For GLPK (open-source solver) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To link with GLPK, you will need to pass the :bash:`USE_GLPK` CMake option with value :bash:`YES`. + +By default, CMake will look for GLPK inside the folder indicated by the environment variable :bash:`GLPK_HOME` as well +as in the default installation folders :bash:`/usr/include` and :bash:`/usr/lib`. +Note that it is also possible to pass the CMake option :bash:`GLPK_DIR=/path/to/glpk/install/dir` in order to specify +another directory to look for GLPK. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with GLPK. + + .. code-block:: bash + + cmake -DUSE_GLPK=YES -GLPK_DIR=/path/to/glpk/install/dir .. + + If you are doing a *local installation*, then the same can be achieved as follows. + + .. code-block:: bash + + set(USE_GLPK YES) + set(GLPK_DIR /path/to/glpk/install/dir) + +Building examples +----------------- + +:ref:`Examples :` can be found at the root level of the idol repository, inside the directory ``examples``. + +By default, CMake will not generate targets to build these example. To tell CMake to generate them, you +need to set the CMake option ``BUILD_EXAMPLE`` to ``YES``. + +.. admonition:: Example + + The following will tell CMake to create targets for examples. + + .. code-block:: + + cmake -DBUILD_EXAMPLES=YES .. + + For instance, we can now build the Knapsack Problem example, + + .. code-block:: + + make ex_knapsack_problem + + and run it. + + .. code-block:: + + ./examples/knapsack-problem/ex_knapsack_problem + +Building unit and integration tests +----------------------------------- + +To build tests for idol, please refer to this :ref:`developer page `. \ No newline at end of file diff --git a/_sources/tutorials/decomposition_methods/benders.rst.txt b/_sources/tutorials/decomposition_methods/benders.rst.txt new file mode 100644 index 00000000..e7fbc3c0 --- /dev/null +++ b/_sources/tutorials/decomposition_methods/benders.rst.txt @@ -0,0 +1,153 @@ +.. _decomposition_benders: + +.. role:: cpp(code) + :language: cpp + +Benders Decomposition (with LazyCutCallback) +============================================ + +In this section, we will show how to use the LazyCutCallback callback to implement a simple Benders Decomposition +algorithm. + +.. hint:: + + This tutorial regards the `advanced topic` of Benders Decomposition. + Rudimentary notions in the following subjects are recommended: + + - `Benders Decomposition `_ + - `Linear Programming duality `_ + +Mathematical Model +------------------ + +Original formulation +^^^^^^^^^^^^^^^^^^^^ + +We will base our example on the following model taken from `Blanco, V., (2016), Benders Decomposition, MINLP School: Theory +and Applications `_. + +.. math:: + + \begin{align} + \min_{x,y} \ & 2 x_0 + 3x_1 + 2y \\ + \text{s.t.} \ & x_0 + 2x_1 + y \ge 3, \\ + & 2x_0 - x_1 + 3y \ge 4, \\ + & x,y\ge 0. + \end{align} + +Benders reformulation +^^^^^^^^^^^^^^^^^^^^^ + +We apply a Benders reformulation to this problem by considering :math:`y` as the complicating variable. +The Benders reformulation reads: + +.. math:: + + \begin{align} + \min_{y,z} \ & 2y + z \\ + \text{s.t.} \ & z \ge \lambda_1 ( 3 - y ) + \lambda_2(4 - 3y) \quad \lambda \in \Lambda, \\ + & z \ge 0, + \end{align} + +with :math:`\Lambda` defined as the set of all :math:`\lambda\in\mathbb R^2_+` such that + +.. math:: + + \begin{align} + & \lambda_0 + 2 \lambda_1 \le 2, \\ + & 2\lambda_0 - \lambda_1 \le 3. + \end{align} + +Implementation +-------------- + +We are now ready to implement our decomposition method. We will need to define three different things: + +- the master problem; +- the dual space :math:`\Lambda`; +- the shape of the cuts to be added. + +The master problem +^^^^^^^^^^^^^^^^^^ + +The master problem is created like any optimization model; see our :ref:`Modeling tutorial `. + +.. code:: + + Env env; + + Model master(env); + + auto y = master.add_var(0, Inf, Continuous, "y"); + auto z = master.add_var(0, Inf, Continuous, "z"); + + master.set_obj_expr(2 * y + z); + +The dual space :math:`\Lambda` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To provide the description of the dual space :math:`\Lambda`, we use another Model object which will contain the variables +and constraints defining :math:`\Lambda`. The objective function is not used and can be left to zero. + +.. code:: + + Model dual_space(env); + + auto lambda = dual_space.add_vars(Dim<1>(2), 0, Inf, Continuous, "lambda"); + + dual_space.add_ctr(lambda[0] + 2 + lambda[1] <= 2); + dual_space.add_ctr(2 * lambda[0] - lambda[1] <= 3); + +The cuts to be added +^^^^^^^^^^^^^^^^^^^^ + +Finally, we need to define the cuts to be added to the master problem for a given dual variable :math:`\lambda`. +The cuts are always expressed in the "master space". What we mean by this is that, here, :math:`y` should be a *variable* +in the constraint while :math:`\lambda` should be a *constant*. + +This is done as follows. + +.. code:: + + auto benders_cut = z >= !lambda[0] * (3 - y) + !lambda[1] * (4 - 3 * y); + +See how the lambda variables are "turned into" constants by prepending them with an "!" symbol. + +Solving the model +----------------- + +In this section, we solve our model using GLPK and the LazyCutCallback from idol. + +This is done as follows. + +.. code:: + + master.use( + GLPK() + .with_callback( + LazyCutCallback(dual_space, benders_cut) + .with_separation_optimizer(GLPK()) + ) + ); + + master.optimize(); + + std::cout << save_primal(master) << std::endl; + +See how we specified also an optimizer for solving the separation problem. Here, we use GLPK. + +.. warning:: + + If you are using Gurobi with the LazyCutCallback, make sure to call the :code:`Gurobi::with_lazy_cuts` method. + This is necessary to turn off some parameters of Gurobi which would otherwise lead to wrong solutions. + + .. code:: + + master.use( + Gurobi() + .with_lazy_cuts(true) + .with_callback( + LazyCutCallback(dual_space, benders_cut) + .with_separation_optimizer(Gurobi()) + ) + ); diff --git a/_sources/tutorials/decomposition_methods/dantzig_wolfe.rst.txt b/_sources/tutorials/decomposition_methods/dantzig_wolfe.rst.txt new file mode 100644 index 00000000..8aa3066f --- /dev/null +++ b/_sources/tutorials/decomposition_methods/dantzig_wolfe.rst.txt @@ -0,0 +1,284 @@ +.. _decomposition_dantzig_wolfe: + +.. role:: cpp(code) + :language: cpp + +Dantzig-Wolfe Decomposition (Automatic) +======================================= + +In this section, we will show how to use the Branch-and-Price solver to solve the *Generalized Assignment Problem* (GAP) +using an external solver to solve each sub-problem. + +.. hint:: + + This tutorial regards the `advanced topic` of Column Generation and Dantzig-Wolfe decomposition. + Rudimentary notions in the following subjects are recommended: + + - `Column Generation and Branch-and-Price algorithms `_ + - `Dantzig-Wolfe decomposition `_ + - `Generalized Assignment Problem `_. + +.. seealso:: + + A `Benchmark on Generalized Assignemnt Problem `_ is + available. + This includes a comparison with `Coluna.jl `_. + +Mathematical models +------------------- + +In this section, we assume that the reader is familiar with GAP. +Let :math:`m` be a given of agents and let :math:`n` be a set of tasks to perform. Let :math:`c_{ij}` be the cost for +assigning task :math:`j` to agent :math:`i`, :math:`w_{ij}` be the resource consumption of task :math:`j` when performed +by agent :math:`i` and let :math:`t_i` be the resource capacity of agent :math:`i`. + +Direct model +^^^^^^^^^^^^ + +The Generalized Assignment Problem (GAP) can be modeled as + +.. math:: + + \min \ & \sum_{i=1}^m\sum_{j=1}^n c_{ij} x_{ij} \\ + \textrm{s.t. } & \sum_{j=1}^n w_{ij} x_{ij} \le t_i & i=1,...,m \\ + & \sum_{i=1}^m x_{ij} = 1 & j = 1,...,n \\ + & x_{ij}\in\{0,1\} & i=1,...,m, j=1,...,n + +Here, variable :math:`x_{ij}` encodes the assignment decision and equals 1 if and only if task :math:`j` is assigned to +agent :math:`i`. + +Dantzig-Wolfe reformulation +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Let us enumerate the list of all feasible assignments, i.e., let + +.. math:: + + \{\bar x^e_{ij} \}_{e\in E} = \{ x \in \{ 0,1 \}^{mn} : \sum_{j=1}^n w_{ij}x_{ij} \le t_i \quad i=1,...,m \}, + +where :math:`E` denotes a list for their indices. The Dantzig-Wolfe reformulation of GAP reads + +.. math:: + + \min \ & \sum_{e\in E} \lambda_e\left( \sum_{i=1}^m\sum_{j=1}^n c_{ij}\bar x_{ij}^e \right) \\ + \textrm{s.t. } & \sum_{e\in E} \lambda_e \left( \sum_{i=1}^m \bar x_{ij}^e \right) = 1 & j=1,...,n \\ + & \sum_{e\in E} \lambda_e = 1 \\ + & \lambda_e \in \{ 0, 1 \} & \forall e\in E + +Though this model contains an exponential number of variables (i.e., columns) it can be solved efficiently using +Column Generation and Branch-and-price. In such case, the pricing problem is a Knapsack Problem. + +Automatic reformulation in idol +------------------------------- + +The simplest way to solve a problem using column generation and idol is through its automatic reformulation feature. +To use this, one simply needs to give the *original space* formulation of the problem (here, the *so-called* direct model) +and to indicate which constraints should be moved to the pricing problem (here, the knapsack constraints). + +Implementing the direct model with idol +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To read an instance for GAP, we first need to include the header file located in :code:`"idol/problems/generalized-assignment-problem/GAP_Instance.h"`. +This will allow us to use idol's instance parser for GAP. +Assuming that the instance file is named :code:`instance.txt`, it can be loaded as follows. + +.. code-block:: cpp + + const auto instance = Problems::GAP::read_instance("instance.txt"); + + const unsigned int n_agents = instance.n_agents(); + const unsigned int n_jobs = instance.n_jobs(); + +We are now ready to model our problem (for more details, refer to :ref:`this tutorial on modeling `) + +.. code-block:: cpp + + // Create optimization environment + Env env; + + // Create model + Model model(env); + + // Create assignment variables (x_ij binaries) + auto x = model.add_vars(Dim<2>(n_agents, n_jobs), 0., 1., Binary, "x"); + + // Create knapsack constraints (i.e., capacity constraints) + for (unsigned int i = 0 ; i < n_agents ; ++i) { + model.add_ctr(idol_Sum(j, Range(n_jobs), instance.resource_consumption(i, j) * x[i][j]) <= instance.capacity(i), "capacity_" + std::to_string(i)); + } + + // Create assignment constraints + for (unsigned int j = 0 ; j < n_jobs ; ++j) { + model.add(idol_Sum(i, Range(n_agents), x[i][j]) == 1, "assignment_" + std::to_string(j)); + } + + // Set the objective function + model.set_obj_expr(idol_Sum(i, Range(n_agents), idol_Sum(j, Range(n_jobs), instance.cost(i, j) * x[i][j]))); + +Giving decomposition instructions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We are now at the crucial step of indicating which constraint should be moved to the pricing problem. In idol, this is done by using +*annotations*. Annotations are additional information associated to an optimization object (e.g., a constraint or a variable). +Note that annotations are global, i.e., they do not relate to a given optimization model. + +Every annotation is formed with two template arguments: an optimization object type and a value type. Here, we want to add +annotations to constraints, thus, the optimization object type must be :code:`Ctr`. The value type can typically be any desired +type. Here, however, the Dantzig-Wolfe decomposition needs an annotation corresponding to an :code:`unsigned int`. Thus, we create +the annotation as follows. + +.. code-block:: cpp + + Annotation decomposition(env, "decomposition", MasterId); + +Here, we pass three arguments to the constructor of :code:`Annotation`. First, we pass the optimization +environment which will store the annotation. Then, a name (mandatory) is given to the annotation, here, "decomposition". +Finally, a default value is given and equals "MasterId". This will tell idol that constraints which have not been annotated +should remain in the master problem. + +Now, observe how the annotation is applied to the capacity constraints. + +.. code:: cpp + + for (unsigned int i = 0 ; i < n_agents ; ++i) { + Ctr capacity = model.add_ctr(idol_Sum(j, Range(n_jobs), instance.resource_consumption(i, j) * x[i][j]) <= instance.capacity(i), "capacity_" + std::to_string(i)); + capacity.set(decomposition, i); // <-- Annotating the capacity constraint + } + +Here, the first capacity constraint is moved to the first pricing problem (id: 0), +the second constraint to the second pricing problem (id: 1), and so on. + +Note that another decomposition would be materialized as follows. + + +.. code:: cpp + + for (unsigned int i = 0 ; i < n_agents ; ++i) { + Ctr capacity = model.add_ctr(idol_Sum(j, Range(n_jobs), instance.resource_consumption(i, j) * x[i][j]) <= instance.capacity(i), "capacity_" + std::to_string(i)); + capacity.set(decomposition, 0); // <-- Annotating the capacity constraint + } + +Here, all the knapsack constraints are moved to the same pricing problem (id: 0). + +Decomposing and solving the model +--------------------------------- + +Now that the desired decomposition has been specified, we can specify the desired optimizer to solve our model. +Here, we want to solve our problem using a branch-and-price algorithm, i.e., a branch-and-bound algorithm where each relaxation +in the branch-and-bound tree is solved by a Dantzig-Wolfe decomposition. This is done as follows. + +.. code:: cpp + + model.use( + /* The overall algorithm is a branch-and-bound */ + BranchAndBound() + + /* Each node is solved with a Dantzig-Wolfe decomposition algorithm */ + .with_node_optimizer( + + /* The annotation "decomposition" is used to automatically decompose the problem */ + DantzigWolfeDecomposition(decomposition1) + + /* The master problem is solved using Gurobi */ + .with_master_optimizer(Gurobi::ContinuousRelaxation()) + + /* Each pricing problem is solved by Gurobi as well */ + .with_pricing_optimizer(Gurobi()) + + ) + + /* Variables are selected for branching using the most-infeasible rule */ + .with_branching_rule(MostInfeasible()) + + /* Nodes are selected using the best-bound rule */ + .with_node_selection_rule(BestBound() + + /* The algorithm will run with a time limit of 3600 */ + .with_time_limit(3600) + + ); + +Then, one can simply call the :code:`Model::optimize` method as follows. + +.. code:: cpp + + model.optimize(); + + +That's it! The problem is being solved by column generation, and possibly branching on fractional variables. + + +.. hint:: + + Note that it is possible to obtain logs using the `with_log_level` method on the desired optimizer. + For instance, one may want to have + logs for the branch-and-bound optimizer. Then, one should do as follows. + + .. code:: cpp + + model.use( + BranchAndBound() + + /* ... omitting identical details */ + + .with_log_level(Info, Blue) + ); + +The rest remains unchanged and one can use :code:`Model::optimize` to solve the problem and retrieve the solution +through methods like :code:`Model::get_status` and :code:`Model::get_var_primal`. + +.. admonition:: Example + + Here, we can solve our model using a Dantzig-Wolfe decomposition. + + .. code-block:: + + model.optimize(); + + std::cout << save_primal(model) << std::endl; + + This will produce the following output (e.g.). + + .. code-block:: text + + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [branch-and-bound] + [2023-04-07 13:45:44] [info] [branch-and-bound] + [2023-04-07 13:45:44] [info] [branch-and-bound] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + + +----------------------- + | Status: Optimal + | Reason: Proved + | ObjVal: -233.00 + | Values: + | x_1_7 = 1.00 + | x_2_0 = 1.00 + | x_2_1 = 1.00 + | x_1_4 = 1.00 + | x_1_5 = 1.00 + | x_0_6 = 1.00 + | x_0_2 = 1.00 + | x_0_3 = 1.00 + +----------------------- diff --git a/_sources/tutorials/decomposition_methods/index.rst.txt b/_sources/tutorials/decomposition_methods/index.rst.txt new file mode 100644 index 00000000..997bd205 --- /dev/null +++ b/_sources/tutorials/decomposition_methods/index.rst.txt @@ -0,0 +1,11 @@ +.. _decomposition: + +Decomposition methods +===================== + +.. toctree:: + :maxdepth: 1 + :glob: + + dantzig_wolfe + benders diff --git a/_sources/tutorials/getting_started/index.rst.txt b/_sources/tutorials/getting_started/index.rst.txt new file mode 100644 index 00000000..97e5ff89 --- /dev/null +++ b/_sources/tutorials/getting_started/index.rst.txt @@ -0,0 +1,11 @@ +.. _basics: + +Getting started +=============== + +.. toctree:: + :maxdepth: 1 + :glob: + + modeling_optimization_problems + using_an_external_solver diff --git a/_sources/tutorials/getting_started/modeling_optimization_problems.rst.txt b/_sources/tutorials/getting_started/modeling_optimization_problems.rst.txt new file mode 100644 index 00000000..a1b79778 --- /dev/null +++ b/_sources/tutorials/getting_started/modeling_optimization_problems.rst.txt @@ -0,0 +1,218 @@ +.. _modeling_optimization_problems: + +.. role:: cpp(code) + :language: cpp + +Modeling optimization problems +============================== + +On this page, we discuss the very basic ideas of idol's modeling API. +All classes which are used for modeling an optimization problem can be accessed by including :code:`#include `. +Let's get started. + +.. warning:: + + The idol library can be found inside the :code:`idol` namespace, thus, be sure to add :code:`using namespace idol;` + where desired or to explicitly refer to classes using this namespace, e.g., by using :code:`idol::Model` instead of :code:`Model`. + +Env +--- + +Every optimization object (like variables and constraints) are managed by an "optimization environment". Essentially, +it is the environment that controls the death and lives of such objects. It is through the environment that idol +manages the different versions each optimization object may have during the execution of your program. + +Typically, only one environment should be used by your code, though it is possible to instantiate many environment (not advised). + +Environments are objects of the ``Env`` class and can be created as follows. + +.. code-block:: + + Env env; // Creates a new optimization environment. + +Model +----- + +The :cpp:`Model` class is used to represent an optimization model of the following form. + +.. math:: + + \begin{array}{lll} + \min\ & \displaystyle \sum_{j=1}^n c_jx_j + \sum_{j=1}^n\sum_{k=1}^n d_{jk}x_jx_k \\ + \textrm{s.t. } & \displaystyle \sum_{j=1}^n a_{ij}x_j + \sum_{j=1}^n\sum_{k=1}^n q^i_{jk}x_jx_k \le b_i & i=1,...,m \\ + & l_j \le x_j \le u_j & j=1,...,m \\ + & x_j\in\mathbb Z & j\in J_I + \end{array} + +Here, :math:`x_j` are the variables of this optimization problem while :math:`c_j, d_{jk}, a_{ij}` and :math:`q_{jk}^i` are given +input parameters for this model. Optionally, :math:`J_I\subseteq\{1,...,n\}` is a set of variable indices +whose value must be integral. + +Constructors of :cpp:`Model` can be used to create a new optimization model in idol. The most common takes a single argument +which is the optimization environment to be used. + +.. code-block:: cpp + + int main(int t_argc, const char** t_argv) { + + Env env; + + Model model(env); + + // The model has been created! + + return 0; + } + +Now, we can define optimization variables and constraints. + +Variables +--------- + +Any variable in idol is associated to at least one :cpp:`Model` object. Typically, exactly one. +We can easily create a new variable by using the constructor of the :cpp:`Var` class and add it to a model by calling the :cpp:`Model::add` method. +For instance, the following piece of code +will create a new variable, called "x", which is continuous and non-negative. + +.. code-block:: cpp + + Var x(env, 0., Inf, Continuous, "x"); + + model.add(x); // Variable x is added to the model + +A more straightforward way of creating variables is by directly calling the method ``add_var`` of the ``Model`` class. +For instance, the following piece of code is equivalent to the previous one. + +.. code-block:: cpp + + model.add_var(0, Inf, Continuous, "x"); + +Note that we did not need to repeat the environment since the model's environment is used by default. + +The idol library also offers simple ways for creating multiple variables at once. +For instance, one can call the :cpp:`Var::make_vector` function. This function requires +an extra parameter specifying the dimension of the new variable. For instance, the following code creates variables :math:`y_{ij}` +with :math:`i=1,...,K` and :math:`j=1,...,T`. + +.. code-block:: cpp + + auto y = Var::array(env, Dim<2>(K, T), 0., Inf, Continuous, "y"); + + model.add_array(y); // Variables y_ij are added to the model + + std::cout << y[0][0] << std::endl; // "y_0_0" + +Alternatively, one can use the ``Model::add_vars`` method. + +.. code-block:: cpp + + auto y= model.add_vars(Dim<2>(K, T), 0., Inf, Continuous, "y"); + + std::cout << y[0][0] << std::endl; // "y_0_0" + +Constraints +----------- + +Similarly to variables, constraints are easily created and added to a given ``Model``. + +Constraints can be created by calling the constructor of the :cpp:`Ctr` class and added to a model by means of :cpp:`Model::add`. +See for instance. + +.. code-block:: cpp + + Env env; + Model model(env); + + Var x_0(env, 0., Inf, Continuous, "x_0"); + Var x_1(env, 0., Inf, Continuous, "x_1"); + Ctr constraint(env, x_0 + x_1 >= 1); + + model.add(x_0); + model.add(x_1); + model.add(constraint); + +A more compact of this code is obtained by making use of the ``Model::add_vars`` and ``Model::add_ctr`` methods. + +.. code-block:: cpp + + Env env; + Model model(env); + + auto x = model.add_vars(Dim<1>(2), 0., Inf, Continuous, "x"); + auto constraint = model.add_ctr(x + y >= 1); + +As you can see, a constraint is created using the pattern :code:`{expression} {sign} {expression}` where + +* :code:`{sign}` is one of :code:`<=`, :code:`>=` and :code:`==`; +* :code:`{expression}` is an instance of :code:`Expr`. + +The :code:`Expr` class is used to represent a mathematical expression in idol. An expression is composed of three parts: + +* :code:`Expr::linear` will give you access to the linear part of the expression (it is an instance of ``LinExpr``); +* :code:`Expr::quadratic` will give you access to the quadratic part of the expression (it is an instance of ``QuadExpr``); +* :code:`Expr::constant` will return the constant (or offset) of the expression (it is an instance of ``Constant``). + +Typically, however, you will not really care about what composes an expression since an :code:`Expr` object can be created +quite naturally. See for instance the following code. + +.. code-block:: cpp + + Expr expr = 1 + 3 * x[0]; + expr += x[1]; + expr += x[0] + 2 * x[0] * x[1]; + + std::cout << expr << std::endl; // "1 + 4 * x[0] + 1 * x[1] + 2 * x[0] * x[1]" + +As mentioned, you can access parts of an expression as follows. + +.. code-block:: cpp + + for (const auto& [var, coefficient] : expr.linear()) { + std::cout << var << " is multiplied by " << coefficient << std::endl; + } + + /* + "x_0 is multiplied by 4" + "x_1 is multiplied by 1" + */ + +.. admonition:: About constants in expressions + + Without diving into too much detail, we should here precise that each constant multiplying a variable in an :cpp:`Expr` + can actually be composite (e.g., a coefficient in the expression may refer to external optimization variables whose + value is considered fixed in the current model). + + Fixing variables in an optimization problem can be achieved thanks to the ``!`` symbol. + + For instance, here is an expression where ``xi_0`` and ``xi_1`` are seen as parameters. + + .. code-block:: + + Expr expr = (1 + 2 * !xi_0) * x + 3 * !xi_1 * y; + + Here, ``1 + 2 * !xi_0`` is an instance of the ``Constant`` object and can be used as follows. + + .. code-block:: + + Constant constant = 1 + 2 * !xi_0; + + std::cout << constant.numerical() << std::endl; // output: 1 + + for (const auto& [param, coeff] : constant) { + std::cout << coeff << " * " << param << std::endl; // output: 2 * !xi_0 + } + +Objective function +------------------ + +The objective function of an optimization model can specified by the ``Model::set_obj_expr`` method. + +Here is an example which sets the objective function to :math:`-x_0 + 2 * x_1`; + +.. code-block:: + + model.set_obj_expr(-x_0 + 2 * x_1); + +In the following tutorial, we will dive into a more practical way to build expressions by considering the simple example +of the combinatorial Knapsack problem. We will also see how to call an external solver like Gurobi or GLPK using idol. +See you there! diff --git a/_sources/tutorials/getting_started/using_an_external_solver.rst.txt b/_sources/tutorials/getting_started/using_an_external_solver.rst.txt new file mode 100644 index 00000000..c2681429 --- /dev/null +++ b/_sources/tutorials/getting_started/using_an_external_solver.rst.txt @@ -0,0 +1,223 @@ +.. _using_an_external_solver: + +.. role:: cpp(code) + :language: cpp + +Using an external solver +======================== + +In this tutorial, we will see how to use an external optimization solver like GLPK or GLPK to solve +a small combinatorial problem. +The considered problem is the Knapsack Problem (see the `Knapsack Problem wikipedia page `_). + +Modeling +-------- + +The first step is to model our problem using idol. Recall the standard model for the knapsack problem: + +.. math:: + + \begin{array}{lll} + \max\ & \displaystyle \sum_{j=1}^n p_jx_j \\ + \textrm{s.t. } & \displaystyle \sum_{j=1}^n w_jx_j \le W \\ + & x_j \in \{ 0, 1 \} & j=1,...,n + \end{array} + +where :math:`n` denotes the number of items and for each item :math:`j\in\{1,...,n\}`, :math:`p_j` denotes its profit while +:math:`w_j` denotes its weight. Finally, we let :math:`W` denote the knapsack capacity. + +We will assume to have the following input data at hand. + +.. code-block:: cpp + + const unsigned int n = 5; // 5 items + const std::vector p = { 40., 50., 100., 95., 30. }; // profits + const std::vector w = { 2., 3.14, 1.98, 5., 3. }; // weights + const double W = 10; // capacity + +Then, using idol's modeling API contained in :cpp:`#include `, we can create our model easily. +We will first present a naive implementation using only the knowledge introduced in the previous tutorial. +Then, we will show a more compact way of implementing it. + +A first approach +^^^^^^^^^^^^^^^^ + +A first approach to model our knapsack problem in idol is as follows. + +.. code-block:: cpp + + // Create environemnt + Env env; + + // Create a new model + Model model(env); + + // Create a vector for storing the x variables + std::vector x; + x.reserve(n); + + // Create x variables as binary with p_j as objective coefficient + for (unsigned int j = 0 ; j < n ; ++j) { + Var x_j(env, 0., 1., Binary, Column(p[j]), "x_" + std::to_string(j)); + model.add(x_j); + x.emplace_back( x_j ); + } + + // Create expression for the knapsack constraint + Expr knapsack_constraint; + for (unsigned int j = 0 ; j < n ; ++j) { + knapsack_constraint += w[j] * x[j]; + } + + // Create the knapsack constraint + Ctr c(knapsack_constraint <= W); + model.add(c); + + // Define objective sense + model.set_obj_sense(Maximize); + +Here, we used the :cpp:`Model::set_obj_sense` method to set the objective sense of our model. By default, all models are +assumed to be minimization problems. + +A more elegant approach +^^^^^^^^^^^^^^^^^^^^^^^ + +Though our first approach works well, its size and readability can greatly be reduced by using the predefined macro :cpp:`idol_Sum` +and calls to methods of the ``Model`` class. + +.. code-block:: cpp + + // Create environemnt + Env env; + + // Create a new model + Model model(env); + + // Create x variables + model.add_vars(Dim<1>(n), 0., 1., Binary, "x"); + + // Create the knapsack constraint + model.add(idol_Sum(j, Range(n), w[j] * x[j] ) <= W); + + // Define objective sense + model.set_obj_sense(Maximize); + model.set_obj_expr(idol_Sum(j, Range(n), p[i] * x[i]); + +Here, we directly add :math:`n` variables with the right types and bounds. + +Then, we use the :cpp:`idol_Sum` macro to create the knapsack constraint. +This macro is used as follows :cpp:`idol_Sum({name}, {iteratable}, {expression})` where :cpp:`{name}` will be the name of an index +taking value in the :cpp:`{iteratable}` (here, :cpp:`Range(n)`) while :cpp:`{expression}` is the piece of expression which will be accumulated. + +.. admonition:: About Range + + In the above example, :cpp:`Range` is used to define an iterable ranging from :math:`0` to :math:`n` (note that it is also possible to range from :math:`l` to :math:`n` for :math:`l < n` + by calling :cpp:`Range(l, n)`). The objective function is created similarly. + +Solving the problem using an external solver +-------------------------------------------- + +The idol library offers different ways for solving optimization problems. +To select the desired approach for a given model, one must call the :cpp:`Model::use` method and specify the +"optimizer" to be used. + +For instance, the following will set the optimizer to GLPK for solving our model. + +.. code-block:: cpp + + model.use(GLPK()); + +.. hint:: + + Here, GLPK is actually an ``OptimizerFactory`` which will eventually create an optimizer to solve our model. + Indeed, the “real” optimizer in this case will be an instance of ``Optimizers::GLPK`` which will be created when necessary. + + If you want to learn more about optimizers and optimizer factories, please refer to :ref:`this page `. + +Now that the optimizer has been configure, we can solve our problem by calling the ``Model::optimize`` method. + +.. code-block:: + + model.optimize(); + +Accessing the solution +---------------------- + +Finally, you may access pieces of information regarding the solution by using one of the following methods: + +* ``get_status`` returns the current solution status (e.g., ``Optimal``, ``Infeasible``, ``Unbounded``, ...). +* ``get_reason`` returns the reason for the solution status (e.g., the solution reports ``Infeasible`` because of + ``TimeLimit``). +* ``get_best_obj`` returns the best objective value found (i.e., the best objective cost among feasible solutions + considered during the execution of the algorithm). +* ``get_best_bound`` returns the best objective value bound (e.g., a dual bound). +* ``get_relative_gap`` returns the relative optimality gap computed as + +.. math:: + + \textrm{relative_gap} = \left| \frac{ \textrm{best_obj} - \textrm{best_bound} }{ 1e^{-10} + \textrm{best_obj} } \right|. + +* ``get_absolute_gap`` returns the absolute optimality gap computed as + +.. math:: + + \textrm{absolute_gap} = | \textrm{best_obj} - \textrm{best_bound} |. + +* ``get_var_primal`` returns the primal value (when status is ``Optimal`` or ``Feasible``) of a given variable. +* ``get_var_ray`` returns the ray value (when status ``Unbounded``) of a given variable. +* ``get_ctr_dual`` returns the dual value (when status is ``Optimal`` or ``Feasible`` for continuous problems) of a given + constraint. +* ``get_ctr_farkas`` returns the Farkas certificate value (when status is ``Infeasible`` for continuous problems) of a given + constraint. + +Additionally, functions ``save_primal``, ``save_ray``, ``save_dual`` and ``save_farkas`` will create objects of the class +``Solution::Primal`` and ``Solution::Dual`` storing the results of corresponding calls to ``get_var_*`` and ``get_ctr_*`` +methods. + +.. admonition:: Example + + This example shows how to solve a model using GLPK and retrieves some piece of information about its solution. + + .. code-block:: + + model.use(GLPK()); + + model.optimize(); + + const SolutionStatus status = model.get_status(); + + if (status == Optimal) { + + std::cout << "Optimal solution found!" << std::endl; + + Solution::Primal primal_values = save_primal(model); + + std::cout << primal_values << std::endl; + + } else { + + std::cout << "An optimal solution could not be found" << std::endl; + + std::cout << "GLPK returned status " << status << std::endl; + + std::cout << "The reason for this status is " << get_reason(model) << std::endl; + + if (status == Feasible) { + + std::cout << "The optimality gap is " << get_relative_gap(model) * 100 << " %" << std::endl; + + } else if (status == Unbounded) { + + std::cout << "An unbounded ray is" << std::endl; + + std::cout << save_ray(model) << std::endl; + + } else if (status == Infeasible) { + + std::cout << "A Farkas certificate is" << std::endl; + + std::cout << save_farkas(model) << std::endl; + + } + + } \ No newline at end of file diff --git a/_sources/tutorials/index.rst.txt b/_sources/tutorials/index.rst.txt new file mode 100644 index 00000000..15150bfd --- /dev/null +++ b/_sources/tutorials/index.rst.txt @@ -0,0 +1,12 @@ +.. _tutorials: + +Tutorials +========= + +.. toctree:: + :maxdepth: 3 + :glob: + + getting_started/index + decomposition_methods/index + robust_optimization/index diff --git a/_sources/tutorials/robust_optimization/dualizing.rst.txt b/_sources/tutorials/robust_optimization/dualizing.rst.txt new file mode 100644 index 00000000..eb270acb --- /dev/null +++ b/_sources/tutorials/robust_optimization/dualizing.rst.txt @@ -0,0 +1,235 @@ +.. _dualizing: + +Dualization +=========== + +Dualization plays a prominent role in robust optimization. In this tutorial we show how one can derive the dual problem +of any convex quadratic problem. This is done both from the theoretical and computational side. In the first section, +the mathematical expression of the dual is derived while we show how it can automatically be obtained by using Idol. + +Dual of a convex quadratic problem +---------------------------------- + +Recall that Idol considers convex problems with quadratic expressions of the following form: + +.. math:: + + \begin{array}{lll} + \textrm{minimize } & \displaystyle \sum_{j=1}^n c_jx_j + \sum_{j=1}^n\sum_{k=1}^n d_{jk}x_jx_k \\ + \textrm{subject to } & \displaystyle \sum_{j=1}^n a_{ij}x_j + \sum_{j=1}^n\sum_{k=1}^n q^i_{jk}x_jx_k \le b_i & i=1,...,m \\ + & l_j \le x_j \le u_j & j=1,...,m \\ + & x_j\in\mathbb Z & j\in J_I, + \end{array} + +where it is assumed that :math:`C^i\cap[l,u]` are convex sets, with + +.. math:: + + C^i = \{ x\in\mathbb R^n : \sum_{j=1}^n a_{ij}x_j + \sum_{j=1}^n\sum_{k=1}^n q^i_{jk}x_jx_k \le b_i \}` + +and :math:`i=1,...,m`, and that the objective function :math:`f(x) = \sum_{j=1}^n c_jx_j + \sum_{j=1}^n\sum_{k=1}^n d_{jk}x_jx_k` +is convex over :math:`\mathbb R^n`. The bounds :math:`l_j` and :math:`u_j` (with :math:`j=1,...,n`) belong to the extended real number line. + +We start by re-writing our problem in term of indicator functions. We recall here that the indicator function of a set :math:`C` +is noted :math:`\delta(\bullet|C)` and is defined as + +.. math:: + + \delta(x|C) = \begin{cases} + 0 & \textrm{if } x\in C \\ + +\infty & \textrm{otherwise} + \end{cases}. + +Our (*primal*) problem reads + +.. math:: + + \min_{x\in\mathbb R^n} f(x) + \sum_{i=1}^m\delta(x|C^i) + \delta(x|[l,u]). + +As long as :math:`f` and :math:`C^i\cap [l, u]` are convex, this problem is convex and, assuming constraint qualification holds, the following +equality holds (see `Fenchel duality `_). + +.. math:: + + \begin{multline} + \min_{x\in\mathbb R^n} \sum_{i=1}^m\delta(x|C^i) + \delta(x|[l,u]) - (-f)(x) \\ + = + \max_{\pi\in\mathbb R^n} (-f)_*(\pi) - \left( \sum_{i=1}^m\delta(\bullet|C^i) + \delta(\bullet|[l,u]) \right)^*(\pi) + \end{multline} + +Refering to this `cheatsheet on convex conjugates `_, +one sees that :math:`(-f)_*(\pi) = -f^*(-\pi)`. Moreover, refering to the "Non-separable sum" formula, one obtains the followig problem: + +.. math:: + + \begin{array}{lll} + \textrm{maximize } & -f^*(-\pi) - \sum_{i=1}^m \delta^*(u^i|C^i) - \delta^*(v|[l,u]) \\ + \textrm{subject to } & v + \sum_{i=1}^m u^i = \pi \\ + & \pi\in\mathbb R^n + \end{array} + +Conjugate of the indicator function of bound restrictions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We start by computing :math:`\delta^*(v|[l,u])`. By definition, this equals + +.. math:: + + \delta^*(v|[l,u]) = + \begin{array}[t]{lll} + \max\ & v^\top x \\ + \textrm{s.t. } & x \le u & (\lambda^u \ge 0) \\ + & -x \le -l & (\lambda^l \ge 0) \\ + & x\in \mathbb R^n. + \end{array} + +By standard LP duality, one has + +.. math:: + + \begin{array}{lll} + \min\ & u^\top\lambda^u - l^\top\lambda^l \\ + \textrm{s.t. } & \lambda^u - \lambda^l = v & (x\in\mathbb R^n)\\ + & \lambda^u \ge 0 \\ + & \lambda^l \ge 0. + \end{array} + +We end with some useful remarks: + +- Assume :math:`l_j = -\infty` for some j, then one should remove :math:`\lambda^l_j` from this model; +- Assume :math:`u_j = +\infty` for some j, then one should remove :math:`\lambda^u_j` from this model; + +Conjugate of convex sets defined by quadratic expressions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We may now take interest in :math:`\delta^*(u^i|C^i)`. Now, observe that there must +exist a symmetric matrix :math:`\tilde Q^i` such that + +.. math:: + + \sum_{j=1}^n a_{ij}x_j + \sum_{j=1}^n\sum_{k=1}^n q^i_{jk}x_jx_k - b_i + = + a_{(i)}x + x^\top \tilde Q^ix - b_i + +Since :math:`\tilde Q^i` is a real symmetric matrix, it is diagonalizable by orthogonal matrices. Thus, there exists matrices :math:`P^i` and :math:`D^i` such that +:math:`\tilde Q^i = {P^i}^\top D^iP^i` where :math:`D^i` is diagonal. + +There, idol considers two cases: + +- If :math:`D^i\succeq 0`, then :math:`C^i` is a convex set and the following holds + + .. math:: + + \begin{align} + \delta^*(u^i|C^i) &= + \begin{array}[t]{lll} + \max\ & {u^i}^\top x \\ + \textrm{s.t. } & a_{(i)}x + x^\top P^iD^i{P^i}^\top x \le b_i \\ + & x\in\mathbb R^n + \end{array} \\ + &= + \begin{array}[t]{lll} + \max\ & {u^i}^\top x \\ + \textrm{s.t. } & || {D^i}^{\frac 12}{P^i}^\top x ||_2^2 \le b_i - a_{(i)} x \\ + & x\in\mathbb R^n + \end{array} + \\ + &= + \begin{array}[t]{lll} + \max\ & {u^i}^\top x \\ + \textrm{s.t. } & (\frac 12, b_i - a_{(i)} x, {D^i}^{\frac 12}{P^i}^\top x ) \in \mathcal Q_r^{n+2} \\ + & x\in\mathbb R^n + \end{array} + \end{align} + + where :math:`\mathcal Q_r^n` denotes the :math:`n`-dimensional quadratic rotated cone. + By conic duality (see e.g., `here `_), we obtain + + .. math:: + + \begin{array}{lll} + \min\ & \frac 12\pi_1 + b_i\pi_2 \\ + \textrm{s.t. } & -a_{(i)}^\top\pi_2 + P^i{D^i}^{\frac 12}\lambda = - u^i \\ + & \sum_{j=1}^n \lambda_i^2 \le \pi_1\pi_2 \\ + & \pi_1, \pi_2 \ge 0 + \end{array} + + In the special case where :math:`D^i = 0`, :math:`\pi_1` can be fixed to 0 and one recovers LP duality. + +- Otherwise, Idol expects :math:`\tilde Q^i` to have one negative eigen value, :math:`a = 0` and :math:`b_i = 0`. + We have, + + .. math:: + + \tilde Q^i = PD^iP^\top = d_{kk}p^{(k)}{p^{(k)}}^\top + \sum_{j\neq k} d_{jj}p^{(j)}{p^{(j)}}^\top + + with :math:`d_{kk} < 0` and :math:`d_{jj} \ge 0` (with :math:`j\neq k`). For simplicity, we will assume that :math:`k = 1`. + Then, constraint :math:`x^\top\tilde Q^ix \le 0` can written as + + .. math:: + + \sum_{j=2}^n d_{jj}( {p^{(j)}}^\top x )^2 \le d_{11}( {p^{(1)}}^\top x )^2 + + which can be expressed with a quadratic cone provided that :math:`{p^{(1)}}^\top x \ge 0` over :math:`[l,u]`. We obtain + + .. math:: + + (\sqrt{-d_{11}} {p^{(1)}}^\top x, \sqrt{d_{22}} {p^{(2)}}^\top x, \sqrt{d_{33}} {p^{(3)}}^\top x, ..., \sqrt{d_{nn}} {p^{(n)}}^\top x) \in \mathcal Q^{n} + + where :math:`\mathcal Q^n` denotes the :math:`n`-dimensional quadratic cone. Finally, we obtain the following result. + + .. math:: + + \begin{align} + \delta^*(u^i|C^i) &= + \begin{array}[t]{lll} + \max\ & {u^i}^\top x \\ + \textrm{s.t. } & x^\top P^iD^i{P^i}^\top x \le 0 \\ + & x\in\mathbb R^n + \end{array} \\ + &= + \begin{array}[t]{lll} + \max\ & {u^i}^\top x \\ + \textrm{s.t. } & (\sqrt{-d_{11}} {p^{(1)}}^\top x, \sqrt{d_{22}} {p^{(2)}}^\top x, \sqrt{d_{33}} {p^{(3)}}^\top x, ..., \sqrt{d_{nn}} {p^{(n)}}^\top x) \in \mathcal Q^{n} \\ + & {p^{(1)}}^\top x \ge 0 \\ + & x\in\mathbb R^n + \end{array} + \\ + &= + \begin{array}[t]{lll} + \min\ & 0 \\ + \textrm{s.t. } & \sqrt{-d_{11}}p^{(1)}(\lambda_1 + \pi) + \sum_{j=2}^n \sqrt{ d_{jj} }p^{(j)}\lambda_j = -u^{i} \\ + & \sum_{j=2}^n \lambda_j^2 \le \lambda_1 \\ + & \pi \ge 0 + \end{array} + \end{align} + +Conjugate of the objective function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The conjugate function of :math:`f` is well known to equal to + +.. math:: + + f^*(\pi) = + \begin{array}[t]{lll} + \min\ & \frac 14 (\pi - c)^\top \tilde D^{\dagger} (\pi - c) \\ + \textrm{s.t. } & \pi - b \in \textrm{span}(\tilde D) + \end{array} + +where :math:`\tilde D` is the symmetric matrix associated to :math:`f`. + +Final result +^^^^^^^^^^^^ + +For now, we may assume that all :math:`C^i` are convex sets. + +.. math:: + + \begin{array}{lll} + \max\ & \frac 14 (\mu + c)^\top\tilde D^{-1}(\mu + c) + \sum_{i=1}^m(-\frac 12\pi_1^i - b_i\pi_2^i) - u^\top\lambda^u + l^\top\lambda^l \\ + \textrm{s.t. } & \lambda^u - \lambda^l + \sum_{i=1}^m ( a_{(i)}^\top\pi_2^i - P^i{D^i}^{\frac 12}\lambda^i ) = \mu \\ + & \sum_{j=1}^n \lambda_j^i \le \pi_1^i\pi_2^i & i=1,...,m \\ + & \lambda^u, \lambda^l \ge 0 \\ + & \pi_1^i, \pi_2^i \ge 0 & i=1,...,m + \end{array} diff --git a/_sources/tutorials/robust_optimization/index.rst.txt b/_sources/tutorials/robust_optimization/index.rst.txt new file mode 100644 index 00000000..b83c5072 --- /dev/null +++ b/_sources/tutorials/robust_optimization/index.rst.txt @@ -0,0 +1,42 @@ +.. _robust: + +Robust Optimization +=================== + +Single-stage robust optimization +-------------------------------- + +.. math:: + + \begin{align} + \min \ & c^\top x \\ + \textrm{s.t. } & A(\xi)x \ge b & \forall \xi\in\Xi \\ + & x\in X + \end{align} + +Two-stage robust optimization +----------------------------- + +.. math:: + + \begin{align} + \min \ & c^\top x + x_0 \\ + \textrm{s.t. } & \forall \xi\in\Xi, \exists y\in Y, + \begin{cases} + x_0 \ge d^\top y \\ + T(\xi)x + W(\xi) \ge h(\xi) + \end{cases} \\ + & (x_0,X) \in \mathbb R\times X + \end{align} + +.. math:: + + \begin{align} + \min_{x\in X}\left\{ c^\top x + \max_{\xi\in\Xi}\min_{y\in Y(x,\xi)} d^\top y \right\} + \end{align} + +.. toctree:: + :maxdepth: 1 + :glob: + + dualizing diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000..81415803 --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..30fee9d0 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/check-solid.svg b/_static/check-solid.svg new file mode 100644 index 00000000..92fad4b5 --- /dev/null +++ b/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 00000000..2ea7ff3e --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 00000000..c718cee4 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 00000000..19a446a0 --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..7e4c114f --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/graphviz.css b/_static/graphviz.css new file mode 100644 index 00000000..8d81c02e --- /dev/null +++ b/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 00000000..c4c6022f --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js new file mode 100644 index 00000000..cd1c674f --- /dev/null +++ b/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 00000000..1fddb6ee --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 00000000..d96755fd Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 00000000..7107cec9 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..9c2afde4 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..7918c3fa --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/api/index.html b/api/index.html new file mode 100644 index 00000000..b5a92301 --- /dev/null +++ b/api/index.html @@ -0,0 +1,165 @@ + + + + + + + API — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/modeling/Annotation.html b/api/modeling/Annotation.html new file mode 100644 index 00000000..e6c871b1 --- /dev/null +++ b/api/modeling/Annotation.html @@ -0,0 +1,205 @@ + + + + + + + Annotation — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Column.html b/api/modeling/Column.html new file mode 100644 index 00000000..a0a3a243 --- /dev/null +++ b/api/modeling/Column.html @@ -0,0 +1,287 @@ + + + + + + + Column — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Constant.html b/api/modeling/Constant.html new file mode 100644 index 00000000..2c7bbdfe --- /dev/null +++ b/api/modeling/Constant.html @@ -0,0 +1,397 @@ + + + + + + + Constant — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Ctr.html b/api/modeling/Ctr.html new file mode 100644 index 00000000..4d8debb6 --- /dev/null +++ b/api/modeling/Ctr.html @@ -0,0 +1,223 @@ + + + + + + + Ctr — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Env.html b/api/modeling/Env.html new file mode 100644 index 00000000..d1947322 --- /dev/null +++ b/api/modeling/Env.html @@ -0,0 +1,166 @@ + + + + + + + Env — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Expr.html b/api/modeling/Expr.html new file mode 100644 index 00000000..7185ea39 --- /dev/null +++ b/api/modeling/Expr.html @@ -0,0 +1,287 @@ + + + + + + + Expr — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/LinExpr.html b/api/modeling/LinExpr.html new file mode 100644 index 00000000..f1d7227b --- /dev/null +++ b/api/modeling/LinExpr.html @@ -0,0 +1,358 @@ + + + + + + + LinExpr — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Model.html b/api/modeling/Model.html new file mode 100644 index 00000000..dc108252 --- /dev/null +++ b/api/modeling/Model.html @@ -0,0 +1,1702 @@ + + + + + + + Model — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Param.html b/api/modeling/Param.html new file mode 100644 index 00000000..f79d341a --- /dev/null +++ b/api/modeling/Param.html @@ -0,0 +1,208 @@ + + + + + + + Param — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/QuadExpr.html b/api/modeling/QuadExpr.html new file mode 100644 index 00000000..f9b15f2c --- /dev/null +++ b/api/modeling/QuadExpr.html @@ -0,0 +1,207 @@ + + + + + + + QuadExpr — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Row.html b/api/modeling/Row.html new file mode 100644 index 00000000..87770b48 --- /dev/null +++ b/api/modeling/Row.html @@ -0,0 +1,293 @@ + + + + + + + Row — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/SolutionDual.html b/api/modeling/SolutionDual.html new file mode 100644 index 00000000..dd63ccb5 --- /dev/null +++ b/api/modeling/SolutionDual.html @@ -0,0 +1,311 @@ + + + + + + + Solution::Dual — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/SolutionPrimal.html b/api/modeling/SolutionPrimal.html new file mode 100644 index 00000000..a112f874 --- /dev/null +++ b/api/modeling/SolutionPrimal.html @@ -0,0 +1,311 @@ + + + + + + + Solution::Primal — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/TempCtr.html b/api/modeling/TempCtr.html new file mode 100644 index 00000000..71e4adea --- /dev/null +++ b/api/modeling/TempCtr.html @@ -0,0 +1,238 @@ + + + + + + + TempCtr — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/TempVar.html b/api/modeling/TempVar.html new file mode 100644 index 00000000..4b75c4c3 --- /dev/null +++ b/api/modeling/TempVar.html @@ -0,0 +1,247 @@ + + + + + + + TempVar — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/Var.html b/api/modeling/Var.html new file mode 100644 index 00000000..e56555bf --- /dev/null +++ b/api/modeling/Var.html @@ -0,0 +1,218 @@ + + + + + + + Var — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/modeling/index.html b/api/modeling/index.html new file mode 100644 index 00000000..e85fa713 --- /dev/null +++ b/api/modeling/index.html @@ -0,0 +1,163 @@ + + + + + + + Modeling — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/BranchAndBound.html b/api/optimizers/branch-and-bound/BranchAndBound.html new file mode 100644 index 00000000..d9468d97 --- /dev/null +++ b/api/optimizers/branch-and-bound/BranchAndBound.html @@ -0,0 +1,687 @@ + + + + + + + BranchAndBound — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/BranchAndBoundCallback.html b/api/optimizers/branch-and-bound/BranchAndBoundCallback.html new file mode 100644 index 00000000..c49a8b5e --- /dev/null +++ b/api/optimizers/branch-and-bound/BranchAndBoundCallback.html @@ -0,0 +1,309 @@ + + + + + + + BranchAndBoundCallback — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.html b/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.html new file mode 100644 index 00000000..d82f2bf4 --- /dev/null +++ b/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.html @@ -0,0 +1,191 @@ + + + + + + + MostInfeasible — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/branching-rules/index.html b/api/optimizers/branch-and-bound/branching-rules/index.html new file mode 100644 index 00000000..7cb8ec54 --- /dev/null +++ b/api/optimizers/branch-and-bound/branching-rules/index.html @@ -0,0 +1,152 @@ + + + + + + + Branching rules — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/index.html b/api/optimizers/branch-and-bound/index.html new file mode 100644 index 00000000..4eb99cd3 --- /dev/null +++ b/api/optimizers/branch-and-bound/index.html @@ -0,0 +1,163 @@ + + + + + + + Branch-And-Bound algorithms — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/node-selection-rules/BestBound.html b/api/optimizers/branch-and-bound/node-selection-rules/BestBound.html new file mode 100644 index 00000000..1d0f80c9 --- /dev/null +++ b/api/optimizers/branch-and-bound/node-selection-rules/BestBound.html @@ -0,0 +1,176 @@ + + + + + + + BestBound — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.html b/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.html new file mode 100644 index 00000000..ecc2ad07 --- /dev/null +++ b/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.html @@ -0,0 +1,176 @@ + + + + + + + BreadthFirst — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.html b/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.html new file mode 100644 index 00000000..e1e2c017 --- /dev/null +++ b/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.html @@ -0,0 +1,176 @@ + + + + + + + DepthFirst — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.html b/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.html new file mode 100644 index 00000000..ac23f7ce --- /dev/null +++ b/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.html @@ -0,0 +1,176 @@ + + + + + + + WorstBound — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/branch-and-bound/node-selection-rules/index.html b/api/optimizers/branch-and-bound/node-selection-rules/index.html new file mode 100644 index 00000000..4810b974 --- /dev/null +++ b/api/optimizers/branch-and-bound/node-selection-rules/index.html @@ -0,0 +1,167 @@ + + + + + + + Node selection rules — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/callbacks/Callback.html b/api/optimizers/callbacks/Callback.html new file mode 100644 index 00000000..bdfe4d3e --- /dev/null +++ b/api/optimizers/callbacks/Callback.html @@ -0,0 +1,290 @@ + + + + + + + Callback — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/callbacks/CallbackEvent.html b/api/optimizers/callbacks/CallbackEvent.html new file mode 100644 index 00000000..a8347b5b --- /dev/null +++ b/api/optimizers/callbacks/CallbackEvent.html @@ -0,0 +1,178 @@ + + + + + + + Events — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/callbacks/LazyCutCallback.html b/api/optimizers/callbacks/LazyCutCallback.html new file mode 100644 index 00000000..a8dacad3 --- /dev/null +++ b/api/optimizers/callbacks/LazyCutCallback.html @@ -0,0 +1,226 @@ + + + + + + + LazyCutCallback — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/callbacks/UserCutCallback.html b/api/optimizers/callbacks/UserCutCallback.html new file mode 100644 index 00000000..d40ffab2 --- /dev/null +++ b/api/optimizers/callbacks/UserCutCallback.html @@ -0,0 +1,182 @@ + + + + + + + UserCutCallback — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/callbacks/index.html b/api/optimizers/callbacks/index.html new file mode 100644 index 00000000..a0f13832 --- /dev/null +++ b/api/optimizers/callbacks/index.html @@ -0,0 +1,203 @@ + + + + + + + Callbacks — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/column-generation/ColumnGeneration.html b/api/optimizers/column-generation/ColumnGeneration.html new file mode 100644 index 00000000..d65c849f --- /dev/null +++ b/api/optimizers/column-generation/ColumnGeneration.html @@ -0,0 +1,564 @@ + + + + + + + ColumnGeneration — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/column-generation/DantzigWolfeDecomposition.html b/api/optimizers/column-generation/DantzigWolfeDecomposition.html new file mode 100644 index 00000000..71e840a7 --- /dev/null +++ b/api/optimizers/column-generation/DantzigWolfeDecomposition.html @@ -0,0 +1,591 @@ + + + + + + + DantzigWolfeDecomposition — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/column-generation/index.html b/api/optimizers/column-generation/index.html new file mode 100644 index 00000000..1ff7c773 --- /dev/null +++ b/api/optimizers/column-generation/index.html @@ -0,0 +1,211 @@ + + + + + + + Column-Generation algorithms — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/glpk/GLPK.html b/api/optimizers/glpk/GLPK.html new file mode 100644 index 00000000..26dc6a9c --- /dev/null +++ b/api/optimizers/glpk/GLPK.html @@ -0,0 +1,449 @@ + + + + + + + GLPK — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/glpk/index.html b/api/optimizers/glpk/index.html new file mode 100644 index 00000000..9df14bbe --- /dev/null +++ b/api/optimizers/glpk/index.html @@ -0,0 +1,148 @@ + + + + + + + GLPK interface — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/gurobi/Gurobi.html b/api/optimizers/gurobi/Gurobi.html new file mode 100644 index 00000000..9625f490 --- /dev/null +++ b/api/optimizers/gurobi/Gurobi.html @@ -0,0 +1,479 @@ + + + + + + + Gurobi — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/gurobi/index.html b/api/optimizers/gurobi/index.html new file mode 100644 index 00000000..7c0008b4 --- /dev/null +++ b/api/optimizers/gurobi/index.html @@ -0,0 +1,148 @@ + + + + + + + Gurobi interface — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/index.html b/api/optimizers/index.html new file mode 100644 index 00000000..3de6570c --- /dev/null +++ b/api/optimizers/index.html @@ -0,0 +1,397 @@ + + + + + + + Optimizers — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/mosek/Mosek.html b/api/optimizers/mosek/Mosek.html new file mode 100644 index 00000000..fecb99b0 --- /dev/null +++ b/api/optimizers/mosek/Mosek.html @@ -0,0 +1,469 @@ + + + + + + + Mosek — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/optimizers/mosek/index.html b/api/optimizers/mosek/index.html new file mode 100644 index 00000000..2cf7204b --- /dev/null +++ b/api/optimizers/mosek/index.html @@ -0,0 +1,148 @@ + + + + + + + Mosek interface — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/problems/ProblemsFLP.html b/api/problems/ProblemsFLP.html new file mode 100644 index 00000000..47ff26ff --- /dev/null +++ b/api/problems/ProblemsFLP.html @@ -0,0 +1,225 @@ + + + + + + + Facility Location Problem (FLP) — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/problems/ProblemsGAP.html b/api/problems/ProblemsGAP.html new file mode 100644 index 00000000..9afec2a9 --- /dev/null +++ b/api/problems/ProblemsGAP.html @@ -0,0 +1,232 @@ + + + + + + + Generalized Assignment Problem (GAP) — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/problems/ProblemsKP.html b/api/problems/ProblemsKP.html new file mode 100644 index 00000000..2d135058 --- /dev/null +++ b/api/problems/ProblemsKP.html @@ -0,0 +1,224 @@ + + + + + + + Knapsack Problem (KP) — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/problems/ProblemsMKP.html b/api/problems/ProblemsMKP.html new file mode 100644 index 00000000..d1a89424 --- /dev/null +++ b/api/problems/ProblemsMKP.html @@ -0,0 +1,227 @@ + + + + + + + Multiple Knapsack Problem (MKP) — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/problems/ProblemsSRP.html b/api/problems/ProblemsSRP.html new file mode 100644 index 00000000..5b8d0102 --- /dev/null +++ b/api/problems/ProblemsSRP.html @@ -0,0 +1,297 @@ + + + + + + + Staff Rostering Problem (SRP) — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/problems/index.html b/api/problems/index.html new file mode 100644 index 00000000..6793e4c3 --- /dev/null +++ b/api/problems/index.html @@ -0,0 +1,141 @@ + + + + + + + Problems — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/tolerances.html b/api/tolerances.html new file mode 100644 index 00000000..6f075900 --- /dev/null +++ b/api/tolerances.html @@ -0,0 +1,190 @@ + + + + + + + Tolerances — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/developer_guide/build-the-doc.html b/developer_guide/build-the-doc.html new file mode 100644 index 00000000..6ba71f5b --- /dev/null +++ b/developer_guide/build-the-doc.html @@ -0,0 +1,168 @@ + + + + + + + Build the doc! — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/developer_guide/index.html b/developer_guide/index.html new file mode 100644 index 00000000..0da24296 --- /dev/null +++ b/developer_guide/index.html @@ -0,0 +1,137 @@ + + + + + + + Developer guide — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/developer_guide/tests.html b/developer_guide/tests.html new file mode 100644 index 00000000..136589ce --- /dev/null +++ b/developer_guide/tests.html @@ -0,0 +1,187 @@ + + + + + + + Unit and integration tests — idol + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/facility-location-problem.html b/examples/facility-location-problem.html new file mode 100644 index 00000000..4637ddcc --- /dev/null +++ b/examples/facility-location-problem.html @@ -0,0 +1,188 @@ + + + + + + + Facility Location Problem / Branch-and-Bound — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/generalized-assignment-problem.html b/examples/generalized-assignment-problem.html new file mode 100644 index 00000000..614674d3 --- /dev/null +++ b/examples/generalized-assignment-problem.html @@ -0,0 +1,205 @@ + + + + + + + Generalized Assignment Problem / Branch-and-Price — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 00000000..533eb60b --- /dev/null +++ b/examples/index.html @@ -0,0 +1,133 @@ + + + + + + + Examples — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/knapsack-problem.html b/examples/knapsack-problem.html new file mode 100644 index 00000000..8b16737c --- /dev/null +++ b/examples/knapsack-problem.html @@ -0,0 +1,178 @@ + + + + + + + Knapsack Problem / Gurobi — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..8c3ac9d2 --- /dev/null +++ b/genindex.html @@ -0,0 +1,1191 @@ + + + + + + Index — idol + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..3f8d87f7 --- /dev/null +++ b/index.html @@ -0,0 +1,277 @@ + + + + + + + Welcome to idol! — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/global_installation.html b/installation/global_installation.html new file mode 100644 index 00000000..9c1a3b19 --- /dev/null +++ b/installation/global_installation.html @@ -0,0 +1,199 @@ + + + + + + + Global installation — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/index.html b/installation/index.html new file mode 100644 index 00000000..3b2d6c53 --- /dev/null +++ b/installation/index.html @@ -0,0 +1,147 @@ + + + + + + + Installation guidelines — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/linking.html b/installation/linking.html new file mode 100644 index 00000000..8c7b2a6d --- /dev/null +++ b/installation/linking.html @@ -0,0 +1,160 @@ + + + + + + + Linking your C++ project with idol — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/local_installation.html b/installation/local_installation.html new file mode 100644 index 00000000..0c9a0bb9 --- /dev/null +++ b/installation/local_installation.html @@ -0,0 +1,197 @@ + + + + + + + Local installation — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/mosek-and-socp.html b/installation/mosek-and-socp.html new file mode 100644 index 00000000..e9ca9c8b --- /dev/null +++ b/installation/mosek-and-socp.html @@ -0,0 +1,163 @@ + + + + + + + Using idol with Eigen — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/options.html b/installation/options.html new file mode 100644 index 00000000..18239221 --- /dev/null +++ b/installation/options.html @@ -0,0 +1,219 @@ + + + + + + + List of CMake options — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 00000000..7fba2188 Binary files /dev/null and b/objects.inv differ diff --git a/search.html b/search.html new file mode 100644 index 00000000..13d8264e --- /dev/null +++ b/search.html @@ -0,0 +1,129 @@ + + + + + + Search — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..a0ef2b05 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["api/index", "api/modeling/Annotation", "api/modeling/Column", "api/modeling/Constant", "api/modeling/Ctr", "api/modeling/Env", "api/modeling/Expr", "api/modeling/LinExpr", "api/modeling/Model", "api/modeling/Param", "api/modeling/QuadExpr", "api/modeling/Row", "api/modeling/SolutionDual", "api/modeling/SolutionPrimal", "api/modeling/TempCtr", "api/modeling/TempVar", "api/modeling/Var", "api/modeling/index", "api/optimizers/branch-and-bound/BranchAndBound", "api/optimizers/branch-and-bound/BranchAndBoundCallback", "api/optimizers/branch-and-bound/branching-rules/MostInfeasible", "api/optimizers/branch-and-bound/branching-rules/index", "api/optimizers/branch-and-bound/index", "api/optimizers/branch-and-bound/node-selection-rules/BestBound", "api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst", "api/optimizers/branch-and-bound/node-selection-rules/DepthFirst", "api/optimizers/branch-and-bound/node-selection-rules/WorstBound", "api/optimizers/branch-and-bound/node-selection-rules/index", "api/optimizers/callbacks/Callback", "api/optimizers/callbacks/CallbackEvent", "api/optimizers/callbacks/LazyCutCallback", "api/optimizers/callbacks/UserCutCallback", "api/optimizers/callbacks/index", "api/optimizers/column-generation/ColumnGeneration", "api/optimizers/column-generation/DantzigWolfeDecomposition", "api/optimizers/column-generation/index", "api/optimizers/glpk/GLPK", "api/optimizers/glpk/index", "api/optimizers/gurobi/Gurobi", "api/optimizers/gurobi/index", "api/optimizers/index", "api/optimizers/mosek/Mosek", "api/optimizers/mosek/index", "api/problems/ProblemsFLP", "api/problems/ProblemsGAP", "api/problems/ProblemsKP", "api/problems/ProblemsMKP", "api/problems/ProblemsSRP", "api/problems/index", "api/tolerances", "developer_guide/build-the-doc", "developer_guide/index", "developer_guide/tests", "examples/facility-location-problem", "examples/generalized-assignment-problem", "examples/index", "examples/knapsack-problem", "index", "installation/global_installation", "installation/index", "installation/linking", "installation/local_installation", "installation/mosek-and-socp", "installation/options", "tutorials/decomposition_methods/benders", "tutorials/decomposition_methods/dantzig_wolfe", "tutorials/decomposition_methods/index", "tutorials/getting_started/index", "tutorials/getting_started/modeling_optimization_problems", "tutorials/getting_started/using_an_external_solver", "tutorials/index", "tutorials/robust_optimization/dualizing", "tutorials/robust_optimization/index"], "filenames": ["api/index.rst", "api/modeling/Annotation.rst", "api/modeling/Column.rst", "api/modeling/Constant.rst", "api/modeling/Ctr.rst", "api/modeling/Env.rst", "api/modeling/Expr.rst", "api/modeling/LinExpr.rst", "api/modeling/Model.rst", "api/modeling/Param.rst", "api/modeling/QuadExpr.rst", "api/modeling/Row.rst", "api/modeling/SolutionDual.rst", "api/modeling/SolutionPrimal.rst", "api/modeling/TempCtr.rst", "api/modeling/TempVar.rst", "api/modeling/Var.rst", "api/modeling/index.rst", "api/optimizers/branch-and-bound/BranchAndBound.rst", "api/optimizers/branch-and-bound/BranchAndBoundCallback.rst", "api/optimizers/branch-and-bound/branching-rules/MostInfeasible.rst", "api/optimizers/branch-and-bound/branching-rules/index.rst", "api/optimizers/branch-and-bound/index.rst", "api/optimizers/branch-and-bound/node-selection-rules/BestBound.rst", "api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.rst", "api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.rst", "api/optimizers/branch-and-bound/node-selection-rules/WorstBound.rst", "api/optimizers/branch-and-bound/node-selection-rules/index.rst", "api/optimizers/callbacks/Callback.rst", "api/optimizers/callbacks/CallbackEvent.rst", "api/optimizers/callbacks/LazyCutCallback.rst", "api/optimizers/callbacks/UserCutCallback.rst", "api/optimizers/callbacks/index.rst", "api/optimizers/column-generation/ColumnGeneration.rst", "api/optimizers/column-generation/DantzigWolfeDecomposition.rst", "api/optimizers/column-generation/index.rst", "api/optimizers/glpk/GLPK.rst", "api/optimizers/glpk/index.rst", "api/optimizers/gurobi/Gurobi.rst", "api/optimizers/gurobi/index.rst", "api/optimizers/index.rst", "api/optimizers/mosek/Mosek.rst", "api/optimizers/mosek/index.rst", "api/problems/ProblemsFLP.rst", "api/problems/ProblemsGAP.rst", "api/problems/ProblemsKP.rst", "api/problems/ProblemsMKP.rst", "api/problems/ProblemsSRP.rst", "api/problems/index.rst", "api/tolerances.rst", "developer_guide/build-the-doc.rst", "developer_guide/index.rst", "developer_guide/tests.rst", "examples/facility-location-problem.rst", "examples/generalized-assignment-problem.rst", "examples/index.rst", "examples/knapsack-problem.rst", "index.rst", "installation/global_installation.rst", "installation/index.rst", "installation/linking.rst", "installation/local_installation.rst", "installation/mosek-and-socp.rst", "installation/options.rst", "tutorials/decomposition_methods/benders.rst", "tutorials/decomposition_methods/dantzig_wolfe.rst", "tutorials/decomposition_methods/index.rst", "tutorials/getting_started/index.rst", "tutorials/getting_started/modeling_optimization_problems.rst", "tutorials/getting_started/using_an_external_solver.rst", "tutorials/index.rst", "tutorials/robust_optimization/dualizing.rst", "tutorials/robust_optimization/index.rst"], "titles": ["API", "Annotation", "Column", "Constant", "Ctr", "Env", "Expr", "LinExpr", "Model", "Param", "QuadExpr", "Row", "Solution::Dual", "Solution::Primal", "TempCtr", "TempVar", "Var", "Modeling", "BranchAndBound", "BranchAndBoundCallback", "MostInfeasible", "Branching rules", "Branch-And-Bound algorithms", "BestBound", "BreadthFirst", "DepthFirst", "WorstBound", "Node selection rules", "Callback", "Events", "LazyCutCallback", "UserCutCallback", "Callbacks", "ColumnGeneration", "DantzigWolfeDecomposition", "Column-Generation algorithms", "GLPK", "GLPK interface", "Gurobi", "Gurobi interface", "Optimizers", "Mosek", "Mosek interface", "Facility Location Problem (FLP)", "Generalized Assignment Problem (GAP)", "Knapsack Problem (KP)", "Multiple Knapsack Problem (MKP)", "Staff Rostering Problem (SRP)", "Problems", "Tolerances", "Build the doc!", "Developer guide", "Unit and integration tests", "Facility Location Problem / Branch-and-Bound", "Generalized Assignment Problem / Branch-and-Price", "Examples", "Knapsack Problem / Gurobi", "Welcome to idol!", "Global installation", "Installation guidelines", "Linking your C++ project with idol", "Local installation", "Using idol with Eigen", "List of CMake options", "Benders Decomposition (with LazyCutCallback)", "Dantzig-Wolfe Decomposition (Automatic)", "Decomposition methods", "Getting started", "Modeling optimization problems", "Using an external solver", "Tutorials", "Dualization", "Robust Optimization"], "terms": {"model": [0, 2, 3, 4, 7, 9, 11, 14, 15, 16, 18, 19, 20, 28, 30, 31, 33, 34, 36, 38, 40, 41, 53, 54, 56, 57, 60, 61, 67, 70, 71], "annot": [0, 4, 5, 16, 17, 34, 40, 54, 65], "column": [0, 8, 11, 15, 16, 17, 33, 34, 40, 54, 65, 69], "constant": [0, 2, 4, 6, 7, 8, 9, 10, 11, 14, 17, 64], "ctr": [0, 2, 8, 9, 12, 14, 17, 34, 54, 65, 68, 69], "env": [0, 1, 4, 8, 16, 17, 40, 53, 54, 56, 57, 60, 61, 64, 65, 69, 70], "expr": [0, 8, 11, 14, 17, 68, 69], "linexpr": [0, 2, 6, 8, 11, 17, 68], "param": [0, 3, 6, 17, 68], "quadexpr": [0, 2, 6, 11, 17, 68], "row": [0, 2, 8, 14, 17], "solut": [0, 2, 3, 8, 11, 14, 17, 19, 28, 29, 30, 49, 54, 57, 64, 65, 70], "dual": [0, 3, 8, 11, 17, 33, 34, 40, 57, 69], "primal": [0, 2, 3, 8, 11, 14, 17, 28, 49, 69, 71], "tempctr": [0, 4, 8, 17, 19, 28, 30, 31], "tempvar": [0, 8, 17], "var": [0, 2, 6, 7, 8, 9, 10, 11, 13, 15, 17, 60, 61, 68, 69], "optim": [0, 2, 5, 8, 9, 11, 18, 28, 30, 33, 34, 36, 38, 41, 49, 53, 54, 56, 64, 65, 67, 69, 70, 71], "introduct": 0, "factori": [0, 18, 28, 33, 34, 36, 38, 41, 53, 54, 56, 69], "tabl": 0, "content": [0, 50], "problem": [0, 5, 8, 18, 19, 30, 33, 34, 40, 55, 57, 63, 65, 67, 70], "facil": [0, 48, 55], "locat": [0, 48, 55, 65], "flp": [0, 48, 53], "gener": [0, 8, 28, 30, 33, 34, 40, 48, 50, 52, 55, 63, 65], "assign": [0, 34, 48, 55, 65], "gap": [0, 8, 18, 33, 34, 36, 38, 41, 48, 49, 54, 65, 69], "knapsack": [0, 48, 54, 55, 57, 63, 65, 68, 69], "kp": [0, 48, 56], "multipl": [0, 3, 8, 18, 48, 68], "mkp": [0, 48], "staff": [0, 48], "roster": [0, 48], "srp": [0, 48], "toler": [0, 7, 18, 30, 33, 34, 36, 38, 41, 57], "templat": [1, 4, 5, 6, 7, 8, 9, 10, 16, 18, 19, 20, 23, 24, 25, 26, 65], "class": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47, 68, 69], "objectt": 1, "valuet": [1, 4, 16], "unsign": [1, 3, 4, 7, 8, 9, 16, 18, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47, 53, 54, 57, 65, 69], "int": [1, 3, 4, 7, 8, 9, 16, 18, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47, 53, 54, 56, 57, 60, 61, 65, 68, 69], "public": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47, 60, 61], "idol": [1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 33, 34, 36, 38, 40, 41, 49, 52, 53, 54, 56, 58, 59, 61, 63, 64, 68, 69, 70, 71], "impl": [1, 2, 4, 5, 6, 10, 11, 16, 28, 30, 31, 33, 34], "function": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 33, 34, 36, 38, 40, 41, 43, 44, 45, 46, 47, 54, 61, 62, 64, 65, 69, 70], "inlin": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 20, 23, 24, 25, 26, 30, 31, 33, 43, 44, 45, 46, 47], "t_env": [1, 4, 8, 16], "std": [1, 4, 7, 8, 9, 10, 16, 18, 19, 28, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47, 53, 54, 56, 64, 65, 68, 69], "string": [1, 4, 8, 9, 16, 41, 43, 44, 45, 46, 47], "t_name": [1, 4, 8, 16], "argst": [1, 4, 16], "t_arg": [1, 4, 16], "virtual": [1, 7, 10, 18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 33, 34, 36, 38, 41, 43], "bool": [1, 3, 4, 6, 7, 8, 9, 12, 13, 14, 16, 18, 33, 34, 36, 38, 41], "is_var_annot": 1, "const": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47, 53, 54, 56, 57, 60, 61, 65, 68, 69], "overrid": [1, 7, 8, 18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 33, 34, 36, 38, 41], "is_ctr_annot": 1, "default_valu": 1, "id": [1, 4, 8, 9, 16, 19, 65, 71], "name": [1, 4, 8, 9, 16, 18, 28, 65, 69], "has_default": 1, "void": [1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 28, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47], "free": 1, "static": [1, 2, 3, 4, 11, 16, 36, 38, 41, 49], "make_with_default_valu": 1, "object": [2, 3, 4, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 28, 33, 34, 36, 38, 41, 54, 56, 64, 65, 69, 70], "thi": [2, 3, 5, 7, 8, 9, 11, 14, 15, 18, 19, 28, 30, 33, 34, 36, 38, 40, 41, 49, 50, 52, 58, 60, 61, 62, 63, 64, 65, 68, 69, 71], "i": [2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 28, 29, 30, 33, 34, 36, 38, 40, 41, 49, 50, 52, 53, 54, 58, 60, 61, 62, 63, 64, 65, 68, 69, 71], "us": [2, 3, 5, 7, 8, 9, 11, 12, 13, 14, 18, 19, 28, 29, 30, 33, 34, 36, 38, 40, 41, 49, 50, 52, 53, 54, 56, 57, 58, 59, 60, 61, 63, 64, 65, 67, 68, 70, 71], "repres": [2, 3, 7, 8, 9, 11, 14, 15, 68], "an": [2, 3, 5, 7, 8, 11, 12, 13, 15, 18, 19, 28, 29, 30, 33, 34, 40, 43, 49, 52, 57, 58, 60, 62, 63, 64, 65, 67, 68, 70], "": [2, 7, 8, 11, 18, 19, 28, 30, 33, 34, 36, 38, 41, 52, 57, 59, 62, 64, 65, 68, 69, 71, 72], "It": [2, 3, 5, 7, 8, 11, 14, 15, 18, 29, 49, 57, 68], "made": [2, 11, 14, 15, 62], "coeffici": [2, 7, 8, 11, 68, 69], "set": [2, 3, 4, 7, 8, 10, 11, 12, 13, 16, 18, 19, 30, 33, 34, 36, 38, 40, 41, 52, 53, 54, 56, 57, 60, 61, 62, 63, 64, 65, 68, 69], "pair": [2, 3, 10, 11, 18], "each": [2, 5, 7, 11, 18, 28, 33, 34, 40, 57, 65, 68, 69], "Such": [2, 11], "ar": [2, 3, 7, 8, 9, 11, 18, 19, 28, 30, 33, 34, 40, 52, 57, 58, 59, 60, 63, 64, 65, 68, 69, 71], "call": [2, 3, 7, 8, 11, 18, 19, 28, 40, 52, 57, 58, 61, 62, 64, 65, 68, 69], "compon": 2, "default": [2, 3, 6, 7, 8, 9, 10, 11, 14, 15, 18, 19, 20, 28, 30, 33, 34, 36, 38, 41, 44, 45, 46, 49, 50, 52, 57, 58, 63, 65, 68, 69], "t_obj": [2, 8], "t_src": [2, 6, 11], "noexcept": [2, 3, 6, 8, 9, 10, 11, 14, 18, 36, 38, 41, 44, 45, 46], "oper": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 38, 40, 41, 44, 45, 46, 47, 62], "fix": [2, 3, 11, 68, 71], "t_primal": [2, 3, 11], "obj": [2, 8, 65], "obj_quadrat": 2, "linear": [2, 3, 6, 7, 8, 11, 64, 68], "quadrat": [2, 3, 6, 8, 11, 57, 68], "set_linear": [2, 11], "t_lin_expr": [2, 6, 11], "set_quadrat": [2, 11], "t_quad_expr": [2, 6, 11], "set_obj": 2, "t_rh": [2, 4, 6, 7, 8, 11, 12, 13, 16], "doubl": [2, 3, 6, 7, 8, 11, 12, 13, 15, 16, 18, 19, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47, 49, 57, 69], "attribut": [2, 3, 8, 9, 11], "emptycolumn": 2, "term": [3, 7, 11, 14, 71], "build": [3, 8, 18, 33, 34, 36, 38, 40, 41, 51, 57, 68], "which": [3, 5, 7, 8, 9, 12, 13, 14, 15, 18, 19, 28, 30, 33, 34, 36, 38, 40, 41, 50, 57, 58, 60, 61, 62, 63, 64, 65, 68, 69, 71], "appear": 3, "typic": [3, 7, 8, 14, 28, 29, 30, 40, 57, 65, 68], "thei": [3, 40, 57, 65], "real": [3, 8, 14, 15, 28, 40, 69, 71], "number": [3, 7, 8, 18, 28, 30, 33, 34, 36, 38, 41, 65, 69, 71], "howev": [3, 65, 68], "can": [3, 8, 18, 19, 28, 30, 33, 34, 36, 38, 40, 41, 49, 50, 52, 57, 58, 61, 63, 64, 65, 68, 69, 71], "also": [3, 8, 12, 13, 18, 28, 30, 34, 44, 46, 49, 52, 57, 58, 60, 61, 63, 64, 68, 69], "affin": 3, "combin": [3, 8, 40], "defin": [3, 8, 28, 49, 57, 61, 64, 68, 69], "specif": [3, 8, 19, 28, 58], "decomposit": [3, 30, 34, 40, 54, 62, 70], "scheme": [3, 57], "dantzig": [3, 34, 40, 54, 66, 70], "wolf": [3, 34, 40, 54, 66, 70], "reformul": [3, 70], "where": [3, 18, 33, 34, 57, 58, 62, 63, 65, 68, 69, 71], "decis": [3, 8, 34, 65], "variabl": [3, 5, 7, 8, 9, 14, 15, 18, 33, 34, 36, 38, 40, 41, 49, 54, 57, 58, 63, 64, 65, 69, 70], "from": [3, 7, 8, 9, 12, 13, 18, 19, 33, 34, 43, 49, 52, 57, 64, 69, 71], "A": [3, 9, 18, 28, 30, 33, 34, 36, 38, 41, 57, 58, 59, 61, 65, 68, 72], "seen": [3, 57, 61, 68], "b": [3, 9, 57, 71, 72], "compos": [3, 68], "numer": [3, 8, 68], "follow": [3, 7, 8, 19, 30, 40, 49, 50, 52, 57, 58, 60, 61, 63, 64, 65, 68, 69, 71], "mathemat": [3, 8, 57, 68, 70, 71], "express": [3, 7, 8, 14, 57, 62, 64, 69], "double_0": 3, "sum_": [3, 8, 62, 65, 68, 69, 71], "j": [3, 8, 43, 53, 54, 56, 57, 62, 65, 68, 69, 71], "1": [3, 4, 7, 8, 14, 15, 16, 18, 33, 34, 36, 38, 41, 49, 53, 54, 56, 57, 60, 61, 62, 64, 65, 68, 69, 71], "n": [3, 4, 8, 16, 57, 62, 65, 68, 69, 71], "double_j": 3, "time": [3, 8, 18, 19, 28, 29, 32, 33, 34, 36, 38, 40, 41, 65, 72], "param_j": 3, "creat": [3, 7, 8, 9, 14, 15, 18, 19, 32, 33, 34, 36, 38, 40, 41, 50, 52, 53, 54, 56, 57, 60, 62, 63, 64, 65, 68, 69], "appropri": 3, "constructor": [3, 9, 65, 68], "overload": [3, 14], "For": [3, 18, 19, 28, 40, 49, 50, 52, 57, 61, 65, 68, 69, 71], "instanc": [3, 19, 40, 43, 44, 45, 46, 47, 49, 50, 52, 53, 54, 56, 57, 61, 63, 65, 68, 69], "2": [3, 7, 8, 12, 13, 14, 15, 18, 49, 53, 54, 57, 61, 64, 65, 68, 69, 71], "xi": [3, 30, 72], "yield": 3, "new": [3, 8, 14, 15, 18, 19, 28, 30, 33, 34, 36, 38, 41, 52, 60, 68, 69], "equal": [3, 7, 18, 33, 34, 65, 71], "zero": [3, 7, 12, 13, 33, 34, 49, 64], "t_param": [3, 6, 9, 38, 41], "t_valu": [3, 8, 12, 13, 18, 33, 34, 36, 38, 41, 43, 44, 45, 46, 47], "paramet": [3, 7, 8, 9, 12, 13, 14, 15, 18, 19, 28, 33, 34, 36, 38, 41, 43, 49, 57, 64, 68], "The": [3, 7, 8, 11, 12, 13, 14, 15, 18, 19, 30, 33, 34, 36, 38, 40, 41, 49, 50, 52, 57, 58, 60, 61, 62, 63, 65, 68, 69, 71], "factor": [3, 7, 33, 34], "t_param_1": 3, "t_param_2": 3, "t_constant": [3, 4, 6, 8], "given": [3, 8, 12, 13, 14, 18, 19, 28, 30, 33, 34, 36, 38, 40, 41, 49, 57, 58, 64, 65, 68, 69], "argument": [3, 12, 13, 14, 15, 18, 33, 34, 36, 38, 41, 65, 68], "If": [3, 7, 8, 12, 13, 18, 19, 28, 30, 33, 34, 52, 57, 58, 60, 61, 63, 64, 69, 71], "t_factor": [3, 7, 10, 12, 13], "entri": [3, 7, 12, 13], "remov": [3, 7, 8, 33, 34, 57, 71], "e": [3, 7, 8, 12, 13, 14, 18, 19, 29, 33, 34, 36, 38, 40, 41, 49, 54, 57, 58, 59, 61, 62, 65, 68, 69, 71], "store": [3, 5, 7, 8, 11, 12, 13, 18, 19, 49, 65, 69], "associ": [3, 12, 13, 15, 30, 65, 68, 71], "3": [3, 7, 8, 40, 54, 57, 58, 60, 61, 64, 68, 69, 71], "get": [3, 4, 7, 10, 12, 13, 16, 30, 50, 57, 61, 68, 70], "return": [3, 7, 8, 9, 12, 13, 14, 15, 18, 19, 28, 30, 33, 34, 36, 38, 41, 53, 54, 56, 60, 61, 68, 69], "found": [3, 8, 18, 28, 29, 33, 34, 36, 38, 41, 52, 58, 61, 63, 68, 69], "queri": [3, 8, 12, 13], "set_numer": 3, "fals": [3, 14, 18, 33, 34, 36, 38, 40, 41, 54], "otherwis": [3, 14, 33, 34, 64, 71], "is_zero": [3, 6], "true": [3, 7, 8, 14, 18, 33, 34, 36, 38, 41, 54, 64], "its": [3, 8, 9, 18, 28, 30, 33, 34, 36, 38, 41, 50, 52, 57, 65, 69], "size": [3, 7, 69], "insid": [3, 28, 29, 50, 52, 58, 63, 68], "is_numer": 3, "doe": 3, "contain": [3, 14, 15, 18, 57, 64, 65, 69], "ani": [3, 8, 57, 58, 64, 65, 68, 71], "auto": [3, 5, 7, 8, 18, 33, 34, 36, 38, 40, 41, 53, 54, 56, 57, 64, 65, 68], "multipli": [3, 7, 68], "everi": [3, 7, 8, 12, 13, 18, 28, 33, 34, 52, 57, 65, 68], "t_term": 3, "add": [3, 7, 8, 18, 19, 28, 30, 50, 60, 61, 65, 68, 69], "up": [3, 7, 33, 34, 57], "current": [3, 7, 8, 18, 19, 28, 30, 33, 34, 36, 38, 41, 49, 68, 69], "equival": [3, 7, 14, 63, 68], "ad": [3, 7, 8, 18, 19, 28, 30, 33, 34, 57, 68], "result": [3, 7, 62, 69], "anoth": [3, 9, 12, 13, 40, 57, 63, 64, 65], "both": [3, 71], "t_dual": [3, 11], "ctrversion": [4, 14], "t_temp_ctr": [4, 8], "ctrtype": [4, 8, 14, 34], "t_type": [4, 8, 14, 15, 16, 34], "is_in": [4, 16], "t_model": [4, 16, 18, 20, 30, 31, 33, 34, 36, 38, 41], "t_annot": [4, 16], "0": [4, 7, 8, 15, 16, 18, 19, 28, 30, 33, 34, 36, 38, 41, 49, 53, 54, 56, 57, 60, 61, 63, 64, 65, 68, 69, 71], "vector": [4, 8, 16, 69], "make_vector": [4, 8, 16, 68], "dim": [4, 7, 8, 16, 53, 54, 56, 57, 64, 65, 68, 69], "t_dim": [4, 8, 16], "friend": [4, 5, 16, 28, 47], "manag": [5, 52, 58, 59, 61, 68], "environ": [5, 8, 50, 54, 58, 63, 65, 68], "actual": [5, 8, 18, 40, 68, 69], "version": [5, 8, 19, 50, 57, 58, 60, 61, 68], "constraint": [5, 8, 14, 28, 30, 33, 34, 40, 49, 54, 57, 64, 65, 69, 70, 71], "mai": [5, 8, 30, 52, 57, 58, 61, 65, 68, 69, 71], "aris": [5, 12, 13, 30], "t": [5, 8, 9, 18, 30, 46, 64, 65, 68, 69, 71, 72], "t_object": [5, 8], "key1": [6, 10], "key2": [6, 10], "t_num": 6, "t_expr": 6, "t_var": [6, 8, 9], "clear": [6, 7], "interfac": [7, 19, 40], "consist": [7, 19, 28], "product": 7, "kei": [7, 12, 13, 28, 57], "scalar": 7, "In": [7, 18, 28, 33, 34, 57, 61, 62, 64, 65, 68, 69, 71], "we": [7, 18, 28, 30, 33, 40, 52, 58, 60, 61, 62, 63, 64, 65, 68, 69, 71], "x_0": [7, 8, 62, 64, 68, 72], "x_1": [7, 8, 64, 68], "x": [7, 8, 14, 18, 30, 33, 34, 36, 38, 41, 53, 54, 56, 57, 60, 61, 64, 65, 68, 69, 71, 72], "add_var": [7, 8, 15, 53, 54, 56, 57, 64, 65, 68, 69], "inf": [7, 8, 12, 13, 64, 65, 68], "continu": [7, 8, 18, 53, 64, 68, 69], "lin_expr": 7, "abstractexpr": [7, 10], "linterm": 7, "t_kei": [7, 12, 13], "t_coeffici": [7, 10], "valu": [7, 8, 12, 13, 18, 29, 30, 33, 34, 36, 38, 41, 49, 56, 58, 61, 62, 63, 65, 68, 69, 71], "copi": [7, 8, 18, 28, 33, 34, 36, 38, 41, 50, 58], "move": [7, 8, 65], "cout": [7, 8, 19, 28, 53, 54, 56, 64, 65, 68, 69], "endl": [7, 8, 19, 28, 53, 54, 56, 64, 65, 68, 69], "output": [7, 8, 18, 33, 34, 36, 38, 41, 50, 52, 65, 68], "iteratoroutputt": 7, "hash": [7, 10], "equalto": [7, 8, 10], "whose": [7, 8, 28, 68], "itself": [7, 12, 13, 18, 33, 34, 36, 38, 41, 57], "subtract": 7, "sparsiti": [7, 49], "empti": 7, "non": [7, 19, 28, 68, 71], "onli": [7, 8, 18, 19, 30, 33, 34, 36, 38, 40, 41, 52, 62, 65, 68, 69], "const_iter": [7, 12, 13], "begin": [7, 8, 12, 13, 30, 64, 68, 69, 71, 72], "iter": [7, 8, 18, 33, 34, 36, 38, 41, 65, 69], "point": [7, 28, 49, 63], "first": [7, 8, 18, 19, 28, 33, 34, 36, 38, 40, 41, 57, 58, 62, 65, 71], "end": [7, 8, 12, 13, 30, 64, 68, 69, 71, 72], "all": [7, 14, 15, 30, 49, 50, 52, 57, 61, 62, 64, 65, 68, 69, 71], "probabl": 8, "most": [8, 18, 19, 40, 57, 65, 68], "central": 8, "form": [8, 18, 65, 68, 71], "arrai": [8, 68, 69, 71], "lll": [8, 68, 69, 71], "textrm": [8, 65, 68, 69, 71, 72], "minim": [8, 60, 61, 69, 71], "displaystyl": [8, 68, 69, 71], "a_": [8, 62, 68, 71], "0j": 8, "x_j": [8, 62, 68, 69, 71], "k": [8, 62, 68, 71], "q_": [8, 62, 68], "jk": [8, 62, 68, 71], "0x_jx_k": 8, "b_0": 8, "subject": [8, 64, 65, 71], "ij": [8, 62, 65, 68, 71], "q": [8, 62, 68, 71], "i_": [8, 68, 71], "x_jx_k": [8, 68, 71], "le": [8, 30, 62, 64, 65, 68, 69, 71], "b_i": [8, 62, 68, 71], "m": [8, 65, 68, 71], "l_j": [8, 68, 71], "u_j": [8, 68, 71], "mathbb": [8, 64, 68, 71, 72], "z": [8, 64, 68, 71], "j_i": [8, 68, 71], "here": [8, 18, 19, 40, 57, 58, 59, 60, 61, 64, 65, 68, 69, 71], "x_n": 8, "bound": [8, 15, 18, 19, 28, 29, 30, 33, 34, 36, 38, 40, 41, 54, 55, 56, 65, 69], "l_1": 8, "u_1": 8, "l_n": 8, "u_n": 8, "possibli": [8, 33, 34, 65], "infti": [8, 49, 71], "note": [8, 12, 13, 18, 28, 33, 34, 50, 52, 57, 58, 60, 61, 63, 65, 68, 69, 71], "some": [8, 18, 28, 30, 33, 34, 36, 38, 41, 58, 61, 62, 64, 69, 71], "have": [8, 9, 18, 28, 30, 33, 34, 36, 38, 40, 41, 49, 50, 57, 58, 61, 62, 65, 68, 69, 71], "integr": [8, 50, 51, 57, 68], "requir": [8, 58, 60, 62, 68], "those": 8, "indic": [8, 29, 63, 65, 68], "other": [8, 12, 13, 50], "entiti": 8, "input": [8, 57, 68, 69], "must": [8, 28, 33, 49, 57, 61, 65, 68, 69, 71], "g": [8, 19, 29, 33, 34, 40, 52, 57, 59, 61, 62, 65, 68, 69, 71], "c_j": [8, 68], "r": [8, 64, 71, 72], "altern": [8, 68], "maxim": [8, 69, 71], "short": 8, "solv": [8, 18, 19, 29, 30, 33, 34, 36, 38, 40, 41, 54, 56, 57, 63, 70], "ll": 8, "5": [8, 18, 33, 34, 36, 38, 41, 49, 57, 65, 69], "c": [8, 30, 50, 52, 57, 58, 59, 62, 69, 71, 72], "add_ctr": [8, 14, 53, 54, 56, 57, 64, 65, 68], "set_obj_expr": [8, 53, 54, 56, 57, 64, 65, 68, 69], "gurobi": [8, 28, 40, 53, 55, 57, 60, 61, 64, 65, 68], "best": [8, 18, 19, 33, 34, 36, 38, 40, 41, 57, 65, 69], "get_best_obj": [8, 56, 69], "matrix": [8, 62, 71], "explicit": [8, 9, 20, 23, 24, 25, 26, 30, 31, 33, 34, 43, 45], "objectivesens": 8, "t_sens": 8, "delet": [8, 18, 36, 38, 41], "t_lb": [8, 15, 16], "t_ub": [8, 15, 16], "vartyp": [8, 15, 16], "binari": [8, 15, 53, 54, 56, 57, 60, 61, 65, 69], "lower": [8, 15], "upper": [8, 15], "type": [8, 12, 13, 14, 15, 18, 29, 57, 65, 69], "t_column": [8, 15, 16, 33], "attent": 8, "involv": 8, "alreadi": [8, 57, 58], "part": [8, 28, 30, 68], "them": [8, 30, 52, 63, 64], "dimens": [8, 68], "x_": [8, 65, 69], "base": [8, 62, 64], "exist": [8, 19, 28, 30, 52, 57, 71, 72], "model1": 8, "model2": 8, "ident": [8, 57, 65], "creation": 8, "t_temp_var": 8, "differ": [8, 18, 33, 34, 36, 38, 41, 57, 64, 68, 69], "than": [8, 9, 18, 33, 34, 36, 38, 40, 41, 49], "ha": [8, 14, 15, 18, 28, 29, 40, 52, 57, 58, 65, 68, 69, 71], "cost": [8, 33, 34, 44, 49, 54, 57, 65, 69], "refer": [8, 9, 18, 50, 63, 65, 68, 69, 71], "within": 8, "constiteratorforward": 8, "abl": 8, "construct": 8, "over": [8, 71], "t_row": [8, 14], "lessorequ": [8, 14], "right": [8, 11, 30, 58, 65, 69, 71, 72], "hand": [8, 57, 69], "side": [8, 71], "t_ctr": [8, 9], "uniqu": 8, "clone": [8, 18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 38, 40, 41, 52], "pointer": 8, "optimizerfactori": [8, 18, 30, 31, 33, 34, 40, 69], "t_optimizer_factori": [8, 30, 31], "directli": [8, 33, 34, 57, 68, 69], "wa": 8, "replac": 8, "one": [8, 9, 14, 57, 62, 65, 68, 69, 71], "has_optim": 8, "unus": 8, "therefor": [8, 58], "left": [8, 11, 19, 28, 30, 64, 65, 69, 71, 72], "without": [8, 33, 61, 62, 68], "add_vector": 8, "t_vector": 8, "branchandbound": [8, 19, 22, 28, 40, 53, 54, 56, 65], "n_solved_nod": 8, "been": [8, 14, 15, 28, 29, 30, 40, 58, 65, 68, 69], "beforehand": 8, "write": [8, 19, 28, 57, 71], "ask": [8, 33, 34, 60, 61], "piec": [8, 68, 69], "inform": [8, 18, 19, 33, 34, 40, 57, 65, 69], "file": [8, 52, 62, 65], "lp": [8, 57, 71], "destin": [8, 58], "updat": [8, 19, 57], "hi": 8, "you": [8, 18, 19, 28, 30, 33, 50, 52, 57, 58, 59, 60, 61, 62, 63, 64, 68, 69], "do": [8, 19, 50, 58, 61, 62, 63, 65], "need": [8, 14, 15, 28, 50, 52, 57, 58, 62, 63, 64, 65, 68], "method": [8, 9, 18, 19, 28, 40, 57, 61, 64, 65, 68, 69, 70], "sinc": [8, 57, 68, 71], "automat": [8, 18, 30, 40, 50, 52, 57, 59, 62, 66, 70, 71], "done": [8, 18, 19, 40, 52, 57, 61, 62, 64, 65, 71], "while": [8, 11, 18, 64, 68, 69, 71], "perform": [8, 19, 28, 33, 34, 65], "lazi": [8, 19, 28, 30], "represent": 8, "when": [8, 18, 19, 28, 29, 33, 34, 36, 38, 40, 41, 49, 52, 60, 65, 69], "necessari": [8, 28, 40, 58, 64, 69], "befor": [8, 57, 58], "even": [8, 60], "case": [8, 12, 13, 18, 33, 34, 36, 38, 40, 41, 65, 69, 71, 72], "so": [8, 18, 33, 34, 57, 58, 65], "user": [8, 18, 19, 28, 40, 49, 57], "should": [8, 12, 13, 19, 28, 33, 34, 49, 52, 57, 58, 61, 63, 64, 65, 68, 71], "get_obj_sens": 8, "sens": [8, 62, 69], "get_obj_expr": 8, "get_rhs_expr": 8, "rh": [8, 11], "get_mat_coeff": 8, "coeff": [8, 68], "c1": 8, "correspond": [8, 19, 65, 69], "solutionstatu": [8, 12, 13, 69], "get_statu": [8, 53, 65, 69], "statu": [8, 12, 13, 65, 69], "solutionreason": [8, 12, 13], "get_reason": [8, 69], "reason": [8, 12, 13, 28, 65, 69], "fail": [8, 33, 34, 57], "becaus": [8, 69], "known": [8, 71], "feasibl": [8, 18, 30, 33, 34, 36, 38, 41, 49, 65, 69], "optimum": 8, "get_best_bound": [8, 69], "best_obj": [8, 69], "best_bound": [8, 69], "relative_gap": [8, 69], "100": [8, 57, 69], "set_obj_sens": [8, 69], "set_rhs_expr": 8, "lin": 8, "c2": 8, "set_obj_const": 8, "10": [8, 43, 49, 57, 63, 65, 69], "set_mat_coeff": 8, "t_coeff": 8, "get_ctr_by_index": 8, "t_index": 8, "get_var_by_index": 8, "get_ctr_index": 8, "index": [8, 57, 69], "chang": [8, 19, 49, 58], "particular": [8, 50, 57, 58, 61], "get_ctr_typ": 8, "get_ctr_row": 8, "get_ctr_dual": [8, 69], "get_ctr_farka": [8, 69], "farka": [8, 33, 34, 40, 57, 69], "certif": [8, 18, 33, 34, 36, 38, 41, 69], "infeas": [8, 18, 33, 34, 36, 38, 40, 41, 57, 65, 69], "set_ctr_rh": 8, "set_ctr_typ": 8, "set_ctr_row": 8, "get_var_index": 8, "get_var_typ": 8, "get_var_lb": 8, "lb": [8, 15, 49], "get_var_ub": 8, "ub": [8, 15, 49], "get_var_prim": [8, 65, 69], "get_var_rai": [8, 69], "unbound": [8, 18, 33, 34, 36, 38, 41, 69], "rai": [8, 69], "get_var_column": 8, "set_var_typ": 8, "now": [8, 28, 52, 58, 63, 64, 65, 68, 69, 71], "set_var_lb": 8, "restrict": 8, "set_var_ub": 8, "set_var_obj": 8, "set_var_column": 8, "get_n_solut": 8, "avail": [8, 28, 52, 65], "find": [8, 61], "sever": [8, 62], "sub": [8, 18, 40, 57, 59, 61, 65], "branch": [8, 18, 19, 28, 29, 34, 40, 55, 56, 65], "algorithm": [8, 18, 19, 28, 29, 33, 34, 36, 38, 40, 41, 64, 65, 69], "pool": [8, 33, 34, 57], "select": [8, 18, 22, 40, 53, 54, 56, 57, 65, 69], "set_solution_index": 8, "retriev": [8, 65, 69], "via": [8, 52, 57], "n_solut": 8, "get_solution_index": 8, "being": [8, 18, 19, 28, 40, 58, 62, 65], "save_prim": [8, 54, 56, 64, 65, 69], "more": [9, 28, 57, 58, 65, 68], "precis": [9, 68], "consid": [9, 30, 49, 64, 68, 69, 71], "add_paramet": 9, "rather": [9, 40, 49], "standard": [9, 19, 57, 69, 71], "cannot": [9, 19, 28, 52, 57], "own": [9, 18, 32, 40, 57], "conditional_t": 10, "is_same_v": 10, "symmetric_pair_hash": 10, "symmetric_pair_equal_to": 10, "equal_to": 10, "quadterm": 10, "t_a": 10, "t_b": 10, "handsid": [11, 30], "whole": [11, 30], "t_lh": 11, "set_rh": 11, "emptyrow": 11, "abstractsolut": [12, 13], "typenam": [12, 13, 18], "map": [12, 13], "set_statu": [12, 13], "t_statu": [12, 13], "desir": [12, 13, 14, 15, 33, 34, 57, 61, 65, 68, 69], "set_reason": [12, 13], "t_reason": [12, 13], "set_objective_valu": [12, 13], "objective_valu": [12, 13], "has_objective_valu": [12, 13], "reset_objective_valu": [12, 13], "cbegin": [12, 13], "cend": [12, 13], "norm": [12, 13], "t_p": [12, 13], "l_p": [12, 13], "possibl": [12, 13, 19, 28, 49, 57, 58, 60, 61, 63, 65, 68, 69], "infinit": [12, 13, 30], "comput": [12, 13, 49, 58, 59, 61, 62, 69, 71], "p": [12, 13, 46, 57, 69, 71], "merge_without_conflict": [12, 13], "merg": [12, 13], "explicitli": [12, 13, 61, 68], "expect": [12, 13, 71], "conflict": [12, 13], "present": [12, 13, 69], "detect": [12, 13], "except": [12, 13, 62], "thrown": [12, 13, 62], "normal": [12, 13, 61], "divid": [12, 13], "temporari": [14, 15], "built": [14, 15, 50, 60], "yet": [14, 15, 28, 40, 49, 57], "instanti": [14, 15, 68], "between": [14, 62], "exampl": [14, 15, 33, 34, 36, 38, 40, 41, 56, 60, 64, 68], "y": [14, 53, 64, 68, 72], "subclass": [14, 15, 19, 28], "see": [14, 15, 28, 30, 44, 46, 58, 63, 64, 68, 69, 71], "set_typ": [14, 15], "is_viol": 14, "t_solut": 14, "violat": [14, 30, 33, 34, 49], "check": [14, 19, 30], "same": [15, 63, 65], "varvers": [15, 16], "set_lb": 15, "set_ub": 15, "custom": [18, 28, 40, 57, 58], "larg": [18, 28, 30], "degre": 18, "freedom": 18, "familiar": [18, 65], "pleas": [18, 19, 50, 61, 63, 69], "page": [18, 34, 50, 52, 58, 61, 62, 63, 68, 69], "simpl": [18, 30, 64, 68], "integ": [18, 29, 49], "relax": [18, 19, 28, 29, 30, 40, 65], "node": [18, 19, 22, 28, 29, 40, 53, 54, 56, 57, 65], "extern": [18, 33, 34, 36, 38, 41, 60, 61, 65, 67, 68, 70], "solver": [18, 19, 33, 34, 53, 54, 56, 60, 61, 65, 67, 68, 70], "glpk": [18, 19, 33, 34, 38, 40, 41, 54, 57, 60, 61, 64, 68, 69], "accord": [18, 19], "rule": [18, 19, 22, 40, 53, 54, 56, 57, 65], "incorpor": 18, "tree": [18, 19, 28, 29, 57, 65], "explor": [18, 19, 28, 57], "maximum": [18, 33, 34, 36, 38, 41], "depth": [18, 40, 57], "with_node_optim": [18, 19, 40, 53, 54, 56, 65], "continuousrelax": [18, 19, 36, 38, 40, 41, 53, 54, 56, 65], "with_branching_rul": [18, 19, 40, 53, 54, 56, 65], "mostinfeas": [18, 19, 21, 22, 40, 53, 54, 56, 65], "with_node_selection_rul": [18, 19, 40, 53, 54, 56, 65], "bestbound": [18, 22, 27, 40, 53, 56, 65], "with_subtree_depth": [18, 40], "nodet": [18, 20, 23, 24, 25, 26], "nodeinfo": [18, 19], "optimizerfactorywithdefaultparamet": [18, 36, 38, 41], "strongli": [18, 33], "advis": [18, 33, 57, 58, 68], "inherit": [18, 28, 57], "order": [18, 58, 61, 62, 63], "your": [18, 32, 40, 52, 57, 58, 59, 61, 68], "returnt": 18, "only_if_has_strategi": [18, 40], "strategi": [18, 19, 20, 23, 24, 25, 26, 28, 30, 31, 32], "second_typ": 18, "exploit": 18, "sfina": 18, "identifi": [18, 30], "make": [18, 19, 33, 34, 50, 52, 53, 58, 62, 63, 64, 68], "like": [18, 28, 40, 57, 60, 62, 64, 65, 68, 69], "depthfirst": [18, 19, 22, 27, 40], "t_node_optim": 18, "branchingrulefactori": [18, 20], "t_branching_rul": 18, "child": [18, 28], "branchingrulefactoryt": 18, "nest": [18, 40, 57], "avoid": 18, "repeat": [18, 68], "nodeselectionrulefactori": [18, 23, 24, 25, 26], "t_node_select": 18, "with_node_select": 18, "nodeselectionrulefactoryt": 18, "t_node_selection_rul": 18, "polymorph": [18, 33, 34, 36, 38, 41], "t_depth": 18, "children": [18, 57], "take": [18, 68, 69, 71], "root": [18, 63], "thu": [18, 30, 57, 62, 65, 68, 71], "strictli": 18, "greater": [18, 33, 34, 36, 38, 41], "along": 18, "with_log_frequ": [18, 33, 34, 35, 40], "t_log_frequ": [18, 33, 34], "log": [18, 33, 34, 36, 38, 40, 41, 65], "frequenc": [18, 33, 34], "relev": 18, "level": [18, 33, 34, 36, 38, 41, 49, 63], "least": [18, 58, 68], "info": [18, 33, 34, 36, 38, 40, 41, 52, 54, 56, 65], "with_log_level": [18, 30, 32, 33, 34, 35, 36, 38, 40, 41, 53, 54, 56, 65], "blue": [18, 40, 53, 54, 56, 65], "with_callback": [18, 19, 28, 38, 40, 54, 64], "branchandboundcallbackfactori": [18, 19], "t_callback": 18, "callback": [18, 19, 29, 30, 31, 40, 57, 64], "integermasterheurist": [18, 54], "callbackfactori": [18, 28, 30, 31, 38], "independ": [18, 19, 57], "convert": 18, "branchandboundcallback": [18, 22, 28, 40], "usercutcallback": [18, 19, 32, 40], "separation_model": 18, "my_cut": 18, "with_cutting_plan": [18, 40, 56], "cuttingplanegener": 18, "t_cutting_place_gener": 18, "loglevel": [18, 30, 31, 33, 34, 36, 38, 41], "t_log_level": [18, 31, 33, 34, 36, 38, 41], "color": [18, 30, 31, 33, 34, 36, 38, 41], "t_log_color": [18, 31, 33, 34, 36, 38, 41], "green": [18, 33, 34, 36, 38, 41], "with_time_limit": [18, 33, 34, 35, 36, 38, 40, 41, 65], "t_time_limit": [18, 33, 34, 36, 38, 41], "limit": [18, 33, 34, 36, 38, 40, 41, 65], "3600": [18, 33, 34, 36, 38, 40, 41, 65], "second": [18, 33, 34, 36, 38, 40, 41, 57, 62, 65], "with_thread_limit": [18, 33, 34, 35, 36, 38, 40, 41], "t_max_n_thread": [18, 33, 34, 36, 38, 41], "thread": [18, 33, 34, 36, 38, 41], "with_iteration_count_limit": [18, 33, 34, 35, 36, 38, 40, 41], "t_iteration_count_limit": [18, 33, 34, 36, 38, 41], "go": [18, 33, 34, 36, 38, 41, 52], "through": [18, 28, 33, 34, 36, 38, 41, 65, 68], "200": [18, 33, 34, 36, 38, 41, 65], "with_best_bound_stop": [18, 33, 34, 35, 36, 38, 40, 41], "t_best_bound_stop": [18, 33, 34, 36, 38, 41], "threshold": [18, 33, 34, 36, 38, 41], "stop": [18, 29, 33, 34, 36, 38, 41], "my_known_best_obj": [18, 33, 34, 36, 38, 41], "with_best_obj_stop": [18, 33, 34, 35, 36, 38, 40, 41], "t_user_best_obj": [18, 33, 34, 36, 38, 41], "less": [18, 33, 34, 36, 38, 41], "my_known_best_bound": [18, 33, 34, 36, 38, 41], "with_relative_gap_toler": [18, 33, 34, 35, 36, 38, 40, 41], "t_relative_gap_toler": [18, 33, 34, 36, 38, 41], "rel": [18, 33, 34, 36, 38, 41, 49, 69], "prove": [18, 33, 34, 36, 38, 41, 57, 65], "05": [18, 33, 34, 36, 38, 41], "with_absolute_gap_toler": [18, 33, 34, 35, 36, 38, 40, 41], "t_absolute_gap_toler": [18, 33, 34, 36, 38, 41], "absolut": [18, 33, 34, 36, 38, 41, 49, 69], "1e": [18, 33, 34, 36, 38, 41, 49, 54, 69], "4": [18, 33, 34, 36, 38, 41, 49, 54, 61, 64, 65, 68], "with_presolv": [18, 33, 34, 35, 36, 38, 40, 41], "get_param_presolv": [18, 33, 34, 36, 38, 41], "activ": [18, 33, 34, 36, 38, 41, 52], "turn": [18, 33, 34, 36, 38, 41, 64], "off": [18, 33, 34, 36, 38, 41, 52, 64], "phase": [18, 33, 34, 36, 38, 41, 57], "disabl": [18, 33, 34, 36, 38, 41], "enabl": [18, 33, 34, 36, 38, 41], "with_infeasible_or_unbounded_info": [18, 33, 34, 35, 36, 38, 40, 41], "behaviour": [18, 29, 33, 34, 36, 38, 41], "shown": [18, 33, 34, 36, 38, 41], "forc": [18, 33, 34, 36, 38, 41, 52], "unbounded": [18, 33, 34, 36, 38, 41], "provid": [18, 33, 34, 36, 38, 41, 61, 64, 71], "condit": [18, 33, 34, 35, 36, 38, 40, 41], "t_conditional_valu": [18, 33, 34, 36, 38, 41], "t_if": [18, 33, 34, 36, 38, 41], "execut": [18, 19, 28, 29, 33, 34, 36, 38, 41, 57, 60, 61, 68, 69], "lambda": [18, 33, 34, 36, 38, 41, 71], "depend": [18, 33, 34, 36, 38, 41, 51], "use_presolv": [18, 33, 34, 36, 38, 41], "noth": [18, 33, 34, 36, 38, 41], "happen": [18, 33, 34, 36, 38, 41], "t_els": [18, 33, 34, 36, 38, 41], "run": [19, 40, 52, 58, 63, 65], "implement": [19, 28, 30, 57, 69, 70], "advanc": [19, 28, 64, 65], "featur": [19, 28, 65], "sure": [19, 57, 64, 68], "what": [19, 40, 64, 68], "try": [19, 58], "pre": 19, "lazycutcallback": [19, 32, 40, 66, 70], "advantag": 19, "instead": [19, 28, 30, 33, 40, 62, 68], "li": 19, "access": [19, 62, 68, 70], "regard": [19, 64, 65, 69], "print": [19, 28, 40, 54], "out": [19, 28, 57, 58], "event": [19, 28, 32, 40], "trigger": [19, 28], "nodeload": [19, 29, 32], "mycallback": [19, 28], "protect": [19, 28], "callbackev": [19, 28, 29, 32, 40], "t_event": [19, 28], "nodiscard": 19, "Then": [19, 30, 52, 58, 61, 62, 65, 69, 71], "By": [19, 33, 34, 50, 52, 58, 63, 69, 71], "wish": 19, "want": [19, 28, 52, 57, 58, 61, 65, 69], "manual": 19, "obtain": [19, 65, 68, 71], "advanced_interfac": 19, "nodeinfot": 19, "callbackasbranchandboundcallback": 19, "main": [19, 28, 53, 54, 56, 57, 60, 61, 68], "block": [19, 28, 50], "add_user_cut": [19, 28, 32, 40], "t_cut": [19, 28, 30, 31], "cut": [19, 28, 30, 56, 57], "add_lazy_cut": [19, 28, 32, 40], "original_model": [19, 40], "origin": [19, 30, 57, 61, 65], "start": [19, 29, 30, 57, 61, 68, 70, 71], "submit_heuristic_solut": [19, 40], "t_info": 19, "submit": [19, 57], "valid": [19, 28, 29, 57], "incumb": [19, 29], "improv": [19, 28, 33, 34], "submit_bound": [19, 40], "t_bound": 19, "proven": 19, "timer": [19, 28], "iteratort": 20, "t_begin": 20, "t_end": 20, "t_parent": [20, 23, 24, 25, 26], "branchingrul": 20, "worstbound": [22, 27, 40, 54], "breadthfirst": [22, 27, 40], "nodeselectionrul": [23, 24, 25, 26], "invok": 28, "dure": [28, 29, 30, 68, 69], "certain": 28, "step": [28, 58, 65, 69], "procedur": [28, 57], "These": 28, "monitor": 28, "progress": 28, "control": [28, 57, 68], "behavior": [28, 33], "addit": [28, 49, 65], "process": [28, 30, 57, 58], "common": [28, 57, 68], "offer": [28, 57, 68, 69], "box": [28, 57], "routin": [28, 57], "separ": [28, 64, 71], "total": 28, "nutshel": 28, "similarli": [28, 68, 69], "intend": [28, 63], "potenti": [28, 30], "qualiti": 28, "presenc": 28, "converg": [28, 33], "were": 28, "omit": [28, 30, 65], "definit": [28, 30, 61, 71], "pass": [28, 40, 58, 63, 65], "role": [28, 71], "whenev": 28, "littl": 28, "give": [28, 68], "incumbentsolut": [28, 29, 32], "primal_solut": [28, 32], "later": 28, "compliant": [28, 50], "cutsepar": [28, 30, 31], "callbacki": 28, "enum": 29, "enumer": [29, 30, 65], "influenc": [29, 57], "modifi": [29, 57], "algorithmstart": [29, 32], "algorithmstop": [29, 32], "occur": 29, "about": [29, 57], "invalidsolut": [29, 32], "essenti": [30, 68], "judici": 30, "smaller": [30, 49], "against": 30, "resolv": 30, "satisfi": [30, 49], "materi": [30, 65], "fly": 30, "align": [30, 64, 71, 72], "min_x": 30, "top": [30, 57, 71, 72], "text": [30, 64], "xi_0": [30, 68], "quad": [30, 64, 65], "assum": [30, 58, 65, 69, 71], "idea": [30, 57, 61, 68], "master": [30, 33, 34, 40, 57, 65], "denot": [30, 40, 62, 65, 69, 71], "search": [30, 60], "observ": [30, 65, 71], "hold": [30, 71], "leftrightarrow": 30, "max_": [30, 71, 72], "varepsilon": 30, "interest": [30, 71], "tutori": [30, 34, 57, 64, 65, 68, 69, 71], "show": [30, 33, 34, 62, 64, 65, 69, 71], "how": [30, 34, 50, 52, 57, 58, 62, 64, 65, 68, 69, 71], "bender": [30, 57, 66, 70], "with_separation_optim": [30, 31, 32, 64], "t_level": 30, "t_color": 30, "t_separation_problem": [30, 31], "convex": 33, "properti": 33, "lead": [33, 64], "undefin": 33, "dantzigwolfedecomposit": [33, 35, 40, 54, 65], "optimizerfactorywithcolumngenerationparamet": [33, 34], "t_n_subproblem": 33, "reserve_for_subproblem": [33, 35], "n_subproblem": [33, 35], "with_master_optim": [33, 34, 35, 40, 54, 65], "t_master_optim": [33, 34], "with_subproblem": [33, 35], "with_parallel_pricing_limit": [33, 34, 35], "t_limit": [33, 34], "configur": [33, 34, 58, 69], "price": [33, 34, 40, 55, 57, 65], "parallel": [33, 34, 57], "with_column_pool_clean_up": [33, 34, 35, 54], "t_threshold": [33, 34], "t_ratio": [33, 34], "clean": [33, 34, 57], "larger": [33, 34, 49, 57], "oldest": [33, 34], "newest": [33, 34], "kept": [33, 34], "ratio": [33, 34], "with_farkas_pr": [33, 34, 35, 40, 54], "with_artificial_variables_cost": [33, 34, 35, 54], "t_artificial_variable_cost": [33, 34], "artifici": [33, 34, 57], "approach": [33, 34], "too": [33, 34, 57, 68], "small": [33, 34, 69], "switch": [33, 34, 57], "pure": [33, 34, 57, 60], "appli": [33, 34, 40, 64, 65], "with_dual_price_smoothing_stabil": [33, 34, 35, 40, 54], "t_smoothing_factor": [33, 34], "stabil": [33, 34, 40, 57], "smooth": [33, 34, 40, 57], "displai": [33, 34], "with_max_columns_per_pr": [33, 34, 35], "t_n_column": [33, 34], "nuber": [33, 34], "with_non_optimal_pricing_phas": [33, 34, 35], "t_relative_gap": [33, 34], "crtp": [33, 34], "document": [34, 50], "t_decomposit": 34, "with_pricing_optim": [34, 35, 40, 54, 65], "t_pricing_optim": 34, "with_branching_on_mast": [34, 35, 40, 54], "with_aggregation_typ": [34, 35], "t_original_formul": 34, "columngener": [35, 40, 54], "t_cb": 38, "with_lazy_cut": [38, 64], "with_max_n_solution_in_pool": 38, "with_continuous_relaxation_onli": [38, 41], "with_external_param": 38, "grb_intparam": 38, "grb_doubleparam": 38, "my_model": 40, "eventu": [40, 69], "our": [40, 57, 61, 64, 65, 69, 71], "inde": [40, 57, 69], "mechan": 40, "allow": [40, 57, 65], "complex": [40, 57], "togeth": 40, "nested_branch_and_pric": 40, "overal": [40, 57, 65], "with_node_solv": 40, "decomposition1": [40, 65], "decompos": [40, 70], "with_pricing_solv": 40, "with_nodes_solv": 40, "decomposition2": 40, "again": 40, "mosek": [40, 57, 60, 61], "could": [40, 57, 69], "worst": [40, 57], "dealt": 40, "onc": [40, 52, 57, 68], "mostli": 40, "work": [40, 57, 58, 60, 61, 69], "plan": 40, "usual": 40, "recogn": [40, 49], "with_": 40, "And": 40, "with_external_paramet": 41, "namespac": [43, 44, 45, 46, 47, 49, 53, 54, 56, 57, 68], "read_instance_2021_cheng_et_": 43, "t_filenam": [43, 44, 45, 46], "read": [43, 53, 61, 63, 64, 65, 71], "chun": 43, "cheng": 43, "yossiri": 43, "adulyasak": 43, "loui": 43, "martin": 43, "rousseau": 43, "robust": [43, 57, 70, 71], "under": 43, "demand": [43, 47, 53], "uncertainti": 43, "disrupt": 43, "omega": 43, "volum": 43, "103": 43, "2021": 43, "102429": 43, "issn": 43, "0305": 43, "0483": 43, "http": [43, 44, 46, 52, 61], "doi": 43, "org": [43, 44, 46, 50], "1016": 43, "filenam": 43, "read_instance_1991_cornuejols_et_": [43, 53], "generate_instance_1991_cornuejols_et_": 43, "t_n_facil": 43, "t_n_custom": 43, "t_ratio_capacity_over_demand": 43, "n_facil": [43, 53], "n_custom": [43, 53], "fixed_cost": [43, 53], "t_i": [43, 65], "capac": [43, 44, 45, 53, 54, 56, 57, 65, 69], "t_j": 43, "per_unit_transportation_cost": [43, 53], "set_fixed_cost": 43, "set_capac": [43, 44, 45], "set_demand": [43, 47], "set_per_unit_transportation_cost": 43, "read_inst": [44, 45, 46, 54, 56, 65], "generate_instance_chu_and_beasley_1997_c": 44, "t_n_machin": 44, "t_n_job": 44, "includ": [44, 46, 53, 54, 56, 57, 60, 61, 63, 65, 68, 69], "gap_inst": [44, 54, 65], "h": [44, 46, 52, 53, 54, 56, 60, 61, 63, 65, 68, 69, 72], "en": [44, 46], "wikipedia": [44, 46, 69], "wiki": [44, 46], "generalized_assignment_problem": [44, 46], "t_n_agent": 44, "n_agent": [44, 54, 65], "n_job": [44, 54, 65], "t_agent": 44, "t_job": 44, "resource_consumpt": [44, 54, 65], "set_cost": 44, "set_resource_consumpt": 44, "read_instance_kplib": 45, "t_n_item": [45, 46], "n_item": [45, 46, 56, 57], "profit": [45, 56, 57, 69], "t_item": [45, 46], "weight": [45, 56, 57, 69], "set_profit": 45, "set_weight": 45, "mkp_instanc": 46, "t_n_knapsack": 46, "n_knapsack": 46, "w": [46, 69, 72], "t_knapsack": 46, "set_p": 46, "set_w": 46, "set_t": 46, "generate_random_instance_zhao_et_al_2012": 47, "t_n_regular_staff": 47, "t_n_part_time_staff": 47, "t_n_time_period": 47, "read_instance_from_fil": 47, "t_path_to_fil": 47, "ostream": 47, "t_o": 47, "t_instanc": 47, "n_regular_staff": 47, "n_part_time_staff": 47, "n_time_period": 47, "shift_dur": 47, "regular_staff_fixed_wage_cost": 47, "t_staff_index": 47, "t_time_index": 47, "regular_staff_minimum_number_of_shift": 47, "regular_staff_maximum_number_of_shift": 47, "part_time_fixed_wage_cost": 47, "part_time_staff_hourly_wage_cost": 47, "part_time_staff_minimum_number_of_shift": 47, "part_time_staff_maximum_number_of_shift": 47, "unmet_demand_penalty_cost": 47, "set_regular_staff_shift_dur": 47, "set_regular_staff_fixed_wage_cost": 47, "set_regular_staff_minimum_number_of_shift": 47, "set_regular_staff_maximum_number_of_shift": 47, "set_part_time_fixed_wage_cost": 47, "set_part_time_staff_hourly_wage_cost": 47, "set_part_time_staff_minimum_number_of_shift": 47, "set_part_time_staff_maximum_number_of_shift": 47, "set_unmet_demand_penalty_cost": 47, "t_index_index": 47, "high": 49, "alwai": [49, 64], "taken": [49, 57, 64], "account": 49, "apart": 49, "local": [49, 50, 52, 57, 58, 59, 63], "global": [49, 57, 59, 61, 65], "6": [49, 65], "recommend": [49, 58, 64, 65], "rang": [49, 53, 54, 56, 57, 65], "data": [49, 69], "save": 49, "spars": 49, "manner": 49, "close": 49, "ignor": 49, "miprelativegap": 49, "declar": 49, "mip": 49, "compar": 49, "relativegap": 49, "frac": [49, 69, 71], "mipabsolutegap": 49, "absolutegap": 49, "10e": 49, "9": [49, 65], "closest": 49, "closer": 49, "character": 49, "satisfact": 49, "amount": 49, "reduc": [49, 69], "explain": [50, 52, 62], "machin": [50, 52], "doxygen": 50, "bunch": 50, "tool": [50, 63], "sphinx": 50, "python": 50, "rtd": 50, "theme": 50, "render": 50, "html": 50, "sitemap": 50, "extens": 50, "multi": 50, "languag": 50, "copybutton": 50, "button": 50, "code": [50, 51, 57, 62, 68], "breath": 50, "plugin": 50, "detail": [50, 58, 65, 68], "interact": 50, "articl": 50, "sudo": [50, 52, 58], "apt": 50, "last": [50, 58], "python3": 50, "pip3": 50, "cmake": [50, 52, 58, 59, 60, 61, 62], "target": [50, 52, 60, 61, 62, 63], "websit": 50, "directori": [50, 52, 58, 63], "command": [50, 52, 58], "doc": [51, 57], "instruct": 51, "unit": [51, 57], "test": [51, 57], "coverag": 51, "option": [51, 53, 58, 59, 61, 62, 68], "framework": 52, "catch2": 52, "told": 52, "look": [52, 57, 63], "attempt": 52, "download": [52, 57, 59, 61, 62], "github": [52, 61], "repositori": [52, 63], "git": [52, 61], "com": [52, 61], "catchorg": 52, "cd": [52, 58], "bbuild": 52, "dbuild_test": 52, "nor": 52, "To": [52, 58, 63, 64, 65, 69], "tell": [52, 61, 63, 65], "build_test": 52, "ye": [52, 58, 61, 62, 63], "gcov": 52, "shall": 52, "with_test_coverag": 52, "effect": 52, "dwith_code_coverag": 52, "report": [52, 69], "lcov": 52, "captur": 52, "compil": [52, 58], "push": 52, "action": 52, "codecov": 52, "henri": [53, 54, 56], "06": [53, 56], "04": [53, 56, 65], "23": [53, 54, 56, 61], "iostream": [53, 54, 56, 60, 61], "flp_instanc": 53, "t_argc": [53, 54, 56, 60, 61, 68], "char": [53, 54, 56, 60, 61, 68], "t_argv": [53, 54, 56, 60, 61, 68], "txt": [53, 54, 56, 60, 61, 65], "idol_sum": [53, 54, 56, 57, 65, 69], "backend": 53, "trace": 53, "13": [54, 65], "03": 54, "optimizers_columngener": 54, "masterid": [54, 65], "x_ij": [54, 65], "capacity_": [54, 65], "to_str": [54, 65, 69], "th": 54, "subproblem": [54, 57], "assignment_": [54, 65], "yellow": 54, "8": [54, 65], "75": 54, "with_optim": [54, 56], "gurobi_c": 56, "kp_instanc": 56, "plane": [56, 57], "covercut": 56, "home": [56, 63], "clionproject": 56, "instance50": 56, "librari": [57, 58, 60, 62, 68, 69], "Its": 57, "goal": 57, "eas": 57, "develop": [57, 63], "techniqu": 57, "friendli": 57, "state": 57, "art": 57, "visit": 57, "instal": [57, 60, 62, 63], "guidelin": 57, "easiest": [57, 61], "think": 57, "latest": 57, "folder": [57, 58, 59, 61, 63], "realli": [57, 68], "mater": 57, "natur": [57, 68], "peopl": 57, "40": [57, 69], "50": [57, 65, 69], "95": [57, 69], "30": [57, 69], "14": [57, 65, 69, 71], "98": [57, 69], "learn": [57, 69], "beginn": 57, "experienc": 57, "fine": 57, "tune": 57, "well": [57, 63, 65, 69, 71], "engin": 57, "softwar": 57, "enhanc": 57, "sigma_i": 57, "hard": 57, "dedic": [57, 61], "handl": 57, "experiment": 57, "extrem": 57, "care": [57, 68], "standalon": 57, "mi": 57, "unifi": 57, "veri": [57, 68], "easili": [57, 68, 69], "almost": 57, "everyth": 57, "tweak": 57, "agnost": 57, "long": [57, 71], "properli": 57, "classic": [57, 61], "enrich": 57, "carri": 57, "parent": 57, "customiz": 57, "breadth": 57, "specifi": [57, 58, 61, 63, 64, 65, 68, 69], "heurist": 57, "abov": [57, 69], "support": 57, "reach": 57, "quick": [57, 58], "come": 57, "pseudo": 57, "strong": 57, "reliabl": 57, "resort": 57, "exactli": [57, 68], "mani": [57, 68], "mean": [57, 64, 68], "singl": [57, 68, 70], "black": 57, "As": [57, 61, 68, 71], "plug": 57, "system": [57, 58], "ryan": 57, "foster": 57, "api": [57, 68, 69], "guid": [57, 58, 61], "22": [58, 60, 71], "earlier": 58, "simpli": [58, 65], "opt": 58, "mkdir": 58, "section": [58, 64, 65, 71], "your_cmake_options_should_go_her": 58, "duse_gurobi": [58, 63], "gurobi_hom": [58, 63], "correctli": 58, "offici": [58, 63], "readi": [58, 64, 65], "superus": 58, "cmake_install_prefix": 58, "my": 58, "list": [58, 59, 61, 65], "sai": [58, 61], "my_opt": [58, 61], "my_valu": [58, 61], "dmy_opt": 58, "welcom": 59, "There": [59, 71], "two": [59, 65, 70, 71], "wai": [59, 61, 65, 68, 69], "usr": [59, 63], "lib": [59, 63], "let": [59, 61, 65, 68, 69], "project": [59, 61], "link": [59, 61], "eigen": [59, 71], "though": [60, 65, 68, 69], "still": 60, "makefil": 60, "gcc": 60, "clang": 60, "cmakelist": [60, 61], "cmake_minimum_requir": [60, 61], "my_project": [60, 61], "cmake_cxx_standard": [60, 61], "17": [60, 61], "add_execut": [60, 61], "my_target": [60, 61], "cpp": [60, 61], "find_packag": 60, "target_link_librari": [60, 61], "behind": 61, "fetchcontent_": 61, "direct": 61, "fetchcont": 61, "use_gurobi": [61, 63], "fetchcontent_declar": 61, "git_repositori": 61, "hlefebvr": 61, "git_tag": 61, "tag": 61, "v0": 61, "alpha": 61, "fetchcontent_makeavail": 61, "elabor": 62, "usag": 62, "discuss": [62, 68], "header": [62, 65], "One": 62, "sourc": 62, "use_eigen": 62, "duse_mosek": [62, 63], "duse_eigen": 62, "ix_jx_k": 62, "conic": [62, 71], "textbf": 62, "fx": 62, "mathcal": [62, 71], "cone": [62, 71], "f": [62, 71], "relat": [62, 65], "convers": 62, "gurobi_dir": 63, "path": 63, "dir": 63, "dgurobi_dir": 63, "achiev": [63, 68], "use_mosek": 63, "mosek_hom": 63, "mosek_dir": 63, "bin": 63, "my_usernam": 63, "platform": 63, "linux64x86": 63, "dmosek_dir": 63, "qp": 63, "socp": 63, "use_glpk": 63, "glpk_home": 63, "glpk_dir": 63, "duse_glpk": 63, "build_exampl": 63, "dbuild_exampl": 63, "ex_knapsack_problem": 63, "topic": [64, 65], "rudimentari": [64, 65], "notion": [64, 65], "program": [64, 68], "dualiti": [64, 71], "blanco": 64, "v": [64, 71], "2016": 64, "minlp": 64, "school": 64, "theori": 64, "applic": 64, "min_": [64, 71, 72], "3x_1": 64, "2y": 64, "2x_1": 64, "ge": [64, 71, 72], "2x_0": 64, "3y": 64, "complic": 64, "lambda_1": [64, 71], "lambda_2": 64, "2_": 64, "lambda_0": 64, "three": [64, 65, 68], "thing": 64, "shape": 64, "descript": 64, "dual_spac": 64, "final": [64, 65, 69], "benders_cut": 64, "prepend": 64, "symbol": [64, 68], "would": [64, 65], "wrong": 64, "benchmark": 65, "assignemnt": 65, "comparison": 65, "coluna": 65, "jl": 65, "reader": 65, "agent": 65, "task": 65, "c_": 65, "w_": 65, "resourc": 65, "consumpt": 65, "min": [65, 68, 71, 72], "encod": 65, "u": [65, 71], "bar": 65, "e_": 65, "_": [65, 71], "mn": 65, "lambda_": 65, "foral": [65, 72], "exponenti": 65, "effici": 65, "simplest": 65, "space": 65, "formul": 65, "parser": 65, "load": 65, "crucial": 65, "mandatori": 65, "remain": 65, "That": 65, "fraction": 65, "rest": 65, "unchang": 65, "produc": 65, "2023": 65, "07": 65, "45": 65, "44": 65, "timt": 65, "00": 65, "timi": 65, "stat": 65, "rea": 65, "objval": 65, "110000": 65, "ngen": 65, "bestbnd": 65, "bestobj": 65, "rgap": 65, "90909090909090928": 65, "agap": 65, "50093": 65, "00000": 65, "40096": 65, "30068": 65, "01": 65, "242": 65, "277": 65, "86": 65, "58": 65, "35": 65, "36": 65, "7": 65, "90269": 65, "85653": 65, "50000": 65, "58001": 65, "35653": 65, "49817": 65, "36131": 65, "16": 65, "02": 65, "51": 65, "levl": 65, "relgap": 65, "absgap": 65, "233": 65, "42918454935603896320": 65, "08": 65, "22579": 65, "17547": 65, "17552": 65, "235": 65, "81": 65, "21": 65, "25760": 65, "80933": 65, "20572": 65, "22397": 65, "36123": 65, "4747": 65, "2106593638087168512": 65, "12451": 65, "7492": 65, "218": 65, "224": 65, "x_1_7": 65, "x_2_0": 65, "x_2_1": 65, "x_1_4": 65, "x_1_5": 65, "x_0_6": 65, "x_0_2": 65, "x_0_3": 65, "On": 68, "basic": 68, "death": 68, "live": 68, "c_jx_j": [68, 71], "d_": [68, 71], "subseteq": 68, "neg": [68, 71], "straightforward": 68, "previou": [68, 69], "did": 68, "extra": 68, "y_": 68, "add_arrai": 68, "y_ij": 68, "y_0_0": 68, "compact": [68, 69], "pattern": 68, "sign": 68, "offset": 68, "quit": 68, "mention": 68, "dive": 68, "much": 68, "composit": 68, "thank": 68, "xi_1": 68, "practic": 68, "combinatori": [68, 69], "recal": [69, 71], "max": [69, 71], "p_jx_j": 69, "w_jx_j": 69, "item": 69, "p_j": 69, "w_j": 69, "naiv": 69, "knowledg": 69, "introduc": 69, "environemnt": 69, "reserv": 69, "emplace_back": 69, "knapsack_constraint": 69, "readabl": 69, "greatli": 69, "predefin": 69, "macro": 69, "iterat": 69, "accumul": 69, "l": [69, 71], "timelimit": 69, "among": 69, "get_relative_gap": 69, "get_absolute_gap": 69, "absolute_gap": 69, "addition": 69, "save_rai": 69, "save_du": 69, "save_farka": 69, "get_var_": 69, "get_ctr_": 69, "primal_valu": 69, "els": 69, "stage": 70, "dualiz": [70, 72], "plai": 71, "promin": 71, "deriv": 71, "theoret": 71, "cap": 71, "belong": 71, "extend": 71, "line": 71, "re": 71, "delta": 71, "bullet": 71, "qualif": 71, "fenchel": 71, "multlin": 71, "pi": 71, "cheatsheet": 71, "moreov": 71, "sum": 71, "formula": 71, "followig": 71, "remark": 71, "symmetr": 71, "tild": 71, "ix": 71, "diagonaliz": 71, "orthogon": 71, "matric": 71, "d": [71, 72], "ip": 71, "diagon": 71, "succeq": 71, "12": 71, "_2": 71, "q_r": 71, "dimension": 71, "rotat": 71, "pi_1": 71, "pi_2": 71, "lambda_i": 71, "special": 71, "recov": 71, "pd": 71, "kk": 71, "neq": 71, "jj": 71, "simplic": 71, "written": 71, "11": 71, "sqrt": 71, "33": 71, "nn": 71, "lambda_j": 71, "dagger": 71, "span": 71, "mu": 71}, "objects": {"": [[29, 0, 1, "_CPPv4N4idol13CallbackEvent15AlgorithmStartsE", "idol::AlgorithmStarts"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent14AlgorithmStopsE", "idol::AlgorithmStops"], [1, 1, 1, "_CPPv4I00EN4idol10AnnotationE", "idol::Annotation"], [1, 2, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation"], [1, 2, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation"], [1, 3, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::ArgsT"], [1, 4, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_args"], [1, 4, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_env"], [1, 4, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation::t_env"], [1, 4, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_name"], [1, 4, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation::t_name"], [1, 3, 1, "_CPPv4I00EN4idol10AnnotationE", "idol::Annotation::ObjectT"], [1, 3, 1, "_CPPv4I00EN4idol10AnnotationE", "idol::Annotation::ValueT"], [1, 2, 1, "_CPPv4NK4idol10Annotation13default_valueEv", "idol::Annotation::default_value"], [1, 2, 1, "_CPPv4N4idol10Annotation4freeEv", "idol::Annotation::free"], [1, 2, 1, "_CPPv4NK4idol10Annotation11has_defaultEv", "idol::Annotation::has_default"], [1, 2, 1, "_CPPv4NK4idol10Annotation2idEv", "idol::Annotation::id"], [1, 2, 1, "_CPPv4NK4idol10Annotation17is_ctr_annotationEv", "idol::Annotation::is_ctr_annotation"], [1, 2, 1, "_CPPv4NK4idol10Annotation17is_var_annotationEv", "idol::Annotation::is_var_annotation"], [1, 2, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value"], [1, 3, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::ArgsT"], [1, 4, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_args"], [1, 4, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_env"], [1, 4, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_name"], [1, 2, 1, "_CPPv4NK4idol10Annotation4nameEv", "idol::Annotation::name"], [23, 1, 1, "_CPPv4N4idol9BestBoundE", "idol::BestBound"], [23, 1, 1, "_CPPv4I0EN4idol9BestBound8StrategyE", "idol::BestBound::Strategy"], [23, 3, 1, "_CPPv4I0EN4idol9BestBound8StrategyE", "idol::BestBound::Strategy::NodeT"], [23, 2, 1, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound", "idol::BestBound::Strategy::Strategy"], [23, 4, 1, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound", "idol::BestBound::Strategy::Strategy::t_parent"], [23, 2, 1, "_CPPv4NK4idol9BestBound8Strategy5cloneEv", "idol::BestBound::Strategy::clone"], [23, 2, 1, "_CPPv4NK4idol9BestBound8StrategyclEv", "idol::BestBound::Strategy::operator()"], [18, 1, 1, "_CPPv4I0EN4idol14BranchAndBoundE", "idol::BranchAndBound"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERR14BranchAndBound", "idol::BranchAndBound::BranchAndBound"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundEv", "idol::BranchAndBound::BranchAndBound"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBoundE", "idol::BranchAndBound::NodeT"], [18, 2, 1, "_CPPv4NK4idol14BranchAndBound5cloneEv", "idol::BranchAndBound::clone"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE", "idol::BranchAndBound::conditional"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE", "idol::BranchAndBound::conditional"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE", "idol::BranchAndBound::conditional::t_conditional_value"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE", "idol::BranchAndBound::conditional::t_conditional_value"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE", "idol::BranchAndBound::conditional::t_else"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE", "idol::BranchAndBound::conditional::t_if"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE", "idol::BranchAndBound::conditional::t_if"], [18, 5, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy"], [18, 3, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy::ReturnT"], [18, 3, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy::T"], [18, 2, 1, "_CPPv4NK4idol14BranchAndBoundclERK5Model", "idol::BranchAndBound::operator()"], [18, 4, 1, "_CPPv4NK4idol14BranchAndBoundclERK5Model", "idol::BranchAndBound::operator()::t_model"], [18, 2, 1, "_CPPv4N4idol14BranchAndBoundaSERK14BranchAndBound", "idol::BranchAndBound::operator="], [18, 2, 1, "_CPPv4N4idol14BranchAndBoundaSERR14BranchAndBound", "idol::BranchAndBound::operator="], [18, 2, 1, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd", "idol::BranchAndBound::with_absolute_gap_tolerance"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd", "idol::BranchAndBound::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd", "idol::BranchAndBound::with_best_bound_stop"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd", "idol::BranchAndBound::with_best_bound_stop::t_best_bound_stop"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd", "idol::BranchAndBound::with_best_obj_stop"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd", "idol::BranchAndBound::with_best_obj_stop::t_user_best_obj"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE", "idol::BranchAndBound::with_branching_rule"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::BranchingRuleFactoryT"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::BranchingRuleFactoryT"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound13with_callbackERK15CallbackFactory", "idol::BranchAndBound::with_callback"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound13with_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE", "idol::BranchAndBound::with_callback"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound13with_callbackERK15CallbackFactory", "idol::BranchAndBound::with_callback::t_callback"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound13with_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE", "idol::BranchAndBound::with_callback::t_callback"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound19with_cutting_planesERK21CuttingPlaneGenerator", "idol::BranchAndBound::with_cutting_planes"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound19with_cutting_planesERK21CuttingPlaneGenerator", "idol::BranchAndBound::with_cutting_planes::t_cutting_place_generator"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb", "idol::BranchAndBound::with_infeasible_or_unbounded_info"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb", "idol::BranchAndBound::with_infeasible_or_unbounded_info::t_value"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound26with_iteration_count_limitEj", "idol::BranchAndBound::with_iteration_count_limit"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound26with_iteration_count_limitEj", "idol::BranchAndBound::with_iteration_count_limit::t_iteration_count_limit"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound18with_log_frequencyEj", "idol::BranchAndBound::with_log_frequency"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound18with_log_frequencyEj", "idol::BranchAndBound::with_log_frequency::t_log_frequency"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound14with_log_levelE8LogLevel5Color", "idol::BranchAndBound::with_log_level"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound14with_log_levelE8LogLevel5Color", "idol::BranchAndBound::with_log_level::t_log_color"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound14with_log_levelE8LogLevel5Color", "idol::BranchAndBound::with_log_level::t_log_level"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::with_node_optimizer"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::with_node_optimizer::t_node_optimizer"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE", "idol::BranchAndBound::with_node_selection_rule"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::NodeSelectionRuleFactoryT"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::NodeSelectionRuleFactoryT"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE", "idol::BranchAndBound::with_node_selection_rule::t_node_selection"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::t_node_selection_rule"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::t_node_selection_rule"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound13with_presolveEb", "idol::BranchAndBound::with_presolve"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound13with_presolveEb", "idol::BranchAndBound::with_presolve::t_value"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd", "idol::BranchAndBound::with_relative_gap_tolerance"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd", "idol::BranchAndBound::with_relative_gap_tolerance::t_relative_gap_tolerance"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj", "idol::BranchAndBound::with_subtree_depth"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj", "idol::BranchAndBound::with_subtree_depth::t_depth"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj", "idol::BranchAndBound::with_thread_limit"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj", "idol::BranchAndBound::with_thread_limit::t_max_n_threads"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound15with_time_limitEd", "idol::BranchAndBound::with_time_limit"], [18, 4, 1, "_CPPv4N4idol14BranchAndBound15with_time_limitEd", "idol::BranchAndBound::with_time_limit::t_time_limit"], [19, 1, 1, "_CPPv4I0EN4idol22BranchAndBoundCallbackE", "idol::BranchAndBoundCallback"], [19, 3, 1, "_CPPv4I0EN4idol22BranchAndBoundCallbackE", "idol::BranchAndBoundCallback::NodeInfoT"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_lazy_cut"], [19, 4, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_lazy_cut::t_cut"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_user_cut"], [19, 4, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_user_cut::t_cut"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback4nodeEv", "idol::BranchAndBoundCallback::node"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent", "idol::BranchAndBoundCallback::operator()"], [19, 4, 1, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent", "idol::BranchAndBoundCallback::operator()::t_event"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback14original_modelEv", "idol::BranchAndBoundCallback::original_model"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback10relaxationEv", "idol::BranchAndBoundCallback::relaxation"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd", "idol::BranchAndBoundCallback::submit_bound"], [19, 4, 1, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd", "idol::BranchAndBoundCallback::submit_bound::t_bound"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT", "idol::BranchAndBoundCallback::submit_heuristic_solution"], [19, 4, 1, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT", "idol::BranchAndBoundCallback::submit_heuristic_solution::t_info"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback4timeEv", "idol::BranchAndBoundCallback::time"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallbackD0Ev", "idol::BranchAndBoundCallback::~BranchAndBoundCallback"], [24, 1, 1, "_CPPv4N4idol12BreadthFirstE", "idol::BreadthFirst"], [24, 1, 1, "_CPPv4I0EN4idol12BreadthFirst8StrategyE", "idol::BreadthFirst::Strategy"], [24, 3, 1, "_CPPv4I0EN4idol12BreadthFirst8StrategyE", "idol::BreadthFirst::Strategy::NodeT"], [24, 2, 1, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst", "idol::BreadthFirst::Strategy::Strategy"], [24, 4, 1, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst", "idol::BreadthFirst::Strategy::Strategy::t_parent"], [24, 2, 1, "_CPPv4NK4idol12BreadthFirst8Strategy5cloneEv", "idol::BreadthFirst::Strategy::clone"], [24, 2, 1, "_CPPv4NK4idol12BreadthFirst8StrategyclEv", "idol::BreadthFirst::Strategy::operator()"], [28, 1, 1, "_CPPv4N4idol8CallbackE", "idol::Callback"], [28, 2, 1, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr", "idol::Callback::add_lazy_cut"], [28, 4, 1, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr", "idol::Callback::add_lazy_cut::t_cut"], [28, 2, 1, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr", "idol::Callback::add_user_cut"], [28, 4, 1, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr", "idol::Callback::add_user_cut::t_cut"], [28, 2, 1, "_CPPv4N4idol8CallbackclE13CallbackEvent", "idol::Callback::operator()"], [28, 4, 1, "_CPPv4N4idol8CallbackclE13CallbackEvent", "idol::Callback::operator()::t_event"], [28, 2, 1, "_CPPv4NK4idol8Callback15primal_solutionEv", "idol::Callback::primal_solution"], [28, 2, 1, "_CPPv4NK4idol8Callback4timeEv", "idol::Callback::time"], [28, 2, 1, "_CPPv4N4idol8CallbackD0Ev", "idol::Callback::~Callback"], [29, 6, 1, "_CPPv4N4idol13CallbackEventE", "idol::CallbackEvent"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent15AlgorithmStartsE", "idol::CallbackEvent::AlgorithmStarts"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent14AlgorithmStopsE", "idol::CallbackEvent::AlgorithmStops"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE", "idol::CallbackEvent::IncumbentSolution"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE", "idol::CallbackEvent::InvalidSolution"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent10NodeLoadedE", "idol::CallbackEvent::NodeLoaded"], [2, 1, 1, "_CPPv4N4idol6ColumnE", "idol::Column"], [2, 2, 1, "_CPPv4N4idol6Column6ColumnERK6Column", "idol::Column::Column"], [2, 2, 1, "_CPPv4N4idol6Column6ColumnERK8Constant", "idol::Column::Column"], [2, 2, 1, "_CPPv4N4idol6Column6ColumnERR6Column", "idol::Column::Column"], [2, 2, 1, "_CPPv4N4idol6Column6ColumnERR8Constant", "idol::Column::Column"], [2, 2, 1, "_CPPv4N4idol6Column6ColumnEv", "idol::Column::Column"], [2, 4, 1, "_CPPv4N4idol6Column6ColumnERK8Constant", "idol::Column::Column::t_obj"], [2, 4, 1, "_CPPv4N4idol6Column6ColumnERR8Constant", "idol::Column::Column::t_obj"], [2, 4, 1, "_CPPv4N4idol6Column6ColumnERK6Column", "idol::Column::Column::t_src"], [2, 4, 1, "_CPPv4N4idol6Column6ColumnERR6Column", "idol::Column::Column::t_src"], [2, 7, 1, "_CPPv4N4idol6Column11EmptyColumnE", "idol::Column::EmptyColumn"], [2, 2, 1, "_CPPv4NK4idol6Column3fixERKN8Solution6PrimalE", "idol::Column::fix"], [2, 4, 1, "_CPPv4NK4idol6Column3fixERKN8Solution6PrimalE", "idol::Column::fix::t_primals"], [2, 2, 1, "_CPPv4N4idol6Column6linearEv", "idol::Column::linear"], [2, 2, 1, "_CPPv4NK4idol6Column6linearEv", "idol::Column::linear"], [2, 2, 1, "_CPPv4N4idol6Column3objEv", "idol::Column::obj"], [2, 2, 1, "_CPPv4NK4idol6Column3objEv", "idol::Column::obj"], [2, 2, 1, "_CPPv4N4idol6Column13obj_quadraticEv", "idol::Column::obj_quadratic"], [2, 2, 1, "_CPPv4NK4idol6Column13obj_quadraticEv", "idol::Column::obj_quadratic"], [2, 2, 1, "_CPPv4N4idol6ColumnmLEd", "idol::Column::operator*="], [2, 4, 1, "_CPPv4N4idol6ColumnmLEd", "idol::Column::operator*=::t_rhs"], [2, 2, 1, "_CPPv4N4idol6ColumnpLERK6Column", "idol::Column::operator+="], [2, 4, 1, "_CPPv4N4idol6ColumnpLERK6Column", "idol::Column::operator+=::t_rhs"], [2, 2, 1, "_CPPv4N4idol6ColumnmIERK6Column", "idol::Column::operator-="], [2, 4, 1, "_CPPv4N4idol6ColumnmIERK6Column", "idol::Column::operator-=::t_rhs"], [2, 2, 1, "_CPPv4N4idol6ColumnaSERK6Column", "idol::Column::operator="], [2, 2, 1, "_CPPv4N4idol6ColumnaSERR6Column", "idol::Column::operator="], [2, 4, 1, "_CPPv4N4idol6ColumnaSERK6Column", "idol::Column::operator=::t_src"], [2, 4, 1, "_CPPv4N4idol6ColumnaSERR6Column", "idol::Column::operator=::t_src"], [2, 2, 1, "_CPPv4N4idol6Column9quadraticEv", "idol::Column::quadratic"], [2, 2, 1, "_CPPv4NK4idol6Column9quadraticEv", "idol::Column::quadratic"], [2, 2, 1, "_CPPv4N4idol6Column10set_linearERK7LinExprI3CtrE", "idol::Column::set_linear"], [2, 2, 1, "_CPPv4N4idol6Column10set_linearERR7LinExprI3CtrE", "idol::Column::set_linear"], [2, 4, 1, "_CPPv4N4idol6Column10set_linearERK7LinExprI3CtrE", "idol::Column::set_linear::t_lin_expr"], [2, 4, 1, "_CPPv4N4idol6Column10set_linearERR7LinExprI3CtrE", "idol::Column::set_linear::t_lin_expr"], [2, 2, 1, "_CPPv4N4idol6Column7set_objERK8Constant", "idol::Column::set_obj"], [2, 2, 1, "_CPPv4N4idol6Column7set_objERR8Constant", "idol::Column::set_obj"], [2, 4, 1, "_CPPv4N4idol6Column7set_objERK8Constant", "idol::Column::set_obj::t_obj"], [2, 4, 1, "_CPPv4N4idol6Column7set_objERR8Constant", "idol::Column::set_obj::t_obj"], [2, 2, 1, "_CPPv4N4idol6Column13set_quadraticERK8QuadExprI3Ctr3VarE", "idol::Column::set_quadratic"], [2, 2, 1, "_CPPv4N4idol6Column13set_quadraticERR8QuadExprI3Ctr3VarE", "idol::Column::set_quadratic"], [2, 4, 1, "_CPPv4N4idol6Column13set_quadraticERK8QuadExprI3Ctr3VarE", "idol::Column::set_quadratic::t_quad_expr"], [2, 4, 1, "_CPPv4N4idol6Column13set_quadraticERR8QuadExprI3Ctr3VarE", "idol::Column::set_quadratic::t_quad_expr"], [33, 1, 1, "_CPPv4N4idol16ColumnGenerationE", "idol::ColumnGeneration"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration16ColumnGenerationEj", "idol::ColumnGeneration::ColumnGeneration"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration16ColumnGenerationEj", "idol::ColumnGeneration::ColumnGeneration::t_n_subproblems"], [33, 2, 1, "_CPPv4NK4idol16ColumnGeneration5cloneEv", "idol::ColumnGeneration::clone"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::ColumnGeneration::conditional"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::ColumnGeneration::conditional"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::ColumnGeneration::conditional::t_conditional_value"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::ColumnGeneration::conditional::t_conditional_value"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::ColumnGeneration::conditional::t_else"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::ColumnGeneration::conditional::t_if"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::ColumnGeneration::conditional::t_if"], [33, 2, 1, "_CPPv4NK4idol16ColumnGeneration13n_subproblemsEv", "idol::ColumnGeneration::n_subproblems"], [33, 2, 1, "_CPPv4NK4idol16ColumnGenerationclERK5Model", "idol::ColumnGeneration::operator()"], [33, 4, 1, "_CPPv4NK4idol16ColumnGenerationclERK5Model", "idol::ColumnGeneration::operator()::t_model"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration23reserve_for_subproblemsEj", "idol::ColumnGeneration::reserve_for_subproblems"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration23reserve_for_subproblemsEj", "idol::ColumnGeneration::reserve_for_subproblems::t_n_subproblems"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration27with_absolute_gap_toleranceEd", "idol::ColumnGeneration::with_absolute_gap_tolerance"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration27with_absolute_gap_toleranceEd", "idol::ColumnGeneration::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration30with_artificial_variables_costEd", "idol::ColumnGeneration::with_artificial_variables_cost"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration30with_artificial_variables_costEd", "idol::ColumnGeneration::with_artificial_variables_cost::t_artificial_variable_cost"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration20with_best_bound_stopEd", "idol::ColumnGeneration::with_best_bound_stop"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration20with_best_bound_stopEd", "idol::ColumnGeneration::with_best_bound_stop::t_best_bound_stop"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration18with_best_obj_stopEd", "idol::ColumnGeneration::with_best_obj_stop"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration18with_best_obj_stopEd", "idol::ColumnGeneration::with_best_obj_stop::t_user_best_obj"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration25with_column_pool_clean_upEjd", "idol::ColumnGeneration::with_column_pool_clean_up"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration25with_column_pool_clean_upEjd", "idol::ColumnGeneration::with_column_pool_clean_up::t_ratio"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration25with_column_pool_clean_upEjd", "idol::ColumnGeneration::with_column_pool_clean_up::t_threshold"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration39with_dual_price_smoothing_stabilizationEd", "idol::ColumnGeneration::with_dual_price_smoothing_stabilization"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration39with_dual_price_smoothing_stabilizationEd", "idol::ColumnGeneration::with_dual_price_smoothing_stabilization::t_smoothing_factor"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration19with_farkas_pricingEb", "idol::ColumnGeneration::with_farkas_pricing"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration19with_farkas_pricingEb", "idol::ColumnGeneration::with_farkas_pricing::t_value"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration33with_infeasible_or_unbounded_infoEb", "idol::ColumnGeneration::with_infeasible_or_unbounded_info"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration33with_infeasible_or_unbounded_infoEb", "idol::ColumnGeneration::with_infeasible_or_unbounded_info::t_value"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration26with_iteration_count_limitEj", "idol::ColumnGeneration::with_iteration_count_limit"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration26with_iteration_count_limitEj", "idol::ColumnGeneration::with_iteration_count_limit::t_iteration_count_limit"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration18with_log_frequencyEj", "idol::ColumnGeneration::with_log_frequency"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration18with_log_frequencyEj", "idol::ColumnGeneration::with_log_frequency::t_log_frequency"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration14with_log_levelE8LogLevel5Color", "idol::ColumnGeneration::with_log_level"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration14with_log_levelE8LogLevel5Color", "idol::ColumnGeneration::with_log_level::t_log_color"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration14with_log_levelE8LogLevel5Color", "idol::ColumnGeneration::with_log_level::t_log_level"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration21with_master_optimizerERK16OptimizerFactory", "idol::ColumnGeneration::with_master_optimizer"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration21with_master_optimizerERK16OptimizerFactory", "idol::ColumnGeneration::with_master_optimizer::t_master_optimizer"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration28with_max_columns_per_pricingEj", "idol::ColumnGeneration::with_max_columns_per_pricing"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration28with_max_columns_per_pricingEj", "idol::ColumnGeneration::with_max_columns_per_pricing::t_n_columns"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration30with_non_optimal_pricing_phaseEdd", "idol::ColumnGeneration::with_non_optimal_pricing_phase"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration30with_non_optimal_pricing_phaseEdd", "idol::ColumnGeneration::with_non_optimal_pricing_phase::t_relative_gap"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration30with_non_optimal_pricing_phaseEdd", "idol::ColumnGeneration::with_non_optimal_pricing_phase::t_time_limit"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration27with_parallel_pricing_limitEj", "idol::ColumnGeneration::with_parallel_pricing_limit"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration27with_parallel_pricing_limitEj", "idol::ColumnGeneration::with_parallel_pricing_limit::t_limit"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration13with_presolveEb", "idol::ColumnGeneration::with_presolve"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration13with_presolveEb", "idol::ColumnGeneration::with_presolve::t_value"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration27with_relative_gap_toleranceEd", "idol::ColumnGeneration::with_relative_gap_tolerance"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration27with_relative_gap_toleranceEd", "idol::ColumnGeneration::with_relative_gap_tolerance::t_relative_gap_tolerance"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration15with_subproblemERK5Model6Column", "idol::ColumnGeneration::with_subproblem"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration15with_subproblemERK5Model6Column", "idol::ColumnGeneration::with_subproblem::t_column"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration15with_subproblemERK5Model6Column", "idol::ColumnGeneration::with_subproblem::t_model"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration17with_thread_limitEj", "idol::ColumnGeneration::with_thread_limit"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration17with_thread_limitEj", "idol::ColumnGeneration::with_thread_limit::t_max_n_threads"], [33, 2, 1, "_CPPv4N4idol16ColumnGeneration15with_time_limitEd", "idol::ColumnGeneration::with_time_limit"], [33, 4, 1, "_CPPv4N4idol16ColumnGeneration15with_time_limitEd", "idol::ColumnGeneration::with_time_limit::t_time_limit"], [3, 1, 1, "_CPPv4N4idol8ConstantE", "idol::Constant"], [3, 2, 1, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", "idol::Constant::Constant"], [3, 2, 1, "_CPPv4N4idol8Constant8ConstantERK5Paramd", "idol::Constant::Constant"], [3, 2, 1, "_CPPv4N4idol8Constant8ConstantERK8Constant", "idol::Constant::Constant"], [3, 2, 1, "_CPPv4N4idol8Constant8ConstantERR8Constant", "idol::Constant::Constant"], [3, 2, 1, "_CPPv4N4idol8Constant8ConstantEd", "idol::Constant::Constant"], [3, 2, 1, "_CPPv4N4idol8Constant8ConstantEv", "idol::Constant::Constant"], [3, 4, 1, "_CPPv4N4idol8Constant8ConstantEd", "idol::Constant::Constant::t_constant"], [3, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5Paramd", "idol::Constant::Constant::t_param"], [3, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", "idol::Constant::Constant::t_param_1"], [3, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", "idol::Constant::Constant::t_param_2"], [3, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", "idol::Constant::Constant::t_value"], [3, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5Paramd", "idol::Constant::Constant::t_value"], [3, 7, 1, "_CPPv4N4idol8Constant4ZeroE", "idol::Constant::Zero"], [3, 2, 1, "_CPPv4NK4idol8Constant3fixERKN8Solution4DualE", "idol::Constant::fix"], [3, 2, 1, "_CPPv4NK4idol8Constant3fixERKN8Solution6PrimalE", "idol::Constant::fix"], [3, 4, 1, "_CPPv4NK4idol8Constant3fixERKN8Solution4DualE", "idol::Constant::fix::t_duals"], [3, 4, 1, "_CPPv4NK4idol8Constant3fixERKN8Solution6PrimalE", "idol::Constant::fix::t_primals"], [3, 2, 1, "_CPPv4NK4idol8Constant3getERK5Param", "idol::Constant::get"], [3, 2, 1, "_CPPv4NK4idol8Constant3getERK5ParamRK5Param", "idol::Constant::get"], [3, 4, 1, "_CPPv4NK4idol8Constant3getERK5Param", "idol::Constant::get::t_param"], [3, 4, 1, "_CPPv4NK4idol8Constant3getERK5ParamRK5Param", "idol::Constant::get::t_param_1"], [3, 4, 1, "_CPPv4NK4idol8Constant3getERK5ParamRK5Param", "idol::Constant::get::t_param_2"], [3, 2, 1, "_CPPv4NK4idol8Constant12is_numericalEv", "idol::Constant::is_numerical"], [3, 2, 1, "_CPPv4NK4idol8Constant7is_zeroEv", "idol::Constant::is_zero"], [3, 2, 1, "_CPPv4N4idol8Constant6linearEv", "idol::Constant::linear"], [3, 2, 1, "_CPPv4NK4idol8Constant6linearEv", "idol::Constant::linear"], [3, 2, 1, "_CPPv4NK4idol8Constant9numericalEv", "idol::Constant::numerical"], [3, 2, 1, "_CPPv4N4idol8ConstantmLEd", "idol::Constant::operator*="], [3, 4, 1, "_CPPv4N4idol8ConstantmLEd", "idol::Constant::operator*=::t_factor"], [3, 2, 1, "_CPPv4N4idol8ConstantpLERK5Param", "idol::Constant::operator+="], [3, 2, 1, "_CPPv4N4idol8ConstantpLERK8Constant", "idol::Constant::operator+="], [3, 2, 1, "_CPPv4N4idol8ConstantpLEd", "idol::Constant::operator+="], [3, 4, 1, "_CPPv4N4idol8ConstantpLERK5Param", "idol::Constant::operator+=::t_term"], [3, 4, 1, "_CPPv4N4idol8ConstantpLERK8Constant", "idol::Constant::operator+=::t_term"], [3, 4, 1, "_CPPv4N4idol8ConstantpLEd", "idol::Constant::operator+=::t_term"], [3, 2, 1, "_CPPv4N4idol8ConstantmIE5Param", "idol::Constant::operator-="], [3, 2, 1, "_CPPv4N4idol8ConstantmIERK8Constant", "idol::Constant::operator-="], [3, 2, 1, "_CPPv4N4idol8ConstantmIEd", "idol::Constant::operator-="], [3, 4, 1, "_CPPv4N4idol8ConstantmIE5Param", "idol::Constant::operator-=::t_term"], [3, 4, 1, "_CPPv4N4idol8ConstantmIERK8Constant", "idol::Constant::operator-=::t_term"], [3, 4, 1, "_CPPv4N4idol8ConstantmIEd", "idol::Constant::operator-=::t_term"], [3, 2, 1, "_CPPv4N4idol8ConstantaSERK8Constant", "idol::Constant::operator="], [3, 2, 1, "_CPPv4N4idol8ConstantaSERR8Constant", "idol::Constant::operator="], [3, 2, 1, "_CPPv4N4idol8Constant9quadraticEv", "idol::Constant::quadratic"], [3, 2, 1, "_CPPv4NK4idol8Constant9quadraticEv", "idol::Constant::quadratic"], [3, 2, 1, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", "idol::Constant::set"], [3, 2, 1, "_CPPv4N4idol8Constant3setERK5Paramd", "idol::Constant::set"], [3, 4, 1, "_CPPv4N4idol8Constant3setERK5Paramd", "idol::Constant::set::t_param"], [3, 4, 1, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", "idol::Constant::set::t_param_1"], [3, 4, 1, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", "idol::Constant::set::t_param_2"], [3, 4, 1, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", "idol::Constant::set::t_value"], [3, 4, 1, "_CPPv4N4idol8Constant3setERK5Paramd", "idol::Constant::set::t_value"], [3, 2, 1, "_CPPv4N4idol8Constant13set_numericalEd", "idol::Constant::set_numerical"], [3, 4, 1, "_CPPv4N4idol8Constant13set_numericalEd", "idol::Constant::set_numerical::t_constant"], [3, 2, 1, "_CPPv4NK4idol8Constant4sizeEv", "idol::Constant::size"], [4, 1, 1, "_CPPv4N4idol3CtrE", "idol::Ctr"], [4, 2, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr"], [4, 2, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr"], [4, 2, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr"], [4, 2, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr::t_constant"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr::t_constant"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr::t_env"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr::t_env"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_env"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_env"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr::t_name"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr::t_name"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_name"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_name"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_temp_ctr"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_temp_ctr"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr::t_type"], [4, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr::t_type"], [4, 2, 1, "_CPPv4NK4idol3Ctr3getERK10AnnotationI3Ctr6ValueTE", "idol::Ctr::get"], [4, 4, 1, "_CPPv4NK4idol3Ctr3getERK10AnnotationI3Ctr6ValueTE", "idol::Ctr::get::t_annotation"], [4, 2, 1, "_CPPv4NK4idol3Ctr2idEv", "idol::Ctr::id"], [4, 2, 1, "_CPPv4NK4idol3Ctr5is_inERK5Model", "idol::Ctr::is_in"], [4, 4, 1, "_CPPv4NK4idol3Ctr5is_inERK5Model", "idol::Ctr::is_in::t_model"], [4, 2, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector"], [4, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::I"], [4, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::N"], [4, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_constant"], [4, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_dim"], [4, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_env"], [4, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_name"], [4, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_type"], [4, 2, 1, "_CPPv4NK4idol3Ctr4nameEv", "idol::Ctr::name"], [4, 2, 1, "_CPPv4NK4idol3CtrneERK6ObjectI10CtrVersion3CtrE", "idol::Ctr::operator!="], [4, 4, 1, "_CPPv4NK4idol3CtrneERK6ObjectI10CtrVersion3CtrE", "idol::Ctr::operator!=::t_rhs"], [4, 2, 1, "_CPPv4NK4idol3CtreqERK6ObjectI10CtrVersion3CtrE", "idol::Ctr::operator=="], [4, 4, 1, "_CPPv4NK4idol3CtreqERK6ObjectI10CtrVersion3CtrE", "idol::Ctr::operator==::t_rhs"], [4, 2, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI3Ctr6ValueTEDpRR5ArgsT", "idol::Ctr::set"], [4, 4, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI3Ctr6ValueTEDpRR5ArgsT", "idol::Ctr::set::t_annotation"], [4, 4, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI3Ctr6ValueTEDpRR5ArgsT", "idol::Ctr::set::t_args"], [34, 1, 1, "_CPPv4N4idol25DantzigWolfeDecompositionE", "idol::DantzigWolfeDecomposition"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK10AnnotationI3CtrjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK10AnnotationI3CtrjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_decomposition"], [34, 2, 1, "_CPPv4NK4idol25DantzigWolfeDecomposition5cloneEv", "idol::DantzigWolfeDecomposition::clone"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::DantzigWolfeDecomposition::conditional"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::DantzigWolfeDecomposition::conditional"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::DantzigWolfeDecomposition::conditional::t_conditional_value"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::DantzigWolfeDecomposition::conditional::t_conditional_value"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::DantzigWolfeDecomposition::conditional::t_else"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::DantzigWolfeDecomposition::conditional::t_if"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::DantzigWolfeDecomposition::conditional::t_if"], [34, 2, 1, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model", "idol::DantzigWolfeDecomposition::operator()"], [34, 4, 1, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model", "idol::DantzigWolfeDecomposition::operator()::t_original_formulation"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_absolute_gap_tolerance"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_aggregation_typeE7CtrType", "idol::DantzigWolfeDecomposition::with_aggregation_type"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_aggregation_typeE7CtrType", "idol::DantzigWolfeDecomposition::with_aggregation_type::t_type"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_artificial_variables_costEd", "idol::DantzigWolfeDecomposition::with_artificial_variables_cost"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_artificial_variables_costEd", "idol::DantzigWolfeDecomposition::with_artificial_variables_cost::t_artificial_variable_cost"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd", "idol::DantzigWolfeDecomposition::with_best_bound_stop"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd", "idol::DantzigWolfeDecomposition::with_best_bound_stop::t_best_bound_stop"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd", "idol::DantzigWolfeDecomposition::with_best_obj_stop"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd", "idol::DantzigWolfeDecomposition::with_best_obj_stop::t_user_best_obj"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition24with_branching_on_masterEb", "idol::DantzigWolfeDecomposition::with_branching_on_master"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition24with_branching_on_masterEb", "idol::DantzigWolfeDecomposition::with_branching_on_master::t_value"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25with_column_pool_clean_upEjd", "idol::DantzigWolfeDecomposition::with_column_pool_clean_up"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25with_column_pool_clean_upEjd", "idol::DantzigWolfeDecomposition::with_column_pool_clean_up::t_ratio"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25with_column_pool_clean_upEjd", "idol::DantzigWolfeDecomposition::with_column_pool_clean_up::t_threshold"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationEd", "idol::DantzigWolfeDecomposition::with_dual_price_smoothing_stabilization"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationEd", "idol::DantzigWolfeDecomposition::with_dual_price_smoothing_stabilization::t_smoothing_factor"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition19with_farkas_pricingEb", "idol::DantzigWolfeDecomposition::with_farkas_pricing"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition19with_farkas_pricingEb", "idol::DantzigWolfeDecomposition::with_farkas_pricing::t_value"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb", "idol::DantzigWolfeDecomposition::with_infeasible_or_unbounded_info"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb", "idol::DantzigWolfeDecomposition::with_infeasible_or_unbounded_info::t_value"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition26with_iteration_count_limitEj", "idol::DantzigWolfeDecomposition::with_iteration_count_limit"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition26with_iteration_count_limitEj", "idol::DantzigWolfeDecomposition::with_iteration_count_limit::t_iteration_count_limit"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition18with_log_frequencyEj", "idol::DantzigWolfeDecomposition::with_log_frequency"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition18with_log_frequencyEj", "idol::DantzigWolfeDecomposition::with_log_frequency::t_log_frequency"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition14with_log_levelE8LogLevel5Color", "idol::DantzigWolfeDecomposition::with_log_level"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition14with_log_levelE8LogLevel5Color", "idol::DantzigWolfeDecomposition::with_log_level::t_log_color"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition14with_log_levelE8LogLevel5Color", "idol::DantzigWolfeDecomposition::with_log_level::t_log_level"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory", "idol::DantzigWolfeDecomposition::with_master_optimizer"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory", "idol::DantzigWolfeDecomposition::with_master_optimizer::t_master_optimizer"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition28with_max_columns_per_pricingEj", "idol::DantzigWolfeDecomposition::with_max_columns_per_pricing"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition28with_max_columns_per_pricingEj", "idol::DantzigWolfeDecomposition::with_max_columns_per_pricing::t_n_columns"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_non_optimal_pricing_phaseEdd", "idol::DantzigWolfeDecomposition::with_non_optimal_pricing_phase"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_non_optimal_pricing_phaseEdd", "idol::DantzigWolfeDecomposition::with_non_optimal_pricing_phase::t_relative_gap"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_non_optimal_pricing_phaseEdd", "idol::DantzigWolfeDecomposition::with_non_optimal_pricing_phase::t_time_limit"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_parallel_pricing_limitEj", "idol::DantzigWolfeDecomposition::with_parallel_pricing_limit"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_parallel_pricing_limitEj", "idol::DantzigWolfeDecomposition::with_parallel_pricing_limit::t_limit"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb", "idol::DantzigWolfeDecomposition::with_presolve"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb", "idol::DantzigWolfeDecomposition::with_presolve::t_value"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition22with_pricing_optimizerERK16OptimizerFactory", "idol::DantzigWolfeDecomposition::with_pricing_optimizer"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition22with_pricing_optimizerERK16OptimizerFactory", "idol::DantzigWolfeDecomposition::with_pricing_optimizer::t_pricing_optimizer"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_relative_gap_tolerance"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_relative_gap_tolerance::t_relative_gap_tolerance"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj", "idol::DantzigWolfeDecomposition::with_thread_limit"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj", "idol::DantzigWolfeDecomposition::with_thread_limit::t_max_n_threads"], [34, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd", "idol::DantzigWolfeDecomposition::with_time_limit"], [34, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd", "idol::DantzigWolfeDecomposition::with_time_limit::t_time_limit"], [25, 1, 1, "_CPPv4N4idol10DepthFirstE", "idol::DepthFirst"], [25, 1, 1, "_CPPv4I0EN4idol10DepthFirst8StrategyE", "idol::DepthFirst::Strategy"], [25, 3, 1, "_CPPv4I0EN4idol10DepthFirst8StrategyE", "idol::DepthFirst::Strategy::NodeT"], [25, 2, 1, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst", "idol::DepthFirst::Strategy::Strategy"], [25, 4, 1, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst", "idol::DepthFirst::Strategy::Strategy::t_parent"], [25, 2, 1, "_CPPv4NK4idol10DepthFirst8Strategy5cloneEv", "idol::DepthFirst::Strategy::clone"], [25, 2, 1, "_CPPv4NK4idol10DepthFirst8StrategyclEv", "idol::DepthFirst::Strategy::operator()"], [5, 1, 1, "_CPPv4N4idol3EnvE", "idol::Env"], [5, 2, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]"], [5, 3, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]::T"], [5, 4, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]::t_object"], [6, 1, 1, "_CPPv4I00EN4idol4ExprE", "idol::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERK4Expr", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERK4Key1", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERK5Param", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1E", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERK8Constant", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERK8QuadExprI4Key1E", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERR4Expr", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1E", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERR8Constant", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprERR8QuadExprI4Key1E", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprEd", "idol::Expr::Expr"], [6, 2, 1, "_CPPv4N4idol4Expr4ExprEv", "idol::Expr::Expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", "idol::Expr::Expr::t_constant"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", "idol::Expr::Expr::t_constant"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1E", "idol::Expr::Expr::t_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK8Constant", "idol::Expr::Expr::t_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK8QuadExprI4Key1E", "idol::Expr::Expr::t_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1E", "idol::Expr::Expr::t_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERR8Constant", "idol::Expr::Expr::t_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERR8QuadExprI4Key1E", "idol::Expr::Expr::t_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", "idol::Expr::Expr::t_lin_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", "idol::Expr::Expr::t_lin_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprEd", "idol::Expr::Expr::t_num"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK5Param", "idol::Expr::Expr::t_param"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", "idol::Expr::Expr::t_quad_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", "idol::Expr::Expr::t_quad_expr"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK4Expr", "idol::Expr::Expr::t_src"], [6, 4, 1, "_CPPv4N4idol4Expr4ExprERK4Key1", "idol::Expr::Expr::t_var"], [6, 3, 1, "_CPPv4I00EN4idol4ExprE", "idol::Expr::Key1"], [6, 3, 1, "_CPPv4I00EN4idol4ExprE", "idol::Expr::Key2"], [6, 2, 1, "_CPPv4N4idol4Expr5clearEv", "idol::Expr::clear"], [6, 2, 1, "_CPPv4N4idol4Expr8constantEv", "idol::Expr::constant"], [6, 2, 1, "_CPPv4NK4idol4Expr8constantEv", "idol::Expr::constant"], [6, 2, 1, "_CPPv4NK4idol4Expr7is_zeroEv", "idol::Expr::is_zero"], [6, 2, 1, "_CPPv4N4idol4Expr6linearEv", "idol::Expr::linear"], [6, 2, 1, "_CPPv4NK4idol4Expr6linearEv", "idol::Expr::linear"], [6, 2, 1, "_CPPv4N4idol4ExprmLEd", "idol::Expr::operator*="], [6, 4, 1, "_CPPv4N4idol4ExprmLEd", "idol::Expr::operator*=::t_rhs"], [6, 2, 1, "_CPPv4N4idol4ExprpLERK4ExprIN4idol3VarEN4idol3VarEE", "idol::Expr::operator+="], [6, 4, 1, "_CPPv4N4idol4ExprpLERK4ExprIN4idol3VarEN4idol3VarEE", "idol::Expr::operator+=::t_rhs"], [6, 2, 1, "_CPPv4N4idol4ExprmIERK4ExprIN4idol3VarEN4idol3VarEE", "idol::Expr::operator-="], [6, 4, 1, "_CPPv4N4idol4ExprmIERK4ExprIN4idol3VarEN4idol3VarEE", "idol::Expr::operator-=::t_rhs"], [6, 2, 1, "_CPPv4N4idol4ExpraSERK4Expr", "idol::Expr::operator="], [6, 2, 1, "_CPPv4N4idol4ExpraSERR4Expr", "idol::Expr::operator="], [6, 4, 1, "_CPPv4N4idol4ExpraSERK4Expr", "idol::Expr::operator=::t_rhs"], [6, 2, 1, "_CPPv4N4idol4Expr9quadraticEv", "idol::Expr::quadratic"], [6, 2, 1, "_CPPv4NK4idol4Expr9quadraticEv", "idol::Expr::quadratic"], [36, 1, 1, "_CPPv4N4idol4GLPKE", "idol::GLPK"], [36, 2, 1, "_CPPv4N4idol4GLPK20ContinuousRelaxationEv", "idol::GLPK::ContinuousRelaxation"], [36, 2, 1, "_CPPv4N4idol4GLPK4GLPKERR4GLPK", "idol::GLPK::GLPK"], [36, 2, 1, "_CPPv4N4idol4GLPK4GLPKEv", "idol::GLPK::GLPK"], [36, 2, 1, "_CPPv4NK4idol4GLPK5cloneEv", "idol::GLPK::clone"], [36, 2, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional"], [36, 2, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional"], [36, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_conditional_value"], [36, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_conditional_value"], [36, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_else"], [36, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_if"], [36, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_if"], [36, 2, 1, "_CPPv4NK4idol4GLPKclERK5Model", "idol::GLPK::operator()"], [36, 4, 1, "_CPPv4NK4idol4GLPKclERK5Model", "idol::GLPK::operator()::t_model"], [36, 2, 1, "_CPPv4N4idol4GLPKaSERK4GLPK", "idol::GLPK::operator="], [36, 2, 1, "_CPPv4N4idol4GLPKaSERR4GLPK", "idol::GLPK::operator="], [36, 2, 1, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd", "idol::GLPK::with_absolute_gap_tolerance"], [36, 4, 1, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd", "idol::GLPK::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [36, 2, 1, "_CPPv4N4idol4GLPK20with_best_bound_stopEd", "idol::GLPK::with_best_bound_stop"], [36, 4, 1, "_CPPv4N4idol4GLPK20with_best_bound_stopEd", "idol::GLPK::with_best_bound_stop::t_best_bound_stop"], [36, 2, 1, "_CPPv4N4idol4GLPK18with_best_obj_stopEd", "idol::GLPK::with_best_obj_stop"], [36, 4, 1, "_CPPv4N4idol4GLPK18with_best_obj_stopEd", "idol::GLPK::with_best_obj_stop::t_user_best_obj"], [36, 2, 1, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb", "idol::GLPK::with_infeasible_or_unbounded_info"], [36, 4, 1, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb", "idol::GLPK::with_infeasible_or_unbounded_info::t_value"], [36, 2, 1, "_CPPv4N4idol4GLPK26with_iteration_count_limitEj", "idol::GLPK::with_iteration_count_limit"], [36, 4, 1, "_CPPv4N4idol4GLPK26with_iteration_count_limitEj", "idol::GLPK::with_iteration_count_limit::t_iteration_count_limit"], [36, 2, 1, "_CPPv4N4idol4GLPK14with_log_levelE8LogLevel5Color", "idol::GLPK::with_log_level"], [36, 4, 1, "_CPPv4N4idol4GLPK14with_log_levelE8LogLevel5Color", "idol::GLPK::with_log_level::t_log_color"], [36, 4, 1, "_CPPv4N4idol4GLPK14with_log_levelE8LogLevel5Color", "idol::GLPK::with_log_level::t_log_level"], [36, 2, 1, "_CPPv4N4idol4GLPK13with_presolveEb", "idol::GLPK::with_presolve"], [36, 4, 1, "_CPPv4N4idol4GLPK13with_presolveEb", "idol::GLPK::with_presolve::t_value"], [36, 2, 1, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd", "idol::GLPK::with_relative_gap_tolerance"], [36, 4, 1, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd", "idol::GLPK::with_relative_gap_tolerance::t_relative_gap_tolerance"], [36, 2, 1, "_CPPv4N4idol4GLPK17with_thread_limitEj", "idol::GLPK::with_thread_limit"], [36, 4, 1, "_CPPv4N4idol4GLPK17with_thread_limitEj", "idol::GLPK::with_thread_limit::t_max_n_threads"], [36, 2, 1, "_CPPv4N4idol4GLPK15with_time_limitEd", "idol::GLPK::with_time_limit"], [36, 4, 1, "_CPPv4N4idol4GLPK15with_time_limitEd", "idol::GLPK::with_time_limit::t_time_limit"], [38, 1, 1, "_CPPv4N4idol6GurobiE", "idol::Gurobi"], [38, 2, 1, "_CPPv4N4idol6Gurobi20ContinuousRelaxationEv", "idol::Gurobi::ContinuousRelaxation"], [38, 2, 1, "_CPPv4N4idol6Gurobi6GurobiERR6Gurobi", "idol::Gurobi::Gurobi"], [38, 2, 1, "_CPPv4N4idol6Gurobi6GurobiEv", "idol::Gurobi::Gurobi"], [38, 2, 1, "_CPPv4NK4idol6Gurobi5cloneEv", "idol::Gurobi::clone"], [38, 2, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional"], [38, 2, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional"], [38, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_conditional_value"], [38, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_conditional_value"], [38, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_else"], [38, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_if"], [38, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_if"], [38, 2, 1, "_CPPv4NK4idol6GurobiclERK5Model", "idol::Gurobi::operator()"], [38, 4, 1, "_CPPv4NK4idol6GurobiclERK5Model", "idol::Gurobi::operator()::t_model"], [38, 2, 1, "_CPPv4N4idol6GurobiaSERK6Gurobi", "idol::Gurobi::operator="], [38, 2, 1, "_CPPv4N4idol6GurobiaSERR6Gurobi", "idol::Gurobi::operator="], [38, 2, 1, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd", "idol::Gurobi::with_absolute_gap_tolerance"], [38, 4, 1, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd", "idol::Gurobi::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [38, 2, 1, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd", "idol::Gurobi::with_best_bound_stop"], [38, 4, 1, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd", "idol::Gurobi::with_best_bound_stop::t_best_bound_stop"], [38, 2, 1, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd", "idol::Gurobi::with_best_obj_stop"], [38, 4, 1, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd", "idol::Gurobi::with_best_obj_stop::t_user_best_obj"], [38, 2, 1, "_CPPv4N4idol6Gurobi13with_callbackERK15CallbackFactory", "idol::Gurobi::with_callback"], [38, 4, 1, "_CPPv4N4idol6Gurobi13with_callbackERK15CallbackFactory", "idol::Gurobi::with_callback::t_cb"], [38, 2, 1, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb", "idol::Gurobi::with_continuous_relaxation_only"], [38, 4, 1, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb", "idol::Gurobi::with_continuous_relaxation_only::t_value"], [38, 2, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param"], [38, 2, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param"], [38, 4, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param::t_param"], [38, 4, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param::t_param"], [38, 4, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param::t_value"], [38, 4, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param::t_value"], [38, 2, 1, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb", "idol::Gurobi::with_infeasible_or_unbounded_info"], [38, 4, 1, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb", "idol::Gurobi::with_infeasible_or_unbounded_info::t_value"], [38, 2, 1, "_CPPv4N4idol6Gurobi26with_iteration_count_limitEj", "idol::Gurobi::with_iteration_count_limit"], [38, 4, 1, "_CPPv4N4idol6Gurobi26with_iteration_count_limitEj", "idol::Gurobi::with_iteration_count_limit::t_iteration_count_limit"], [38, 2, 1, "_CPPv4N4idol6Gurobi13with_lazy_cutEb", "idol::Gurobi::with_lazy_cut"], [38, 4, 1, "_CPPv4N4idol6Gurobi13with_lazy_cutEb", "idol::Gurobi::with_lazy_cut::t_value"], [38, 2, 1, "_CPPv4N4idol6Gurobi14with_log_levelE8LogLevel5Color", "idol::Gurobi::with_log_level"], [38, 4, 1, "_CPPv4N4idol6Gurobi14with_log_levelE8LogLevel5Color", "idol::Gurobi::with_log_level::t_log_color"], [38, 4, 1, "_CPPv4N4idol6Gurobi14with_log_levelE8LogLevel5Color", "idol::Gurobi::with_log_level::t_log_level"], [38, 2, 1, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj", "idol::Gurobi::with_max_n_solution_in_pool"], [38, 4, 1, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj", "idol::Gurobi::with_max_n_solution_in_pool::t_value"], [38, 2, 1, "_CPPv4N4idol6Gurobi13with_presolveEb", "idol::Gurobi::with_presolve"], [38, 4, 1, "_CPPv4N4idol6Gurobi13with_presolveEb", "idol::Gurobi::with_presolve::t_value"], [38, 2, 1, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd", "idol::Gurobi::with_relative_gap_tolerance"], [38, 4, 1, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd", "idol::Gurobi::with_relative_gap_tolerance::t_relative_gap_tolerance"], [38, 2, 1, "_CPPv4N4idol6Gurobi17with_thread_limitEj", "idol::Gurobi::with_thread_limit"], [38, 4, 1, "_CPPv4N4idol6Gurobi17with_thread_limitEj", "idol::Gurobi::with_thread_limit::t_max_n_threads"], [38, 2, 1, "_CPPv4N4idol6Gurobi15with_time_limitEd", "idol::Gurobi::with_time_limit"], [38, 4, 1, "_CPPv4N4idol6Gurobi15with_time_limitEd", "idol::Gurobi::with_time_limit::t_time_limit"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE", "idol::IncumbentSolution"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE", "idol::InvalidSolution"], [30, 1, 1, "_CPPv4N4idol15LazyCutCallbackE", "idol::LazyCutCallback"], [30, 2, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback::t_cut"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback::t_model"], [30, 1, 1, "_CPPv4N4idol15LazyCutCallback8StrategyE", "idol::LazyCutCallback::Strategy"], [30, 2, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::LazyCutCallback::Strategy::Strategy"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::LazyCutCallback::Strategy::Strategy::t_color"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::LazyCutCallback::Strategy::Strategy::t_cut"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::LazyCutCallback::Strategy::Strategy::t_level"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::LazyCutCallback::Strategy::Strategy::t_separation_problem"], [30, 2, 1, "_CPPv4NK4idol15LazyCutCallback5cloneEv", "idol::LazyCutCallback::clone"], [30, 2, 1, "_CPPv4N4idol15LazyCutCallbackclEv", "idol::LazyCutCallback::operator()"], [30, 2, 1, "_CPPv4N4idol15LazyCutCallback14with_log_levelE8LogLevel5Color", "idol::LazyCutCallback::with_log_level"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback14with_log_levelE8LogLevel5Color", "idol::LazyCutCallback::with_log_level::t_color"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback14with_log_levelE8LogLevel5Color", "idol::LazyCutCallback::with_log_level::t_level"], [30, 2, 1, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::LazyCutCallback::with_separation_optimizer"], [30, 4, 1, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::LazyCutCallback::with_separation_optimizer::t_optimizer_factory"], [7, 1, 1, "_CPPv4I0EN4idol7LinExprE", "idol::LinExpr"], [7, 3, 1, "_CPPv4I0EN4idol7LinExprE", "idol::LinExpr::Key"], [7, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERK3Key", "idol::LinExpr::LinExpr"], [7, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERK8ConstantRK3Key", "idol::LinExpr::LinExpr"], [7, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERR8ConstantRK3Key", "idol::LinExpr::LinExpr"], [7, 2, 1, "_CPPv4N4idol7LinExpr7LinExprEv", "idol::LinExpr::LinExpr"], [7, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERK8ConstantRK3Key", "idol::LinExpr::LinExpr::t_factor"], [7, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERR8ConstantRK3Key", "idol::LinExpr::LinExpr::t_factor"], [7, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERK3Key", "idol::LinExpr::LinExpr::t_key"], [7, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERK8ConstantRK3Key", "idol::LinExpr::LinExpr::t_key"], [7, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERR8ConstantRK3Key", "idol::LinExpr::LinExpr::t_key"], [7, 2, 1, "_CPPv4NK4idol7LinExpr5beginEv", "idol::LinExpr::begin"], [7, 2, 1, "_CPPv4N4idol7LinExpr5clearEv", "idol::LinExpr::clear"], [7, 2, 1, "_CPPv4NK4idol7LinExpr5emptyEv", "idol::LinExpr::empty"], [7, 2, 1, "_CPPv4NK4idol7LinExpr3endEv", "idol::LinExpr::end"], [7, 2, 1, "_CPPv4NK4idol7LinExpr3getERK3Key", "idol::LinExpr::get"], [7, 4, 1, "_CPPv4NK4idol7LinExpr3getERK3Key", "idol::LinExpr::get::t_key"], [7, 2, 1, "_CPPv4N4idol7LinExprmLEd", "idol::LinExpr::operator*="], [7, 4, 1, "_CPPv4N4idol7LinExprmLEd", "idol::LinExpr::operator*=::t_factor"], [7, 2, 1, "_CPPv4N4idol7LinExprpLERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", "idol::LinExpr::operator+="], [7, 4, 1, "_CPPv4N4idol7LinExprpLERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", "idol::LinExpr::operator+=::t_rhs"], [7, 2, 1, "_CPPv4N4idol7LinExprmIERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", "idol::LinExpr::operator-="], [7, 4, 1, "_CPPv4N4idol7LinExprmIERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", "idol::LinExpr::operator-=::t_rhs"], [7, 2, 1, "_CPPv4N4idol7LinExpr6removeERK3Key", "idol::LinExpr::remove"], [7, 4, 1, "_CPPv4N4idol7LinExpr6removeERK3Key", "idol::LinExpr::remove::t_key"], [7, 2, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRK8Constant", "idol::LinExpr::set"], [7, 2, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRR8Constant", "idol::LinExpr::set"], [7, 4, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRK8Constant", "idol::LinExpr::set::t_coefficient"], [7, 4, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRR8Constant", "idol::LinExpr::set::t_coefficient"], [7, 4, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRK8Constant", "idol::LinExpr::set::t_key"], [7, 4, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRR8Constant", "idol::LinExpr::set::t_key"], [7, 2, 1, "_CPPv4NK4idol7LinExpr4sizeEv", "idol::LinExpr::size"], [8, 1, 1, "_CPPv4N4idol5ModelE", "idol::Model"], [8, 2, 1, "_CPPv4N4idol5Model5ModelER3Env", "idol::Model::Model"], [8, 2, 1, "_CPPv4N4idol5Model5ModelER3Env14ObjectiveSense", "idol::Model::Model"], [8, 2, 1, "_CPPv4N4idol5Model5ModelERK5Model", "idol::Model::Model"], [8, 2, 1, "_CPPv4N4idol5Model5ModelERR5Model", "idol::Model::Model"], [8, 4, 1, "_CPPv4N4idol5Model5ModelER3Env", "idol::Model::Model::t_env"], [8, 4, 1, "_CPPv4N4idol5Model5ModelER3Env14ObjectiveSense", "idol::Model::Model::t_env"], [8, 4, 1, "_CPPv4N4idol5Model5ModelER3Env14ObjectiveSense", "idol::Model::Model::t_sense"], [8, 2, 1, "_CPPv4N4idol5Model3addERK3Ctr", "idol::Model::add"], [8, 2, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add"], [8, 2, 1, "_CPPv4N4idol5Model3addERK3Var", "idol::Model::add"], [8, 2, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add"], [8, 4, 1, "_CPPv4N4idol5Model3addERK3Ctr", "idol::Model::add::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add::t_temp_ctr"], [8, 4, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add::t_temp_var"], [8, 4, 1, "_CPPv4N4idol5Model3addERK3Var", "idol::Model::add::t_var"], [8, 4, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add::t_var"], [8, 2, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr"], [8, 2, 1, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", "idol::Model::add_ctr"], [8, 4, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr::t_name"], [8, 4, 1, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", "idol::Model::add_ctr::t_name"], [8, 4, 1, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", "idol::Model::add_ctr::t_row"], [8, 4, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr::t_temp_ctr"], [8, 4, 1, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", "idol::Model::add_ctr::t_type"], [8, 2, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs"], [8, 2, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs"], [8, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::N"], [8, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::N"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_constant"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_constant"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_dim"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_dim"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_name"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_name"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_type"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_type"], [8, 2, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var"], [8, 2, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_column"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_lb"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var::t_lb"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_name"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var::t_name"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_type"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var::t_type"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_ub"], [8, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var::t_ub"], [8, 2, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars"], [8, 2, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars"], [8, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::N"], [8, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::N"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_dim"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_dim"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_lb"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_lb"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_name"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_name"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_type"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_type"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_ub"], [8, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_ub"], [8, 2, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector"], [8, 3, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::N"], [8, 3, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::T"], [8, 4, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::t_vector"], [8, 2, 1, "_CPPv4NK4idol5Model5cloneEv", "idol::Model::clone"], [8, 2, 1, "_CPPv4NK4idol5Model4ctrsEv", "idol::Model::ctrs"], [8, 2, 1, "_CPPv4NK4idol5Model3envEv", "idol::Model::env"], [8, 2, 1, "_CPPv4NK4idol5Model14get_best_boundEv", "idol::Model::get_best_bound"], [8, 2, 1, "_CPPv4NK4idol5Model12get_best_objEv", "idol::Model::get_best_obj"], [8, 2, 1, "_CPPv4NK4idol5Model16get_ctr_by_indexEj", "idol::Model::get_ctr_by_index"], [8, 4, 1, "_CPPv4NK4idol5Model16get_ctr_by_indexEj", "idol::Model::get_ctr_by_index::t_index"], [8, 2, 1, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr", "idol::Model::get_ctr_dual"], [8, 4, 1, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr", "idol::Model::get_ctr_dual::t_ctr"], [8, 2, 1, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr", "idol::Model::get_ctr_farkas"], [8, 4, 1, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr", "idol::Model::get_ctr_farkas::t_ctr"], [8, 2, 1, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr", "idol::Model::get_ctr_index"], [8, 4, 1, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr", "idol::Model::get_ctr_index::t_ctr"], [8, 2, 1, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr", "idol::Model::get_ctr_row"], [8, 4, 1, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr", "idol::Model::get_ctr_row::t_ctr"], [8, 2, 1, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr", "idol::Model::get_ctr_type"], [8, 4, 1, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr", "idol::Model::get_ctr_type::t_ctr"], [8, 2, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff"], [8, 4, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff::t_ctr"], [8, 4, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model15get_n_solutionsEv", "idol::Model::get_n_solutions"], [8, 2, 1, "_CPPv4NK4idol5Model12get_obj_exprEv", "idol::Model::get_obj_expr"], [8, 2, 1, "_CPPv4NK4idol5Model13get_obj_senseEv", "idol::Model::get_obj_sense"], [8, 2, 1, "_CPPv4NK4idol5Model10get_reasonEv", "idol::Model::get_reason"], [8, 2, 1, "_CPPv4NK4idol5Model12get_rhs_exprEv", "idol::Model::get_rhs_expr"], [8, 2, 1, "_CPPv4NK4idol5Model18get_solution_indexEv", "idol::Model::get_solution_index"], [8, 2, 1, "_CPPv4NK4idol5Model10get_statusEv", "idol::Model::get_status"], [8, 2, 1, "_CPPv4NK4idol5Model16get_var_by_indexEj", "idol::Model::get_var_by_index"], [8, 4, 1, "_CPPv4NK4idol5Model16get_var_by_indexEj", "idol::Model::get_var_by_index::t_index"], [8, 2, 1, "_CPPv4NK4idol5Model14get_var_columnERK3Var", "idol::Model::get_var_column"], [8, 4, 1, "_CPPv4NK4idol5Model14get_var_columnERK3Var", "idol::Model::get_var_column::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model13get_var_indexERK3Var", "idol::Model::get_var_index"], [8, 4, 1, "_CPPv4NK4idol5Model13get_var_indexERK3Var", "idol::Model::get_var_index::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model10get_var_lbERK3Var", "idol::Model::get_var_lb"], [8, 4, 1, "_CPPv4NK4idol5Model10get_var_lbERK3Var", "idol::Model::get_var_lb::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model14get_var_primalERK3Var", "idol::Model::get_var_primal"], [8, 4, 1, "_CPPv4NK4idol5Model14get_var_primalERK3Var", "idol::Model::get_var_primal::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model11get_var_rayERK3Var", "idol::Model::get_var_ray"], [8, 4, 1, "_CPPv4NK4idol5Model11get_var_rayERK3Var", "idol::Model::get_var_ray::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model12get_var_typeERK3Var", "idol::Model::get_var_type"], [8, 4, 1, "_CPPv4NK4idol5Model12get_var_typeERK3Var", "idol::Model::get_var_type::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model10get_var_ubERK3Var", "idol::Model::get_var_ub"], [8, 4, 1, "_CPPv4NK4idol5Model10get_var_ubERK3Var", "idol::Model::get_var_ub::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model3hasERK3Ctr", "idol::Model::has"], [8, 2, 1, "_CPPv4NK4idol5Model3hasERK3Var", "idol::Model::has"], [8, 4, 1, "_CPPv4NK4idol5Model3hasERK3Ctr", "idol::Model::has::t_ctr"], [8, 4, 1, "_CPPv4NK4idol5Model3hasERK3Var", "idol::Model::has::t_var"], [8, 2, 1, "_CPPv4NK4idol5Model13has_optimizerEv", "idol::Model::has_optimizer"], [8, 2, 1, "_CPPv4NK4idol5Model2idEv", "idol::Model::id"], [8, 2, 1, "_CPPv4N4idol5ModelaSERK5Model", "idol::Model::operator="], [8, 2, 1, "_CPPv4N4idol5ModelaSERR5Model", "idol::Model::operator="], [8, 2, 1, "_CPPv4N4idol5Model8optimizeEv", "idol::Model::optimize"], [8, 2, 1, "_CPPv4N4idol5Model9optimizerEv", "idol::Model::optimizer"], [8, 2, 1, "_CPPv4NK4idol5Model9optimizerEv", "idol::Model::optimizer"], [8, 2, 1, "_CPPv4N4idol5Model6removeERK3Ctr", "idol::Model::remove"], [8, 2, 1, "_CPPv4N4idol5Model6removeERK3Var", "idol::Model::remove"], [8, 4, 1, "_CPPv4N4idol5Model6removeERK3Ctr", "idol::Model::remove::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model6removeERK3Var", "idol::Model::remove::t_var"], [8, 2, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRK8Constant", "idol::Model::set_ctr_rhs"], [8, 2, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRR8Constant", "idol::Model::set_ctr_rhs"], [8, 4, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRK8Constant", "idol::Model::set_ctr_rhs::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRR8Constant", "idol::Model::set_ctr_rhs::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRK8Constant", "idol::Model::set_ctr_rhs::t_rhs"], [8, 4, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRR8Constant", "idol::Model::set_ctr_rhs::t_rhs"], [8, 2, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK3Row", "idol::Model::set_ctr_row"], [8, 2, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR3Row", "idol::Model::set_ctr_row"], [8, 4, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK3Row", "idol::Model::set_ctr_row::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR3Row", "idol::Model::set_ctr_row::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK3Row", "idol::Model::set_ctr_row::t_row"], [8, 4, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR3Row", "idol::Model::set_ctr_row::t_row"], [8, 2, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type"], [8, 4, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type::t_type"], [8, 2, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", "idol::Model::set_mat_coeff"], [8, 2, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", "idol::Model::set_mat_coeff"], [8, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", "idol::Model::set_mat_coeff::t_coeff"], [8, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", "idol::Model::set_mat_coeff::t_coeff"], [8, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", "idol::Model::set_mat_coeff::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", "idol::Model::set_mat_coeff::t_ctr"], [8, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", "idol::Model::set_mat_coeff::t_var"], [8, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", "idol::Model::set_mat_coeff::t_var"], [8, 2, 1, "_CPPv4N4idol5Model13set_obj_constERK8Constant", "idol::Model::set_obj_const"], [8, 2, 1, "_CPPv4N4idol5Model13set_obj_constERR8Constant", "idol::Model::set_obj_const"], [8, 4, 1, "_CPPv4N4idol5Model13set_obj_constERK8Constant", "idol::Model::set_obj_const::t_constant"], [8, 4, 1, "_CPPv4N4idol5Model13set_obj_constERR8Constant", "idol::Model::set_obj_const::t_constant"], [8, 2, 1, "_CPPv4N4idol5Model12set_obj_exprERK4ExprI3Var3VarE", "idol::Model::set_obj_expr"], [8, 2, 1, "_CPPv4N4idol5Model12set_obj_exprERR4ExprI3Var3VarE", "idol::Model::set_obj_expr"], [8, 4, 1, "_CPPv4N4idol5Model12set_obj_exprERK4ExprI3Var3VarE", "idol::Model::set_obj_expr::t_objective"], [8, 4, 1, "_CPPv4N4idol5Model12set_obj_exprERR4ExprI3Var3VarE", "idol::Model::set_obj_expr::t_objective"], [8, 2, 1, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense", "idol::Model::set_obj_sense"], [8, 4, 1, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense", "idol::Model::set_obj_sense::t_value"], [8, 2, 1, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE", "idol::Model::set_rhs_expr"], [8, 2, 1, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE", "idol::Model::set_rhs_expr"], [8, 4, 1, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE", "idol::Model::set_rhs_expr::t_rhs"], [8, 4, 1, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE", "idol::Model::set_rhs_expr::t_rhs"], [8, 2, 1, "_CPPv4N4idol5Model18set_solution_indexEj", "idol::Model::set_solution_index"], [8, 4, 1, "_CPPv4N4idol5Model18set_solution_indexEj", "idol::Model::set_solution_index::t_index"], [8, 2, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK6Column", "idol::Model::set_var_column"], [8, 2, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR6Column", "idol::Model::set_var_column"], [8, 4, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK6Column", "idol::Model::set_var_column::t_column"], [8, 4, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR6Column", "idol::Model::set_var_column::t_column"], [8, 4, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK6Column", "idol::Model::set_var_column::t_var"], [8, 4, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR6Column", "idol::Model::set_var_column::t_var"], [8, 2, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb"], [8, 4, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb::t_lb"], [8, 4, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb::t_var"], [8, 2, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRK8Constant", "idol::Model::set_var_obj"], [8, 2, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRR8Constant", "idol::Model::set_var_obj"], [8, 4, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRK8Constant", "idol::Model::set_var_obj::t_obj"], [8, 4, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRR8Constant", "idol::Model::set_var_obj::t_obj"], [8, 4, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRK8Constant", "idol::Model::set_var_obj::t_var"], [8, 4, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRR8Constant", "idol::Model::set_var_obj::t_var"], [8, 2, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type"], [8, 4, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type::t_type"], [8, 4, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type::t_var"], [8, 2, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub"], [8, 4, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub::t_ub"], [8, 4, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub::t_var"], [8, 2, 1, "_CPPv4N4idol5Model5unuseEv", "idol::Model::unuse"], [8, 2, 1, "_CPPv4N4idol5Model6updateEv", "idol::Model::update"], [8, 2, 1, "_CPPv4N4idol5Model3useERK16OptimizerFactory", "idol::Model::use"], [8, 4, 1, "_CPPv4N4idol5Model3useERK16OptimizerFactory", "idol::Model::use::t_optimizer_factory"], [8, 2, 1, "_CPPv4NK4idol5Model4varsEv", "idol::Model::vars"], [8, 2, 1, "_CPPv4N4idol5Model5writeERKNSt6stringE", "idol::Model::write"], [8, 4, 1, "_CPPv4N4idol5Model5writeERKNSt6stringE", "idol::Model::write::t_name"], [8, 2, 1, "_CPPv4N4idol5ModelD0Ev", "idol::Model::~Model"], [41, 1, 1, "_CPPv4N4idol5MosekE", "idol::Mosek"], [41, 2, 1, "_CPPv4N4idol5Mosek20ContinuousRelaxationEv", "idol::Mosek::ContinuousRelaxation"], [41, 2, 1, "_CPPv4N4idol5Mosek5MosekERR5Mosek", "idol::Mosek::Mosek"], [41, 2, 1, "_CPPv4N4idol5Mosek5MosekEv", "idol::Mosek::Mosek"], [41, 2, 1, "_CPPv4NK4idol5Mosek5cloneEv", "idol::Mosek::clone"], [41, 2, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional"], [41, 2, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional"], [41, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_conditional_value"], [41, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_conditional_value"], [41, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_else"], [41, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_if"], [41, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_if"], [41, 2, 1, "_CPPv4NK4idol5MosekclERK5Model", "idol::Mosek::operator()"], [41, 4, 1, "_CPPv4NK4idol5MosekclERK5Model", "idol::Mosek::operator()::t_model"], [41, 2, 1, "_CPPv4N4idol5MosekaSERK5Mosek", "idol::Mosek::operator="], [41, 2, 1, "_CPPv4N4idol5MosekaSERR5Mosek", "idol::Mosek::operator="], [41, 2, 1, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd", "idol::Mosek::with_absolute_gap_tolerance"], [41, 4, 1, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd", "idol::Mosek::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [41, 2, 1, "_CPPv4N4idol5Mosek20with_best_bound_stopEd", "idol::Mosek::with_best_bound_stop"], [41, 4, 1, "_CPPv4N4idol5Mosek20with_best_bound_stopEd", "idol::Mosek::with_best_bound_stop::t_best_bound_stop"], [41, 2, 1, "_CPPv4N4idol5Mosek18with_best_obj_stopEd", "idol::Mosek::with_best_obj_stop"], [41, 4, 1, "_CPPv4N4idol5Mosek18with_best_obj_stopEd", "idol::Mosek::with_best_obj_stop::t_user_best_obj"], [41, 2, 1, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb", "idol::Mosek::with_continuous_relaxation_only"], [41, 4, 1, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb", "idol::Mosek::with_continuous_relaxation_only::t_value"], [41, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter"], [41, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter"], [41, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter"], [41, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter::t_param"], [41, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter::t_param"], [41, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter::t_param"], [41, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter::t_value"], [41, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter::t_value"], [41, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter::t_value"], [41, 2, 1, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb", "idol::Mosek::with_infeasible_or_unbounded_info"], [41, 4, 1, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb", "idol::Mosek::with_infeasible_or_unbounded_info::t_value"], [41, 2, 1, "_CPPv4N4idol5Mosek26with_iteration_count_limitEj", "idol::Mosek::with_iteration_count_limit"], [41, 4, 1, "_CPPv4N4idol5Mosek26with_iteration_count_limitEj", "idol::Mosek::with_iteration_count_limit::t_iteration_count_limit"], [41, 2, 1, "_CPPv4N4idol5Mosek14with_log_levelE8LogLevel5Color", "idol::Mosek::with_log_level"], [41, 4, 1, "_CPPv4N4idol5Mosek14with_log_levelE8LogLevel5Color", "idol::Mosek::with_log_level::t_log_color"], [41, 4, 1, "_CPPv4N4idol5Mosek14with_log_levelE8LogLevel5Color", "idol::Mosek::with_log_level::t_log_level"], [41, 2, 1, "_CPPv4N4idol5Mosek13with_presolveEb", "idol::Mosek::with_presolve"], [41, 4, 1, "_CPPv4N4idol5Mosek13with_presolveEb", "idol::Mosek::with_presolve::t_value"], [41, 2, 1, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd", "idol::Mosek::with_relative_gap_tolerance"], [41, 4, 1, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd", "idol::Mosek::with_relative_gap_tolerance::t_relative_gap_tolerance"], [41, 2, 1, "_CPPv4N4idol5Mosek17with_thread_limitEj", "idol::Mosek::with_thread_limit"], [41, 4, 1, "_CPPv4N4idol5Mosek17with_thread_limitEj", "idol::Mosek::with_thread_limit::t_max_n_threads"], [41, 2, 1, "_CPPv4N4idol5Mosek15with_time_limitEd", "idol::Mosek::with_time_limit"], [41, 4, 1, "_CPPv4N4idol5Mosek15with_time_limitEd", "idol::Mosek::with_time_limit::t_time_limit"], [20, 1, 1, "_CPPv4N4idol14MostInfeasibleE", "idol::MostInfeasible"], [20, 2, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible"], [20, 2, 1, "_CPPv4N4idol14MostInfeasible14MostInfeasibleEv", "idol::MostInfeasible::MostInfeasible"], [20, 3, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::IteratorT"], [20, 4, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::t_begin"], [20, 4, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::t_end"], [20, 1, 1, "_CPPv4I0EN4idol14MostInfeasible8StrategyE", "idol::MostInfeasible::Strategy"], [20, 3, 1, "_CPPv4I0EN4idol14MostInfeasible8StrategyE", "idol::MostInfeasible::Strategy::NodeT"], [20, 2, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible", "idol::MostInfeasible::Strategy::Strategy"], [20, 2, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyEv", "idol::MostInfeasible::Strategy::Strategy"], [20, 4, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible", "idol::MostInfeasible::Strategy::Strategy::t_parent"], [20, 2, 1, "_CPPv4NK4idol14MostInfeasible8Strategy5cloneEv", "idol::MostInfeasible::Strategy::clone"], [20, 2, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERK5Model", "idol::MostInfeasible::Strategy::operator()"], [20, 4, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERK5Model", "idol::MostInfeasible::Strategy::operator()::t_model"], [29, 0, 1, "_CPPv4N4idol13CallbackEvent10NodeLoadedE", "idol::NodeLoaded"], [9, 1, 1, "_CPPv4N4idol5ParamE", "idol::Param"], [9, 2, 1, "_CPPv4N4idol5Param5ParamERK3Ctr", "idol::Param::Param"], [9, 2, 1, "_CPPv4N4idol5Param5ParamERK3Var", "idol::Param::Param"], [9, 2, 1, "_CPPv4N4idol5Param5ParamERK5Param", "idol::Param::Param"], [9, 2, 1, "_CPPv4N4idol5Param5ParamERR5Param", "idol::Param::Param"], [9, 4, 1, "_CPPv4N4idol5Param5ParamERK3Ctr", "idol::Param::Param::t_ctr"], [9, 4, 1, "_CPPv4N4idol5Param5ParamERK5Param", "idol::Param::Param::t_param"], [9, 4, 1, "_CPPv4N4idol5Param5ParamERR5Param", "idol::Param::Param::t_param"], [9, 4, 1, "_CPPv4N4idol5Param5ParamERK3Var", "idol::Param::Param::t_var"], [9, 2, 1, "_CPPv4I0ENK4idol5Param2asE1Tv", "idol::Param::as"], [9, 3, 1, "_CPPv4I0ENK4idol5Param2asE1Tv", "idol::Param::as::T"], [9, 2, 1, "_CPPv4NK4idol5Param2idEv", "idol::Param::id"], [9, 2, 1, "_CPPv4I0ENK4idol5Param2isEbv", "idol::Param::is"], [9, 3, 1, "_CPPv4I0ENK4idol5Param2isEbv", "idol::Param::is::T"], [9, 2, 1, "_CPPv4NK4idol5Param4nameEv", "idol::Param::name"], [9, 2, 1, "_CPPv4N4idol5ParamaSERK5Param", "idol::Param::operator="], [9, 2, 1, "_CPPv4N4idol5ParamaSERR5Param", "idol::Param::operator="], [9, 4, 1, "_CPPv4N4idol5ParamaSERK5Param", "idol::Param::operator=::t_param"], [9, 4, 1, "_CPPv4N4idol5ParamaSERR5Param", "idol::Param::operator=::t_param"], [43, 5, 1, "_CPPv4N4idol8Problems3FLPE", "idol::Problems::FLP"], [43, 1, 1, "_CPPv4N4idol8Problems3FLP8InstanceE", "idol::Problems::FLP::Instance"], [43, 2, 1, "_CPPv4N4idol8Problems3FLP8Instance8InstanceEjj", "idol::Problems::FLP::Instance::Instance"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance8InstanceEjj", "idol::Problems::FLP::Instance::Instance::t_n_customers"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance8InstanceEjj", "idol::Problems::FLP::Instance::Instance::t_n_facilities"], [43, 2, 1, "_CPPv4NK4idol8Problems3FLP8Instance8capacityEj", "idol::Problems::FLP::Instance::capacity"], [43, 4, 1, "_CPPv4NK4idol8Problems3FLP8Instance8capacityEj", "idol::Problems::FLP::Instance::capacity::t_i"], [43, 2, 1, "_CPPv4NK4idol8Problems3FLP8Instance6demandEj", "idol::Problems::FLP::Instance::demand"], [43, 4, 1, "_CPPv4NK4idol8Problems3FLP8Instance6demandEj", "idol::Problems::FLP::Instance::demand::t_j"], [43, 2, 1, "_CPPv4NK4idol8Problems3FLP8Instance10fixed_costEj", "idol::Problems::FLP::Instance::fixed_cost"], [43, 4, 1, "_CPPv4NK4idol8Problems3FLP8Instance10fixed_costEj", "idol::Problems::FLP::Instance::fixed_cost::t_i"], [43, 2, 1, "_CPPv4NK4idol8Problems3FLP8Instance11n_customersEv", "idol::Problems::FLP::Instance::n_customers"], [43, 2, 1, "_CPPv4NK4idol8Problems3FLP8Instance12n_facilitiesEv", "idol::Problems::FLP::Instance::n_facilities"], [43, 2, 1, "_CPPv4NK4idol8Problems3FLP8Instance28per_unit_transportation_costEjj", "idol::Problems::FLP::Instance::per_unit_transportation_cost"], [43, 4, 1, "_CPPv4NK4idol8Problems3FLP8Instance28per_unit_transportation_costEjj", "idol::Problems::FLP::Instance::per_unit_transportation_cost::t_i"], [43, 4, 1, "_CPPv4NK4idol8Problems3FLP8Instance28per_unit_transportation_costEjj", "idol::Problems::FLP::Instance::per_unit_transportation_cost::t_j"], [43, 2, 1, "_CPPv4N4idol8Problems3FLP8Instance12set_capacityEjd", "idol::Problems::FLP::Instance::set_capacity"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance12set_capacityEjd", "idol::Problems::FLP::Instance::set_capacity::t_i"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance12set_capacityEjd", "idol::Problems::FLP::Instance::set_capacity::t_value"], [43, 2, 1, "_CPPv4N4idol8Problems3FLP8Instance10set_demandEjd", "idol::Problems::FLP::Instance::set_demand"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance10set_demandEjd", "idol::Problems::FLP::Instance::set_demand::t_j"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance10set_demandEjd", "idol::Problems::FLP::Instance::set_demand::t_value"], [43, 2, 1, "_CPPv4N4idol8Problems3FLP8Instance14set_fixed_costEjd", "idol::Problems::FLP::Instance::set_fixed_cost"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance14set_fixed_costEjd", "idol::Problems::FLP::Instance::set_fixed_cost::t_i"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance14set_fixed_costEjd", "idol::Problems::FLP::Instance::set_fixed_cost::t_value"], [43, 2, 1, "_CPPv4N4idol8Problems3FLP8Instance32set_per_unit_transportation_costEjjd", "idol::Problems::FLP::Instance::set_per_unit_transportation_cost"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance32set_per_unit_transportation_costEjjd", "idol::Problems::FLP::Instance::set_per_unit_transportation_cost::t_i"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance32set_per_unit_transportation_costEjjd", "idol::Problems::FLP::Instance::set_per_unit_transportation_cost::t_j"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP8Instance32set_per_unit_transportation_costEjjd", "idol::Problems::FLP::Instance::set_per_unit_transportation_cost::t_value"], [43, 2, 1, "_CPPv4N4idol8Problems3FLP39generate_instance_1991_Cornuejols_et_alEjjd", "idol::Problems::FLP::generate_instance_1991_Cornuejols_et_al"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP39generate_instance_1991_Cornuejols_et_alEjjd", "idol::Problems::FLP::generate_instance_1991_Cornuejols_et_al::t_n_customers"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP39generate_instance_1991_Cornuejols_et_alEjjd", "idol::Problems::FLP::generate_instance_1991_Cornuejols_et_al::t_n_facilities"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP39generate_instance_1991_Cornuejols_et_alEjjd", "idol::Problems::FLP::generate_instance_1991_Cornuejols_et_al::t_ratio_capacity_over_demand"], [43, 2, 1, "_CPPv4N4idol8Problems3FLP35read_instance_1991_Cornuejols_et_alERKNSt6stringE", "idol::Problems::FLP::read_instance_1991_Cornuejols_et_al"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP35read_instance_1991_Cornuejols_et_alERKNSt6stringE", "idol::Problems::FLP::read_instance_1991_Cornuejols_et_al::t_filename"], [43, 2, 1, "_CPPv4N4idol8Problems3FLP30read_instance_2021_Cheng_et_alERKNSt6stringE", "idol::Problems::FLP::read_instance_2021_Cheng_et_al"], [43, 4, 1, "_CPPv4N4idol8Problems3FLP30read_instance_2021_Cheng_et_alERKNSt6stringE", "idol::Problems::FLP::read_instance_2021_Cheng_et_al::t_filename"], [44, 5, 1, "_CPPv4N4idol8Problems3GAPE", "idol::Problems::GAP"], [44, 1, 1, "_CPPv4N4idol8Problems3GAP8InstanceE", "idol::Problems::GAP::Instance"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8Instance8InstanceERK8Instance", "idol::Problems::GAP::Instance::Instance"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8Instance8InstanceERR8Instance", "idol::Problems::GAP::Instance::Instance"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8Instance8InstanceEjj", "idol::Problems::GAP::Instance::Instance"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance8InstanceEjj", "idol::Problems::GAP::Instance::Instance::t_n_agents"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance8InstanceEjj", "idol::Problems::GAP::Instance::Instance::t_n_jobs"], [44, 2, 1, "_CPPv4NK4idol8Problems3GAP8Instance8capacityEj", "idol::Problems::GAP::Instance::capacity"], [44, 4, 1, "_CPPv4NK4idol8Problems3GAP8Instance8capacityEj", "idol::Problems::GAP::Instance::capacity::t_agent"], [44, 2, 1, "_CPPv4NK4idol8Problems3GAP8Instance4costEjj", "idol::Problems::GAP::Instance::cost"], [44, 4, 1, "_CPPv4NK4idol8Problems3GAP8Instance4costEjj", "idol::Problems::GAP::Instance::cost::t_agent"], [44, 4, 1, "_CPPv4NK4idol8Problems3GAP8Instance4costEjj", "idol::Problems::GAP::Instance::cost::t_job"], [44, 2, 1, "_CPPv4NK4idol8Problems3GAP8Instance8n_agentsEv", "idol::Problems::GAP::Instance::n_agents"], [44, 2, 1, "_CPPv4NK4idol8Problems3GAP8Instance6n_jobsEv", "idol::Problems::GAP::Instance::n_jobs"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8InstanceaSERK8Instance", "idol::Problems::GAP::Instance::operator="], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8InstanceaSERR8Instance", "idol::Problems::GAP::Instance::operator="], [44, 2, 1, "_CPPv4NK4idol8Problems3GAP8Instance20resource_consumptionEjj", "idol::Problems::GAP::Instance::resource_consumption"], [44, 4, 1, "_CPPv4NK4idol8Problems3GAP8Instance20resource_consumptionEjj", "idol::Problems::GAP::Instance::resource_consumption::t_agent"], [44, 4, 1, "_CPPv4NK4idol8Problems3GAP8Instance20resource_consumptionEjj", "idol::Problems::GAP::Instance::resource_consumption::t_job"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8Instance12set_capacityEjd", "idol::Problems::GAP::Instance::set_capacity"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance12set_capacityEjd", "idol::Problems::GAP::Instance::set_capacity::t_agent"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance12set_capacityEjd", "idol::Problems::GAP::Instance::set_capacity::t_value"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8Instance8set_costEjjd", "idol::Problems::GAP::Instance::set_cost"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance8set_costEjjd", "idol::Problems::GAP::Instance::set_cost::t_agent"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance8set_costEjjd", "idol::Problems::GAP::Instance::set_cost::t_job"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance8set_costEjjd", "idol::Problems::GAP::Instance::set_cost::t_value"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8Instance24set_resource_consumptionEjjd", "idol::Problems::GAP::Instance::set_resource_consumption"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance24set_resource_consumptionEjjd", "idol::Problems::GAP::Instance::set_resource_consumption::t_agent"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance24set_resource_consumptionEjjd", "idol::Problems::GAP::Instance::set_resource_consumption::t_job"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP8Instance24set_resource_consumptionEjjd", "idol::Problems::GAP::Instance::set_resource_consumption::t_value"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP8InstanceD0Ev", "idol::Problems::GAP::Instance::~Instance"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP40generate_instance_Chu_and_Beasley_1997_CEjj", "idol::Problems::GAP::generate_instance_Chu_and_Beasley_1997_C"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP40generate_instance_Chu_and_Beasley_1997_CEjj", "idol::Problems::GAP::generate_instance_Chu_and_Beasley_1997_C::t_n_jobs"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP40generate_instance_Chu_and_Beasley_1997_CEjj", "idol::Problems::GAP::generate_instance_Chu_and_Beasley_1997_C::t_n_machines"], [44, 2, 1, "_CPPv4N4idol8Problems3GAP13read_instanceERKNSt6stringE", "idol::Problems::GAP::read_instance"], [44, 4, 1, "_CPPv4N4idol8Problems3GAP13read_instanceERKNSt6stringE", "idol::Problems::GAP::read_instance::t_filename"], [45, 5, 1, "_CPPv4N4idol8Problems2KPE", "idol::Problems::KP"], [45, 1, 1, "_CPPv4N4idol8Problems2KP8InstanceE", "idol::Problems::KP::Instance"], [45, 2, 1, "_CPPv4N4idol8Problems2KP8Instance8InstanceERK8Instance", "idol::Problems::KP::Instance::Instance"], [45, 2, 1, "_CPPv4N4idol8Problems2KP8Instance8InstanceERR8Instance", "idol::Problems::KP::Instance::Instance"], [45, 2, 1, "_CPPv4N4idol8Problems2KP8Instance8InstanceEj", "idol::Problems::KP::Instance::Instance"], [45, 4, 1, "_CPPv4N4idol8Problems2KP8Instance8InstanceEj", "idol::Problems::KP::Instance::Instance::t_n_items"], [45, 2, 1, "_CPPv4NK4idol8Problems2KP8Instance8capacityEv", "idol::Problems::KP::Instance::capacity"], [45, 2, 1, "_CPPv4NK4idol8Problems2KP8Instance7n_itemsEv", "idol::Problems::KP::Instance::n_items"], [45, 2, 1, "_CPPv4N4idol8Problems2KP8InstanceaSERK8Instance", "idol::Problems::KP::Instance::operator="], [45, 2, 1, "_CPPv4N4idol8Problems2KP8InstanceaSERR8Instance", "idol::Problems::KP::Instance::operator="], [45, 2, 1, "_CPPv4NK4idol8Problems2KP8Instance6profitEj", "idol::Problems::KP::Instance::profit"], [45, 4, 1, "_CPPv4NK4idol8Problems2KP8Instance6profitEj", "idol::Problems::KP::Instance::profit::t_item"], [45, 2, 1, "_CPPv4N4idol8Problems2KP8Instance12set_capacityEd", "idol::Problems::KP::Instance::set_capacity"], [45, 4, 1, "_CPPv4N4idol8Problems2KP8Instance12set_capacityEd", "idol::Problems::KP::Instance::set_capacity::t_value"], [45, 2, 1, "_CPPv4N4idol8Problems2KP8Instance10set_profitEjd", "idol::Problems::KP::Instance::set_profit"], [45, 4, 1, "_CPPv4N4idol8Problems2KP8Instance10set_profitEjd", "idol::Problems::KP::Instance::set_profit::t_item"], [45, 4, 1, "_CPPv4N4idol8Problems2KP8Instance10set_profitEjd", "idol::Problems::KP::Instance::set_profit::t_value"], [45, 2, 1, "_CPPv4N4idol8Problems2KP8Instance10set_weightEjd", "idol::Problems::KP::Instance::set_weight"], [45, 4, 1, "_CPPv4N4idol8Problems2KP8Instance10set_weightEjd", "idol::Problems::KP::Instance::set_weight::t_item"], [45, 4, 1, "_CPPv4N4idol8Problems2KP8Instance10set_weightEjd", "idol::Problems::KP::Instance::set_weight::t_value"], [45, 2, 1, "_CPPv4NK4idol8Problems2KP8Instance6weightEj", "idol::Problems::KP::Instance::weight"], [45, 4, 1, "_CPPv4NK4idol8Problems2KP8Instance6weightEj", "idol::Problems::KP::Instance::weight::t_item"], [45, 2, 1, "_CPPv4N4idol8Problems2KP8InstanceD0Ev", "idol::Problems::KP::Instance::~Instance"], [45, 2, 1, "_CPPv4N4idol8Problems2KP13read_instanceERKNSt6stringE", "idol::Problems::KP::read_instance"], [45, 4, 1, "_CPPv4N4idol8Problems2KP13read_instanceERKNSt6stringE", "idol::Problems::KP::read_instance::t_filename"], [45, 2, 1, "_CPPv4N4idol8Problems2KP19read_instance_kplibERKNSt6stringE", "idol::Problems::KP::read_instance_kplib"], [45, 4, 1, "_CPPv4N4idol8Problems2KP19read_instance_kplibERKNSt6stringE", "idol::Problems::KP::read_instance_kplib::t_filename"], [46, 5, 1, "_CPPv4N4idol8Problems3MKPE", "idol::Problems::MKP"], [46, 1, 1, "_CPPv4N4idol8Problems3MKP8InstanceE", "idol::Problems::MKP::Instance"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8Instance8InstanceERK8Instance", "idol::Problems::MKP::Instance::Instance"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8Instance8InstanceERR8Instance", "idol::Problems::MKP::Instance::Instance"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8Instance8InstanceEjj", "idol::Problems::MKP::Instance::Instance"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP8Instance8InstanceEjj", "idol::Problems::MKP::Instance::Instance::t_n_items"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP8Instance8InstanceEjj", "idol::Problems::MKP::Instance::Instance::t_n_knapsacks"], [46, 2, 1, "_CPPv4NK4idol8Problems3MKP8Instance7n_itemsEv", "idol::Problems::MKP::Instance::n_items"], [46, 2, 1, "_CPPv4NK4idol8Problems3MKP8Instance11n_knapsacksEv", "idol::Problems::MKP::Instance::n_knapsacks"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8InstanceaSERK8Instance", "idol::Problems::MKP::Instance::operator="], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8InstanceaSERR8Instance", "idol::Problems::MKP::Instance::operator="], [46, 2, 1, "_CPPv4NK4idol8Problems3MKP8Instance1pEj", "idol::Problems::MKP::Instance::p"], [46, 4, 1, "_CPPv4NK4idol8Problems3MKP8Instance1pEj", "idol::Problems::MKP::Instance::p::t_item"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_pEjd", "idol::Problems::MKP::Instance::set_p"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_pEjd", "idol::Problems::MKP::Instance::set_p::t_item"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_pEjd", "idol::Problems::MKP::Instance::set_p::t_value"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_tEjd", "idol::Problems::MKP::Instance::set_t"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_tEjd", "idol::Problems::MKP::Instance::set_t::t_knapsack"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_tEjd", "idol::Problems::MKP::Instance::set_t::t_value"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_wEjd", "idol::Problems::MKP::Instance::set_w"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_wEjd", "idol::Problems::MKP::Instance::set_w::t_item"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP8Instance5set_wEjd", "idol::Problems::MKP::Instance::set_w::t_value"], [46, 2, 1, "_CPPv4NK4idol8Problems3MKP8Instance1tEj", "idol::Problems::MKP::Instance::t"], [46, 4, 1, "_CPPv4NK4idol8Problems3MKP8Instance1tEj", "idol::Problems::MKP::Instance::t::t_knapsack"], [46, 2, 1, "_CPPv4NK4idol8Problems3MKP8Instance1wEj", "idol::Problems::MKP::Instance::w"], [46, 4, 1, "_CPPv4NK4idol8Problems3MKP8Instance1wEj", "idol::Problems::MKP::Instance::w::t_item"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP8InstanceD0Ev", "idol::Problems::MKP::Instance::~Instance"], [46, 2, 1, "_CPPv4N4idol8Problems3MKP13read_instanceERKNSt6stringE", "idol::Problems::MKP::read_instance"], [46, 4, 1, "_CPPv4N4idol8Problems3MKP13read_instanceERKNSt6stringE", "idol::Problems::MKP::read_instance::t_filename"], [47, 5, 1, "_CPPv4N4idol8Problems3SRPE", "idol::Problems::SRP"], [47, 1, 1, "_CPPv4N4idol8Problems3SRP8InstanceE", "idol::Problems::SRP::Instance"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance8InstanceEjjj", "idol::Problems::SRP::Instance::Instance"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance8InstanceEjjj", "idol::Problems::SRP::Instance::Instance::t_n_part_time_staff"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance8InstanceEjjj", "idol::Problems::SRP::Instance::Instance::t_n_regular_staff"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance8InstanceEjjj", "idol::Problems::SRP::Instance::Instance::t_n_time_periods"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance6demandEj", "idol::Problems::SRP::Instance::demand"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance6demandEj", "idol::Problems::SRP::Instance::demand::t_time_index"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance17n_part_time_staffEv", "idol::Problems::SRP::Instance::n_part_time_staff"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance15n_regular_staffEv", "idol::Problems::SRP::Instance::n_regular_staff"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance14n_time_periodsEv", "idol::Problems::SRP::Instance::n_time_periods"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8InstancelsERNSt7ostreamERK8Instance", "idol::Problems::SRP::Instance::operator<<"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance25part_time_fixed_wage_costEjj", "idol::Problems::SRP::Instance::part_time_fixed_wage_cost"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance25part_time_fixed_wage_costEjj", "idol::Problems::SRP::Instance::part_time_fixed_wage_cost::t_staff_index"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance25part_time_fixed_wage_costEjj", "idol::Problems::SRP::Instance::part_time_fixed_wage_cost::t_time_index"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance32part_time_staff_hourly_wage_costEjj", "idol::Problems::SRP::Instance::part_time_staff_hourly_wage_cost"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance32part_time_staff_hourly_wage_costEjj", "idol::Problems::SRP::Instance::part_time_staff_hourly_wage_cost::t_staff_index"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance32part_time_staff_hourly_wage_costEjj", "idol::Problems::SRP::Instance::part_time_staff_hourly_wage_cost::t_time_index"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance40part_time_staff_maximum_number_of_shiftsEj", "idol::Problems::SRP::Instance::part_time_staff_maximum_number_of_shifts"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance40part_time_staff_maximum_number_of_shiftsEj", "idol::Problems::SRP::Instance::part_time_staff_maximum_number_of_shifts::t_staff_index"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance40part_time_staff_minimum_number_of_shiftsEj", "idol::Problems::SRP::Instance::part_time_staff_minimum_number_of_shifts"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance40part_time_staff_minimum_number_of_shiftsEj", "idol::Problems::SRP::Instance::part_time_staff_minimum_number_of_shifts::t_staff_index"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance23read_instance_from_fileERKNSt6stringE", "idol::Problems::SRP::Instance::read_instance_from_file"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance29regular_staff_fixed_wage_costEjj", "idol::Problems::SRP::Instance::regular_staff_fixed_wage_cost"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance29regular_staff_fixed_wage_costEjj", "idol::Problems::SRP::Instance::regular_staff_fixed_wage_cost::t_staff_index"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance29regular_staff_fixed_wage_costEjj", "idol::Problems::SRP::Instance::regular_staff_fixed_wage_cost::t_time_index"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance38regular_staff_maximum_number_of_shiftsEj", "idol::Problems::SRP::Instance::regular_staff_maximum_number_of_shifts"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance38regular_staff_maximum_number_of_shiftsEj", "idol::Problems::SRP::Instance::regular_staff_maximum_number_of_shifts::t_staff_index"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance38regular_staff_minimum_number_of_shiftsEj", "idol::Problems::SRP::Instance::regular_staff_minimum_number_of_shifts"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance38regular_staff_minimum_number_of_shiftsEj", "idol::Problems::SRP::Instance::regular_staff_minimum_number_of_shifts::t_staff_index"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance10set_demandEjd", "idol::Problems::SRP::Instance::set_demand"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance10set_demandEjd", "idol::Problems::SRP::Instance::set_demand::t_time_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance10set_demandEjd", "idol::Problems::SRP::Instance::set_demand::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance29set_part_time_fixed_wage_costEjjd", "idol::Problems::SRP::Instance::set_part_time_fixed_wage_cost"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance29set_part_time_fixed_wage_costEjjd", "idol::Problems::SRP::Instance::set_part_time_fixed_wage_cost::t_staff_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance29set_part_time_fixed_wage_costEjjd", "idol::Problems::SRP::Instance::set_part_time_fixed_wage_cost::t_time_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance29set_part_time_fixed_wage_costEjjd", "idol::Problems::SRP::Instance::set_part_time_fixed_wage_cost::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance36set_part_time_staff_hourly_wage_costEjjd", "idol::Problems::SRP::Instance::set_part_time_staff_hourly_wage_cost"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance36set_part_time_staff_hourly_wage_costEjjd", "idol::Problems::SRP::Instance::set_part_time_staff_hourly_wage_cost::t_staff_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance36set_part_time_staff_hourly_wage_costEjjd", "idol::Problems::SRP::Instance::set_part_time_staff_hourly_wage_cost::t_time_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance36set_part_time_staff_hourly_wage_costEjjd", "idol::Problems::SRP::Instance::set_part_time_staff_hourly_wage_cost::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance44set_part_time_staff_maximum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_part_time_staff_maximum_number_of_shifts"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance44set_part_time_staff_maximum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_part_time_staff_maximum_number_of_shifts::t_staff_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance44set_part_time_staff_maximum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_part_time_staff_maximum_number_of_shifts::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance44set_part_time_staff_minimum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_part_time_staff_minimum_number_of_shifts"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance44set_part_time_staff_minimum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_part_time_staff_minimum_number_of_shifts::t_staff_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance44set_part_time_staff_minimum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_part_time_staff_minimum_number_of_shifts::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance33set_regular_staff_fixed_wage_costEjjd", "idol::Problems::SRP::Instance::set_regular_staff_fixed_wage_cost"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance33set_regular_staff_fixed_wage_costEjjd", "idol::Problems::SRP::Instance::set_regular_staff_fixed_wage_cost::t_staff_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance33set_regular_staff_fixed_wage_costEjjd", "idol::Problems::SRP::Instance::set_regular_staff_fixed_wage_cost::t_time_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance33set_regular_staff_fixed_wage_costEjjd", "idol::Problems::SRP::Instance::set_regular_staff_fixed_wage_cost::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance42set_regular_staff_maximum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_regular_staff_maximum_number_of_shifts"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance42set_regular_staff_maximum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_regular_staff_maximum_number_of_shifts::t_staff_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance42set_regular_staff_maximum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_regular_staff_maximum_number_of_shifts::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance42set_regular_staff_minimum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_regular_staff_minimum_number_of_shifts"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance42set_regular_staff_minimum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_regular_staff_minimum_number_of_shifts::t_staff_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance42set_regular_staff_minimum_number_of_shiftsEjd", "idol::Problems::SRP::Instance::set_regular_staff_minimum_number_of_shifts::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance32set_regular_staff_shift_durationEj", "idol::Problems::SRP::Instance::set_regular_staff_shift_duration"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance32set_regular_staff_shift_durationEj", "idol::Problems::SRP::Instance::set_regular_staff_shift_duration::t_value"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP8Instance29set_unmet_demand_penalty_costEjd", "idol::Problems::SRP::Instance::set_unmet_demand_penalty_cost"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance29set_unmet_demand_penalty_costEjd", "idol::Problems::SRP::Instance::set_unmet_demand_penalty_cost::t_index_index"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP8Instance29set_unmet_demand_penalty_costEjd", "idol::Problems::SRP::Instance::set_unmet_demand_penalty_cost::t_value"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance14shift_durationEv", "idol::Problems::SRP::Instance::shift_duration"], [47, 2, 1, "_CPPv4NK4idol8Problems3SRP8Instance25unmet_demand_penalty_costEj", "idol::Problems::SRP::Instance::unmet_demand_penalty_cost"], [47, 4, 1, "_CPPv4NK4idol8Problems3SRP8Instance25unmet_demand_penalty_costEj", "idol::Problems::SRP::Instance::unmet_demand_penalty_cost::t_time_index"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP40generate_random_instance_Zhao_et_al_2012Ejjj", "idol::Problems::SRP::generate_random_instance_Zhao_et_al_2012"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP40generate_random_instance_Zhao_et_al_2012Ejjj", "idol::Problems::SRP::generate_random_instance_Zhao_et_al_2012::t_n_part_time_staff"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP40generate_random_instance_Zhao_et_al_2012Ejjj", "idol::Problems::SRP::generate_random_instance_Zhao_et_al_2012::t_n_regular_staff"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP40generate_random_instance_Zhao_et_al_2012Ejjj", "idol::Problems::SRP::generate_random_instance_Zhao_et_al_2012::t_n_time_periods"], [47, 2, 1, "_CPPv4N4idol8Problems3SRPlsERNSt7ostreamERK8Instance", "idol::Problems::SRP::operator<<"], [47, 4, 1, "_CPPv4N4idol8Problems3SRPlsERNSt7ostreamERK8Instance", "idol::Problems::SRP::operator<<::t_instance"], [47, 4, 1, "_CPPv4N4idol8Problems3SRPlsERNSt7ostreamERK8Instance", "idol::Problems::SRP::operator<<::t_os"], [47, 2, 1, "_CPPv4N4idol8Problems3SRP23read_instance_from_fileERKNSt6stringE", "idol::Problems::SRP::read_instance_from_file"], [47, 4, 1, "_CPPv4N4idol8Problems3SRP23read_instance_from_fileERKNSt6stringE", "idol::Problems::SRP::read_instance_from_file::t_path_to_file"], [10, 1, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr"], [10, 3, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr::EqualTo"], [10, 3, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr::Hash"], [10, 3, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr::Key1"], [10, 3, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr::Key2"], [10, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4Key1RK4Key2", "idol::QuadExpr::QuadExpr"], [10, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr"], [10, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8QuadExpr", "idol::QuadExpr::QuadExpr"], [10, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr"], [10, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8QuadExpr", "idol::QuadExpr::QuadExpr"], [10, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprEv", "idol::QuadExpr::QuadExpr"], [10, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_a"], [10, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_a"], [10, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_a"], [10, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_b"], [10, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_b"], [10, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_b"], [10, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_factor"], [10, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_factor"], [10, 2, 1, "_CPPv4NK4idol8QuadExpr3getERK4Key1RK4Key2", "idol::QuadExpr::get"], [10, 4, 1, "_CPPv4NK4idol8QuadExpr3getERK4Key1RK4Key2", "idol::QuadExpr::get::t_a"], [10, 4, 1, "_CPPv4NK4idol8QuadExpr3getERK4Key1RK4Key2", "idol::QuadExpr::get::t_b"], [10, 2, 1, "_CPPv4N4idol8QuadExpraSERK8QuadExpr", "idol::QuadExpr::operator="], [10, 2, 1, "_CPPv4N4idol8QuadExpraSERR8QuadExpr", "idol::QuadExpr::operator="], [10, 2, 1, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", "idol::QuadExpr::set"], [10, 4, 1, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", "idol::QuadExpr::set::t_a"], [10, 4, 1, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", "idol::QuadExpr::set::t_b"], [10, 4, 1, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", "idol::QuadExpr::set::t_coefficient"], [10, 2, 1, "_CPPv4N4idol8QuadExprD0Ev", "idol::QuadExpr::~QuadExpr"], [11, 1, 1, "_CPPv4N4idol3RowE", "idol::Row"], [11, 7, 1, "_CPPv4N4idol3Row8EmptyRowE", "idol::Row::EmptyRow"], [11, 2, 1, "_CPPv4N4idol3Row3RowERK3Row", "idol::Row::Row"], [11, 2, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row"], [11, 2, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row"], [11, 2, 1, "_CPPv4N4idol3Row3RowERR3Row", "idol::Row::Row"], [11, 2, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row"], [11, 2, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row"], [11, 2, 1, "_CPPv4N4idol3Row3RowEv", "idol::Row::Row"], [11, 4, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row::t_lhs"], [11, 4, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row::t_lhs"], [11, 4, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row::t_lhs"], [11, 4, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row::t_lhs"], [11, 4, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row::t_rhs"], [11, 4, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row::t_rhs"], [11, 4, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row::t_rhs"], [11, 4, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row::t_rhs"], [11, 4, 1, "_CPPv4N4idol3Row3RowERK3Row", "idol::Row::Row::t_src"], [11, 4, 1, "_CPPv4N4idol3Row3RowERR3Row", "idol::Row::Row::t_src"], [11, 2, 1, "_CPPv4NK4idol3Row3fixERKN8Solution4DualE", "idol::Row::fix"], [11, 2, 1, "_CPPv4NK4idol3Row3fixERKN8Solution6PrimalE", "idol::Row::fix"], [11, 4, 1, "_CPPv4NK4idol3Row3fixERKN8Solution4DualE", "idol::Row::fix::t_duals"], [11, 4, 1, "_CPPv4NK4idol3Row3fixERKN8Solution6PrimalE", "idol::Row::fix::t_primals"], [11, 2, 1, "_CPPv4N4idol3Row6linearEv", "idol::Row::linear"], [11, 2, 1, "_CPPv4NK4idol3Row6linearEv", "idol::Row::linear"], [11, 2, 1, "_CPPv4N4idol3RowmLEd", "idol::Row::operator*="], [11, 4, 1, "_CPPv4N4idol3RowmLEd", "idol::Row::operator*=::t_rhs"], [11, 2, 1, "_CPPv4N4idol3RowpLERK3Row", "idol::Row::operator+="], [11, 4, 1, "_CPPv4N4idol3RowpLERK3Row", "idol::Row::operator+=::t_rhs"], [11, 2, 1, "_CPPv4N4idol3RowmIERK3Row", "idol::Row::operator-="], [11, 4, 1, "_CPPv4N4idol3RowmIERK3Row", "idol::Row::operator-=::t_rhs"], [11, 2, 1, "_CPPv4N4idol3RowaSERK3Row", "idol::Row::operator="], [11, 2, 1, "_CPPv4N4idol3RowaSERR3Row", "idol::Row::operator="], [11, 4, 1, "_CPPv4N4idol3RowaSERK3Row", "idol::Row::operator=::t_src"], [11, 4, 1, "_CPPv4N4idol3RowaSERR3Row", "idol::Row::operator=::t_src"], [11, 2, 1, "_CPPv4N4idol3Row9quadraticEv", "idol::Row::quadratic"], [11, 2, 1, "_CPPv4NK4idol3Row9quadraticEv", "idol::Row::quadratic"], [11, 2, 1, "_CPPv4N4idol3Row3rhsEv", "idol::Row::rhs"], [11, 2, 1, "_CPPv4NK4idol3Row3rhsEv", "idol::Row::rhs"], [11, 2, 1, "_CPPv4N4idol3Row10set_linearERK7LinExprI3VarE", "idol::Row::set_linear"], [11, 2, 1, "_CPPv4N4idol3Row10set_linearERR7LinExprI3VarE", "idol::Row::set_linear"], [11, 4, 1, "_CPPv4N4idol3Row10set_linearERK7LinExprI3VarE", "idol::Row::set_linear::t_lin_expr"], [11, 4, 1, "_CPPv4N4idol3Row10set_linearERR7LinExprI3VarE", "idol::Row::set_linear::t_lin_expr"], [11, 2, 1, "_CPPv4N4idol3Row13set_quadraticERK8QuadExprI3Var3VarE", "idol::Row::set_quadratic"], [11, 2, 1, "_CPPv4N4idol3Row13set_quadraticERR8QuadExprI3Var3VarE", "idol::Row::set_quadratic"], [11, 4, 1, "_CPPv4N4idol3Row13set_quadraticERK8QuadExprI3Var3VarE", "idol::Row::set_quadratic::t_quad_expr"], [11, 4, 1, "_CPPv4N4idol3Row13set_quadraticERR8QuadExprI3Var3VarE", "idol::Row::set_quadratic::t_quad_expr"], [11, 2, 1, "_CPPv4N4idol3Row7set_rhsERK8Constant", "idol::Row::set_rhs"], [11, 2, 1, "_CPPv4N4idol3Row7set_rhsERR8Constant", "idol::Row::set_rhs"], [11, 4, 1, "_CPPv4N4idol3Row7set_rhsERK8Constant", "idol::Row::set_rhs::t_rhs"], [11, 4, 1, "_CPPv4N4idol3Row7set_rhsERR8Constant", "idol::Row::set_rhs::t_rhs"], [12, 1, 1, "_CPPv4N4idol8Solution4DualE", "idol::Solution::Dual"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual5beginEv", "idol::Solution::Dual::begin"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual6cbeginEv", "idol::Solution::Dual::cbegin"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual4cendEv", "idol::Solution::Dual::cend"], [12, 5, 1, "_CPPv4N4idol8Solution4Dual14const_iteratorE", "idol::Solution::Dual::const_iterator"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual3endEv", "idol::Solution::Dual::end"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual3getERK3Ctr", "idol::Solution::Dual::get"], [12, 4, 1, "_CPPv4NK4idol8Solution4Dual3getERK3Ctr", "idol::Solution::Dual::get::t_key"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual19has_objective_valueEv", "idol::Solution::Dual::has_objective_value"], [12, 2, 1, "_CPPv4N4idol8Solution4Dual22merge_without_conflictE4Dual", "idol::Solution::Dual::merge_without_conflict"], [12, 4, 1, "_CPPv4N4idol8Solution4Dual22merge_without_conflictE4Dual", "idol::Solution::Dual::merge_without_conflict::t_rhs"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual4normEd", "idol::Solution::Dual::norm"], [12, 4, 1, "_CPPv4NK4idol8Solution4Dual4normEd", "idol::Solution::Dual::norm::t_p"], [12, 2, 1, "_CPPv4N4idol8Solution4Dual9normalizeEd", "idol::Solution::Dual::normalize"], [12, 4, 1, "_CPPv4N4idol8Solution4Dual9normalizeEd", "idol::Solution::Dual::normalize::t_p"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual15objective_valueEv", "idol::Solution::Dual::objective_value"], [12, 2, 1, "_CPPv4N4idol8Solution4DualmLEd", "idol::Solution::Dual::operator*="], [12, 4, 1, "_CPPv4N4idol8Solution4DualmLEd", "idol::Solution::Dual::operator*=::t_factor"], [12, 2, 1, "_CPPv4N4idol8Solution4DualpLERK4Dual", "idol::Solution::Dual::operator+="], [12, 4, 1, "_CPPv4N4idol8Solution4DualpLERK4Dual", "idol::Solution::Dual::operator+=::t_rhs"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual6reasonEv", "idol::Solution::Dual::reason"], [12, 2, 1, "_CPPv4N4idol8Solution4Dual21reset_objective_valueEv", "idol::Solution::Dual::reset_objective_value"], [12, 2, 1, "_CPPv4N4idol8Solution4Dual3setERK3Ctrd", "idol::Solution::Dual::set"], [12, 4, 1, "_CPPv4N4idol8Solution4Dual3setERK3Ctrd", "idol::Solution::Dual::set::t_key"], [12, 4, 1, "_CPPv4N4idol8Solution4Dual3setERK3Ctrd", "idol::Solution::Dual::set::t_value"], [12, 2, 1, "_CPPv4N4idol8Solution4Dual19set_objective_valueEd", "idol::Solution::Dual::set_objective_value"], [12, 4, 1, "_CPPv4N4idol8Solution4Dual19set_objective_valueEd", "idol::Solution::Dual::set_objective_value::t_value"], [12, 2, 1, "_CPPv4N4idol8Solution4Dual10set_reasonE14SolutionReason", "idol::Solution::Dual::set_reason"], [12, 4, 1, "_CPPv4N4idol8Solution4Dual10set_reasonE14SolutionReason", "idol::Solution::Dual::set_reason::t_reason"], [12, 2, 1, "_CPPv4N4idol8Solution4Dual10set_statusE14SolutionStatus", "idol::Solution::Dual::set_status"], [12, 4, 1, "_CPPv4N4idol8Solution4Dual10set_statusE14SolutionStatus", "idol::Solution::Dual::set_status::t_status"], [12, 2, 1, "_CPPv4NK4idol8Solution4Dual6statusEv", "idol::Solution::Dual::status"], [13, 1, 1, "_CPPv4N4idol8Solution6PrimalE", "idol::Solution::Primal"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal5beginEv", "idol::Solution::Primal::begin"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal6cbeginEv", "idol::Solution::Primal::cbegin"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal4cendEv", "idol::Solution::Primal::cend"], [13, 5, 1, "_CPPv4N4idol8Solution6Primal14const_iteratorE", "idol::Solution::Primal::const_iterator"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal3endEv", "idol::Solution::Primal::end"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal3getERK3Var", "idol::Solution::Primal::get"], [13, 4, 1, "_CPPv4NK4idol8Solution6Primal3getERK3Var", "idol::Solution::Primal::get::t_key"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal19has_objective_valueEv", "idol::Solution::Primal::has_objective_value"], [13, 2, 1, "_CPPv4N4idol8Solution6Primal22merge_without_conflictE6Primal", "idol::Solution::Primal::merge_without_conflict"], [13, 4, 1, "_CPPv4N4idol8Solution6Primal22merge_without_conflictE6Primal", "idol::Solution::Primal::merge_without_conflict::t_rhs"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal4normEd", "idol::Solution::Primal::norm"], [13, 4, 1, "_CPPv4NK4idol8Solution6Primal4normEd", "idol::Solution::Primal::norm::t_p"], [13, 2, 1, "_CPPv4N4idol8Solution6Primal9normalizeEd", "idol::Solution::Primal::normalize"], [13, 4, 1, "_CPPv4N4idol8Solution6Primal9normalizeEd", "idol::Solution::Primal::normalize::t_p"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal15objective_valueEv", "idol::Solution::Primal::objective_value"], [13, 2, 1, "_CPPv4N4idol8Solution6PrimalmLEd", "idol::Solution::Primal::operator*="], [13, 4, 1, "_CPPv4N4idol8Solution6PrimalmLEd", "idol::Solution::Primal::operator*=::t_factor"], [13, 2, 1, "_CPPv4N4idol8Solution6PrimalpLERK6Primal", "idol::Solution::Primal::operator+="], [13, 4, 1, "_CPPv4N4idol8Solution6PrimalpLERK6Primal", "idol::Solution::Primal::operator+=::t_rhs"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal6reasonEv", "idol::Solution::Primal::reason"], [13, 2, 1, "_CPPv4N4idol8Solution6Primal21reset_objective_valueEv", "idol::Solution::Primal::reset_objective_value"], [13, 2, 1, "_CPPv4N4idol8Solution6Primal3setERK3Vard", "idol::Solution::Primal::set"], [13, 4, 1, "_CPPv4N4idol8Solution6Primal3setERK3Vard", "idol::Solution::Primal::set::t_key"], [13, 4, 1, "_CPPv4N4idol8Solution6Primal3setERK3Vard", "idol::Solution::Primal::set::t_value"], [13, 2, 1, "_CPPv4N4idol8Solution6Primal19set_objective_valueEd", "idol::Solution::Primal::set_objective_value"], [13, 4, 1, "_CPPv4N4idol8Solution6Primal19set_objective_valueEd", "idol::Solution::Primal::set_objective_value::t_value"], [13, 2, 1, "_CPPv4N4idol8Solution6Primal10set_reasonE14SolutionReason", "idol::Solution::Primal::set_reason"], [13, 4, 1, "_CPPv4N4idol8Solution6Primal10set_reasonE14SolutionReason", "idol::Solution::Primal::set_reason::t_reason"], [13, 2, 1, "_CPPv4N4idol8Solution6Primal10set_statusE14SolutionStatus", "idol::Solution::Primal::set_status"], [13, 4, 1, "_CPPv4N4idol8Solution6Primal10set_statusE14SolutionStatus", "idol::Solution::Primal::set_status::t_status"], [13, 2, 1, "_CPPv4NK4idol8Solution6Primal6statusEv", "idol::Solution::Primal::status"], [14, 1, 1, "_CPPv4N4idol7TempCtrE", "idol::TempCtr"], [14, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERK7TempCtr", "idol::TempCtr::TempCtr"], [14, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERR3Row7CtrType", "idol::TempCtr::TempCtr"], [14, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7TempCtr", "idol::TempCtr::TempCtr"], [14, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrEv", "idol::TempCtr::TempCtr"], [14, 4, 1, "_CPPv4N4idol7TempCtr7TempCtrERR3Row7CtrType", "idol::TempCtr::TempCtr::t_row"], [14, 4, 1, "_CPPv4N4idol7TempCtr7TempCtrERR3Row7CtrType", "idol::TempCtr::TempCtr::t_type"], [14, 2, 1, "_CPPv4NK4idol7TempCtr11is_violatedERKN8Solution6PrimalE", "idol::TempCtr::is_violated"], [14, 4, 1, "_CPPv4NK4idol7TempCtr11is_violatedERKN8Solution6PrimalE", "idol::TempCtr::is_violated::t_solution"], [14, 2, 1, "_CPPv4N4idol7TempCtraSERK7TempCtr", "idol::TempCtr::operator="], [14, 2, 1, "_CPPv4N4idol7TempCtraSERR7TempCtr", "idol::TempCtr::operator="], [14, 2, 1, "_CPPv4N4idol7TempCtr3rowEv", "idol::TempCtr::row"], [14, 2, 1, "_CPPv4NK4idol7TempCtr3rowEv", "idol::TempCtr::row"], [14, 2, 1, "_CPPv4N4idol7TempCtr8set_typeE7CtrType", "idol::TempCtr::set_type"], [14, 4, 1, "_CPPv4N4idol7TempCtr8set_typeE7CtrType", "idol::TempCtr::set_type::t_type"], [14, 2, 1, "_CPPv4NK4idol7TempCtr4typeEv", "idol::TempCtr::type"], [15, 1, 1, "_CPPv4N4idol7TempVarE", "idol::TempVar"], [15, 2, 1, "_CPPv4N4idol7TempVar7TempVarERK7TempVar", "idol::TempVar::TempVar"], [15, 2, 1, "_CPPv4N4idol7TempVar7TempVarERR7TempVar", "idol::TempVar::TempVar"], [15, 2, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar"], [15, 2, 1, "_CPPv4N4idol7TempVar7TempVarEv", "idol::TempVar::TempVar"], [15, 4, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar::t_column"], [15, 4, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar::t_lb"], [15, 4, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar::t_type"], [15, 4, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar::t_ub"], [15, 2, 1, "_CPPv4N4idol7TempVar6columnEv", "idol::TempVar::column"], [15, 2, 1, "_CPPv4NK4idol7TempVar6columnEv", "idol::TempVar::column"], [15, 2, 1, "_CPPv4NK4idol7TempVar2lbEv", "idol::TempVar::lb"], [15, 2, 1, "_CPPv4N4idol7TempVaraSERK7TempVar", "idol::TempVar::operator="], [15, 2, 1, "_CPPv4N4idol7TempVaraSERR7TempVar", "idol::TempVar::operator="], [15, 2, 1, "_CPPv4N4idol7TempVar6set_lbEd", "idol::TempVar::set_lb"], [15, 4, 1, "_CPPv4N4idol7TempVar6set_lbEd", "idol::TempVar::set_lb::t_lb"], [15, 2, 1, "_CPPv4N4idol7TempVar8set_typeE7VarType", "idol::TempVar::set_type"], [15, 4, 1, "_CPPv4N4idol7TempVar8set_typeE7VarType", "idol::TempVar::set_type::t_type"], [15, 2, 1, "_CPPv4N4idol7TempVar6set_ubEd", "idol::TempVar::set_ub"], [15, 4, 1, "_CPPv4N4idol7TempVar6set_ubEd", "idol::TempVar::set_ub::t_ub"], [15, 2, 1, "_CPPv4NK4idol7TempVar4typeEv", "idol::TempVar::type"], [15, 2, 1, "_CPPv4NK4idol7TempVar2ubEv", "idol::TempVar::ub"], [49, 5, 1, "_CPPv4N4idol9ToleranceE", "idol::Tolerance"], [49, 7, 1, "_CPPv4N4idol9Tolerance11FeasibilityE", "idol::Tolerance::Feasibility"], [49, 7, 1, "_CPPv4N4idol9Tolerance7IntegerE", "idol::Tolerance::Integer"], [49, 7, 1, "_CPPv4N4idol9Tolerance14MIPAbsoluteGapE", "idol::Tolerance::MIPAbsoluteGap"], [49, 7, 1, "_CPPv4N4idol9Tolerance14MIPRelativeGapE", "idol::Tolerance::MIPRelativeGap"], [49, 7, 1, "_CPPv4N4idol9Tolerance10OptimalityE", "idol::Tolerance::Optimality"], [49, 7, 1, "_CPPv4N4idol9Tolerance8SparsityE", "idol::Tolerance::Sparsity"], [31, 1, 1, "_CPPv4N4idol15UserCutCallbackE", "idol::UserCutCallback"], [31, 1, 1, "_CPPv4N4idol15UserCutCallback8StrategyE", "idol::UserCutCallback::Strategy"], [31, 2, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::UserCutCallback::Strategy::Strategy"], [31, 4, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::UserCutCallback::Strategy::Strategy::t_cut"], [31, 4, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::UserCutCallback::Strategy::Strategy::t_log_color"], [31, 4, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::UserCutCallback::Strategy::Strategy::t_log_level"], [31, 4, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color", "idol::UserCutCallback::Strategy::Strategy::t_separation_problem"], [31, 2, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback"], [31, 4, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback::t_cut"], [31, 4, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback::t_model"], [31, 2, 1, "_CPPv4NK4idol15UserCutCallback5cloneEv", "idol::UserCutCallback::clone"], [31, 2, 1, "_CPPv4N4idol15UserCutCallbackclEv", "idol::UserCutCallback::operator()"], [31, 2, 1, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::UserCutCallback::with_separation_optimizer"], [31, 4, 1, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::UserCutCallback::with_separation_optimizer::t_optimizer_factory"], [16, 1, 1, "_CPPv4N4idol3VarE", "idol::Var"], [16, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var"], [16, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var"], [16, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_column"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_column"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_env"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_env"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_env"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_lb"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_lb"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_lb"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_name"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_name"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_name"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_type"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_type"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_type"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_ub"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_ub"], [16, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_ub"], [16, 2, 1, "_CPPv4NK4idol3Var3getERK10AnnotationI3Var6ValueTE", "idol::Var::get"], [16, 4, 1, "_CPPv4NK4idol3Var3getERK10AnnotationI3Var6ValueTE", "idol::Var::get::t_annotation"], [16, 2, 1, "_CPPv4NK4idol3Var2idEv", "idol::Var::id"], [16, 2, 1, "_CPPv4NK4idol3Var5is_inERK5Model", "idol::Var::is_in"], [16, 4, 1, "_CPPv4NK4idol3Var5is_inERK5Model", "idol::Var::is_in::t_model"], [16, 2, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector"], [16, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::I"], [16, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::N"], [16, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_dim"], [16, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_env"], [16, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_lb"], [16, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_name"], [16, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_type"], [16, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_ub"], [16, 2, 1, "_CPPv4NK4idol3Var4nameEv", "idol::Var::name"], [16, 2, 1, "_CPPv4NK4idol3VarneERK6ObjectI10VarVersion3VarE", "idol::Var::operator!="], [16, 4, 1, "_CPPv4NK4idol3VarneERK6ObjectI10VarVersion3VarE", "idol::Var::operator!=::t_rhs"], [16, 2, 1, "_CPPv4NK4idol3VareqERK6ObjectI10VarVersion3VarE", "idol::Var::operator=="], [16, 4, 1, "_CPPv4NK4idol3VareqERK6ObjectI10VarVersion3VarE", "idol::Var::operator==::t_rhs"], [16, 2, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI3Var6ValueTEDpRR5ArgsT", "idol::Var::set"], [16, 4, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI3Var6ValueTEDpRR5ArgsT", "idol::Var::set::t_annotation"], [16, 4, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI3Var6ValueTEDpRR5ArgsT", "idol::Var::set::t_args"], [26, 1, 1, "_CPPv4N4idol10WorstBoundE", "idol::WorstBound"], [26, 1, 1, "_CPPv4I0EN4idol10WorstBound8StrategyE", "idol::WorstBound::Strategy"], [26, 3, 1, "_CPPv4I0EN4idol10WorstBound8StrategyE", "idol::WorstBound::Strategy::NodeT"], [26, 2, 1, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound", "idol::WorstBound::Strategy::Strategy"], [26, 4, 1, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound", "idol::WorstBound::Strategy::Strategy::t_parent"], [26, 2, 1, "_CPPv4NK4idol10WorstBound8Strategy5cloneEv", "idol::WorstBound::Strategy::clone"], [26, 2, 1, "_CPPv4NK4idol10WorstBound8StrategyclEv", "idol::WorstBound::Strategy::operator()"]]}, "objtypes": {"0": "cpp:enumerator", "1": "cpp:class", "2": "cpp:function", "3": "cpp:templateParam", "4": "cpp:functionParam", "5": "cpp:type", "6": "cpp:enum", "7": "cpp:member"}, "objnames": {"0": ["cpp", "enumerator", "C++ enumerator"], "1": ["cpp", "class", "C++ class"], "2": ["cpp", "function", "C++ function"], "3": ["cpp", "templateParam", "C++ template parameter"], "4": ["cpp", "functionParam", "C++ function parameter"], "5": ["cpp", "type", "C++ type"], "6": ["cpp", "enum", "C++ enum"], "7": ["cpp", "member", "C++ member"]}, "titleterms": {"api": 0, "annot": 1, "column": [2, 35, 57], "constant": [3, 68], "ctr": 4, "env": [5, 68], "expr": 6, "linexpr": 7, "exampl": [7, 8, 18, 19, 28, 52, 55, 57, 58, 62, 63, 65, 69], "model": [8, 17, 64, 65, 68, 69], "param": 9, "quadexpr": 10, "row": 11, "solut": [12, 13, 69], "dual": [12, 64, 71], "primal": 13, "tempctr": 14, "tempvar": 15, "var": 16, "branchandbound": 18, "branchandboundcallback": 19, "mostinfeas": 20, "branch": [21, 22, 53, 54, 57], "rule": [21, 27], "And": 22, "bound": [22, 53, 57, 71], "algorithm": [22, 35, 57], "bestbound": 23, "breadthfirst": 24, "depthfirst": 25, "worstbound": 26, "node": 27, "select": 27, "callback": [28, 32], "usercutcallback": [28, 31], "lazycutcallback": [28, 30, 64], "creat": [28, 58], "your": [28, 60], "own": 28, "event": 29, "tabl": [32, 35, 37, 39, 40, 42, 55, 57, 59], "content": [32, 35, 37, 39, 40, 42, 55, 57, 59], "columngener": 33, "dantzigwolfedecomposit": 34, "gener": [35, 44, 54, 57], "glpk": [36, 37, 63], "interfac": [37, 39, 42, 57, 62], "gurobi": [38, 39, 56, 58, 63], "optim": [40, 57, 68, 72], "introduct": 40, "factori": 40, "mosek": [41, 42, 62, 63], "facil": [43, 53], "locat": [43, 53], "problem": [43, 44, 45, 46, 47, 48, 53, 54, 56, 64, 68, 69, 71], "flp": 43, "assign": [44, 54], "gap": 44, "knapsack": [45, 46, 56], "kp": 45, "multipl": 46, "mkp": 46, "staff": 47, "roster": 47, "srp": 47, "toler": 49, "build": [50, 52, 58, 63], "doc": 50, "depend": [50, 52], "descript": 50, "instal": [50, 52, 58, 59, 61], "guid": [50, 51, 52], "ubuntu": [50, 52], "instruct": [50, 52, 65], "develop": 51, "unit": [52, 63], "integr": [52, 63], "test": [52, 63], "code": 52, "coverag": 52, "option": [52, 63], "price": 54, "welcom": 57, "idol": [57, 60, 62, 65], "new": 57, "i": 57, "thi": 57, "mip": 57, "solver": [57, 58, 63, 69], "current": 57, "featur": 57, "extern": [57, 58, 63, 69], "dantzig": [57, 65], "wolf": [57, 65], "decomposit": [57, 64, 65, 66], "global": 58, "target": 58, "link": [58, 60, 62, 63], "guidelin": 59, "type": 59, "c": 60, "project": 60, "local": 61, "us": [62, 69], "eigen": 62, "solv": [62, 64, 65, 69], "qp": 62, "socp": 62, "list": 63, "cmake": 63, "For": 63, "commerci": 63, "open": 63, "sourc": 63, "bender": 64, "mathemat": [64, 65], "origin": 64, "formul": 64, "reformul": [64, 65], "implement": [64, 65], "The": 64, "master": 64, "space": 64, "lambda": 64, "cut": 64, "ad": 64, "automat": 65, "direct": 65, "give": 65, "decompos": 65, "method": 66, "get": 67, "start": 67, "variabl": 68, "constraint": 68, "about": [68, 69], "express": [68, 71], "object": [68, 71], "function": [68, 71], "an": 69, "A": 69, "first": 69, "approach": 69, "more": 69, "eleg": 69, "rang": 69, "access": 69, "tutori": 70, "dualiz": 71, "convex": 71, "quadrat": 71, "conjug": 71, "indic": 71, "restrict": 71, "set": 71, "defin": 71, "final": 71, "result": 71, "robust": 72, "singl": 72, "stage": 72, "two": 72}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"API": [[0, "api"]], "Annotation": [[1, "annotation"]], "Column": [[2, "column"]], "Constant": [[3, "constant"]], "Ctr": [[4, "ctr"]], "Env": [[5, "env"], [68, "env"]], "Expr": [[6, "expr"]], "LinExpr": [[7, "linexpr"]], "Example": [[7, null], [18, null], [19, null], [28, null], [52, null], [52, null], [57, null], [62, null], [63, null], [63, null], [63, null], [63, null], [65, null], [69, null]], "Model": [[8, "model"], [68, "model"]], "Example:": [[8, null]], "Param": [[9, "param"]], "QuadExpr": [[10, "quadexpr"]], "Row": [[11, "row"]], "Solution::Dual": [[12, "solution-dual"]], "Solution::Primal": [[13, "solution-primal"]], "TempCtr": [[14, "tempctr"]], "TempVar": [[15, "tempvar"]], "Var": [[16, "var"]], "Modeling": [[17, "modeling"], [69, "modeling"]], "BranchAndBound": [[18, "branchandbound"]], "BranchAndBoundCallback": [[19, "branchandboundcallback"]], "MostInfeasible": [[20, "mostinfeasible"]], "Branching rules": [[21, "branching-rules"]], "Branch-And-Bound algorithms": [[22, "branch-and-bound-algorithms"]], "BestBound": [[23, "bestbound"]], "BreadthFirst": [[24, "breadthfirst"]], "DepthFirst": [[25, "depthfirst"]], "WorstBound": [[26, "worstbound"]], "Node selection rules": [[27, "node-selection-rules"]], "Callback": [[28, "callback"]], "UserCutCallback and LazyCutCallback": [[28, "usercutcallback-and-lazycutcallback"]], "Creating your own callback": [[28, "creating-your-own-callback"]], "Events": [[29, "events"]], "LazyCutCallback": [[30, "lazycutcallback"]], "UserCutCallback": [[31, "usercutcallback"]], "Callbacks": [[32, "callbacks"]], "Table of contents": [[32, "table-of-contents"], [35, "table-of-contents"], [37, "table-of-contents"], [39, "table-of-contents"], [40, "table-of-contents"], [42, "table-of-contents"], [55, "table-of-contents"], [57, "table-of-contents"], [59, "table-of-contents"]], "ColumnGeneration": [[33, "columngeneration"]], "DantzigWolfeDecomposition": [[34, "dantzigwolfedecomposition"]], "Column-Generation algorithms": [[35, "column-generation-algorithms"]], "GLPK": [[36, "glpk"]], "GLPK interface": [[37, "glpk-interface"]], "Gurobi": [[38, "gurobi"]], "Gurobi interface": [[39, "gurobi-interface"]], "Optimizers": [[40, "optimizers"]], "Introduction": [[40, "introduction"]], "Optimizer factories": [[40, "optimizer-factories"]], "Mosek": [[41, "mosek"]], "Mosek interface": [[42, "mosek-interface"]], "Facility Location Problem (FLP)": [[43, "facility-location-problem-flp"]], "Generalized Assignment Problem (GAP)": [[44, "generalized-assignment-problem-gap"]], "Knapsack Problem (KP)": [[45, "knapsack-problem-kp"]], "Multiple Knapsack Problem (MKP)": [[46, "multiple-knapsack-problem-mkp"]], "Staff Rostering Problem (SRP)": [[47, "staff-rostering-problem-srp"]], "Problems": [[48, "problems"]], "Tolerances": [[49, "tolerances"]], "Build the doc!": [[50, "build-the-doc"]], "Dependencies": [[50, "dependencies"], [52, "dependencies"]], "Description": [[50, "description"]], "Installation guide (Ubuntu)": [[50, "installation-guide-ubuntu"], [52, "installation-guide-ubuntu"]], "Build instructions": [[50, "build-instructions"], [52, "build-instructions"]], "Developer guide": [[51, "developer-guide"]], "Unit and integration tests": [[52, "unit-and-integration-tests"]], "Code coverage options": [[52, "code-coverage-options"]], "Facility Location Problem / Branch-and-Bound": [[53, "facility-location-problem-branch-and-bound"]], "Generalized Assignment Problem / Branch-and-Price": [[54, "generalized-assignment-problem-branch-and-price"]], "Examples": [[55, "examples"]], "Knapsack Problem / Gurobi": [[56, "knapsack-problem-gurobi"]], "Welcome to idol!": [[57, "welcome-to-idol"]], "New to idol?": [[57, "new-to-idol"]], "Is this a MIP solver?": [[57, "is-this-a-mip-solver"]], "Current features": [[57, "current-features"]], "Interfacing external optimization solvers": [[57, "interfacing-external-optimization-solvers"]], "Generic Branch-and-Bound algorithms": [[57, "generic-branch-and-bound-algorithms"]], "Generic Column Generation and Dantzig-Wolfe decomposition": [[57, "generic-column-generation-and-dantzig-wolfe-decomposition"]], "Global installation": [[58, "global-installation"]], "Creating the install target": [[58, "creating-the-install-target"]], "Example for Gurobi": [[58, null]], "Building": [[58, "building"]], "Installing": [[58, "installing"]], "Linking with external solvers": [[58, "linking-with-external-solvers"], [63, "linking-with-external-solvers"]], "Installation guidelines": [[59, "installation-guidelines"]], "Installation types": [[59, "installation-types"]], "Linking your C++ project with idol": [[60, "linking-your-c-project-with-idol"]], "Local installation": [[61, "local-installation"]], "Using idol with Eigen": [[62, "using-idol-with-eigen"]], "\u201cLinking\u201d with Eigen": [[62, "linking-with-eigen"]], "Interfacing Mosek for solving QPs and SOCPs": [[62, "interfacing-mosek-for-solving-qps-and-socps"]], "List of CMake options": [[63, "list-of-cmake-options"]], "For Gurobi (commercial solver)": [[63, "for-gurobi-commercial-solver"]], "For Mosek (commercial solver)": [[63, "for-mosek-commercial-solver"]], "For GLPK (open-source solver)": [[63, "for-glpk-open-source-solver"]], "Building examples": [[63, "building-examples"]], "Building unit and integration tests": [[63, "building-unit-and-integration-tests"]], "Benders Decomposition (with LazyCutCallback)": [[64, "benders-decomposition-with-lazycutcallback"]], "Mathematical Model": [[64, "mathematical-model"]], "Original formulation": [[64, "original-formulation"]], "Benders reformulation": [[64, "benders-reformulation"]], "Implementation": [[64, "implementation"]], "The master problem": [[64, "the-master-problem"]], "The dual space \\Lambda": [[64, "the-dual-space-lambda"]], "The cuts to be added": [[64, "the-cuts-to-be-added"]], "Solving the model": [[64, "solving-the-model"]], "Dantzig-Wolfe Decomposition (Automatic)": [[65, "dantzig-wolfe-decomposition-automatic"]], "Mathematical models": [[65, "mathematical-models"]], "Direct model": [[65, "direct-model"]], "Dantzig-Wolfe reformulation": [[65, "dantzig-wolfe-reformulation"]], "Automatic reformulation in idol": [[65, "automatic-reformulation-in-idol"]], "Implementing the direct model with idol": [[65, "implementing-the-direct-model-with-idol"]], "Giving decomposition instructions": [[65, "giving-decomposition-instructions"]], "Decomposing and solving the model": [[65, "decomposing-and-solving-the-model"]], "Decomposition methods": [[66, "decomposition-methods"]], "Getting started": [[67, "getting-started"]], "Modeling optimization problems": [[68, "modeling-optimization-problems"]], "Variables": [[68, "variables"]], "Constraints": [[68, "constraints"]], "About constants in expressions": [[68, null]], "Objective function": [[68, "objective-function"]], "Using an external solver": [[69, "using-an-external-solver"]], "A first approach": [[69, "a-first-approach"]], "A more elegant approach": [[69, "a-more-elegant-approach"]], "About Range": [[69, null]], "Solving the problem using an external solver": [[69, "solving-the-problem-using-an-external-solver"]], "Accessing the solution": [[69, "accessing-the-solution"]], "Tutorials": [[70, "tutorials"]], "Dualization": [[71, "dualization"]], "Dual of a convex quadratic problem": [[71, "dual-of-a-convex-quadratic-problem"]], "Conjugate of the indicator function of bound restrictions": [[71, "conjugate-of-the-indicator-function-of-bound-restrictions"]], "Conjugate of convex sets defined by quadratic expressions": [[71, "conjugate-of-convex-sets-defined-by-quadratic-expressions"]], "Conjugate of the objective function": [[71, "conjugate-of-the-objective-function"]], "Final result": [[71, "final-result"]], "Robust Optimization": [[72, "robust-optimization"]], "Single-stage robust optimization": [[72, "single-stage-robust-optimization"]], "Two-stage robust optimization": [[72, "two-stage-robust-optimization"]]}, "indexentries": {"idol::annotation (c++ class)": [[1, "_CPPv4I00EN4idol10AnnotationE"]], "idol::annotation::annotation (c++ function)": [[1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT"], [1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE"]], "idol::annotation::default_value (c++ function)": [[1, "_CPPv4NK4idol10Annotation13default_valueEv"]], "idol::annotation::free (c++ function)": [[1, "_CPPv4N4idol10Annotation4freeEv"]], "idol::annotation::has_default (c++ function)": [[1, "_CPPv4NK4idol10Annotation11has_defaultEv"]], "idol::annotation::id (c++ function)": [[1, "_CPPv4NK4idol10Annotation2idEv"]], "idol::annotation::is_ctr_annotation (c++ function)": [[1, "_CPPv4NK4idol10Annotation17is_ctr_annotationEv"]], "idol::annotation::is_var_annotation (c++ function)": [[1, "_CPPv4NK4idol10Annotation17is_var_annotationEv"]], "idol::annotation::make_with_default_value (c++ function)": [[1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT"]], "idol::annotation::name (c++ function)": [[1, "_CPPv4NK4idol10Annotation4nameEv"]], "idol::column (c++ class)": [[2, "_CPPv4N4idol6ColumnE"]], "idol::column::column (c++ function)": [[2, "_CPPv4N4idol6Column6ColumnERK6Column"], [2, "_CPPv4N4idol6Column6ColumnERK8Constant"], [2, "_CPPv4N4idol6Column6ColumnERR6Column"], [2, "_CPPv4N4idol6Column6ColumnERR8Constant"], [2, "_CPPv4N4idol6Column6ColumnEv"]], "idol::column::emptycolumn (c++ member)": [[2, "_CPPv4N4idol6Column11EmptyColumnE"]], "idol::column::fix (c++ function)": [[2, "_CPPv4NK4idol6Column3fixERKN8Solution6PrimalE"]], "idol::column::linear (c++ function)": [[2, "_CPPv4N4idol6Column6linearEv"], [2, "_CPPv4NK4idol6Column6linearEv"]], "idol::column::obj (c++ function)": [[2, "_CPPv4N4idol6Column3objEv"], [2, "_CPPv4NK4idol6Column3objEv"]], "idol::column::obj_quadratic (c++ function)": [[2, "_CPPv4N4idol6Column13obj_quadraticEv"], [2, "_CPPv4NK4idol6Column13obj_quadraticEv"]], "idol::column::operator*= (c++ function)": [[2, "_CPPv4N4idol6ColumnmLEd"]], "idol::column::operator+= (c++ function)": [[2, "_CPPv4N4idol6ColumnpLERK6Column"]], "idol::column::operator-= (c++ function)": [[2, "_CPPv4N4idol6ColumnmIERK6Column"]], "idol::column::operator= (c++ function)": [[2, "_CPPv4N4idol6ColumnaSERK6Column"], [2, "_CPPv4N4idol6ColumnaSERR6Column"]], "idol::column::quadratic (c++ function)": [[2, "_CPPv4N4idol6Column9quadraticEv"], [2, "_CPPv4NK4idol6Column9quadraticEv"]], "idol::column::set_linear (c++ function)": [[2, "_CPPv4N4idol6Column10set_linearERK7LinExprI3CtrE"], [2, "_CPPv4N4idol6Column10set_linearERR7LinExprI3CtrE"]], "idol::column::set_obj (c++ function)": [[2, "_CPPv4N4idol6Column7set_objERK8Constant"], [2, "_CPPv4N4idol6Column7set_objERR8Constant"]], "idol::column::set_quadratic (c++ function)": [[2, "_CPPv4N4idol6Column13set_quadraticERK8QuadExprI3Ctr3VarE"], [2, "_CPPv4N4idol6Column13set_quadraticERR8QuadExprI3Ctr3VarE"]], "idol::constant (c++ class)": [[3, "_CPPv4N4idol8ConstantE"]], "idol::constant::constant (c++ function)": [[3, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd"], [3, "_CPPv4N4idol8Constant8ConstantERK5Paramd"], [3, "_CPPv4N4idol8Constant8ConstantERK8Constant"], [3, "_CPPv4N4idol8Constant8ConstantERR8Constant"], [3, "_CPPv4N4idol8Constant8ConstantEd"], [3, "_CPPv4N4idol8Constant8ConstantEv"]], "idol::constant::zero (c++ member)": [[3, "_CPPv4N4idol8Constant4ZeroE"]], "idol::constant::fix (c++ function)": [[3, "_CPPv4NK4idol8Constant3fixERKN8Solution4DualE"], [3, "_CPPv4NK4idol8Constant3fixERKN8Solution6PrimalE"]], "idol::constant::get (c++ function)": [[3, "_CPPv4NK4idol8Constant3getERK5Param"], [3, "_CPPv4NK4idol8Constant3getERK5ParamRK5Param"]], "idol::constant::is_numerical (c++ function)": [[3, "_CPPv4NK4idol8Constant12is_numericalEv"]], "idol::constant::is_zero (c++ function)": [[3, "_CPPv4NK4idol8Constant7is_zeroEv"]], "idol::constant::linear (c++ function)": [[3, "_CPPv4N4idol8Constant6linearEv"], [3, "_CPPv4NK4idol8Constant6linearEv"]], "idol::constant::numerical (c++ function)": [[3, "_CPPv4NK4idol8Constant9numericalEv"]], "idol::constant::operator*= (c++ function)": [[3, "_CPPv4N4idol8ConstantmLEd"]], "idol::constant::operator+= (c++ function)": [[3, "_CPPv4N4idol8ConstantpLERK5Param"], [3, "_CPPv4N4idol8ConstantpLERK8Constant"], [3, "_CPPv4N4idol8ConstantpLEd"]], "idol::constant::operator-= (c++ function)": [[3, "_CPPv4N4idol8ConstantmIE5Param"], [3, "_CPPv4N4idol8ConstantmIERK8Constant"], [3, "_CPPv4N4idol8ConstantmIEd"]], "idol::constant::operator= (c++ function)": [[3, "_CPPv4N4idol8ConstantaSERK8Constant"], [3, "_CPPv4N4idol8ConstantaSERR8Constant"]], "idol::constant::quadratic (c++ function)": [[3, "_CPPv4N4idol8Constant9quadraticEv"], [3, "_CPPv4NK4idol8Constant9quadraticEv"]], "idol::constant::set (c++ function)": [[3, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd"], [3, "_CPPv4N4idol8Constant3setERK5Paramd"]], "idol::constant::set_numerical (c++ function)": [[3, "_CPPv4N4idol8Constant13set_numericalEd"]], "idol::constant::size (c++ function)": [[3, "_CPPv4NK4idol8Constant4sizeEv"]], "idol::ctr (c++ class)": [[4, "_CPPv4N4idol3CtrE"]], "idol::ctr::ctr (c++ function)": [[4, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE"], [4, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE"], [4, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE"], [4, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE"]], "idol::ctr::get (c++ function)": [[4, "_CPPv4NK4idol3Ctr3getERK10AnnotationI3Ctr6ValueTE"]], "idol::ctr::id (c++ function)": [[4, "_CPPv4NK4idol3Ctr2idEv"]], "idol::ctr::is_in (c++ function)": [[4, "_CPPv4NK4idol3Ctr5is_inERK5Model"]], "idol::ctr::make_vector (c++ function)": [[4, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE"]], "idol::ctr::name (c++ function)": [[4, "_CPPv4NK4idol3Ctr4nameEv"]], "idol::ctr::operator!= (c++ function)": [[4, "_CPPv4NK4idol3CtrneERK6ObjectI10CtrVersion3CtrE"]], "idol::ctr::operator== (c++ function)": [[4, "_CPPv4NK4idol3CtreqERK6ObjectI10CtrVersion3CtrE"]], "idol::ctr::set (c++ function)": [[4, "_CPPv4NK4idol3Ctr3setERK10AnnotationI3Ctr6ValueTEDpRR5ArgsT"]], "idol::env (c++ class)": [[5, "_CPPv4N4idol3EnvE"]], "idol::env::operator[] (c++ function)": [[5, "_CPPv4I0ENK4idol3EnvixERKDaRK1T"]], "idol::expr (c++ class)": [[6, "_CPPv4I00EN4idol4ExprE"]], "idol::expr::expr (c++ function)": [[6, "_CPPv4N4idol4Expr4ExprERK4Expr"], [6, "_CPPv4N4idol4Expr4ExprERK4Key1"], [6, "_CPPv4N4idol4Expr4ExprERK5Param"], [6, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1E"], [6, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant"], [6, "_CPPv4N4idol4Expr4ExprERK8Constant"], [6, "_CPPv4N4idol4Expr4ExprERK8QuadExprI4Key1E"], [6, "_CPPv4N4idol4Expr4ExprERR4Expr"], [6, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1E"], [6, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant"], [6, "_CPPv4N4idol4Expr4ExprERR8Constant"], [6, "_CPPv4N4idol4Expr4ExprERR8QuadExprI4Key1E"], [6, "_CPPv4N4idol4Expr4ExprEd"], [6, "_CPPv4N4idol4Expr4ExprEv"]], "idol::expr::clear (c++ function)": [[6, "_CPPv4N4idol4Expr5clearEv"]], "idol::expr::constant (c++ function)": [[6, "_CPPv4N4idol4Expr8constantEv"], [6, "_CPPv4NK4idol4Expr8constantEv"]], "idol::expr::is_zero (c++ function)": [[6, "_CPPv4NK4idol4Expr7is_zeroEv"]], "idol::expr::linear (c++ function)": [[6, "_CPPv4N4idol4Expr6linearEv"], [6, "_CPPv4NK4idol4Expr6linearEv"]], "idol::expr::operator*= (c++ function)": [[6, "_CPPv4N4idol4ExprmLEd"]], "idol::expr::operator+= (c++ function)": [[6, "_CPPv4N4idol4ExprpLERK4ExprIN4idol3VarEN4idol3VarEE"]], "idol::expr::operator-= (c++ function)": [[6, "_CPPv4N4idol4ExprmIERK4ExprIN4idol3VarEN4idol3VarEE"]], "idol::expr::operator= (c++ function)": [[6, "_CPPv4N4idol4ExpraSERK4Expr"], [6, "_CPPv4N4idol4ExpraSERR4Expr"]], "idol::expr::quadratic (c++ function)": [[6, "_CPPv4N4idol4Expr9quadraticEv"], [6, "_CPPv4NK4idol4Expr9quadraticEv"]], "idol::linexpr (c++ class)": [[7, "_CPPv4I0EN4idol7LinExprE"]], "idol::linexpr::linexpr (c++ function)": [[7, "_CPPv4N4idol7LinExpr7LinExprERK3Key"], [7, "_CPPv4N4idol7LinExpr7LinExprERK8ConstantRK3Key"], [7, "_CPPv4N4idol7LinExpr7LinExprERR8ConstantRK3Key"], [7, "_CPPv4N4idol7LinExpr7LinExprEv"]], "idol::linexpr::begin (c++ function)": [[7, "_CPPv4NK4idol7LinExpr5beginEv"]], "idol::linexpr::clear (c++ function)": [[7, "_CPPv4N4idol7LinExpr5clearEv"]], "idol::linexpr::empty (c++ function)": [[7, "_CPPv4NK4idol7LinExpr5emptyEv"]], "idol::linexpr::end (c++ function)": [[7, "_CPPv4NK4idol7LinExpr3endEv"]], "idol::linexpr::get (c++ function)": [[7, "_CPPv4NK4idol7LinExpr3getERK3Key"]], "idol::linexpr::operator*= (c++ function)": [[7, "_CPPv4N4idol7LinExprmLEd"]], "idol::linexpr::operator+= (c++ function)": [[7, "_CPPv4N4idol7LinExprpLERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE"]], "idol::linexpr::operator-= (c++ function)": [[7, "_CPPv4N4idol7LinExprmIERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE"]], "idol::linexpr::remove (c++ function)": [[7, "_CPPv4N4idol7LinExpr6removeERK3Key"]], "idol::linexpr::set (c++ function)": [[7, "_CPPv4N4idol7LinExpr3setERK3KeyRK8Constant"], [7, "_CPPv4N4idol7LinExpr3setERK3KeyRR8Constant"]], "idol::linexpr::size (c++ function)": [[7, "_CPPv4NK4idol7LinExpr4sizeEv"]], "idol::model (c++ class)": [[8, "_CPPv4N4idol5ModelE"]], "idol::model::model (c++ function)": [[8, "_CPPv4N4idol5Model5ModelER3Env"], [8, "_CPPv4N4idol5Model5ModelER3Env14ObjectiveSense"], [8, "_CPPv4N4idol5Model5ModelERK5Model"], [8, "_CPPv4N4idol5Model5ModelERR5Model"]], "idol::model::add (c++ function)": [[8, "_CPPv4N4idol5Model3addERK3Ctr"], [8, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr"], [8, "_CPPv4N4idol5Model3addERK3Var"], [8, "_CPPv4N4idol5Model3addERK3Var7TempVar"]], "idol::model::add_ctr (c++ function)": [[8, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE"], [8, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE"]], "idol::model::add_ctrs (c++ function)": [[8, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE"], [8, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE"]], "idol::model::add_var (c++ function)": [[8, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE"], [8, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE"]], "idol::model::add_vars (c++ function)": [[8, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE"], [8, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE"]], "idol::model::add_vector (c++ function)": [[8, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE"]], "idol::model::clone (c++ function)": [[8, "_CPPv4NK4idol5Model5cloneEv"]], "idol::model::ctrs (c++ function)": [[8, "_CPPv4NK4idol5Model4ctrsEv"]], "idol::model::env (c++ function)": [[8, "_CPPv4NK4idol5Model3envEv"]], "idol::model::get_best_bound (c++ function)": [[8, "_CPPv4NK4idol5Model14get_best_boundEv"]], "idol::model::get_best_obj (c++ function)": [[8, "_CPPv4NK4idol5Model12get_best_objEv"]], "idol::model::get_ctr_by_index (c++ function)": [[8, "_CPPv4NK4idol5Model16get_ctr_by_indexEj"]], "idol::model::get_ctr_dual (c++ function)": [[8, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr"]], "idol::model::get_ctr_farkas (c++ function)": [[8, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr"]], "idol::model::get_ctr_index (c++ function)": [[8, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr"]], "idol::model::get_ctr_row (c++ function)": [[8, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr"]], "idol::model::get_ctr_type (c++ function)": [[8, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr"]], "idol::model::get_mat_coeff (c++ function)": [[8, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var"]], "idol::model::get_n_solutions (c++ function)": [[8, "_CPPv4NK4idol5Model15get_n_solutionsEv"]], "idol::model::get_obj_expr (c++ function)": [[8, "_CPPv4NK4idol5Model12get_obj_exprEv"]], "idol::model::get_obj_sense (c++ function)": [[8, "_CPPv4NK4idol5Model13get_obj_senseEv"]], "idol::model::get_reason (c++ function)": [[8, "_CPPv4NK4idol5Model10get_reasonEv"]], "idol::model::get_rhs_expr (c++ function)": [[8, "_CPPv4NK4idol5Model12get_rhs_exprEv"]], "idol::model::get_solution_index (c++ function)": [[8, "_CPPv4NK4idol5Model18get_solution_indexEv"]], "idol::model::get_status (c++ function)": [[8, "_CPPv4NK4idol5Model10get_statusEv"]], "idol::model::get_var_by_index (c++ function)": [[8, "_CPPv4NK4idol5Model16get_var_by_indexEj"]], "idol::model::get_var_column (c++ function)": [[8, "_CPPv4NK4idol5Model14get_var_columnERK3Var"]], "idol::model::get_var_index (c++ function)": [[8, "_CPPv4NK4idol5Model13get_var_indexERK3Var"]], "idol::model::get_var_lb (c++ function)": [[8, "_CPPv4NK4idol5Model10get_var_lbERK3Var"]], "idol::model::get_var_primal (c++ function)": [[8, "_CPPv4NK4idol5Model14get_var_primalERK3Var"]], "idol::model::get_var_ray (c++ function)": [[8, "_CPPv4NK4idol5Model11get_var_rayERK3Var"]], "idol::model::get_var_type (c++ function)": [[8, "_CPPv4NK4idol5Model12get_var_typeERK3Var"]], "idol::model::get_var_ub (c++ function)": [[8, "_CPPv4NK4idol5Model10get_var_ubERK3Var"]], "idol::model::has (c++ function)": [[8, "_CPPv4NK4idol5Model3hasERK3Ctr"], [8, "_CPPv4NK4idol5Model3hasERK3Var"]], "idol::model::has_optimizer (c++ function)": [[8, "_CPPv4NK4idol5Model13has_optimizerEv"]], "idol::model::id (c++ function)": [[8, "_CPPv4NK4idol5Model2idEv"]], "idol::model::operator= (c++ function)": [[8, "_CPPv4N4idol5ModelaSERK5Model"], [8, "_CPPv4N4idol5ModelaSERR5Model"]], "idol::model::optimize (c++ function)": [[8, "_CPPv4N4idol5Model8optimizeEv"]], "idol::model::optimizer (c++ function)": [[8, "_CPPv4N4idol5Model9optimizerEv"], [8, "_CPPv4NK4idol5Model9optimizerEv"]], "idol::model::remove (c++ function)": [[8, "_CPPv4N4idol5Model6removeERK3Ctr"], [8, "_CPPv4N4idol5Model6removeERK3Var"]], "idol::model::set_ctr_rhs (c++ function)": [[8, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRK8Constant"], [8, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRR8Constant"]], "idol::model::set_ctr_row (c++ function)": [[8, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK3Row"], [8, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR3Row"]], "idol::model::set_ctr_type (c++ function)": [[8, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType"]], "idol::model::set_mat_coeff (c++ function)": [[8, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant"], [8, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant"]], "idol::model::set_obj_const (c++ function)": [[8, "_CPPv4N4idol5Model13set_obj_constERK8Constant"], [8, "_CPPv4N4idol5Model13set_obj_constERR8Constant"]], "idol::model::set_obj_expr (c++ function)": [[8, "_CPPv4N4idol5Model12set_obj_exprERK4ExprI3Var3VarE"], [8, "_CPPv4N4idol5Model12set_obj_exprERR4ExprI3Var3VarE"]], "idol::model::set_obj_sense (c++ function)": [[8, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense"]], "idol::model::set_rhs_expr (c++ function)": [[8, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE"], [8, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE"]], "idol::model::set_solution_index (c++ function)": [[8, "_CPPv4N4idol5Model18set_solution_indexEj"]], "idol::model::set_var_column (c++ function)": [[8, "_CPPv4N4idol5Model14set_var_columnERK3VarRK6Column"], [8, "_CPPv4N4idol5Model14set_var_columnERK3VarRR6Column"]], "idol::model::set_var_lb (c++ function)": [[8, "_CPPv4N4idol5Model10set_var_lbERK3Vard"]], "idol::model::set_var_obj (c++ function)": [[8, "_CPPv4N4idol5Model11set_var_objERK3VarRK8Constant"], [8, "_CPPv4N4idol5Model11set_var_objERK3VarRR8Constant"]], "idol::model::set_var_type (c++ function)": [[8, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType"]], "idol::model::set_var_ub (c++ function)": [[8, "_CPPv4N4idol5Model10set_var_ubERK3Vard"]], "idol::model::unuse (c++ function)": [[8, "_CPPv4N4idol5Model5unuseEv"]], "idol::model::update (c++ function)": [[8, "_CPPv4N4idol5Model6updateEv"]], "idol::model::use (c++ function)": [[8, "_CPPv4N4idol5Model3useERK16OptimizerFactory"]], "idol::model::vars (c++ function)": [[8, "_CPPv4NK4idol5Model4varsEv"]], "idol::model::write (c++ function)": [[8, "_CPPv4N4idol5Model5writeERKNSt6stringE"]], "idol::model::~model (c++ function)": [[8, "_CPPv4N4idol5ModelD0Ev"]], "idol::param (c++ class)": [[9, "_CPPv4N4idol5ParamE"]], "idol::param::param (c++ function)": [[9, "_CPPv4N4idol5Param5ParamERK3Ctr"], [9, "_CPPv4N4idol5Param5ParamERK3Var"], [9, "_CPPv4N4idol5Param5ParamERK5Param"], [9, "_CPPv4N4idol5Param5ParamERR5Param"]], "idol::param::as (c++ function)": [[9, "_CPPv4I0ENK4idol5Param2asE1Tv"]], "idol::param::id (c++ function)": [[9, "_CPPv4NK4idol5Param2idEv"]], "idol::param::is (c++ function)": [[9, "_CPPv4I0ENK4idol5Param2isEbv"]], "idol::param::name (c++ function)": [[9, "_CPPv4NK4idol5Param4nameEv"]], "idol::param::operator= (c++ function)": [[9, "_CPPv4N4idol5ParamaSERK5Param"], [9, "_CPPv4N4idol5ParamaSERR5Param"]], "idol::quadexpr (c++ class)": [[10, "_CPPv4I0000EN4idol8QuadExprE"]], "idol::quadexpr::quadexpr (c++ function)": [[10, "_CPPv4N4idol8QuadExpr8QuadExprERK4Key1RK4Key2"], [10, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2"], [10, "_CPPv4N4idol8QuadExpr8QuadExprERK8QuadExpr"], [10, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2"], [10, "_CPPv4N4idol8QuadExpr8QuadExprERR8QuadExpr"], [10, "_CPPv4N4idol8QuadExpr8QuadExprEv"]], "idol::quadexpr::get (c++ function)": [[10, "_CPPv4NK4idol8QuadExpr3getERK4Key1RK4Key2"]], "idol::quadexpr::operator= (c++ function)": [[10, "_CPPv4N4idol8QuadExpraSERK8QuadExpr"], [10, "_CPPv4N4idol8QuadExpraSERR8QuadExpr"]], "idol::quadexpr::set (c++ function)": [[10, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant"]], "idol::quadexpr::~quadexpr (c++ function)": [[10, "_CPPv4N4idol8QuadExprD0Ev"]], "idol::row (c++ class)": [[11, "_CPPv4N4idol3RowE"]], "idol::row::emptyrow (c++ member)": [[11, "_CPPv4N4idol3Row8EmptyRowE"]], "idol::row::row (c++ function)": [[11, "_CPPv4N4idol3Row3RowERK3Row"], [11, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERK4ExprI3Var3VarE"], [11, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERR4ExprI3Var3VarE"], [11, "_CPPv4N4idol3Row3RowERR3Row"], [11, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERK4ExprI3Var3VarE"], [11, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERR4ExprI3Var3VarE"], [11, "_CPPv4N4idol3Row3RowEv"]], "idol::row::fix (c++ function)": [[11, "_CPPv4NK4idol3Row3fixERKN8Solution4DualE"], [11, "_CPPv4NK4idol3Row3fixERKN8Solution6PrimalE"]], "idol::row::linear (c++ function)": [[11, "_CPPv4N4idol3Row6linearEv"], [11, "_CPPv4NK4idol3Row6linearEv"]], "idol::row::operator*= (c++ function)": [[11, "_CPPv4N4idol3RowmLEd"]], "idol::row::operator+= (c++ function)": [[11, "_CPPv4N4idol3RowpLERK3Row"]], "idol::row::operator-= (c++ function)": [[11, "_CPPv4N4idol3RowmIERK3Row"]], "idol::row::operator= (c++ function)": [[11, "_CPPv4N4idol3RowaSERK3Row"], [11, "_CPPv4N4idol3RowaSERR3Row"]], "idol::row::quadratic (c++ function)": [[11, "_CPPv4N4idol3Row9quadraticEv"], [11, "_CPPv4NK4idol3Row9quadraticEv"]], "idol::row::rhs (c++ function)": [[11, "_CPPv4N4idol3Row3rhsEv"], [11, "_CPPv4NK4idol3Row3rhsEv"]], "idol::row::set_linear (c++ function)": [[11, "_CPPv4N4idol3Row10set_linearERK7LinExprI3VarE"], [11, "_CPPv4N4idol3Row10set_linearERR7LinExprI3VarE"]], "idol::row::set_quadratic (c++ function)": [[11, "_CPPv4N4idol3Row13set_quadraticERK8QuadExprI3Var3VarE"], [11, "_CPPv4N4idol3Row13set_quadraticERR8QuadExprI3Var3VarE"]], "idol::row::set_rhs (c++ function)": [[11, "_CPPv4N4idol3Row7set_rhsERK8Constant"], [11, "_CPPv4N4idol3Row7set_rhsERR8Constant"]], "idol::solution::dual (c++ class)": [[12, "_CPPv4N4idol8Solution4DualE"]], "idol::solution::dual::begin (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual5beginEv"]], "idol::solution::dual::cbegin (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual6cbeginEv"]], "idol::solution::dual::cend (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual4cendEv"]], "idol::solution::dual::const_iterator (c++ type)": [[12, "_CPPv4N4idol8Solution4Dual14const_iteratorE"]], "idol::solution::dual::end (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual3endEv"]], "idol::solution::dual::get (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual3getERK3Ctr"]], "idol::solution::dual::has_objective_value (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual19has_objective_valueEv"]], "idol::solution::dual::merge_without_conflict (c++ function)": [[12, "_CPPv4N4idol8Solution4Dual22merge_without_conflictE4Dual"]], "idol::solution::dual::norm (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual4normEd"]], "idol::solution::dual::normalize (c++ function)": [[12, "_CPPv4N4idol8Solution4Dual9normalizeEd"]], "idol::solution::dual::objective_value (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual15objective_valueEv"]], "idol::solution::dual::operator*= (c++ function)": [[12, "_CPPv4N4idol8Solution4DualmLEd"]], "idol::solution::dual::operator+= (c++ function)": [[12, "_CPPv4N4idol8Solution4DualpLERK4Dual"]], "idol::solution::dual::reason (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual6reasonEv"]], "idol::solution::dual::reset_objective_value (c++ function)": [[12, "_CPPv4N4idol8Solution4Dual21reset_objective_valueEv"]], "idol::solution::dual::set (c++ function)": [[12, "_CPPv4N4idol8Solution4Dual3setERK3Ctrd"]], "idol::solution::dual::set_objective_value (c++ function)": [[12, "_CPPv4N4idol8Solution4Dual19set_objective_valueEd"]], "idol::solution::dual::set_reason (c++ function)": [[12, "_CPPv4N4idol8Solution4Dual10set_reasonE14SolutionReason"]], "idol::solution::dual::set_status (c++ function)": [[12, "_CPPv4N4idol8Solution4Dual10set_statusE14SolutionStatus"]], "idol::solution::dual::status (c++ function)": [[12, "_CPPv4NK4idol8Solution4Dual6statusEv"]], "idol::solution::primal (c++ class)": [[13, "_CPPv4N4idol8Solution6PrimalE"]], "idol::solution::primal::begin (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal5beginEv"]], "idol::solution::primal::cbegin (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal6cbeginEv"]], "idol::solution::primal::cend (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal4cendEv"]], "idol::solution::primal::const_iterator (c++ type)": [[13, "_CPPv4N4idol8Solution6Primal14const_iteratorE"]], "idol::solution::primal::end (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal3endEv"]], "idol::solution::primal::get (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal3getERK3Var"]], "idol::solution::primal::has_objective_value (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal19has_objective_valueEv"]], "idol::solution::primal::merge_without_conflict (c++ function)": [[13, "_CPPv4N4idol8Solution6Primal22merge_without_conflictE6Primal"]], "idol::solution::primal::norm (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal4normEd"]], "idol::solution::primal::normalize (c++ function)": [[13, "_CPPv4N4idol8Solution6Primal9normalizeEd"]], "idol::solution::primal::objective_value (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal15objective_valueEv"]], "idol::solution::primal::operator*= (c++ function)": [[13, "_CPPv4N4idol8Solution6PrimalmLEd"]], "idol::solution::primal::operator+= (c++ function)": [[13, "_CPPv4N4idol8Solution6PrimalpLERK6Primal"]], "idol::solution::primal::reason (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal6reasonEv"]], "idol::solution::primal::reset_objective_value (c++ function)": [[13, "_CPPv4N4idol8Solution6Primal21reset_objective_valueEv"]], "idol::solution::primal::set (c++ function)": [[13, "_CPPv4N4idol8Solution6Primal3setERK3Vard"]], "idol::solution::primal::set_objective_value (c++ function)": [[13, "_CPPv4N4idol8Solution6Primal19set_objective_valueEd"]], "idol::solution::primal::set_reason (c++ function)": [[13, "_CPPv4N4idol8Solution6Primal10set_reasonE14SolutionReason"]], "idol::solution::primal::set_status (c++ function)": [[13, "_CPPv4N4idol8Solution6Primal10set_statusE14SolutionStatus"]], "idol::solution::primal::status (c++ function)": [[13, "_CPPv4NK4idol8Solution6Primal6statusEv"]], "idol::tempctr (c++ class)": [[14, "_CPPv4N4idol7TempCtrE"]], "idol::tempctr::tempctr (c++ function)": [[14, "_CPPv4N4idol7TempCtr7TempCtrERK7TempCtr"], [14, "_CPPv4N4idol7TempCtr7TempCtrERR3Row7CtrType"], [14, "_CPPv4N4idol7TempCtr7TempCtrERR7TempCtr"], [14, "_CPPv4N4idol7TempCtr7TempCtrEv"]], "idol::tempctr::is_violated (c++ function)": [[14, "_CPPv4NK4idol7TempCtr11is_violatedERKN8Solution6PrimalE"]], "idol::tempctr::operator= (c++ function)": [[14, "_CPPv4N4idol7TempCtraSERK7TempCtr"], [14, "_CPPv4N4idol7TempCtraSERR7TempCtr"]], "idol::tempctr::row (c++ function)": [[14, "_CPPv4N4idol7TempCtr3rowEv"], [14, "_CPPv4NK4idol7TempCtr3rowEv"]], "idol::tempctr::set_type (c++ function)": [[14, "_CPPv4N4idol7TempCtr8set_typeE7CtrType"]], "idol::tempctr::type (c++ function)": [[14, "_CPPv4NK4idol7TempCtr4typeEv"]], "idol::tempvar (c++ class)": [[15, "_CPPv4N4idol7TempVarE"]], "idol::tempvar::tempvar (c++ function)": [[15, "_CPPv4N4idol7TempVar7TempVarERK7TempVar"], [15, "_CPPv4N4idol7TempVar7TempVarERR7TempVar"], [15, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column"], [15, "_CPPv4N4idol7TempVar7TempVarEv"]], "idol::tempvar::column (c++ function)": [[15, "_CPPv4N4idol7TempVar6columnEv"], [15, "_CPPv4NK4idol7TempVar6columnEv"]], "idol::tempvar::lb (c++ function)": [[15, "_CPPv4NK4idol7TempVar2lbEv"]], "idol::tempvar::operator= (c++ function)": [[15, "_CPPv4N4idol7TempVaraSERK7TempVar"], [15, "_CPPv4N4idol7TempVaraSERR7TempVar"]], "idol::tempvar::set_lb (c++ function)": [[15, "_CPPv4N4idol7TempVar6set_lbEd"]], "idol::tempvar::set_type (c++ function)": [[15, "_CPPv4N4idol7TempVar8set_typeE7VarType"]], "idol::tempvar::set_ub (c++ function)": [[15, "_CPPv4N4idol7TempVar6set_ubEd"]], "idol::tempvar::type (c++ function)": [[15, "_CPPv4NK4idol7TempVar4typeEv"]], "idol::tempvar::ub (c++ function)": [[15, "_CPPv4NK4idol7TempVar2ubEv"]], "idol::var (c++ class)": [[16, "_CPPv4N4idol3VarE"]], "idol::var::var (c++ function)": [[16, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE"], [16, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE"], [16, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE"]], "idol::var::get (c++ function)": [[16, "_CPPv4NK4idol3Var3getERK10AnnotationI3Var6ValueTE"]], "idol::var::id (c++ function)": [[16, "_CPPv4NK4idol3Var2idEv"]], "idol::var::is_in (c++ function)": [[16, "_CPPv4NK4idol3Var5is_inERK5Model"]], "idol::var::make_vector (c++ function)": [[16, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE"]], "idol::var::name (c++ function)": [[16, "_CPPv4NK4idol3Var4nameEv"]], "idol::var::operator!= (c++ function)": [[16, "_CPPv4NK4idol3VarneERK6ObjectI10VarVersion3VarE"]], "idol::var::operator== (c++ function)": [[16, "_CPPv4NK4idol3VareqERK6ObjectI10VarVersion3VarE"]], "idol::var::set (c++ function)": [[16, "_CPPv4NK4idol3Var3setERK10AnnotationI3Var6ValueTEDpRR5ArgsT"]], "idol::branchandbound (c++ class)": [[18, "_CPPv4I0EN4idol14BranchAndBoundE"]], "idol::branchandbound::branchandbound (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERR14BranchAndBound"], [18, "_CPPv4N4idol14BranchAndBound14BranchAndBoundEv"]], "idol::branchandbound::clone (c++ function)": [[18, "_CPPv4NK4idol14BranchAndBound5cloneEv"]], "idol::branchandbound::conditional (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE"], [18, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol8NodeInfoEEEEE"]], "idol::branchandbound::only_if_has_strategy (c++ type)": [[18, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE"]], "idol::branchandbound::operator() (c++ function)": [[18, "_CPPv4NK4idol14BranchAndBoundclERK5Model"]], "idol::branchandbound::operator= (c++ function)": [[18, "_CPPv4N4idol14BranchAndBoundaSERK14BranchAndBound"], [18, "_CPPv4N4idol14BranchAndBoundaSERR14BranchAndBound"]], "idol::branchandbound::with_absolute_gap_tolerance (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd"]], "idol::branchandbound::with_best_bound_stop (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd"]], "idol::branchandbound::with_best_obj_stop (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd"]], "idol::branchandbound::with_branching_rule (c++ function)": [[18, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT"], [18, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT"], [18, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE"]], "idol::branchandbound::with_callback (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound13with_callbackERK15CallbackFactory"], [18, "_CPPv4N4idol14BranchAndBound13with_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE"]], "idol::branchandbound::with_cutting_planes (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound19with_cutting_planesERK21CuttingPlaneGenerator"]], "idol::branchandbound::with_infeasible_or_unbounded_info (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb"]], "idol::branchandbound::with_iteration_count_limit (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound26with_iteration_count_limitEj"]], "idol::branchandbound::with_log_frequency (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound18with_log_frequencyEj"]], "idol::branchandbound::with_log_level (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound14with_log_levelE8LogLevel5Color"]], "idol::branchandbound::with_node_optimizer (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory"]], "idol::branchandbound::with_node_selection_rule (c++ function)": [[18, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT"], [18, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT"], [18, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE"]], "idol::branchandbound::with_presolve (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound13with_presolveEb"]], "idol::branchandbound::with_relative_gap_tolerance (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd"]], "idol::branchandbound::with_subtree_depth (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj"]], "idol::branchandbound::with_thread_limit (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj"]], "idol::branchandbound::with_time_limit (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound15with_time_limitEd"]], "idol::branchandboundcallback (c++ class)": [[19, "_CPPv4I0EN4idol22BranchAndBoundCallbackE"]], "idol::branchandboundcallback::add_lazy_cut (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr"]], "idol::branchandboundcallback::add_user_cut (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr"]], "idol::branchandboundcallback::node (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback4nodeEv"]], "idol::branchandboundcallback::operator() (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent"]], "idol::branchandboundcallback::original_model (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback14original_modelEv"]], "idol::branchandboundcallback::relaxation (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback10relaxationEv"]], "idol::branchandboundcallback::submit_bound (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd"]], "idol::branchandboundcallback::submit_heuristic_solution (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT"]], "idol::branchandboundcallback::time (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback4timeEv"]], "idol::branchandboundcallback::~branchandboundcallback (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallbackD0Ev"]], "idol::mostinfeasible (c++ class)": [[20, "_CPPv4N4idol14MostInfeasibleE"]], "idol::mostinfeasible::mostinfeasible (c++ function)": [[20, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT"], [20, "_CPPv4N4idol14MostInfeasible14MostInfeasibleEv"]], "idol::mostinfeasible::strategy (c++ class)": [[20, "_CPPv4I0EN4idol14MostInfeasible8StrategyE"]], "idol::mostinfeasible::strategy::strategy (c++ function)": [[20, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible"], [20, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyEv"]], "idol::mostinfeasible::strategy::clone (c++ function)": [[20, "_CPPv4NK4idol14MostInfeasible8Strategy5cloneEv"]], "idol::mostinfeasible::strategy::operator() (c++ function)": [[20, "_CPPv4NK4idol14MostInfeasible8StrategyclERK5Model"]], "idol::bestbound (c++ class)": [[23, "_CPPv4N4idol9BestBoundE"]], "idol::bestbound::strategy (c++ class)": [[23, "_CPPv4I0EN4idol9BestBound8StrategyE"]], "idol::bestbound::strategy::strategy (c++ function)": [[23, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound"]], "idol::bestbound::strategy::clone (c++ function)": [[23, "_CPPv4NK4idol9BestBound8Strategy5cloneEv"]], "idol::bestbound::strategy::operator() (c++ function)": [[23, "_CPPv4NK4idol9BestBound8StrategyclEv"]], "idol::breadthfirst (c++ class)": [[24, "_CPPv4N4idol12BreadthFirstE"]], "idol::breadthfirst::strategy (c++ class)": [[24, "_CPPv4I0EN4idol12BreadthFirst8StrategyE"]], "idol::breadthfirst::strategy::strategy (c++ function)": [[24, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst"]], "idol::breadthfirst::strategy::clone (c++ function)": [[24, "_CPPv4NK4idol12BreadthFirst8Strategy5cloneEv"]], "idol::breadthfirst::strategy::operator() (c++ function)": [[24, "_CPPv4NK4idol12BreadthFirst8StrategyclEv"]], "idol::depthfirst (c++ class)": [[25, "_CPPv4N4idol10DepthFirstE"]], "idol::depthfirst::strategy (c++ class)": [[25, "_CPPv4I0EN4idol10DepthFirst8StrategyE"]], "idol::depthfirst::strategy::strategy (c++ function)": [[25, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst"]], "idol::depthfirst::strategy::clone (c++ function)": [[25, "_CPPv4NK4idol10DepthFirst8Strategy5cloneEv"]], "idol::depthfirst::strategy::operator() (c++ function)": [[25, "_CPPv4NK4idol10DepthFirst8StrategyclEv"]], "idol::worstbound (c++ class)": [[26, "_CPPv4N4idol10WorstBoundE"]], "idol::worstbound::strategy (c++ class)": [[26, "_CPPv4I0EN4idol10WorstBound8StrategyE"]], "idol::worstbound::strategy::strategy (c++ function)": [[26, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound"]], "idol::worstbound::strategy::clone (c++ function)": [[26, "_CPPv4NK4idol10WorstBound8Strategy5cloneEv"]], "idol::worstbound::strategy::operator() (c++ function)": [[26, "_CPPv4NK4idol10WorstBound8StrategyclEv"]], "idol::callback (c++ class)": [[28, "_CPPv4N4idol8CallbackE"]], "idol::callback::add_lazy_cut (c++ function)": [[28, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr"]], "idol::callback::add_user_cut (c++ function)": [[28, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr"]], "idol::callback::operator() (c++ function)": [[28, "_CPPv4N4idol8CallbackclE13CallbackEvent"]], "idol::callback::primal_solution (c++ function)": [[28, "_CPPv4NK4idol8Callback15primal_solutionEv"]], "idol::callback::time (c++ function)": [[28, "_CPPv4NK4idol8Callback4timeEv"]], "idol::callback::~callback (c++ function)": [[28, "_CPPv4N4idol8CallbackD0Ev"]], "idol::callbackevent (c++ enum)": [[29, "_CPPv4N4idol13CallbackEventE"]], "idol::callbackevent::algorithmstarts (c++ enumerator)": [[29, "_CPPv4N4idol13CallbackEvent15AlgorithmStartsE"]], "idol::callbackevent::algorithmstops (c++ enumerator)": [[29, "_CPPv4N4idol13CallbackEvent14AlgorithmStopsE"]], "idol::callbackevent::incumbentsolution (c++ enumerator)": [[29, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE"]], "idol::callbackevent::invalidsolution (c++ enumerator)": [[29, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE"]], "idol::callbackevent::nodeloaded (c++ enumerator)": [[29, "_CPPv4N4idol13CallbackEvent10NodeLoadedE"]], "idol::lazycutcallback (c++ class)": [[30, "_CPPv4N4idol15LazyCutCallbackE"]], "idol::lazycutcallback::lazycutcallback (c++ function)": [[30, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr"]], "idol::lazycutcallback::strategy (c++ class)": [[30, "_CPPv4N4idol15LazyCutCallback8StrategyE"]], "idol::lazycutcallback::strategy::strategy (c++ function)": [[30, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color"]], "idol::lazycutcallback::clone (c++ function)": [[30, "_CPPv4NK4idol15LazyCutCallback5cloneEv"]], "idol::lazycutcallback::operator() (c++ function)": [[30, "_CPPv4N4idol15LazyCutCallbackclEv"]], "idol::lazycutcallback::with_log_level (c++ function)": [[30, "_CPPv4N4idol15LazyCutCallback14with_log_levelE8LogLevel5Color"]], "idol::lazycutcallback::with_separation_optimizer (c++ function)": [[30, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory"]], "idol::usercutcallback (c++ class)": [[31, "_CPPv4N4idol15UserCutCallbackE"]], "idol::usercutcallback::strategy (c++ class)": [[31, "_CPPv4N4idol15UserCutCallback8StrategyE"]], "idol::usercutcallback::strategy::strategy (c++ function)": [[31, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr8LogLevel5Color"]], "idol::usercutcallback::usercutcallback (c++ function)": [[31, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr"]], "idol::usercutcallback::clone (c++ function)": [[31, "_CPPv4NK4idol15UserCutCallback5cloneEv"]], "idol::usercutcallback::operator() (c++ function)": [[31, "_CPPv4N4idol15UserCutCallbackclEv"]], "idol::usercutcallback::with_separation_optimizer (c++ function)": [[31, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory"]], "idol::columngeneration (c++ class)": [[33, "_CPPv4N4idol16ColumnGenerationE"]], "idol::columngeneration::columngeneration (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration16ColumnGenerationEj"]], "idol::columngeneration::clone (c++ function)": [[33, "_CPPv4NK4idol16ColumnGeneration5cloneEv"]], "idol::columngeneration::conditional (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEE"], [33, "_CPPv4N4idol16ColumnGeneration11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE"]], "idol::columngeneration::n_subproblems (c++ function)": [[33, "_CPPv4NK4idol16ColumnGeneration13n_subproblemsEv"]], "idol::columngeneration::operator() (c++ function)": [[33, "_CPPv4NK4idol16ColumnGenerationclERK5Model"]], "idol::columngeneration::reserve_for_subproblems (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration23reserve_for_subproblemsEj"]], "idol::columngeneration::with_absolute_gap_tolerance (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration27with_absolute_gap_toleranceEd"]], "idol::columngeneration::with_artificial_variables_cost (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration30with_artificial_variables_costEd"]], "idol::columngeneration::with_best_bound_stop (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration20with_best_bound_stopEd"]], "idol::columngeneration::with_best_obj_stop (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration18with_best_obj_stopEd"]], "idol::columngeneration::with_column_pool_clean_up (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration25with_column_pool_clean_upEjd"]], "idol::columngeneration::with_dual_price_smoothing_stabilization (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration39with_dual_price_smoothing_stabilizationEd"]], "idol::columngeneration::with_farkas_pricing (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration19with_farkas_pricingEb"]], "idol::columngeneration::with_infeasible_or_unbounded_info (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration33with_infeasible_or_unbounded_infoEb"]], "idol::columngeneration::with_iteration_count_limit (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration26with_iteration_count_limitEj"]], "idol::columngeneration::with_log_frequency (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration18with_log_frequencyEj"]], "idol::columngeneration::with_log_level (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration14with_log_levelE8LogLevel5Color"]], "idol::columngeneration::with_master_optimizer (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration21with_master_optimizerERK16OptimizerFactory"]], "idol::columngeneration::with_max_columns_per_pricing (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration28with_max_columns_per_pricingEj"]], "idol::columngeneration::with_non_optimal_pricing_phase (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration30with_non_optimal_pricing_phaseEdd"]], "idol::columngeneration::with_parallel_pricing_limit (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration27with_parallel_pricing_limitEj"]], "idol::columngeneration::with_presolve (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration13with_presolveEb"]], "idol::columngeneration::with_relative_gap_tolerance (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration27with_relative_gap_toleranceEd"]], "idol::columngeneration::with_subproblem (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration15with_subproblemERK5Model6Column"]], "idol::columngeneration::with_thread_limit (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration17with_thread_limitEj"]], "idol::columngeneration::with_time_limit (c++ function)": [[33, "_CPPv4N4idol16ColumnGeneration15with_time_limitEd"]], "idol::dantzigwolfedecomposition (c++ class)": [[34, "_CPPv4N4idol25DantzigWolfeDecompositionE"]], "idol::dantzigwolfedecomposition::dantzigwolfedecomposition (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK10AnnotationI3CtrjE"]], "idol::dantzigwolfedecomposition::clone (c++ function)": [[34, "_CPPv4NK4idol25DantzigWolfeDecomposition5cloneEv"]], "idol::dantzigwolfedecomposition::conditional (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEE"], [34, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE"]], "idol::dantzigwolfedecomposition::operator() (c++ function)": [[34, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model"]], "idol::dantzigwolfedecomposition::with_absolute_gap_tolerance (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd"]], "idol::dantzigwolfedecomposition::with_aggregation_type (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition21with_aggregation_typeE7CtrType"]], "idol::dantzigwolfedecomposition::with_artificial_variables_cost (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition30with_artificial_variables_costEd"]], "idol::dantzigwolfedecomposition::with_best_bound_stop (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd"]], "idol::dantzigwolfedecomposition::with_best_obj_stop (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd"]], "idol::dantzigwolfedecomposition::with_branching_on_master (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition24with_branching_on_masterEb"]], "idol::dantzigwolfedecomposition::with_column_pool_clean_up (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition25with_column_pool_clean_upEjd"]], "idol::dantzigwolfedecomposition::with_dual_price_smoothing_stabilization (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationEd"]], "idol::dantzigwolfedecomposition::with_farkas_pricing (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition19with_farkas_pricingEb"]], "idol::dantzigwolfedecomposition::with_infeasible_or_unbounded_info (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb"]], "idol::dantzigwolfedecomposition::with_iteration_count_limit (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition26with_iteration_count_limitEj"]], "idol::dantzigwolfedecomposition::with_log_frequency (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition18with_log_frequencyEj"]], "idol::dantzigwolfedecomposition::with_log_level (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition14with_log_levelE8LogLevel5Color"]], "idol::dantzigwolfedecomposition::with_master_optimizer (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory"]], "idol::dantzigwolfedecomposition::with_max_columns_per_pricing (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition28with_max_columns_per_pricingEj"]], "idol::dantzigwolfedecomposition::with_non_optimal_pricing_phase (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition30with_non_optimal_pricing_phaseEdd"]], "idol::dantzigwolfedecomposition::with_parallel_pricing_limit (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition27with_parallel_pricing_limitEj"]], "idol::dantzigwolfedecomposition::with_presolve (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb"]], "idol::dantzigwolfedecomposition::with_pricing_optimizer (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition22with_pricing_optimizerERK16OptimizerFactory"]], "idol::dantzigwolfedecomposition::with_relative_gap_tolerance (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd"]], "idol::dantzigwolfedecomposition::with_thread_limit (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj"]], "idol::dantzigwolfedecomposition::with_time_limit (c++ function)": [[34, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd"]], "idol::glpk (c++ class)": [[36, "_CPPv4N4idol4GLPKE"]], "idol::glpk::continuousrelaxation (c++ function)": [[36, "_CPPv4N4idol4GLPK20ContinuousRelaxationEv"]], "idol::glpk::glpk (c++ function)": [[36, "_CPPv4N4idol4GLPK4GLPKERR4GLPK"], [36, "_CPPv4N4idol4GLPK4GLPKEv"]], "idol::glpk::clone (c++ function)": [[36, "_CPPv4NK4idol4GLPK5cloneEv"]], "idol::glpk::conditional (c++ function)": [[36, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE"], [36, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE"]], "idol::glpk::operator() (c++ function)": [[36, "_CPPv4NK4idol4GLPKclERK5Model"]], "idol::glpk::operator= (c++ function)": [[36, "_CPPv4N4idol4GLPKaSERK4GLPK"], [36, "_CPPv4N4idol4GLPKaSERR4GLPK"]], "idol::glpk::with_absolute_gap_tolerance (c++ function)": [[36, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd"]], "idol::glpk::with_best_bound_stop (c++ function)": [[36, "_CPPv4N4idol4GLPK20with_best_bound_stopEd"]], "idol::glpk::with_best_obj_stop (c++ function)": [[36, "_CPPv4N4idol4GLPK18with_best_obj_stopEd"]], "idol::glpk::with_infeasible_or_unbounded_info (c++ function)": [[36, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb"]], "idol::glpk::with_iteration_count_limit (c++ function)": [[36, "_CPPv4N4idol4GLPK26with_iteration_count_limitEj"]], "idol::glpk::with_log_level (c++ function)": [[36, "_CPPv4N4idol4GLPK14with_log_levelE8LogLevel5Color"]], "idol::glpk::with_presolve (c++ function)": [[36, "_CPPv4N4idol4GLPK13with_presolveEb"]], "idol::glpk::with_relative_gap_tolerance (c++ function)": [[36, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd"]], "idol::glpk::with_thread_limit (c++ function)": [[36, "_CPPv4N4idol4GLPK17with_thread_limitEj"]], "idol::glpk::with_time_limit (c++ function)": [[36, "_CPPv4N4idol4GLPK15with_time_limitEd"]], "idol::gurobi (c++ class)": [[38, "_CPPv4N4idol6GurobiE"]], "idol::gurobi::continuousrelaxation (c++ function)": [[38, "_CPPv4N4idol6Gurobi20ContinuousRelaxationEv"]], "idol::gurobi::gurobi (c++ function)": [[38, "_CPPv4N4idol6Gurobi6GurobiERR6Gurobi"], [38, "_CPPv4N4idol6Gurobi6GurobiEv"]], "idol::gurobi::clone (c++ function)": [[38, "_CPPv4NK4idol6Gurobi5cloneEv"]], "idol::gurobi::conditional (c++ function)": [[38, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE"], [38, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE"]], "idol::gurobi::operator() (c++ function)": [[38, "_CPPv4NK4idol6GurobiclERK5Model"]], "idol::gurobi::operator= (c++ function)": [[38, "_CPPv4N4idol6GurobiaSERK6Gurobi"], [38, "_CPPv4N4idol6GurobiaSERR6Gurobi"]], "idol::gurobi::with_absolute_gap_tolerance (c++ function)": [[38, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd"]], "idol::gurobi::with_best_bound_stop (c++ function)": [[38, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd"]], "idol::gurobi::with_best_obj_stop (c++ function)": [[38, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd"]], "idol::gurobi::with_callback (c++ function)": [[38, "_CPPv4N4idol6Gurobi13with_callbackERK15CallbackFactory"]], "idol::gurobi::with_continuous_relaxation_only (c++ function)": [[38, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb"]], "idol::gurobi::with_external_param (c++ function)": [[38, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami"], [38, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd"]], "idol::gurobi::with_infeasible_or_unbounded_info (c++ function)": [[38, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb"]], "idol::gurobi::with_iteration_count_limit (c++ function)": [[38, "_CPPv4N4idol6Gurobi26with_iteration_count_limitEj"]], "idol::gurobi::with_lazy_cut (c++ function)": [[38, "_CPPv4N4idol6Gurobi13with_lazy_cutEb"]], "idol::gurobi::with_log_level (c++ function)": [[38, "_CPPv4N4idol6Gurobi14with_log_levelE8LogLevel5Color"]], "idol::gurobi::with_max_n_solution_in_pool (c++ function)": [[38, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj"]], "idol::gurobi::with_presolve (c++ function)": [[38, "_CPPv4N4idol6Gurobi13with_presolveEb"]], "idol::gurobi::with_relative_gap_tolerance (c++ function)": [[38, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd"]], "idol::gurobi::with_thread_limit (c++ function)": [[38, "_CPPv4N4idol6Gurobi17with_thread_limitEj"]], "idol::gurobi::with_time_limit (c++ function)": [[38, "_CPPv4N4idol6Gurobi15with_time_limitEd"]], "idol::mosek (c++ class)": [[41, "_CPPv4N4idol5MosekE"]], "idol::mosek::continuousrelaxation (c++ function)": [[41, "_CPPv4N4idol5Mosek20ContinuousRelaxationEv"]], "idol::mosek::mosek (c++ function)": [[41, "_CPPv4N4idol5Mosek5MosekERR5Mosek"], [41, "_CPPv4N4idol5Mosek5MosekEv"]], "idol::mosek::clone (c++ function)": [[41, "_CPPv4NK4idol5Mosek5cloneEv"]], "idol::mosek::conditional (c++ function)": [[41, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE"], [41, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE"]], "idol::mosek::operator() (c++ function)": [[41, "_CPPv4NK4idol5MosekclERK5Model"]], "idol::mosek::operator= (c++ function)": [[41, "_CPPv4N4idol5MosekaSERK5Mosek"], [41, "_CPPv4N4idol5MosekaSERR5Mosek"]], "idol::mosek::with_absolute_gap_tolerance (c++ function)": [[41, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd"]], "idol::mosek::with_best_bound_stop (c++ function)": [[41, "_CPPv4N4idol5Mosek20with_best_bound_stopEd"]], "idol::mosek::with_best_obj_stop (c++ function)": [[41, "_CPPv4N4idol5Mosek18with_best_obj_stopEd"]], "idol::mosek::with_continuous_relaxation_only (c++ function)": [[41, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb"]], "idol::mosek::with_external_parameter (c++ function)": [[41, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE"], [41, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd"], [41, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi"]], "idol::mosek::with_infeasible_or_unbounded_info (c++ function)": [[41, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb"]], "idol::mosek::with_iteration_count_limit (c++ function)": [[41, "_CPPv4N4idol5Mosek26with_iteration_count_limitEj"]], "idol::mosek::with_log_level (c++ function)": [[41, "_CPPv4N4idol5Mosek14with_log_levelE8LogLevel5Color"]], "idol::mosek::with_presolve (c++ function)": [[41, "_CPPv4N4idol5Mosek13with_presolveEb"]], "idol::mosek::with_relative_gap_tolerance (c++ function)": [[41, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd"]], "idol::mosek::with_thread_limit (c++ function)": [[41, "_CPPv4N4idol5Mosek17with_thread_limitEj"]], "idol::mosek::with_time_limit (c++ function)": [[41, "_CPPv4N4idol5Mosek15with_time_limitEd"]], "idol::problems::flp (c++ type)": [[43, "_CPPv4N4idol8Problems3FLPE"]], "idol::problems::flp::instance (c++ class)": [[43, "_CPPv4N4idol8Problems3FLP8InstanceE"]], "idol::problems::flp::instance::instance (c++ function)": [[43, "_CPPv4N4idol8Problems3FLP8Instance8InstanceEjj"]], "idol::problems::flp::instance::capacity (c++ function)": [[43, "_CPPv4NK4idol8Problems3FLP8Instance8capacityEj"]], "idol::problems::flp::instance::demand (c++ function)": [[43, "_CPPv4NK4idol8Problems3FLP8Instance6demandEj"]], "idol::problems::flp::instance::fixed_cost (c++ function)": [[43, "_CPPv4NK4idol8Problems3FLP8Instance10fixed_costEj"]], "idol::problems::flp::instance::n_customers (c++ function)": [[43, "_CPPv4NK4idol8Problems3FLP8Instance11n_customersEv"]], "idol::problems::flp::instance::n_facilities (c++ function)": [[43, "_CPPv4NK4idol8Problems3FLP8Instance12n_facilitiesEv"]], "idol::problems::flp::instance::per_unit_transportation_cost (c++ function)": [[43, "_CPPv4NK4idol8Problems3FLP8Instance28per_unit_transportation_costEjj"]], "idol::problems::flp::instance::set_capacity (c++ function)": [[43, "_CPPv4N4idol8Problems3FLP8Instance12set_capacityEjd"]], "idol::problems::flp::instance::set_demand (c++ function)": [[43, "_CPPv4N4idol8Problems3FLP8Instance10set_demandEjd"]], "idol::problems::flp::instance::set_fixed_cost (c++ function)": [[43, "_CPPv4N4idol8Problems3FLP8Instance14set_fixed_costEjd"]], "idol::problems::flp::instance::set_per_unit_transportation_cost (c++ function)": [[43, "_CPPv4N4idol8Problems3FLP8Instance32set_per_unit_transportation_costEjjd"]], "idol::problems::flp::generate_instance_1991_cornuejols_et_al (c++ function)": [[43, "_CPPv4N4idol8Problems3FLP39generate_instance_1991_Cornuejols_et_alEjjd"]], "idol::problems::flp::read_instance_1991_cornuejols_et_al (c++ function)": [[43, "_CPPv4N4idol8Problems3FLP35read_instance_1991_Cornuejols_et_alERKNSt6stringE"]], "idol::problems::flp::read_instance_2021_cheng_et_al (c++ function)": [[43, "_CPPv4N4idol8Problems3FLP30read_instance_2021_Cheng_et_alERKNSt6stringE"]], "idol::problems::gap (c++ type)": [[44, "_CPPv4N4idol8Problems3GAPE"]], "idol::problems::gap::instance (c++ class)": [[44, "_CPPv4N4idol8Problems3GAP8InstanceE"]], "idol::problems::gap::instance::instance (c++ function)": [[44, "_CPPv4N4idol8Problems3GAP8Instance8InstanceERK8Instance"], [44, "_CPPv4N4idol8Problems3GAP8Instance8InstanceERR8Instance"], [44, "_CPPv4N4idol8Problems3GAP8Instance8InstanceEjj"]], "idol::problems::gap::instance::capacity (c++ function)": [[44, "_CPPv4NK4idol8Problems3GAP8Instance8capacityEj"]], "idol::problems::gap::instance::cost (c++ function)": [[44, "_CPPv4NK4idol8Problems3GAP8Instance4costEjj"]], "idol::problems::gap::instance::n_agents (c++ function)": [[44, "_CPPv4NK4idol8Problems3GAP8Instance8n_agentsEv"]], "idol::problems::gap::instance::n_jobs (c++ function)": [[44, "_CPPv4NK4idol8Problems3GAP8Instance6n_jobsEv"]], "idol::problems::gap::instance::operator= (c++ function)": [[44, "_CPPv4N4idol8Problems3GAP8InstanceaSERK8Instance"], [44, "_CPPv4N4idol8Problems3GAP8InstanceaSERR8Instance"]], "idol::problems::gap::instance::resource_consumption (c++ function)": [[44, "_CPPv4NK4idol8Problems3GAP8Instance20resource_consumptionEjj"]], "idol::problems::gap::instance::set_capacity (c++ function)": [[44, "_CPPv4N4idol8Problems3GAP8Instance12set_capacityEjd"]], "idol::problems::gap::instance::set_cost (c++ function)": [[44, "_CPPv4N4idol8Problems3GAP8Instance8set_costEjjd"]], "idol::problems::gap::instance::set_resource_consumption (c++ function)": [[44, "_CPPv4N4idol8Problems3GAP8Instance24set_resource_consumptionEjjd"]], "idol::problems::gap::instance::~instance (c++ function)": [[44, "_CPPv4N4idol8Problems3GAP8InstanceD0Ev"]], "idol::problems::gap::generate_instance_chu_and_beasley_1997_c (c++ function)": [[44, "_CPPv4N4idol8Problems3GAP40generate_instance_Chu_and_Beasley_1997_CEjj"]], "idol::problems::gap::read_instance (c++ function)": [[44, "_CPPv4N4idol8Problems3GAP13read_instanceERKNSt6stringE"]], "idol::problems::kp (c++ type)": [[45, "_CPPv4N4idol8Problems2KPE"]], "idol::problems::kp::instance (c++ class)": [[45, "_CPPv4N4idol8Problems2KP8InstanceE"]], "idol::problems::kp::instance::instance (c++ function)": [[45, "_CPPv4N4idol8Problems2KP8Instance8InstanceERK8Instance"], [45, "_CPPv4N4idol8Problems2KP8Instance8InstanceERR8Instance"], [45, "_CPPv4N4idol8Problems2KP8Instance8InstanceEj"]], "idol::problems::kp::instance::capacity (c++ function)": [[45, "_CPPv4NK4idol8Problems2KP8Instance8capacityEv"]], "idol::problems::kp::instance::n_items (c++ function)": [[45, "_CPPv4NK4idol8Problems2KP8Instance7n_itemsEv"]], "idol::problems::kp::instance::operator= (c++ function)": [[45, "_CPPv4N4idol8Problems2KP8InstanceaSERK8Instance"], [45, "_CPPv4N4idol8Problems2KP8InstanceaSERR8Instance"]], "idol::problems::kp::instance::profit (c++ function)": [[45, "_CPPv4NK4idol8Problems2KP8Instance6profitEj"]], "idol::problems::kp::instance::set_capacity (c++ function)": [[45, "_CPPv4N4idol8Problems2KP8Instance12set_capacityEd"]], "idol::problems::kp::instance::set_profit (c++ function)": [[45, "_CPPv4N4idol8Problems2KP8Instance10set_profitEjd"]], "idol::problems::kp::instance::set_weight (c++ function)": [[45, "_CPPv4N4idol8Problems2KP8Instance10set_weightEjd"]], "idol::problems::kp::instance::weight (c++ function)": [[45, "_CPPv4NK4idol8Problems2KP8Instance6weightEj"]], "idol::problems::kp::instance::~instance (c++ function)": [[45, "_CPPv4N4idol8Problems2KP8InstanceD0Ev"]], "idol::problems::kp::read_instance (c++ function)": [[45, "_CPPv4N4idol8Problems2KP13read_instanceERKNSt6stringE"]], "idol::problems::kp::read_instance_kplib (c++ function)": [[45, "_CPPv4N4idol8Problems2KP19read_instance_kplibERKNSt6stringE"]], "idol::problems::mkp (c++ type)": [[46, "_CPPv4N4idol8Problems3MKPE"]], "idol::problems::mkp::instance (c++ class)": [[46, "_CPPv4N4idol8Problems3MKP8InstanceE"]], "idol::problems::mkp::instance::instance (c++ function)": [[46, "_CPPv4N4idol8Problems3MKP8Instance8InstanceERK8Instance"], [46, "_CPPv4N4idol8Problems3MKP8Instance8InstanceERR8Instance"], [46, "_CPPv4N4idol8Problems3MKP8Instance8InstanceEjj"]], "idol::problems::mkp::instance::n_items (c++ function)": [[46, "_CPPv4NK4idol8Problems3MKP8Instance7n_itemsEv"]], "idol::problems::mkp::instance::n_knapsacks (c++ function)": [[46, "_CPPv4NK4idol8Problems3MKP8Instance11n_knapsacksEv"]], "idol::problems::mkp::instance::operator= (c++ function)": [[46, "_CPPv4N4idol8Problems3MKP8InstanceaSERK8Instance"], [46, "_CPPv4N4idol8Problems3MKP8InstanceaSERR8Instance"]], "idol::problems::mkp::instance::p (c++ function)": [[46, "_CPPv4NK4idol8Problems3MKP8Instance1pEj"]], "idol::problems::mkp::instance::set_p (c++ function)": [[46, "_CPPv4N4idol8Problems3MKP8Instance5set_pEjd"]], "idol::problems::mkp::instance::set_t (c++ function)": [[46, "_CPPv4N4idol8Problems3MKP8Instance5set_tEjd"]], "idol::problems::mkp::instance::set_w (c++ function)": [[46, "_CPPv4N4idol8Problems3MKP8Instance5set_wEjd"]], "idol::problems::mkp::instance::t (c++ function)": [[46, "_CPPv4NK4idol8Problems3MKP8Instance1tEj"]], "idol::problems::mkp::instance::w (c++ function)": [[46, "_CPPv4NK4idol8Problems3MKP8Instance1wEj"]], "idol::problems::mkp::instance::~instance (c++ function)": [[46, "_CPPv4N4idol8Problems3MKP8InstanceD0Ev"]], "idol::problems::mkp::read_instance (c++ function)": [[46, "_CPPv4N4idol8Problems3MKP13read_instanceERKNSt6stringE"]], "idol::problems::srp (c++ type)": [[47, "_CPPv4N4idol8Problems3SRPE"]], "idol::problems::srp::instance (c++ class)": [[47, "_CPPv4N4idol8Problems3SRP8InstanceE"]], "idol::problems::srp::instance::instance (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance8InstanceEjjj"]], "idol::problems::srp::instance::demand (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance6demandEj"]], "idol::problems::srp::instance::n_part_time_staff (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance17n_part_time_staffEv"]], "idol::problems::srp::instance::n_regular_staff (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance15n_regular_staffEv"]], "idol::problems::srp::instance::n_time_periods (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance14n_time_periodsEv"]], "idol::problems::srp::instance::operator<< (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8InstancelsERNSt7ostreamERK8Instance"]], "idol::problems::srp::instance::part_time_fixed_wage_cost (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance25part_time_fixed_wage_costEjj"]], "idol::problems::srp::instance::part_time_staff_hourly_wage_cost (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance32part_time_staff_hourly_wage_costEjj"]], "idol::problems::srp::instance::part_time_staff_maximum_number_of_shifts (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance40part_time_staff_maximum_number_of_shiftsEj"]], "idol::problems::srp::instance::part_time_staff_minimum_number_of_shifts (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance40part_time_staff_minimum_number_of_shiftsEj"]], "idol::problems::srp::instance::read_instance_from_file (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance23read_instance_from_fileERKNSt6stringE"]], "idol::problems::srp::instance::regular_staff_fixed_wage_cost (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance29regular_staff_fixed_wage_costEjj"]], "idol::problems::srp::instance::regular_staff_maximum_number_of_shifts (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance38regular_staff_maximum_number_of_shiftsEj"]], "idol::problems::srp::instance::regular_staff_minimum_number_of_shifts (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance38regular_staff_minimum_number_of_shiftsEj"]], "idol::problems::srp::instance::set_demand (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance10set_demandEjd"]], "idol::problems::srp::instance::set_part_time_fixed_wage_cost (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance29set_part_time_fixed_wage_costEjjd"]], "idol::problems::srp::instance::set_part_time_staff_hourly_wage_cost (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance36set_part_time_staff_hourly_wage_costEjjd"]], "idol::problems::srp::instance::set_part_time_staff_maximum_number_of_shifts (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance44set_part_time_staff_maximum_number_of_shiftsEjd"]], "idol::problems::srp::instance::set_part_time_staff_minimum_number_of_shifts (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance44set_part_time_staff_minimum_number_of_shiftsEjd"]], "idol::problems::srp::instance::set_regular_staff_fixed_wage_cost (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance33set_regular_staff_fixed_wage_costEjjd"]], "idol::problems::srp::instance::set_regular_staff_maximum_number_of_shifts (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance42set_regular_staff_maximum_number_of_shiftsEjd"]], "idol::problems::srp::instance::set_regular_staff_minimum_number_of_shifts (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance42set_regular_staff_minimum_number_of_shiftsEjd"]], "idol::problems::srp::instance::set_regular_staff_shift_duration (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance32set_regular_staff_shift_durationEj"]], "idol::problems::srp::instance::set_unmet_demand_penalty_cost (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP8Instance29set_unmet_demand_penalty_costEjd"]], "idol::problems::srp::instance::shift_duration (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance14shift_durationEv"]], "idol::problems::srp::instance::unmet_demand_penalty_cost (c++ function)": [[47, "_CPPv4NK4idol8Problems3SRP8Instance25unmet_demand_penalty_costEj"]], "idol::problems::srp::generate_random_instance_zhao_et_al_2012 (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP40generate_random_instance_Zhao_et_al_2012Ejjj"]], "idol::problems::srp::operator<< (c++ function)": [[47, "_CPPv4N4idol8Problems3SRPlsERNSt7ostreamERK8Instance"]], "idol::problems::srp::read_instance_from_file (c++ function)": [[47, "_CPPv4N4idol8Problems3SRP23read_instance_from_fileERKNSt6stringE"]], "idol::tolerance (c++ type)": [[49, "_CPPv4N4idol9ToleranceE"]], "idol::tolerance::feasibility (c++ member)": [[49, "_CPPv4N4idol9Tolerance11FeasibilityE"]], "idol::tolerance::integer (c++ member)": [[49, "_CPPv4N4idol9Tolerance7IntegerE"]], "idol::tolerance::mipabsolutegap (c++ member)": [[49, "_CPPv4N4idol9Tolerance14MIPAbsoluteGapE"]], "idol::tolerance::miprelativegap (c++ member)": [[49, "_CPPv4N4idol9Tolerance14MIPRelativeGapE"]], "idol::tolerance::optimality (c++ member)": [[49, "_CPPv4N4idol9Tolerance10OptimalityE"]], "idol::tolerance::sparsity (c++ member)": [[49, "_CPPv4N4idol9Tolerance8SparsityE"]]}}) \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..fd285ead --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,2 @@ + +https://hlefebvr.github.io/idol/en/api/index.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Annotation.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Column.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Constant.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Ctr.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Env.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Expr.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/LinExpr.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Model.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Param.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/QuadExpr.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Row.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/SolutionDual.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/SolutionPrimal.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/TempCtr.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/TempVar.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/Var.htmlhttps://hlefebvr.github.io/idol/en/api/modeling/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/BranchAndBound.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/BranchAndBoundCallback.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/branching-rules/MostInfeasible.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/branching-rules/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/node-selection-rules/BestBound.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/node-selection-rules/BreadthFirst.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/node-selection-rules/DepthFirst.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/node-selection-rules/WorstBound.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/branch-and-bound/node-selection-rules/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/callbacks/Callback.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/callbacks/CallbackEvent.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/callbacks/LazyCutCallback.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/callbacks/UserCutCallback.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/callbacks/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/column-generation/ColumnGeneration.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/column-generation/DantzigWolfeDecomposition.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/column-generation/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/glpk/GLPK.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/glpk/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/gurobi/Gurobi.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/gurobi/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/index.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/mosek/Mosek.htmlhttps://hlefebvr.github.io/idol/en/api/optimizers/mosek/index.htmlhttps://hlefebvr.github.io/idol/en/api/problems/ProblemsFLP.htmlhttps://hlefebvr.github.io/idol/en/api/problems/ProblemsGAP.htmlhttps://hlefebvr.github.io/idol/en/api/problems/ProblemsKP.htmlhttps://hlefebvr.github.io/idol/en/api/problems/ProblemsMKP.htmlhttps://hlefebvr.github.io/idol/en/api/problems/ProblemsSRP.htmlhttps://hlefebvr.github.io/idol/en/api/problems/index.htmlhttps://hlefebvr.github.io/idol/en/api/tolerances.htmlhttps://hlefebvr.github.io/idol/en/developer_guide/build-the-doc.htmlhttps://hlefebvr.github.io/idol/en/developer_guide/index.htmlhttps://hlefebvr.github.io/idol/en/developer_guide/tests.htmlhttps://hlefebvr.github.io/idol/en/examples/facility-location-problem.htmlhttps://hlefebvr.github.io/idol/en/examples/generalized-assignment-problem.htmlhttps://hlefebvr.github.io/idol/en/examples/index.htmlhttps://hlefebvr.github.io/idol/en/examples/knapsack-problem.htmlhttps://hlefebvr.github.io/idol/en/index.htmlhttps://hlefebvr.github.io/idol/en/installation/global_installation.htmlhttps://hlefebvr.github.io/idol/en/installation/index.htmlhttps://hlefebvr.github.io/idol/en/installation/linking.htmlhttps://hlefebvr.github.io/idol/en/installation/local_installation.htmlhttps://hlefebvr.github.io/idol/en/installation/mosek-and-socp.htmlhttps://hlefebvr.github.io/idol/en/installation/options.htmlhttps://hlefebvr.github.io/idol/en/tutorials/decomposition_methods/benders.htmlhttps://hlefebvr.github.io/idol/en/tutorials/decomposition_methods/dantzig_wolfe.htmlhttps://hlefebvr.github.io/idol/en/tutorials/decomposition_methods/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/getting_started/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/getting_started/modeling_optimization_problems.htmlhttps://hlefebvr.github.io/idol/en/tutorials/getting_started/using_an_external_solver.htmlhttps://hlefebvr.github.io/idol/en/tutorials/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust_optimization/dualizing.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust_optimization/index.htmlhttps://hlefebvr.github.io/idol/en/genindex.htmlhttps://hlefebvr.github.io/idol/en/search.html \ No newline at end of file diff --git a/tutorials/decomposition_methods/benders.html b/tutorials/decomposition_methods/benders.html new file mode 100644 index 00000000..28b0350f --- /dev/null +++ b/tutorials/decomposition_methods/benders.html @@ -0,0 +1,254 @@ + + + + + + + Benders Decomposition (with LazyCutCallback) — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/decomposition_methods/dantzig_wolfe.html b/tutorials/decomposition_methods/dantzig_wolfe.html new file mode 100644 index 00000000..c2314380 --- /dev/null +++ b/tutorials/decomposition_methods/dantzig_wolfe.html @@ -0,0 +1,367 @@ + + + + + + + Dantzig-Wolfe Decomposition (Automatic) — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/decomposition_methods/index.html b/tutorials/decomposition_methods/index.html new file mode 100644 index 00000000..d6230bcc --- /dev/null +++ b/tutorials/decomposition_methods/index.html @@ -0,0 +1,134 @@ + + + + + + + Decomposition methods — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/getting_started/index.html b/tutorials/getting_started/index.html new file mode 100644 index 00000000..b5c09432 --- /dev/null +++ b/tutorials/getting_started/index.html @@ -0,0 +1,134 @@ + + + + + + + Getting started — idol + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/getting_started/modeling_optimization_problems.html b/tutorials/getting_started/modeling_optimization_problems.html new file mode 100644 index 00000000..804c5ce0 --- /dev/null +++ b/tutorials/getting_started/modeling_optimization_problems.html @@ -0,0 +1,302 @@ + + + + + + + Modeling optimization problems — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/getting_started/using_an_external_solver.html b/tutorials/getting_started/using_an_external_solver.html new file mode 100644 index 00000000..3c097581 --- /dev/null +++ b/tutorials/getting_started/using_an_external_solver.html @@ -0,0 +1,321 @@ + + + + + + + Using an external solver — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/index.html b/tutorials/index.html new file mode 100644 index 00000000..11359d4a --- /dev/null +++ b/tutorials/index.html @@ -0,0 +1,167 @@ + + + + + + + Tutorials — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/robust_optimization/dualizing.html b/tutorials/robust_optimization/dualizing.html new file mode 100644 index 00000000..d02ecedd --- /dev/null +++ b/tutorials/robust_optimization/dualizing.html @@ -0,0 +1,313 @@ + + + + + + + Dualization — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/robust_optimization/index.html b/tutorials/robust_optimization/index.html new file mode 100644 index 00000000..41472ba3 --- /dev/null +++ b/tutorials/robust_optimization/index.html @@ -0,0 +1,159 @@ + + + + + + + Robust Optimization — idol + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file