bump doxygen to latest version

This commit is contained in:
Laurent Perron
2019-09-06 00:05:29 +02:00
parent 8ab9e28e2c
commit c0b388a110
3326 changed files with 218531 additions and 89223 deletions

View File

@@ -3,13 +3,13 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.6.2" />
<meta name="generator" content="pdoc 0.6.3" />
<title>pywrapknapsack_solver API documentation</title>
<meta name="description" content="" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel="stylesheet">
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase;cursor:pointer}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase;cursor:pointer}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<style type="text/css">
@@ -28,17 +28,17 @@ a:link { color: #46641e; text-decoration: none}
<details class="source">
<summary>Source code</summary>
<pre><code class="python"># This file was automatically generated by SWIG (http://www.swig.org).
# Version 4.0.0
# Version 4.0.1
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
from sys import version_info as _swig_python_version_info
if _swig_python_version_info &lt; (2, 7, 0):
raise RuntimeError(&#39;Python 2.7 or later required&#39;)
raise RuntimeError(&#34;Python 2.7 or later required&#34;)
# Import the low-level C/C++ module
if __package__ or &#39;.&#39; in __name__:
if __package__ or &#34;.&#34; in __name__:
from . import _pywrapknapsack_solver
else:
import _pywrapknapsack_solver
@@ -48,35 +48,6 @@ try:
except ImportError:
import __builtin__
def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
if name == &#34;thisown&#34;:
return self.this.own(value)
if name == &#34;this&#34;:
if type(value).__name__ == &#39;SwigPyObject&#39;:
self.__dict__[name] = value
return
method = class_type.__swig_setmethods__.get(name, None)
if method:
return method(self, value)
if not static:
object.__setattr__(self, name, value)
else:
raise AttributeError(&#34;You cannot add attributes to %s&#34; % self)
def _swig_setattr(self, class_type, name, value):
return _swig_setattr_nondynamic(self, class_type, name, value, 0)
def _swig_getattr(self, class_type, name):
if name == &#34;thisown&#34;:
return self.this.own()
method = class_type.__swig_getmethods__.get(name, None)
if method:
return method(self)
raise AttributeError(&#34;&#39;%s&#39; object has no attribute &#39;%s&#39;&#34; % (class_type.__name__, name))
def _swig_repr(self):
try:
strthis = &#34;proxy of &#34; + self.this.__repr__()
@@ -120,180 +91,31 @@ class _SwigNonDynamicMeta(type):
class KnapsackSolver(object):
r&#34;&#34;&#34;
This library solves knapsack problems.
Problems the library solves include:
- 0-1 knapsack problems,
- Multi-dimensional knapsack problems,
Given n items, each with a profit and a weight, given a knapsack of
capacity c, the goal is to find a subset of items which fits inside c
and maximizes the total profit.
The knapsack problem can easily be extended from 1 to d dimensions.
As an example, this can be useful to constrain the maximum number of
items inside the knapsack.
Without loss of generality, profits and weights are assumed to be positive.
From a mathematical point of view, the multi-dimensional knapsack problem
can be modeled by d linear constraints:
ForEach(j:1..d)(Sum(i:1..n)(weight_ij * item_i) &lt;= c_j
where item_i is a 0-1 integer variable.
Then the goal is to maximize:
Sum(i:1..n)(profit_i * item_i).
There are several ways to solve knapsack problems. One of the most
efficient is based on dynamic programming (mainly when weights, profits
and dimensions are small, and the algorithm runs in pseudo polynomial time).
Unfortunately, when adding conflict constraints the problem becomes strongly
NP-hard, i.e. there is no pseudo-polynomial algorithm to solve it.
That&#39;s the reason why the most of the following code is based on branch and
bound search.
For instance to solve a 2-dimensional knapsack problem with 9 items,
one just has to feed a profit vector with the 9 profits, a vector of 2
vectors for weights, and a vector of capacities.
E.g.:
**Python**:
.. code-block:: c++
profits = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
weights = [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
]
capacities = [ 34, 4 ]
solver = pywrapknapsack_solver.KnapsackSolver(
pywrapknapsack_solver.KnapsackSolver
.KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
&#39;Multi-dimensional solver&#39;)
solver.Init(profits, weights, capacities)
profit = solver.Solve()
**C++**:
.. code-block:: c++
const std::vectorint64 profits = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const std::vectorstd::vector&lt;int64 weights =
{ { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
const std::vectorint64 capacities = { 34, 4 };
KnapsackSolver solver(
KnapsackSolver::KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
&#34;Multi-dimensional solver&#34;);
solver.Init(profits, weights, capacities);
const int64 profit = solver.Solve();
**Java**:
.. code-block:: c++
final long[] profits = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
final long[][] weights = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
final long[] capacities = { 34, 4 };
KnapsackSolver solver = new KnapsackSolver(
KnapsackSolver.SolverType.KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
&#34;Multi-dimensional solver&#34;);
solver.init(profits, weights, capacities);
final long profit = solver.solve();
&#34;&#34;&#34;
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
KNAPSACK_BRUTE_FORCE_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_BRUTE_FORCE_SOLVER
r&#34;&#34;&#34;
Brute force method.
Limited to 30 items and one dimension, this
solver uses a brute force algorithm, ie. explores all possible states.
Experiments show competitive performance for instances with less than
15 items.
&#34;&#34;&#34;
KNAPSACK_64ITEMS_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_64ITEMS_SOLVER
r&#34;&#34;&#34;
Optimized method for single dimension small problems
Limited to 64 items and one dimension, this
solver uses a branch &amp; bound algorithm. This solver is about 4 times
faster than KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER.
&#34;&#34;&#34;
KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER
r&#34;&#34;&#34;
Dynamic Programming approach for single dimension problems
Limited to one dimension, this solver is based on a dynamic programming
algorithm. The time and space complexity is O(capacity *
number_of_items).
&#34;&#34;&#34;
KNAPSACK_MULTIDIMENSION_CBC_MIP_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_MULTIDIMENSION_CBC_MIP_SOLVER
r&#34;&#34;&#34;
CBC Based Solver
This solver can deal with both large number of items and several
dimensions. This solver is based on Integer Programming solver CBC.
&#34;&#34;&#34;
KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER
r&#34;&#34;&#34;
Generic Solver.
This solver can deal with both large number of items and several
dimensions. This solver is based on branch and bound.
&#34;&#34;&#34;
def __init__(self, *args):
_pywrapknapsack_solver.KnapsackSolver_swiginit(self, _pywrapknapsack_solver.new_KnapsackSolver(*args))
__swig_destroy__ = _pywrapknapsack_solver.delete_KnapsackSolver
def Init(self, profits: &#39;std::vector&lt; int64 &gt; const &amp;&#39;, weights: &#39;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#39;, capacities: &#39;std::vector&lt; int64 &gt; const &amp;&#39;) -&gt; &#34;void&#34;:
r&#34;&#34;&#34;
Initializes the solver and enters the problem to be solved.
&#34;&#34;&#34;
def Init(self, profits: &#34;std::vector&lt; int64 &gt; const &amp;&#34;, weights: &#34;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#34;, capacities: &#34;std::vector&lt; int64 &gt; const &amp;&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_Init(self, profits, weights, capacities)
def Solve(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Solves the problem and returns the profit of the optimal solution.
&#34;&#34;&#34;
return _pywrapknapsack_solver.KnapsackSolver_Solve(self)
def BestSolutionContains(self, item_id: &#39;int&#39;) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34;
Returns true if the item &#39;item_id&#39; is packed in the optimal knapsack.
&#34;&#34;&#34;
def BestSolutionContains(self, item_id: &#34;int&#34;) -&gt; &#34;bool&#34;:
return _pywrapknapsack_solver.KnapsackSolver_BestSolutionContains(self, item_id)
def set_use_reduction(self, use_reduction: &#39;bool&#39;) -&gt; &#34;void&#34;:
def set_use_reduction(self, use_reduction: &#34;bool&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_set_use_reduction(self, use_reduction)
def set_time_limit(self, time_limit_seconds: &#39;double&#39;) -&gt; &#34;void&#34;:
r&#34;&#34;&#34;
Time limit in seconds.
When a finite time limit is set the solution obtained might not be optimal
if the limit is reached.
&#34;&#34;&#34;
def set_time_limit(self, time_limit_seconds: &#34;double&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_set_time_limit(self, time_limit_seconds)
# Register KnapsackSolver in _pywrapknapsack_solver:
@@ -314,292 +136,58 @@ _pywrapknapsack_solver.KnapsackSolver_swigregister(KnapsackSolver)</code></pre>
<span>(</span><span>*args)</span>
</code></dt>
<dd>
<section class="desc"><p>This library solves knapsack problems.</p>
<p>Problems the library solves include:
- 0-1 knapsack problems,
- Multi-dimensional knapsack problems,</p>
<p>Given n items, each with a profit and a weight, given a knapsack of
capacity c, the goal is to find a subset of items which fits inside c
and maximizes the total profit.
The knapsack problem can easily be extended from 1 to d dimensions.
As an example, this can be useful to constrain the maximum number of
items inside the knapsack.
Without loss of generality, profits and weights are assumed to be positive.</p>
<p>From a mathematical point of view, the multi-dimensional knapsack problem
can be modeled by d linear constraints:</p>
<pre><code>ForEach(j:1..d)(Sum(i:1..n)(weight_ij * item_i) &lt;= c_j
where item_i is a 0-1 integer variable.
</code></pre>
<p>Then the goal is to maximize:</p>
<pre><code>Sum(i:1..n)(profit_i * item_i).
</code></pre>
<p>There are several ways to solve knapsack problems. One of the most
efficient is based on dynamic programming (mainly when weights, profits
and dimensions are small, and the algorithm runs in pseudo polynomial time).
Unfortunately, when adding conflict constraints the problem becomes strongly
NP-hard, i.e. there is no pseudo-polynomial algorithm to solve it.
That's the reason why the most of the following code is based on branch and
bound search.</p>
<p>For instance to solve a 2-dimensional knapsack problem with 9 items,
one just has to feed a profit vector with the 9 profits, a vector of 2
vectors for weights, and a vector of capacities.
E.g.:</p>
<p><strong>Python</strong>:</p>
<p>.. code-block:: c++</p>
<pre><code> profits = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
weights = [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
]
capacities = [ 34, 4 ]
solver = pywrapknapsack_solver.KnapsackSolver(
pywrapknapsack_solver.KnapsackSolver
.KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
'Multi-dimensional solver')
solver.Init(profits, weights, capacities)
profit = solver.Solve()
</code></pre>
<p><strong>C++</strong>:</p>
<p>.. code-block:: c++</p>
<pre><code> const std::vectorint64 profits = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const std::vectorstd::vector&lt;int64 weights =
{ { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
const std::vectorint64 capacities = { 34, 4 };
KnapsackSolver solver(
KnapsackSolver::KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
"Multi-dimensional solver");
solver.Init(profits, weights, capacities);
const int64 profit = solver.Solve();
</code></pre>
<p><strong>Java</strong>:</p>
<p>.. code-block:: c++</p>
<pre><code> final long[] profits = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
final long[][] weights = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
final long[] capacities = { 34, 4 };
KnapsackSolver solver = new KnapsackSolver(
KnapsackSolver.SolverType.KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
"Multi-dimensional solver");
solver.init(profits, weights, capacities);
final long profit = solver.solve();
</code></pre></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">class KnapsackSolver(object):
r&#34;&#34;&#34;
This library solves knapsack problems.
Problems the library solves include:
- 0-1 knapsack problems,
- Multi-dimensional knapsack problems,
Given n items, each with a profit and a weight, given a knapsack of
capacity c, the goal is to find a subset of items which fits inside c
and maximizes the total profit.
The knapsack problem can easily be extended from 1 to d dimensions.
As an example, this can be useful to constrain the maximum number of
items inside the knapsack.
Without loss of generality, profits and weights are assumed to be positive.
From a mathematical point of view, the multi-dimensional knapsack problem
can be modeled by d linear constraints:
ForEach(j:1..d)(Sum(i:1..n)(weight_ij * item_i) &lt;= c_j
where item_i is a 0-1 integer variable.
Then the goal is to maximize:
Sum(i:1..n)(profit_i * item_i).
There are several ways to solve knapsack problems. One of the most
efficient is based on dynamic programming (mainly when weights, profits
and dimensions are small, and the algorithm runs in pseudo polynomial time).
Unfortunately, when adding conflict constraints the problem becomes strongly
NP-hard, i.e. there is no pseudo-polynomial algorithm to solve it.
That&#39;s the reason why the most of the following code is based on branch and
bound search.
For instance to solve a 2-dimensional knapsack problem with 9 items,
one just has to feed a profit vector with the 9 profits, a vector of 2
vectors for weights, and a vector of capacities.
E.g.:
**Python**:
.. code-block:: c++
profits = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
weights = [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
]
capacities = [ 34, 4 ]
solver = pywrapknapsack_solver.KnapsackSolver(
pywrapknapsack_solver.KnapsackSolver
.KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
&#39;Multi-dimensional solver&#39;)
solver.Init(profits, weights, capacities)
profit = solver.Solve()
**C++**:
.. code-block:: c++
const std::vectorint64 profits = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const std::vectorstd::vector&lt;int64 weights =
{ { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
const std::vectorint64 capacities = { 34, 4 };
KnapsackSolver solver(
KnapsackSolver::KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
&#34;Multi-dimensional solver&#34;);
solver.Init(profits, weights, capacities);
const int64 profit = solver.Solve();
**Java**:
.. code-block:: c++
final long[] profits = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
final long[][] weights = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
final long[] capacities = { 34, 4 };
KnapsackSolver solver = new KnapsackSolver(
KnapsackSolver.SolverType.KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
&#34;Multi-dimensional solver&#34;);
solver.init(profits, weights, capacities);
final long profit = solver.solve();
&#34;&#34;&#34;
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
KNAPSACK_BRUTE_FORCE_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_BRUTE_FORCE_SOLVER
r&#34;&#34;&#34;
Brute force method.
Limited to 30 items and one dimension, this
solver uses a brute force algorithm, ie. explores all possible states.
Experiments show competitive performance for instances with less than
15 items.
&#34;&#34;&#34;
KNAPSACK_64ITEMS_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_64ITEMS_SOLVER
r&#34;&#34;&#34;
Optimized method for single dimension small problems
Limited to 64 items and one dimension, this
solver uses a branch &amp; bound algorithm. This solver is about 4 times
faster than KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER.
&#34;&#34;&#34;
KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER
r&#34;&#34;&#34;
Dynamic Programming approach for single dimension problems
Limited to one dimension, this solver is based on a dynamic programming
algorithm. The time and space complexity is O(capacity *
number_of_items).
&#34;&#34;&#34;
KNAPSACK_MULTIDIMENSION_CBC_MIP_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_MULTIDIMENSION_CBC_MIP_SOLVER
r&#34;&#34;&#34;
CBC Based Solver
This solver can deal with both large number of items and several
dimensions. This solver is based on Integer Programming solver CBC.
&#34;&#34;&#34;
KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER = _pywrapknapsack_solver.KnapsackSolver_KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER
r&#34;&#34;&#34;
Generic Solver.
This solver can deal with both large number of items and several
dimensions. This solver is based on branch and bound.
&#34;&#34;&#34;
def __init__(self, *args):
_pywrapknapsack_solver.KnapsackSolver_swiginit(self, _pywrapknapsack_solver.new_KnapsackSolver(*args))
__swig_destroy__ = _pywrapknapsack_solver.delete_KnapsackSolver
def Init(self, profits: &#39;std::vector&lt; int64 &gt; const &amp;&#39;, weights: &#39;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#39;, capacities: &#39;std::vector&lt; int64 &gt; const &amp;&#39;) -&gt; &#34;void&#34;:
r&#34;&#34;&#34;
Initializes the solver and enters the problem to be solved.
&#34;&#34;&#34;
def Init(self, profits: &#34;std::vector&lt; int64 &gt; const &amp;&#34;, weights: &#34;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#34;, capacities: &#34;std::vector&lt; int64 &gt; const &amp;&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_Init(self, profits, weights, capacities)
def Solve(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Solves the problem and returns the profit of the optimal solution.
&#34;&#34;&#34;
return _pywrapknapsack_solver.KnapsackSolver_Solve(self)
def BestSolutionContains(self, item_id: &#39;int&#39;) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34;
Returns true if the item &#39;item_id&#39; is packed in the optimal knapsack.
&#34;&#34;&#34;
def BestSolutionContains(self, item_id: &#34;int&#34;) -&gt; &#34;bool&#34;:
return _pywrapknapsack_solver.KnapsackSolver_BestSolutionContains(self, item_id)
def set_use_reduction(self, use_reduction: &#39;bool&#39;) -&gt; &#34;void&#34;:
def set_use_reduction(self, use_reduction: &#34;bool&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_set_use_reduction(self, use_reduction)
def set_time_limit(self, time_limit_seconds: &#39;double&#39;) -&gt; &#34;void&#34;:
r&#34;&#34;&#34;
Time limit in seconds.
When a finite time limit is set the solution obtained might not be optimal
if the limit is reached.
&#34;&#34;&#34;
def set_time_limit(self, time_limit_seconds: &#34;double&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_set_time_limit(self, time_limit_seconds)</code></pre>
</details>
<h3>Class variables</h3>
<dl>
<dt id="pywrapknapsack_solver.KnapsackSolver.KNAPSACK_64ITEMS_SOLVER"><code class="name">var <span class="ident">KNAPSACK_64ITEMS_SOLVER</span></code></dt>
<dd>
<section class="desc"><p>Optimized method for single dimension small problems</p>
<p>Limited to 64 items and one dimension, this
solver uses a branch &amp; bound algorithm. This solver is about 4 times
faster than KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER.</p></section>
<section class="desc"></section>
</dd>
<dt id="pywrapknapsack_solver.KnapsackSolver.KNAPSACK_BRUTE_FORCE_SOLVER"><code class="name">var <span class="ident">KNAPSACK_BRUTE_FORCE_SOLVER</span></code></dt>
<dd>
<section class="desc"><p>Brute force method.</p>
<p>Limited to 30 items and one dimension, this
solver uses a brute force algorithm, ie. explores all possible states.
Experiments show competitive performance for instances with less than
15 items.</p></section>
<section class="desc"></section>
</dd>
<dt id="pywrapknapsack_solver.KnapsackSolver.KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER"><code class="name">var <span class="ident">KNAPSACK_DYNAMIC_PROGRAMMING_SOLVER</span></code></dt>
<dd>
<section class="desc"><p>Dynamic Programming approach for single dimension problems</p>
<p>Limited to one dimension, this solver is based on a dynamic programming
algorithm. The time and space complexity is O(capacity *
number_of_items).</p></section>
<section class="desc"></section>
</dd>
<dt id="pywrapknapsack_solver.KnapsackSolver.KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER"><code class="name">var <span class="ident">KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER</span></code></dt>
<dd>
<section class="desc"><p>Generic Solver.</p>
<p>This solver can deal with both large number of items and several
dimensions. This solver is based on branch and bound.</p></section>
<section class="desc"></section>
</dd>
<dt id="pywrapknapsack_solver.KnapsackSolver.KNAPSACK_MULTIDIMENSION_CBC_MIP_SOLVER"><code class="name">var <span class="ident">KNAPSACK_MULTIDIMENSION_CBC_MIP_SOLVER</span></code></dt>
<dd>
<section class="desc"><p>CBC Based Solver</p>
<p>This solver can deal with both large number of items and several
dimensions. This solver is based on Integer Programming solver CBC.</p></section>
<section class="desc"></section>
</dd>
</dl>
<h3>Instance variables</h3>
@@ -609,7 +197,7 @@ dimensions. This solver is based on Integer Programming solver CBC.</p></section
<section class="desc"><p>The membership flag</p></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)</code></pre>
<pre><code class="python">thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)</code></pre>
</details>
</dd>
</dl>
@@ -619,14 +207,10 @@ dimensions. This solver is based on Integer Programming solver CBC.</p></section
<span>def <span class="ident">BestSolutionContains</span></span>(<span>self, item_id)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns true if the item 'item_id' is packed in the optimal knapsack.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def BestSolutionContains(self, item_id: &#39;int&#39;) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34;
Returns true if the item &#39;item_id&#39; is packed in the optimal knapsack.
&#34;&#34;&#34;
<pre><code class="python">def BestSolutionContains(self, item_id: &#34;int&#34;) -&gt; &#34;bool&#34;:
return _pywrapknapsack_solver.KnapsackSolver_BestSolutionContains(self, item_id)</code></pre>
</details>
</dd>
@@ -634,14 +218,10 @@ dimensions. This solver is based on Integer Programming solver CBC.</p></section
<span>def <span class="ident">Init</span></span>(<span>self, profits, weights, capacities)</span>
</code></dt>
<dd>
<section class="desc"><p>Initializes the solver and enters the problem to be solved.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Init(self, profits: &#39;std::vector&lt; int64 &gt; const &amp;&#39;, weights: &#39;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#39;, capacities: &#39;std::vector&lt; int64 &gt; const &amp;&#39;) -&gt; &#34;void&#34;:
r&#34;&#34;&#34;
Initializes the solver and enters the problem to be solved.
&#34;&#34;&#34;
<pre><code class="python">def Init(self, profits: &#34;std::vector&lt; int64 &gt; const &amp;&#34;, weights: &#34;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#34;, capacities: &#34;std::vector&lt; int64 &gt; const &amp;&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_Init(self, profits, weights, capacities)</code></pre>
</details>
</dd>
@@ -649,14 +229,10 @@ dimensions. This solver is based on Integer Programming solver CBC.</p></section
<span>def <span class="ident">Solve</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Solves the problem and returns the profit of the optimal solution.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Solve(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Solves the problem and returns the profit of the optimal solution.
&#34;&#34;&#34;
return _pywrapknapsack_solver.KnapsackSolver_Solve(self)</code></pre>
</details>
</dd>
@@ -664,18 +240,10 @@ dimensions. This solver is based on Integer Programming solver CBC.</p></section
<span>def <span class="ident">set_time_limit</span></span>(<span>self, time_limit_seconds)</span>
</code></dt>
<dd>
<section class="desc"><p>Time limit in seconds.</p>
<p>When a finite time limit is set the solution obtained might not be optimal
if the limit is reached.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def set_time_limit(self, time_limit_seconds: &#39;double&#39;) -&gt; &#34;void&#34;:
r&#34;&#34;&#34;
Time limit in seconds.
When a finite time limit is set the solution obtained might not be optimal
if the limit is reached.
&#34;&#34;&#34;
<pre><code class="python">def set_time_limit(self, time_limit_seconds: &#34;double&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_set_time_limit(self, time_limit_seconds)</code></pre>
</details>
</dd>
@@ -686,7 +254,7 @@ if the limit is reached.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def set_use_reduction(self, use_reduction: &#39;bool&#39;) -&gt; &#34;void&#34;:
<pre><code class="python">def set_use_reduction(self, use_reduction: &#34;bool&#34;) -&gt; &#34;void&#34;:
return _pywrapknapsack_solver.KnapsackSolver_set_use_reduction(self, use_reduction)</code></pre>
</details>
</dd>
@@ -731,7 +299,7 @@ if the limit is reached.</p></section>
</main>
<footer id="footer">
<p><span style="color:#ddd">&#21328;</span></p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.6.2</a>.</p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.6.3</a>.</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad()</script>

File diff suppressed because it is too large Load Diff

View File

@@ -3,13 +3,13 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.6.2" />
<meta name="generator" content="pdoc 0.6.3" />
<title>pywrapgraph API documentation</title>
<meta name="description" content="" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel="stylesheet">
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase;cursor:pointer}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase;cursor:pointer}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<style type="text/css">
@@ -28,17 +28,17 @@ a:link { color: #46641e; text-decoration: none}
<details class="source">
<summary>Source code</summary>
<pre><code class="python"># This file was automatically generated by SWIG (http://www.swig.org).
# Version 4.0.0
# Version 4.0.1
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
from sys import version_info as _swig_python_version_info
if _swig_python_version_info &lt; (2, 7, 0):
raise RuntimeError(&#39;Python 2.7 or later required&#39;)
raise RuntimeError(&#34;Python 2.7 or later required&#34;)
# Import the low-level C/C++ module
if __package__ or &#39;.&#39; in __name__:
if __package__ or &#34;.&#34; in __name__:
from . import _pywrapgraph
else:
import _pywrapgraph
@@ -48,35 +48,6 @@ try:
except ImportError:
import __builtin__
def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
if name == &#34;thisown&#34;:
return self.this.own(value)
if name == &#34;this&#34;:
if type(value).__name__ == &#39;SwigPyObject&#39;:
self.__dict__[name] = value
return
method = class_type.__swig_setmethods__.get(name, None)
if method:
return method(self, value)
if not static:
object.__setattr__(self, name, value)
else:
raise AttributeError(&#34;You cannot add attributes to %s&#34; % self)
def _swig_setattr(self, class_type, name, value):
return _swig_setattr_nondynamic(self, class_type, name, value, 0)
def _swig_getattr(self, class_type, name):
if name == &#34;thisown&#34;:
return self.this.own()
method = class_type.__swig_getmethods__.get(name, None)
if method:
return method(self)
raise AttributeError(&#34;&#39;%s&#39; object has no attribute &#39;%s&#39;&#34; % (class_type.__name__, name))
def _swig_repr(self):
try:
strthis = &#34;proxy of &#34; + self.this.__repr__()
@@ -120,13 +91,13 @@ class _SwigNonDynamicMeta(type):
class SimpleMaxFlow(object):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
def __init__(self):
_pywrapgraph.SimpleMaxFlow_swiginit(self, _pywrapgraph.new_SimpleMaxFlow())
def AddArcWithCapacity(self, tail: &#39;operations_research::NodeIndex&#39;, head: &#39;operations_research::NodeIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
def AddArcWithCapacity(self, tail: &#34;operations_research::NodeIndex&#34;, head: &#34;operations_research::NodeIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_AddArcWithCapacity(self, tail, head, capacity)
def NumNodes(self) -&gt; &#34;operations_research::NodeIndex&#34;:
@@ -135,26 +106,26 @@ class SimpleMaxFlow(object):
def NumArcs(self) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_NumArcs(self)
def Tail(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def Tail(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_Tail(self, arc)
def Head(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def Head(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_Head(self, arc)
def Capacity(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Capacity(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMaxFlow_Capacity(self, arc)
OPTIMAL = _pywrapgraph.SimpleMaxFlow_OPTIMAL
POSSIBLE_OVERFLOW = _pywrapgraph.SimpleMaxFlow_POSSIBLE_OVERFLOW
BAD_INPUT = _pywrapgraph.SimpleMaxFlow_BAD_INPUT
BAD_RESULT = _pywrapgraph.SimpleMaxFlow_BAD_RESULT
def Solve(self, source: &#39;operations_research::NodeIndex&#39;, sink: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::SimpleMaxFlow::Status&#34;:
def Solve(self, source: &#34;operations_research::NodeIndex&#34;, sink: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::SimpleMaxFlow::Status&#34;:
return _pywrapgraph.SimpleMaxFlow_Solve(self, source, sink)
def OptimalFlow(self) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMaxFlow_OptimalFlow(self)
def Flow(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Flow(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMaxFlow_Flow(self, arc)
def GetSourceSideMinCut(self) -&gt; &#34;void&#34;:
@@ -163,7 +134,7 @@ class SimpleMaxFlow(object):
def GetSinkSideMinCut(self) -&gt; &#34;void&#34;:
return _pywrapgraph.SimpleMaxFlow_GetSinkSideMinCut(self)
def SetArcCapacity(self, arc: &#39;operations_research::ArcIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;void&#34;:
def SetArcCapacity(self, arc: &#34;operations_research::ArcIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;void&#34;:
return _pywrapgraph.SimpleMaxFlow_SetArcCapacity(self, arc, capacity)
__swig_destroy__ = _pywrapgraph.delete_SimpleMaxFlow
@@ -171,7 +142,7 @@ class SimpleMaxFlow(object):
_pywrapgraph.SimpleMaxFlow_swigregister(SimpleMaxFlow)
class MinCostFlowBase(object):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
NOT_SOLVED = _pywrapgraph.MinCostFlowBase_NOT_SOLVED
OPTIMAL = _pywrapgraph.MinCostFlowBase_OPTIMAL
@@ -189,16 +160,16 @@ class MinCostFlowBase(object):
_pywrapgraph.MinCostFlowBase_swigregister(MinCostFlowBase)
class SimpleMinCostFlow(MinCostFlowBase):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
def __init__(self):
_pywrapgraph.SimpleMinCostFlow_swiginit(self, _pywrapgraph.new_SimpleMinCostFlow())
def AddArcWithCapacityAndUnitCost(self, tail: &#39;operations_research::NodeIndex&#39;, head: &#39;operations_research::NodeIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;, unit_cost: &#39;operations_research::CostValue&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
def AddArcWithCapacityAndUnitCost(self, tail: &#34;operations_research::NodeIndex&#34;, head: &#34;operations_research::NodeIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;, unit_cost: &#34;operations_research::CostValue&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_AddArcWithCapacityAndUnitCost(self, tail, head, capacity, unit_cost)
def SetNodeSupply(self, node: &#39;operations_research::NodeIndex&#39;, supply: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;void&#34;:
def SetNodeSupply(self, node: &#34;operations_research::NodeIndex&#34;, supply: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;void&#34;:
return _pywrapgraph.SimpleMinCostFlow_SetNodeSupply(self, node, supply)
def Solve(self) -&gt; &#34;operations_research::MinCostFlowBase::Status&#34;:
@@ -213,7 +184,7 @@ class SimpleMinCostFlow(MinCostFlowBase):
def MaximumFlow(self) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_MaximumFlow(self)
def Flow(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Flow(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Flow(self, arc)
def NumNodes(self) -&gt; &#34;operations_research::NodeIndex&#34;:
@@ -222,19 +193,19 @@ class SimpleMinCostFlow(MinCostFlowBase):
def NumArcs(self) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_NumArcs(self)
def Tail(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def Tail(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_Tail(self, arc)
def Head(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def Head(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_Head(self, arc)
def Capacity(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Capacity(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Capacity(self, arc)
def Supply(self, node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Supply(self, node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Supply(self, node)
def UnitCost(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
def UnitCost(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.SimpleMinCostFlow_UnitCost(self, arc)
__swig_destroy__ = _pywrapgraph.delete_SimpleMinCostFlow
@@ -242,13 +213,13 @@ class SimpleMinCostFlow(MinCostFlowBase):
_pywrapgraph.SimpleMinCostFlow_swigregister(SimpleMinCostFlow)
class LinearSumAssignment(object):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
def __init__(self):
_pywrapgraph.LinearSumAssignment_swiginit(self, _pywrapgraph.new_LinearSumAssignment())
def AddArcWithCost(self, left_node: &#39;operations_research::NodeIndex&#39;, right_node: &#39;operations_research::NodeIndex&#39;, cost: &#39;operations_research::CostValue&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
def AddArcWithCost(self, left_node: &#34;operations_research::NodeIndex&#34;, right_node: &#34;operations_research::NodeIndex&#34;, cost: &#34;operations_research::CostValue&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.LinearSumAssignment_AddArcWithCost(self, left_node, right_node, cost)
def NumNodes(self) -&gt; &#34;operations_research::NodeIndex&#34;:
@@ -257,13 +228,13 @@ class LinearSumAssignment(object):
def NumArcs(self) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.LinearSumAssignment_NumArcs(self)
def LeftNode(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def LeftNode(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_LeftNode(self, arc)
def RightNode(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def RightNode(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_RightNode(self, arc)
def Cost(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
def Cost(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.LinearSumAssignment_Cost(self, arc)
OPTIMAL = _pywrapgraph.LinearSumAssignment_OPTIMAL
INFEASIBLE = _pywrapgraph.LinearSumAssignment_INFEASIBLE
@@ -275,10 +246,10 @@ class LinearSumAssignment(object):
def OptimalCost(self) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.LinearSumAssignment_OptimalCost(self)
def RightMate(self, left_node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def RightMate(self, left_node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_RightMate(self, left_node)
def AssignmentCost(self, left_node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
def AssignmentCost(self, left_node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.LinearSumAssignment_AssignmentCost(self, left_node)
__swig_destroy__ = _pywrapgraph.delete_LinearSumAssignment
@@ -286,13 +257,13 @@ class LinearSumAssignment(object):
_pywrapgraph.LinearSumAssignment_swigregister(LinearSumAssignment)
def DijkstraShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_node: &#39;int&#39;, graph: &#39;std::function&lt; int64 (int,int) &gt;&#39;, disconnected_distance: &#39;int64&#39;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
def DijkstraShortestPath(node_count: &#34;int&#34;, start_node: &#34;int&#34;, end_node: &#34;int&#34;, graph: &#34;std::function&lt; int64 (int,int) &gt;&#34;, disconnected_distance: &#34;int64&#34;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
return _pywrapgraph.DijkstraShortestPath(node_count, start_node, end_node, graph, disconnected_distance)
def BellmanFordShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_node: &#39;int&#39;, graph: &#39;std::function&lt; int64 (int,int) &gt;&#39;, disconnected_distance: &#39;int64&#39;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
def BellmanFordShortestPath(node_count: &#34;int&#34;, start_node: &#34;int&#34;, end_node: &#34;int&#34;, graph: &#34;std::function&lt; int64 (int,int) &gt;&#34;, disconnected_distance: &#34;int64&#34;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
return _pywrapgraph.BellmanFordShortestPath(node_count, start_node, end_node, graph, disconnected_distance)
def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_node: &#39;int&#39;, graph: &#39;std::function&lt; int64 (int,int) &gt;&#39;, heuristic: &#39;std::function&lt; int64 (int) &gt;&#39;, disconnected_distance: &#39;int64&#39;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
def AStarShortestPath(node_count: &#34;int&#34;, start_node: &#34;int&#34;, end_node: &#34;int&#34;, graph: &#34;std::function&lt; int64 (int,int) &gt;&#34;, heuristic: &#34;std::function&lt; int64 (int) &gt;&#34;, disconnected_distance: &#34;int64&#34;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
return _pywrapgraph.AStarShortestPath(node_count, start_node, end_node, graph, heuristic, disconnected_distance)</code></pre>
</details>
</section>
@@ -310,7 +281,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_node: &#39;int&#39;, graph: &#39;std::function&lt; int64 (int,int) &gt;&#39;, heuristic: &#39;std::function&lt; int64 (int) &gt;&#39;, disconnected_distance: &#39;int64&#39;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
<pre><code class="python">def AStarShortestPath(node_count: &#34;int&#34;, start_node: &#34;int&#34;, end_node: &#34;int&#34;, graph: &#34;std::function&lt; int64 (int,int) &gt;&#34;, heuristic: &#34;std::function&lt; int64 (int) &gt;&#34;, disconnected_distance: &#34;int64&#34;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
return _pywrapgraph.AStarShortestPath(node_count, start_node, end_node, graph, heuristic, disconnected_distance)</code></pre>
</details>
</dd>
@@ -321,7 +292,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def BellmanFordShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_node: &#39;int&#39;, graph: &#39;std::function&lt; int64 (int,int) &gt;&#39;, disconnected_distance: &#39;int64&#39;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
<pre><code class="python">def BellmanFordShortestPath(node_count: &#34;int&#34;, start_node: &#34;int&#34;, end_node: &#34;int&#34;, graph: &#34;std::function&lt; int64 (int,int) &gt;&#34;, disconnected_distance: &#34;int64&#34;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
return _pywrapgraph.BellmanFordShortestPath(node_count, start_node, end_node, graph, disconnected_distance)</code></pre>
</details>
</dd>
@@ -332,7 +303,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def DijkstraShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_node: &#39;int&#39;, graph: &#39;std::function&lt; int64 (int,int) &gt;&#39;, disconnected_distance: &#39;int64&#39;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
<pre><code class="python">def DijkstraShortestPath(node_count: &#34;int&#34;, start_node: &#34;int&#34;, end_node: &#34;int&#34;, graph: &#34;std::function&lt; int64 (int,int) &gt;&#34;, disconnected_distance: &#34;int64&#34;) -&gt; &#34;std::vector&lt; int &gt; *&#34;:
return _pywrapgraph.DijkstraShortestPath(node_count, start_node, end_node, graph, disconnected_distance)</code></pre>
</details>
</dd>
@@ -349,13 +320,13 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<details class="source">
<summary>Source code</summary>
<pre><code class="python">class LinearSumAssignment(object):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
def __init__(self):
_pywrapgraph.LinearSumAssignment_swiginit(self, _pywrapgraph.new_LinearSumAssignment())
def AddArcWithCost(self, left_node: &#39;operations_research::NodeIndex&#39;, right_node: &#39;operations_research::NodeIndex&#39;, cost: &#39;operations_research::CostValue&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
def AddArcWithCost(self, left_node: &#34;operations_research::NodeIndex&#34;, right_node: &#34;operations_research::NodeIndex&#34;, cost: &#34;operations_research::CostValue&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.LinearSumAssignment_AddArcWithCost(self, left_node, right_node, cost)
def NumNodes(self) -&gt; &#34;operations_research::NodeIndex&#34;:
@@ -364,13 +335,13 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
def NumArcs(self) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.LinearSumAssignment_NumArcs(self)
def LeftNode(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def LeftNode(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_LeftNode(self, arc)
def RightNode(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def RightNode(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_RightNode(self, arc)
def Cost(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
def Cost(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.LinearSumAssignment_Cost(self, arc)
OPTIMAL = _pywrapgraph.LinearSumAssignment_OPTIMAL
INFEASIBLE = _pywrapgraph.LinearSumAssignment_INFEASIBLE
@@ -382,10 +353,10 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
def OptimalCost(self) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.LinearSumAssignment_OptimalCost(self)
def RightMate(self, left_node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def RightMate(self, left_node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_RightMate(self, left_node)
def AssignmentCost(self, left_node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
def AssignmentCost(self, left_node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.LinearSumAssignment_AssignmentCost(self, left_node)
__swig_destroy__ = _pywrapgraph.delete_LinearSumAssignment</code></pre>
</details>
@@ -411,7 +382,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"><p>The membership flag</p></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)</code></pre>
<pre><code class="python">thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)</code></pre>
</details>
</dd>
</dl>
@@ -424,7 +395,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def AddArcWithCost(self, left_node: &#39;operations_research::NodeIndex&#39;, right_node: &#39;operations_research::NodeIndex&#39;, cost: &#39;operations_research::CostValue&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
<pre><code class="python">def AddArcWithCost(self, left_node: &#34;operations_research::NodeIndex&#34;, right_node: &#34;operations_research::NodeIndex&#34;, cost: &#34;operations_research::CostValue&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.LinearSumAssignment_AddArcWithCost(self, left_node, right_node, cost)</code></pre>
</details>
</dd>
@@ -435,7 +406,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def AssignmentCost(self, left_node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
<pre><code class="python">def AssignmentCost(self, left_node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.LinearSumAssignment_AssignmentCost(self, left_node)</code></pre>
</details>
</dd>
@@ -446,7 +417,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Cost(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
<pre><code class="python">def Cost(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.LinearSumAssignment_Cost(self, arc)</code></pre>
</details>
</dd>
@@ -457,7 +428,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def LeftNode(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
<pre><code class="python">def LeftNode(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_LeftNode(self, arc)</code></pre>
</details>
</dd>
@@ -501,7 +472,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def RightMate(self, left_node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
<pre><code class="python">def RightMate(self, left_node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_RightMate(self, left_node)</code></pre>
</details>
</dd>
@@ -512,7 +483,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def RightNode(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
<pre><code class="python">def RightNode(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.LinearSumAssignment_RightNode(self, arc)</code></pre>
</details>
</dd>
@@ -537,7 +508,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<details class="source">
<summary>Source code</summary>
<pre><code class="python">class MinCostFlowBase(object):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
NOT_SOLVED = _pywrapgraph.MinCostFlowBase_NOT_SOLVED
OPTIMAL = _pywrapgraph.MinCostFlowBase_OPTIMAL
@@ -593,7 +564,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"><p>The membership flag</p></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)</code></pre>
<pre><code class="python">thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)</code></pre>
</details>
</dd>
</dl>
@@ -606,13 +577,13 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<details class="source">
<summary>Source code</summary>
<pre><code class="python">class SimpleMaxFlow(object):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
def __init__(self):
_pywrapgraph.SimpleMaxFlow_swiginit(self, _pywrapgraph.new_SimpleMaxFlow())
def AddArcWithCapacity(self, tail: &#39;operations_research::NodeIndex&#39;, head: &#39;operations_research::NodeIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
def AddArcWithCapacity(self, tail: &#34;operations_research::NodeIndex&#34;, head: &#34;operations_research::NodeIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_AddArcWithCapacity(self, tail, head, capacity)
def NumNodes(self) -&gt; &#34;operations_research::NodeIndex&#34;:
@@ -621,26 +592,26 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
def NumArcs(self) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_NumArcs(self)
def Tail(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def Tail(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_Tail(self, arc)
def Head(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def Head(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_Head(self, arc)
def Capacity(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Capacity(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMaxFlow_Capacity(self, arc)
OPTIMAL = _pywrapgraph.SimpleMaxFlow_OPTIMAL
POSSIBLE_OVERFLOW = _pywrapgraph.SimpleMaxFlow_POSSIBLE_OVERFLOW
BAD_INPUT = _pywrapgraph.SimpleMaxFlow_BAD_INPUT
BAD_RESULT = _pywrapgraph.SimpleMaxFlow_BAD_RESULT
def Solve(self, source: &#39;operations_research::NodeIndex&#39;, sink: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::SimpleMaxFlow::Status&#34;:
def Solve(self, source: &#34;operations_research::NodeIndex&#34;, sink: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::SimpleMaxFlow::Status&#34;:
return _pywrapgraph.SimpleMaxFlow_Solve(self, source, sink)
def OptimalFlow(self) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMaxFlow_OptimalFlow(self)
def Flow(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Flow(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMaxFlow_Flow(self, arc)
def GetSourceSideMinCut(self) -&gt; &#34;void&#34;:
@@ -649,7 +620,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
def GetSinkSideMinCut(self) -&gt; &#34;void&#34;:
return _pywrapgraph.SimpleMaxFlow_GetSinkSideMinCut(self)
def SetArcCapacity(self, arc: &#39;operations_research::ArcIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;void&#34;:
def SetArcCapacity(self, arc: &#34;operations_research::ArcIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;void&#34;:
return _pywrapgraph.SimpleMaxFlow_SetArcCapacity(self, arc, capacity)
__swig_destroy__ = _pywrapgraph.delete_SimpleMaxFlow</code></pre>
</details>
@@ -679,7 +650,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"><p>The membership flag</p></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)</code></pre>
<pre><code class="python">thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)</code></pre>
</details>
</dd>
</dl>
@@ -692,7 +663,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def AddArcWithCapacity(self, tail: &#39;operations_research::NodeIndex&#39;, head: &#39;operations_research::NodeIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
<pre><code class="python">def AddArcWithCapacity(self, tail: &#34;operations_research::NodeIndex&#34;, head: &#34;operations_research::NodeIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_AddArcWithCapacity(self, tail, head, capacity)</code></pre>
</details>
</dd>
@@ -703,7 +674,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Capacity(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
<pre><code class="python">def Capacity(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMaxFlow_Capacity(self, arc)</code></pre>
</details>
</dd>
@@ -714,7 +685,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Flow(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
<pre><code class="python">def Flow(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMaxFlow_Flow(self, arc)</code></pre>
</details>
</dd>
@@ -747,7 +718,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Head(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
<pre><code class="python">def Head(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_Head(self, arc)</code></pre>
</details>
</dd>
@@ -791,7 +762,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def SetArcCapacity(self, arc: &#39;operations_research::ArcIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;void&#34;:
<pre><code class="python">def SetArcCapacity(self, arc: &#34;operations_research::ArcIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;void&#34;:
return _pywrapgraph.SimpleMaxFlow_SetArcCapacity(self, arc, capacity)</code></pre>
</details>
</dd>
@@ -802,7 +773,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Solve(self, source: &#39;operations_research::NodeIndex&#39;, sink: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::SimpleMaxFlow::Status&#34;:
<pre><code class="python">def Solve(self, source: &#34;operations_research::NodeIndex&#34;, sink: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::SimpleMaxFlow::Status&#34;:
return _pywrapgraph.SimpleMaxFlow_Solve(self, source, sink)</code></pre>
</details>
</dd>
@@ -813,7 +784,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Tail(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
<pre><code class="python">def Tail(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMaxFlow_Tail(self, arc)</code></pre>
</details>
</dd>
@@ -827,16 +798,16 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<details class="source">
<summary>Source code</summary>
<pre><code class="python">class SimpleMinCostFlow(MinCostFlowBase):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
def __init__(self):
_pywrapgraph.SimpleMinCostFlow_swiginit(self, _pywrapgraph.new_SimpleMinCostFlow())
def AddArcWithCapacityAndUnitCost(self, tail: &#39;operations_research::NodeIndex&#39;, head: &#39;operations_research::NodeIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;, unit_cost: &#39;operations_research::CostValue&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
def AddArcWithCapacityAndUnitCost(self, tail: &#34;operations_research::NodeIndex&#34;, head: &#34;operations_research::NodeIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;, unit_cost: &#34;operations_research::CostValue&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_AddArcWithCapacityAndUnitCost(self, tail, head, capacity, unit_cost)
def SetNodeSupply(self, node: &#39;operations_research::NodeIndex&#39;, supply: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;void&#34;:
def SetNodeSupply(self, node: &#34;operations_research::NodeIndex&#34;, supply: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;void&#34;:
return _pywrapgraph.SimpleMinCostFlow_SetNodeSupply(self, node, supply)
def Solve(self) -&gt; &#34;operations_research::MinCostFlowBase::Status&#34;:
@@ -851,7 +822,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
def MaximumFlow(self) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_MaximumFlow(self)
def Flow(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Flow(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Flow(self, arc)
def NumNodes(self) -&gt; &#34;operations_research::NodeIndex&#34;:
@@ -860,19 +831,19 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
def NumArcs(self) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_NumArcs(self)
def Tail(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def Tail(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_Tail(self, arc)
def Head(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
def Head(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_Head(self, arc)
def Capacity(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Capacity(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Capacity(self, arc)
def Supply(self, node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
def Supply(self, node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Supply(self, node)
def UnitCost(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
def UnitCost(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.SimpleMinCostFlow_UnitCost(self, arc)
__swig_destroy__ = _pywrapgraph.delete_SimpleMinCostFlow</code></pre>
</details>
@@ -889,7 +860,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def AddArcWithCapacityAndUnitCost(self, tail: &#39;operations_research::NodeIndex&#39;, head: &#39;operations_research::NodeIndex&#39;, capacity: &#39;operations_research::FlowQuantity&#39;, unit_cost: &#39;operations_research::CostValue&#39;) -&gt; &#34;operations_research::ArcIndex&#34;:
<pre><code class="python">def AddArcWithCapacityAndUnitCost(self, tail: &#34;operations_research::NodeIndex&#34;, head: &#34;operations_research::NodeIndex&#34;, capacity: &#34;operations_research::FlowQuantity&#34;, unit_cost: &#34;operations_research::CostValue&#34;) -&gt; &#34;operations_research::ArcIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_AddArcWithCapacityAndUnitCost(self, tail, head, capacity, unit_cost)</code></pre>
</details>
</dd>
@@ -900,7 +871,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Capacity(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
<pre><code class="python">def Capacity(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Capacity(self, arc)</code></pre>
</details>
</dd>
@@ -911,7 +882,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Flow(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
<pre><code class="python">def Flow(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Flow(self, arc)</code></pre>
</details>
</dd>
@@ -922,7 +893,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Head(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
<pre><code class="python">def Head(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_Head(self, arc)</code></pre>
</details>
</dd>
@@ -977,7 +948,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def SetNodeSupply(self, node: &#39;operations_research::NodeIndex&#39;, supply: &#39;operations_research::FlowQuantity&#39;) -&gt; &#34;void&#34;:
<pre><code class="python">def SetNodeSupply(self, node: &#34;operations_research::NodeIndex&#34;, supply: &#34;operations_research::FlowQuantity&#34;) -&gt; &#34;void&#34;:
return _pywrapgraph.SimpleMinCostFlow_SetNodeSupply(self, node, supply)</code></pre>
</details>
</dd>
@@ -1010,7 +981,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Supply(self, node: &#39;operations_research::NodeIndex&#39;) -&gt; &#34;operations_research::FlowQuantity&#34;:
<pre><code class="python">def Supply(self, node: &#34;operations_research::NodeIndex&#34;) -&gt; &#34;operations_research::FlowQuantity&#34;:
return _pywrapgraph.SimpleMinCostFlow_Supply(self, node)</code></pre>
</details>
</dd>
@@ -1021,7 +992,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Tail(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::NodeIndex&#34;:
<pre><code class="python">def Tail(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::NodeIndex&#34;:
return _pywrapgraph.SimpleMinCostFlow_Tail(self, arc)</code></pre>
</details>
</dd>
@@ -1032,7 +1003,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def UnitCost(self, arc: &#39;operations_research::ArcIndex&#39;) -&gt; &#34;operations_research::CostValue&#34;:
<pre><code class="python">def UnitCost(self, arc: &#34;operations_research::ArcIndex&#34;) -&gt; &#34;operations_research::CostValue&#34;:
return _pywrapgraph.SimpleMinCostFlow_UnitCost(self, arc)</code></pre>
</details>
</dd>
@@ -1149,7 +1120,7 @@ def AStarShortestPath(node_count: &#39;int&#39;, start_node: &#39;int&#39;, end_
</main>
<footer id="footer">
<p><span style="color:#ddd">&#21328;</span></p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.6.2</a>.</p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.6.3</a>.</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad()</script>

File diff suppressed because it is too large Load Diff

View File

@@ -3,13 +3,13 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.6.2" />
<meta name="generator" content="pdoc 0.6.3" />
<title>cp_model API documentation</title>
<meta name="description" content="Methods for building and solving CP-SAT models …" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel="stylesheet">
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase;cursor:pointer}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase;cursor:pointer}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<style type="text/css">
@@ -6077,7 +6077,7 @@ def Term(cls, expression, coefficient):
</main>
<footer id="footer">
<p><span style="color:#ddd">&#21328;</span></p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.6.2</a>.</p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.6.3</a>.</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad()</script>

View File

@@ -3,13 +3,13 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.6.2" />
<meta name="generator" content="pdoc 0.6.3" />
<title>sorted_interval_list API documentation</title>
<meta name="description" content="" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel="stylesheet">
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase;cursor:pointer}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase;cursor:pointer}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<style type="text/css">
@@ -28,7 +28,7 @@ a:link { color: #46641e; text-decoration: none}
<details class="source">
<summary>Source code</summary>
<pre><code class="python"># This file was automatically generated by SWIG (http://www.swig.org).
# Version 4.0.0
# Version 4.0.1
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -47,10 +47,10 @@ __pdoc__[&#39;Domain.thisown&#39;] = False
from sys import version_info as _swig_python_version_info
if _swig_python_version_info &lt; (2, 7, 0):
raise RuntimeError(&#39;Python 2.7 or later required&#39;)
raise RuntimeError(&#34;Python 2.7 or later required&#34;)
# Import the low-level C/C++ module
if __package__ or &#39;.&#39; in __name__:
if __package__ or &#34;.&#34; in __name__:
from . import _sorted_interval_list
else:
import _sorted_interval_list
@@ -60,35 +60,6 @@ try:
except ImportError:
import __builtin__
def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
if name == &#34;thisown&#34;:
return self.this.own(value)
if name == &#34;this&#34;:
if type(value).__name__ == &#39;SwigPyObject&#39;:
self.__dict__[name] = value
return
method = class_type.__swig_setmethods__.get(name, None)
if method:
return method(self, value)
if not static:
object.__setattr__(self, name, value)
else:
raise AttributeError(&#34;You cannot add attributes to %s&#34; % self)
def _swig_setattr(self, class_type, name, value):
return _swig_setattr_nondynamic(self, class_type, name, value, 0)
def _swig_getattr(self, class_type, name):
if name == &#34;thisown&#34;:
return self.this.own()
method = class_type.__swig_getmethods__.get(name, None)
if method:
return method(self)
raise AttributeError(&#34;&#39;%s&#39; object has no attribute &#39;%s&#39;&#34; % (class_type.__name__, name))
def _swig_repr(self):
try:
strthis = &#34;proxy of &#34; + self.this.__repr__()
@@ -132,153 +103,71 @@ class _SwigNonDynamicMeta(type):
class Domain(object):
r&#34;&#34;&#34;
We call &#34;domain&#34; any subset of Int64 = [kint64min, kint64max].
This class can be used to represent such set efficiently as a sorted and
non-adjacent list of intervals. This is efficient as long as the size of such
list stays reasonable.
In the comments below, the domain of *this will always be written &#39;D&#39;.
Note that all the functions are safe with respect to integer overflow.
&#34;&#34;&#34;
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
def __init__(self, *args):
r&#34;&#34;&#34;
*Overload 1:*
By default, Domain will be empty.
|
*Overload 2:*
Constructor for the common case of a singleton domain.
|
*Overload 3:*
Constructor for the common case of a single interval [left, right].
If left &gt; right, this will result in the empty domain.
&#34;&#34;&#34;
_sorted_interval_list.Domain_swiginit(self, _sorted_interval_list.new_Domain(*args))
@staticmethod
def AllValues() -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the full domain Int64.&#34;&#34;&#34;
return _sorted_interval_list.Domain_AllValues()
@staticmethod
def FromValues(values: &#39;std::vector&lt; int64 &gt;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
Creates a domain from the union of an unsorted list of integer values.
Input values may be repeated, with no consequence on the output
&#34;&#34;&#34;
def FromValues(values: &#34;std::vector&lt; int64 &gt;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromValues(values)
@staticmethod
def FromIntervals(intervals: &#39;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
This method is available in Python, Java and .NET. It allows
building a Domain object from a list of intervals (long[][] in Java and
.NET, [[0, 2], [5, 5], [8, 10]] in python).
&#34;&#34;&#34;
def FromIntervals(intervals: &#34;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromIntervals(intervals)
@staticmethod
def FromFlatIntervals(flat_intervals: &#39;std::vector&lt; int64 &gt; const &amp;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
This method is available in Python, Java and .NET. It allows
building a Domain object from a flattened list of intervals
(long[] in Java and .NET, [0, 2, 5, 5, 8, 10] in python).
&#34;&#34;&#34;
def FromFlatIntervals(flat_intervals: &#34;std::vector&lt; int64 &gt; const &amp;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromFlatIntervals(flat_intervals)
def FlattenedIntervals(self) -&gt; &#34;std::vector&lt; int64 &gt;&#34;:
r&#34;&#34;&#34;
This method returns the flattened list of interval bounds of the domain.
Thus the domain {0, 1, 2, 5, 8, 9, 10} will return [0, 2, 5, 5,
8, 10] (as a C++ std::vector&lt;int64&gt;, as a java or C# long[], as
a python list of integers).
&#34;&#34;&#34;
return _sorted_interval_list.Domain_FlattenedIntervals(self)
def IsEmpty(self) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34; Returns true if this is the empty set.&#34;&#34;&#34;
return _sorted_interval_list.Domain_IsEmpty(self)
def Size(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34; Returns the number of elements in the domain. It is capped at kint64max.&#34;&#34;&#34;
return _sorted_interval_list.Domain_Size(self)
def Min(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Returns the min value of the domain.
This Checks that the domain is not empty.
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Min(self)
def Max(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Returns the max value of the domain.
This Checks that the domain is not empty.
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Max(self)
def Contains(self, value: &#39;int64&#39;) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34; Returns true iff value is in Domain.&#34;&#34;&#34;
def Contains(self, value: &#34;int64&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain_Contains(self, value)
def Complement(self) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set Int64 D.&#34;&#34;&#34;
return _sorted_interval_list.Domain_Complement(self)
def Negation(self) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
Returns {x ∈ Int64, ∃ e ∈ D, x = -e}.
Note in particular that if the negation of Int64 is not Int64 but
Int64 \ {kint64min} !!
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Negation(self)
def IntersectionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set D ∩ domain.&#34;&#34;&#34;
def IntersectionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_IntersectionWith(self, domain)
def UnionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set D domain.&#34;&#34;&#34;
def UnionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_UnionWith(self, domain)
def AdditionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns {x ∈ Int64, ∃ a ∈ D, ∃ b ∈ domain, x = a + b}.&#34;&#34;&#34;
def AdditionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_AdditionWith(self, domain)
def __str__(self) -&gt; &#34;std::string&#34;:
r&#34;&#34;&#34; Returns a compact std::string of a vector of intervals like &#34;[1,4][6][10,20]&#34;.&#34;&#34;&#34;
return _sorted_interval_list.Domain___str__(self)
def __lt__(self, other: &#39;Domain&#39;) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34; Lexicographic order on the intervals() representation.&#34;&#34;&#34;
def __lt__(self, other: &#34;Domain&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain___lt__(self, other)
def __eq__(self, other: &#39;Domain&#39;) -&gt; &#34;bool&#34;:
def __eq__(self, other: &#34;Domain&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain___eq__(self, other)
def __ne__(self, other: &#39;Domain&#39;) -&gt; &#34;bool&#34;:
def __ne__(self, other: &#34;Domain&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain___ne__(self, other)
__swig_destroy__ = _sorted_interval_list.delete_Domain
@@ -286,33 +175,15 @@ class Domain(object):
_sorted_interval_list.Domain_swigregister(Domain)
def Domain_AllValues() -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the full domain Int64.&#34;&#34;&#34;
return _sorted_interval_list.Domain_AllValues()
def Domain_FromValues(values: &#39;std::vector&lt; int64 &gt;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
Creates a domain from the union of an unsorted list of integer values.
Input values may be repeated, with no consequence on the output
&#34;&#34;&#34;
def Domain_FromValues(values: &#34;std::vector&lt; int64 &gt;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromValues(values)
def Domain_FromIntervals(intervals: &#39;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
This method is available in Python, Java and .NET. It allows
building a Domain object from a list of intervals (long[][] in Java and
.NET, [[0, 2], [5, 5], [8, 10]] in python).
&#34;&#34;&#34;
def Domain_FromIntervals(intervals: &#34;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromIntervals(intervals)
def Domain_FromFlatIntervals(flat_intervals: &#39;std::vector&lt; int64 &gt; const &amp;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
This method is available in Python, Java and .NET. It allows
building a Domain object from a flattened list of intervals
(long[] in Java and .NET, [0, 2, 5, 5, 8, 10] in python).
&#34;&#34;&#34;
def Domain_FromFlatIntervals(flat_intervals: &#34;std::vector&lt; int64 &gt; const &amp;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromFlatIntervals(flat_intervals)
@@ -334,171 +205,75 @@ def __lshift__(*args) -&gt; &#34;std::ostream &amp;&#34;:
<span>(</span><span>*args)</span>
</code></dt>
<dd>
<section class="desc"><p>We call "domain" any subset of Int64 = [kint64min, kint64max].</p>
<p>This class can be used to represent such set efficiently as a sorted and
non-adjacent list of intervals. This is efficient as long as the size of such
list stays reasonable.</p>
<p>In the comments below, the domain of *this will always be written 'D'.
Note that all the functions are safe with respect to integer overflow.</p>
<p><em>Overload 1:</em>
By default, Domain will be empty.</p>
<p>|</p>
<p><em>Overload 2:</em>
Constructor for the common case of a singleton domain.</p>
<p>|</p>
<p><em>Overload 3:</em></p>
<p>Constructor for the common case of a single interval [left, right].
If left &gt; right, this will result in the empty domain.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">class Domain(object):
r&#34;&#34;&#34;
We call &#34;domain&#34; any subset of Int64 = [kint64min, kint64max].
This class can be used to represent such set efficiently as a sorted and
non-adjacent list of intervals. This is efficient as long as the size of such
list stays reasonable.
In the comments below, the domain of *this will always be written &#39;D&#39;.
Note that all the functions are safe with respect to integer overflow.
&#34;&#34;&#34;
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#39;The membership flag&#39;)
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc=&#34;The membership flag&#34;)
__repr__ = _swig_repr
def __init__(self, *args):
r&#34;&#34;&#34;
*Overload 1:*
By default, Domain will be empty.
|
*Overload 2:*
Constructor for the common case of a singleton domain.
|
*Overload 3:*
Constructor for the common case of a single interval [left, right].
If left &gt; right, this will result in the empty domain.
&#34;&#34;&#34;
_sorted_interval_list.Domain_swiginit(self, _sorted_interval_list.new_Domain(*args))
@staticmethod
def AllValues() -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the full domain Int64.&#34;&#34;&#34;
return _sorted_interval_list.Domain_AllValues()
@staticmethod
def FromValues(values: &#39;std::vector&lt; int64 &gt;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
Creates a domain from the union of an unsorted list of integer values.
Input values may be repeated, with no consequence on the output
&#34;&#34;&#34;
def FromValues(values: &#34;std::vector&lt; int64 &gt;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromValues(values)
@staticmethod
def FromIntervals(intervals: &#39;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
This method is available in Python, Java and .NET. It allows
building a Domain object from a list of intervals (long[][] in Java and
.NET, [[0, 2], [5, 5], [8, 10]] in python).
&#34;&#34;&#34;
def FromIntervals(intervals: &#34;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromIntervals(intervals)
@staticmethod
def FromFlatIntervals(flat_intervals: &#39;std::vector&lt; int64 &gt; const &amp;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
This method is available in Python, Java and .NET. It allows
building a Domain object from a flattened list of intervals
(long[] in Java and .NET, [0, 2, 5, 5, 8, 10] in python).
&#34;&#34;&#34;
def FromFlatIntervals(flat_intervals: &#34;std::vector&lt; int64 &gt; const &amp;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromFlatIntervals(flat_intervals)
def FlattenedIntervals(self) -&gt; &#34;std::vector&lt; int64 &gt;&#34;:
r&#34;&#34;&#34;
This method returns the flattened list of interval bounds of the domain.
Thus the domain {0, 1, 2, 5, 8, 9, 10} will return [0, 2, 5, 5,
8, 10] (as a C++ std::vector&lt;int64&gt;, as a java or C# long[], as
a python list of integers).
&#34;&#34;&#34;
return _sorted_interval_list.Domain_FlattenedIntervals(self)
def IsEmpty(self) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34; Returns true if this is the empty set.&#34;&#34;&#34;
return _sorted_interval_list.Domain_IsEmpty(self)
def Size(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34; Returns the number of elements in the domain. It is capped at kint64max.&#34;&#34;&#34;
return _sorted_interval_list.Domain_Size(self)
def Min(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Returns the min value of the domain.
This Checks that the domain is not empty.
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Min(self)
def Max(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Returns the max value of the domain.
This Checks that the domain is not empty.
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Max(self)
def Contains(self, value: &#39;int64&#39;) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34; Returns true iff value is in Domain.&#34;&#34;&#34;
def Contains(self, value: &#34;int64&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain_Contains(self, value)
def Complement(self) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set Int64 D.&#34;&#34;&#34;
return _sorted_interval_list.Domain_Complement(self)
def Negation(self) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
Returns {x ∈ Int64, ∃ e ∈ D, x = -e}.
Note in particular that if the negation of Int64 is not Int64 but
Int64 \ {kint64min} !!
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Negation(self)
def IntersectionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set D ∩ domain.&#34;&#34;&#34;
def IntersectionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_IntersectionWith(self, domain)
def UnionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set D domain.&#34;&#34;&#34;
def UnionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_UnionWith(self, domain)
def AdditionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns {x ∈ Int64, ∃ a ∈ D, ∃ b ∈ domain, x = a + b}.&#34;&#34;&#34;
def AdditionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_AdditionWith(self, domain)
def __str__(self) -&gt; &#34;std::string&#34;:
r&#34;&#34;&#34; Returns a compact std::string of a vector of intervals like &#34;[1,4][6][10,20]&#34;.&#34;&#34;&#34;
return _sorted_interval_list.Domain___str__(self)
def __lt__(self, other: &#39;Domain&#39;) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34; Lexicographic order on the intervals() representation.&#34;&#34;&#34;
def __lt__(self, other: &#34;Domain&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain___lt__(self, other)
def __eq__(self, other: &#39;Domain&#39;) -&gt; &#34;bool&#34;:
def __eq__(self, other: &#34;Domain&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain___eq__(self, other)
def __ne__(self, other: &#39;Domain&#39;) -&gt; &#34;bool&#34;:
def __ne__(self, other: &#34;Domain&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain___ne__(self, other)
__swig_destroy__ = _sorted_interval_list.delete_Domain</code></pre>
</details>
@@ -508,12 +283,11 @@ If left &gt; right, this will result in the empty domain.</p></section>
<span>def <span class="ident">AllValues</span></span>(<span>)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns the full domain Int64.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">@staticmethod
def AllValues() -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the full domain Int64.&#34;&#34;&#34;
return _sorted_interval_list.Domain_AllValues()</code></pre>
</details>
</dd>
@@ -521,19 +295,11 @@ def AllValues() -&gt; &#34;operations_research::Domain&#34;:
<span>def <span class="ident">FromFlatIntervals</span></span>(<span>flat_intervals)</span>
</code></dt>
<dd>
<section class="desc"><p>This method is available in Python, Java and .NET. It allows
building a Domain object from a flattened list of intervals
(long[] in Java and .NET, [0, 2, 5, 5, 8, 10] in python).</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">@staticmethod
def FromFlatIntervals(flat_intervals: &#39;std::vector&lt; int64 &gt; const &amp;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
This method is available in Python, Java and .NET. It allows
building a Domain object from a flattened list of intervals
(long[] in Java and .NET, [0, 2, 5, 5, 8, 10] in python).
&#34;&#34;&#34;
def FromFlatIntervals(flat_intervals: &#34;std::vector&lt; int64 &gt; const &amp;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromFlatIntervals(flat_intervals)</code></pre>
</details>
</dd>
@@ -541,19 +307,11 @@ def FromFlatIntervals(flat_intervals: &#39;std::vector&lt; int64 &gt; const &amp
<span>def <span class="ident">FromIntervals</span></span>(<span>intervals)</span>
</code></dt>
<dd>
<section class="desc"><p>This method is available in Python, Java and .NET. It allows
building a Domain object from a list of intervals (long[][] in Java and
.NET, [[0, 2], [5, 5], [8, 10]] in python).</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">@staticmethod
def FromIntervals(intervals: &#39;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
This method is available in Python, Java and .NET. It allows
building a Domain object from a list of intervals (long[][] in Java and
.NET, [[0, 2], [5, 5], [8, 10]] in python).
&#34;&#34;&#34;
def FromIntervals(intervals: &#34;std::vector&lt; std::vector&lt; int64 &gt; &gt; const &amp;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromIntervals(intervals)</code></pre>
</details>
</dd>
@@ -561,17 +319,11 @@ def FromIntervals(intervals: &#39;std::vector&lt; std::vector&lt; int64 &gt; &gt
<span>def <span class="ident">FromValues</span></span>(<span>values)</span>
</code></dt>
<dd>
<section class="desc"><p>Creates a domain from the union of an unsorted list of integer values.
Input values may be repeated, with no consequence on the output</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">@staticmethod
def FromValues(values: &#39;std::vector&lt; int64 &gt;&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
Creates a domain from the union of an unsorted list of integer values.
Input values may be repeated, with no consequence on the output
&#34;&#34;&#34;
def FromValues(values: &#34;std::vector&lt; int64 &gt;&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_FromValues(values)</code></pre>
</details>
</dd>
@@ -582,11 +334,10 @@ def FromValues(values: &#39;std::vector&lt; int64 &gt;&#39;) -&gt; &#34;operatio
<span>def <span class="ident">AdditionWith</span></span>(<span>self, domain)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns {x ∈ Int64, ∃ a ∈ D, ∃ b ∈ domain, x = a + b}.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def AdditionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns {x ∈ Int64, ∃ a ∈ D, ∃ b ∈ domain, x = a + b}.&#34;&#34;&#34;
<pre><code class="python">def AdditionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_AdditionWith(self, domain)</code></pre>
</details>
</dd>
@@ -594,11 +345,10 @@ def FromValues(values: &#39;std::vector&lt; int64 &gt;&#39;) -&gt; &#34;operatio
<span>def <span class="ident">Complement</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns the set Int64 D.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Complement(self) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set Int64 D.&#34;&#34;&#34;
return _sorted_interval_list.Domain_Complement(self)</code></pre>
</details>
</dd>
@@ -606,11 +356,10 @@ def FromValues(values: &#39;std::vector&lt; int64 &gt;&#39;) -&gt; &#34;operatio
<span>def <span class="ident">Contains</span></span>(<span>self, value)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns true iff value is in Domain.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Contains(self, value: &#39;int64&#39;) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34; Returns true iff value is in Domain.&#34;&#34;&#34;
<pre><code class="python">def Contains(self, value: &#34;int64&#34;) -&gt; &#34;bool&#34;:
return _sorted_interval_list.Domain_Contains(self, value)</code></pre>
</details>
</dd>
@@ -618,21 +367,10 @@ def FromValues(values: &#39;std::vector&lt; int64 &gt;&#39;) -&gt; &#34;operatio
<span>def <span class="ident">FlattenedIntervals</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>This method returns the flattened list of interval bounds of the domain.</p>
<p>Thus the domain {0, 1, 2, 5, 8, 9, 10} will return [0, 2, 5, 5,
8, 10] (as a C++ std::vector<int64>, as a java or C# long[], as
a python list of integers).</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def FlattenedIntervals(self) -&gt; &#34;std::vector&lt; int64 &gt;&#34;:
r&#34;&#34;&#34;
This method returns the flattened list of interval bounds of the domain.
Thus the domain {0, 1, 2, 5, 8, 9, 10} will return [0, 2, 5, 5,
8, 10] (as a C++ std::vector&lt;int64&gt;, as a java or C# long[], as
a python list of integers).
&#34;&#34;&#34;
return _sorted_interval_list.Domain_FlattenedIntervals(self)</code></pre>
</details>
</dd>
@@ -640,11 +378,10 @@ a python list of integers).</p></section>
<span>def <span class="ident">IntersectionWith</span></span>(<span>self, domain)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns the set D ∩ domain.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def IntersectionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set D ∩ domain.&#34;&#34;&#34;
<pre><code class="python">def IntersectionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_IntersectionWith(self, domain)</code></pre>
</details>
</dd>
@@ -652,11 +389,10 @@ a python list of integers).</p></section>
<span>def <span class="ident">IsEmpty</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns true if this is the empty set.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def IsEmpty(self) -&gt; &#34;bool&#34;:
r&#34;&#34;&#34; Returns true if this is the empty set.&#34;&#34;&#34;
return _sorted_interval_list.Domain_IsEmpty(self)</code></pre>
</details>
</dd>
@@ -664,17 +400,10 @@ a python list of integers).</p></section>
<span>def <span class="ident">Max</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns the max value of the domain.</p>
<p>This Checks that the domain is not empty.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Max(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Returns the max value of the domain.
This Checks that the domain is not empty.
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Max(self)</code></pre>
</details>
</dd>
@@ -682,17 +411,10 @@ a python list of integers).</p></section>
<span>def <span class="ident">Min</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns the min value of the domain.</p>
<p>This Checks that the domain is not empty.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Min(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34;
Returns the min value of the domain.
This Checks that the domain is not empty.
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Min(self)</code></pre>
</details>
</dd>
@@ -700,19 +422,10 @@ a python list of integers).</p></section>
<span>def <span class="ident">Negation</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns {x ∈ Int64, ∃ e ∈ D, x = -e}.</p>
<p>Note in particular that if the negation of Int64 is not Int64 but
Int64 \ {kint64min} !!</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Negation(self) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34;
Returns {x ∈ Int64, ∃ e ∈ D, x = -e}.
Note in particular that if the negation of Int64 is not Int64 but
Int64 \ {kint64min} !!
&#34;&#34;&#34;
return _sorted_interval_list.Domain_Negation(self)</code></pre>
</details>
</dd>
@@ -720,11 +433,10 @@ Int64 \ {kint64min} !!</p></section>
<span>def <span class="ident">Size</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns the number of elements in the domain. It is capped at kint64max.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def Size(self) -&gt; &#34;int64&#34;:
r&#34;&#34;&#34; Returns the number of elements in the domain. It is capped at kint64max.&#34;&#34;&#34;
return _sorted_interval_list.Domain_Size(self)</code></pre>
</details>
</dd>
@@ -732,11 +444,10 @@ Int64 \ {kint64min} !!</p></section>
<span>def <span class="ident">UnionWith</span></span>(<span>self, domain)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns the set D domain.</p></section>
<section class="desc"></section>
<details class="source">
<summary>Source code</summary>
<pre><code class="python">def UnionWith(self, domain: &#39;Domain&#39;) -&gt; &#34;operations_research::Domain&#34;:
r&#34;&#34;&#34; Returns the set D domain.&#34;&#34;&#34;
<pre><code class="python">def UnionWith(self, domain: &#34;Domain&#34;) -&gt; &#34;operations_research::Domain&#34;:
return _sorted_interval_list.Domain_UnionWith(self, domain)</code></pre>
</details>
</dd>
@@ -785,7 +496,7 @@ Int64 \ {kint64min} !!</p></section>
</main>
<footer id="footer">
<p><span style="color:#ddd">&#21328;</span></p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.6.2</a>.</p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.6.3</a>.</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad()</script>