diff --git a/MANIFEST.in b/MANIFEST.in index f98bf784a4bba128d5b6c649537044a5b6ddf5de..d49c21467b78d22d0c5f22da2b668c90c9c6490e 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -15,6 +15,7 @@ graft kadmos/vispack/VISTOMS_170803 graft kadmos/vispack/VISTOMS_170814 graft kadmos/vispack/VISTOMS_170817 graft kadmos/vispack/VISTOMS_dev +graft kadmos/vispack/VISTOMS_TreeViewer # Include XDSM templates include kadmos/external/XDSM_writer/*.tex diff --git a/README.md b/README.md index 8c25cc83b923f2e2d42ddd2f74680279064791ba..5def5a8db6228f2c092a2b59fc1e276920d348db 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,12 @@ Changelog - Matching KADMOS with CMDOWS 0.8 - Inclusion of distributed architectures and derivatives +## 0.7.7 (05/02/2017) + +- Additional CMDOWS functions +- Bug fixes +- Pip install for latest KE-chain 2.7 + ## 0.7.6 (21/12/2017) - Further matching of KADMOS with CMDOWS 0.7 diff --git a/dist/kadmos-0.7.7-py2-none-any.whl b/dist/kadmos-0.7.7-py2-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..55c28d03dc2aebca352bd1f4f8dde914f9deb848 Binary files /dev/null and b/dist/kadmos-0.7.7-py2-none-any.whl differ diff --git a/dist/kadmos-0.7.7.tar.gz.REMOVED.git-id b/dist/kadmos-0.7.7.tar.gz.REMOVED.git-id new file mode 100644 index 0000000000000000000000000000000000000000..6462266bfe1e58ceb59dd45a6fbe2597f4b3e0c8 --- /dev/null +++ b/dist/kadmos-0.7.7.tar.gz.REMOVED.git-id @@ -0,0 +1 @@ +edc92d3f9b41414077a33fb5f5f86f1f451e0d74 \ No newline at end of file diff --git a/doc/.doctrees/KADMOS.doctree b/doc/.doctrees/KADMOS.doctree index ef96b742418d514bed4d070d6574a7b7b6aefec5..c6478b1c63d5808ccabac55385cac8e6eaaac42b 100644 Binary files a/doc/.doctrees/KADMOS.doctree and b/doc/.doctrees/KADMOS.doctree differ diff --git a/doc/.doctrees/environment.pickle b/doc/.doctrees/environment.pickle index 2e154d294255d0f82bc1a3fd89085c761e00de69..b8ad833a40dbca73186967bd8f69d2e0c6eb0ca4 100644 Binary files a/doc/.doctrees/environment.pickle and b/doc/.doctrees/environment.pickle differ diff --git a/doc/KADMOS.html b/doc/KADMOS.html index 6b7f13d19506c0f543f8fb242537f866f9d39bd5..579daa24dc79e42e8c039800c045243c881206dd 100644 --- a/doc/KADMOS.html +++ b/doc/KADMOS.html @@ -101,47 +101,6 @@ </table> </dd></dl> -<dl class="method"> -<dt id="kadmos.graph.graph_kadmos.KadmosGraph.add_edge"> -<code class="descname">add_edge</code><span class="sig-paren">(</span><em>u</em>, <em>v</em>, <em>**attr</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.add_edge" title="Permalink to this definition">¶</a></dt> -<dd><p>Add an edge between u and v.</p> -<p>The nodes u and v will be automatically added if they are -not already in the graph.</p> -<p>Edge attributes can be specified with keywords or by directly -accessing the edge’s attribute dictionary. See examples below.</p> -<dl class="docutils"> -<dt>u, v <span class="classifier-delimiter">:</span> <span class="classifier">nodes</span></dt> -<dd>Nodes can be, for example, strings or numbers. -Nodes must be hashable (and not None) Python objects.</dd> -<dt>attr <span class="classifier-delimiter">:</span> <span class="classifier">keyword arguments, optional</span></dt> -<dd>Edge data (or labels or objects) can be assigned using -keyword arguments.</dd> -</dl> -<p>add_edges_from : add a collection of edges</p> -<p>Adding an edge that already exists updates the edge data.</p> -<p>Many NetworkX algorithms designed for weighted graphs use -an edge attribute (by default <cite>weight</cite>) to hold a numerical value.</p> -<p>The following all add the edge e=(1, 2) to graph G:</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">G</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">()</span> <span class="c1"># or DiGraph, MultiGraph, MultiDiGraph, etc</span> -<span class="gp">>>> </span><span class="n">e</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="c1"># explicit two-node form</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="o">*</span><span class="n">e</span><span class="p">)</span> <span class="c1"># single edge as tuple of two nodes</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edges_from</span><span class="p">(</span> <span class="p">[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)]</span> <span class="p">)</span> <span class="c1"># add edges from iterable container</span> -</pre></div> -</div> -<p>Associate data to edges using keywords:</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">7</span><span class="p">,</span> <span class="n">capacity</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mf">342.7</span><span class="p">)</span> -</pre></div> -</div> -<p>For non-string attribute keys, use subscript notation.</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> -<span class="gp">>>> </span><span class="n">G</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="mi">0</span><span class="p">:</span> <span class="mi">5</span><span class="p">})</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="mi">0</span><span class="p">:</span> <span class="mi">5</span><span class="p">})</span> -</pre></div> -</div> -</dd></dl> - <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.add_edges_from"> <code class="descname">add_edges_from</code><span class="sig-paren">(</span><em>ebunch</em>, <em>**attr</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.add_edges_from" title="Permalink to this definition">¶</a></dt> @@ -195,7 +154,7 @@ attributes specified via keyword arguments.</p> <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.add_equation_label"> -<code class="descname">add_equation_label</code><span class="sig-paren">(</span><em>edge</em>, <em>label=None</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.add_equation_label" title="Permalink to this definition">¶</a></dt> +<code class="descname">add_equation_label</code><span class="sig-paren">(</span><em>edge</em>, <em>labeling_method='node_label'</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.add_equation_label" title="Permalink to this definition">¶</a></dt> <dd><p>Method to add an equation label to a edge that can (safely) be used as reference in an equation.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -203,7 +162,7 @@ attributes specified via keyword arguments.</p> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> <li><strong>edge</strong> (<em>str</em>) – graph edge under consideration</li> -<li><strong>label</strong> (<em>str</em>) – label to be added (if not given it will be determined based on the node label or key)</li> +<li><strong>labeling_method</strong> (<em>str</em>) – select method for automatic label string determination (node_id or node_label)</li> <li><strong>language</strong> (<em>str</em>) – equation language used for the equation label</li> </ul> </td> @@ -220,7 +179,7 @@ attributes specified via keyword arguments.</p> <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.add_equation_labels"> -<code class="descname">add_equation_labels</code><span class="sig-paren">(</span><em>nodes</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.add_equation_labels" title="Permalink to this definition">¶</a></dt> +<code class="descname">add_equation_labels</code><span class="sig-paren">(</span><em>nodes</em>, <em>language='Python'</em>, <em>labeling_method='node_id'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.add_equation_labels" title="Permalink to this definition">¶</a></dt> <dd><p>Method to add equation labels automatically to all input edges connected to the specified list of nodes</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -229,6 +188,7 @@ attributes specified via keyword arguments.</p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>nodes</strong> (<em>list</em>) – list of nodes</li> <li><strong>language</strong> (<em>str</em>) – equation language used for the equation label</li> +<li><strong>labeling_method</strong> (<em>str</em>) – select method for automatic label string determination (node_id or node_label)</li> </ul> </td> </tr> @@ -381,6 +341,12 @@ the graph.</dd> <dd><p>alias of <code class="xref py py-class docutils literal"><span class="pre">dict</span></code></p> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_kadmos.KadmosGraph.change_graph_class"> +<code class="descname">change_graph_class</code><span class="sig-paren">(</span><em>graph_class</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.change_graph_class" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to adjust the class of a graph.</p> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.check"> <code class="descname">check</code><span class="sig-paren">(</span><em>raise_error=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.check" title="Permalink to this definition">¶</a></dt> @@ -456,24 +422,6 @@ performed automatically when using the save method.</p> </table> </dd></dl> -<dl class="method"> -<dt id="kadmos.graph.graph_kadmos.KadmosGraph.cleancopy"> -<code class="descname">cleancopy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.cleancopy" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to make a clean copy of a graph.</p> -<p>This method can be used to avoid deep-copy problems in graph manipulation algorithms. -The graph class is kept.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">clean-copy of the graph</td> -</tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></td> -</tr> -</tbody> -</table> -</dd></dl> - <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.clear"> <code class="descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.clear" title="Permalink to this definition">¶</a></dt> @@ -554,6 +502,22 @@ of the original graph without actually copying any data.</dd> </div> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_kadmos.KadmosGraph.copy_as"> +<code class="descname">copy_as</code><span class="sig-paren">(</span><em>graph_class</em>, <em>as_view=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.copy_as" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to make a copy of a graph and make it into another KADMOS graph class.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">copy of the graph</td> +</tr> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.copy_node_with_suffix"> <code class="descname">copy_node_with_suffix</code><span class="sig-paren">(</span><em>node</em>, <em>suffix</em>, <em>label_extension</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.copy_node_with_suffix" title="Permalink to this definition">¶</a></dt> @@ -598,7 +562,7 @@ of the original graph without actually copying any data.</dd> <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.create_dsm"> -<code class="descname">create_dsm</code><span class="sig-paren">(</span><em>file_name</em>, <em>destination_folder=None</em>, <em>open_pdf=False</em>, <em>mpg=None</em>, <em>include_system_vars=True</em>, <em>summarize_vars=False</em>, <em>function_order=None</em>, <em>keep_tex_file=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.create_dsm" title="Permalink to this definition">¶</a></dt> +<code class="descname">create_dsm</code><span class="sig-paren">(</span><em>file_name</em>, <em>destination_folder=None</em>, <em>open_pdf=False</em>, <em>mpg=None</em>, <em>include_system_vars=True</em>, <em>summarize_vars=False</em>, <em>function_order=None</em>, <em>keep_tex_file=False</em>, <em>abbreviate_keywords=False</em>, <em>compile_pdf=True</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.create_dsm" title="Permalink to this definition">¶</a></dt> <dd><p>Method to create a (X)DSM PDF file</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -606,13 +570,14 @@ of the original graph without actually copying any data.</dd> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>file_name</strong> (<em>str</em>) – name of the file to be saved</li> -<li><strong>open_pdf</strong> (<em>bool</em>) – option for opening the created file directly</li> <li><strong>destination_folder</strong> (<em>str</em>) – destination folder for the file to be saved</li> +<li><strong>open_pdf</strong> (<em>bool</em>) – option for opening the created file directly</li> <li><strong>mpg</strong> (<a class="reference internal" href="#kadmos.graph.graph_process.MdaoProcessGraph" title="kadmos.graph.graph_process.MdaoProcessGraph"><em>MdaoProcessGraph</em></a>) – optional MPG graph to be saved with MDG as XDSM (if None a DSM is created)</li> <li><strong>include_system_vars</strong> (<em>bool</em>) – option for including system variables (only applicable for DSMs)</li> <li><strong>summarize_vars</strong> (<em>bool</em>) – option for summarizing label</li> <li><strong>function_order</strong> (<em>list</em>) – optional function order for the diagonal of the graph (only applicable for DSMs)</li> <li><strong>keep_tex_file</strong> (<em>bool</em>) – optional argument to keep the tex file of the PDF</li> +<li><strong>abbreviate_keywords</strong> (<em>bool</em>) – optional argument to keep make keywords shorter (input -> inp., output -> outp.)</li> </ul> </td> </tr> @@ -620,6 +585,38 @@ of the original graph without actually copying any data.</dd> </table> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_kadmos.KadmosGraph.deepcopy"> +<code class="descname">deepcopy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.deepcopy" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to make a deep copy of a graph.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">deepcopy of the graph</td> +</tr> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_kadmos.KadmosGraph.deepcopy_as"> +<code class="descname">deepcopy_as</code><span class="sig-paren">(</span><em>graph_class</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.deepcopy_as" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to make a deep copy of a graph and make it into another KADMOS graph class.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">deepcopy of the graph</td> +</tr> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="attribute"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.degree"> <code class="descname">degree</code><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.degree" title="Permalink to this definition">¶</a></dt> @@ -658,7 +655,7 @@ nd_iter : iterator</p> <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.disconnect_problematic_variables_from"> -<code class="descname">disconnect_problematic_variables_from</code><span class="sig-paren">(</span><em>function</em>, <em>disconnect_collided_targets=True</em>, <em>disconnect_shared_sources=True</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.disconnect_problematic_variables_from" title="Permalink to this definition">¶</a></dt> +<code class="descname">disconnect_problematic_variables_from</code><span class="sig-paren">(</span><em>function</em>, <em>disconnect_collided_targets=True</em>, <em>disconnect_shared_sources=True</em>, <em>ignore_list=[]</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.disconnect_problematic_variables_from" title="Permalink to this definition">¶</a></dt> <dd><p>Method to automatically disconnect certain problematic variables with respect to a given function.</p> <p>If given as setting (disconnect_collided_targets=True) then the collided targets will be disconnected from this function. Also, if given as setting (disconnect_shared_sources=True), shared sources are also disconnected.</p> @@ -669,7 +666,8 @@ function. Also, if given as setting (disconnect_shared_sources=True), shared sou <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>function</strong> (<em>basestring</em>) – function around which problematic variables are disconnected</li> <li><strong>disconnect_collided_targets</strong> (<em>bool</em>) – setting to disconnect collided targets</li> -<li><strong>disconnect_shared_sources</strong> (<em>bool</em>) – setting to disconnect shared sources</li> +<li><strong>disconnect_shared_sources</strong> (<em>list</em>) – setting to disconnect shared sources</li> +<li><strong>disconnect_shared_sources</strong> – setting to ignore certain nodes</li> </ul> </td> </tr> @@ -1359,6 +1357,30 @@ into an undirected graph.</p> </table> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_kadmos.KadmosGraph.get_same_graph_class"> +<code class="descname">get_same_graph_class</code><span class="sig-paren">(</span><em>graph</em>, <em>copy_type='deep'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.get_same_graph_class" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to reinstantiate a given graph according to the same graph class as the self.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>graph</strong> (<em>DiGraph</em>) – graph object to be reinstantiated</li> +<li><strong>copy_type</strong> (<em>basestring</em>) – setting to have a deep or shallow copy of the graph</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">reinstantiated graph</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.get_sources"> <code class="descname">get_sources</code><span class="sig-paren">(</span><em>node</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.get_sources" title="Permalink to this definition">¶</a></dt> @@ -1643,8 +1665,8 @@ attribute lookup as <cite>edges[u, v][‘foo’]</cite>.</dd> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>args</strong> (<em>list</em>) – function (first arg) and then followed by modes to be contracted.</li> -<li><strong>kwargs</strong> (<em>dict</em>) – new_label to specify new node label manually (optional)</li> +<li><strong>args</strong> (<em>str</em>) – function (first arg) and then followed by modes to be contracted.</li> +<li><strong>kwargs</strong> (<em>dict</em><em> or </em><em>str</em>) – new_label to specify new node label manually (optional)</li> </ul> </td> </tr> @@ -2341,7 +2363,7 @@ remove_node of a function node might lead to unconnected variables in the graph. <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>args</strong> (<em>str</em>) – function node id(s)</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>args</strong> (<em>str</em><em> or </em><em>list</em>) – function node id(s)</td> </tr> </tbody> </table> @@ -2409,7 +2431,7 @@ the original graph.</dd> <dl class="method"> <dt id="kadmos.graph.graph_kadmos.KadmosGraph.save"> -<code class="descname">save</code><span class="sig-paren">(</span><em>file_name</em>, <em>file_type='kdms'</em>, <em>graph_check_critical=True</em>, <em>destination_folder=None</em>, <em>mpg=None</em>, <em>description=''</em>, <em>creator=''</em>, <em>version='1.0'</em>, <em>timestamp=datetime.datetime(2017</em>, <em>12</em>, <em>21</em>, <em>14</em>, <em>42</em>, <em>33</em>, <em>313726)</em>, <em>keep_empty_elements=False</em>, <em>pretty_print=False</em>, <em>convention=True</em>, <em>integrity=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.save" title="Permalink to this definition">¶</a></dt> +<code class="descname">save</code><span class="sig-paren">(</span><em>file_name</em>, <em>file_type='kdms'</em>, <em>graph_check_critical=True</em>, <em>destination_folder=None</em>, <em>mpg=None</em>, <em>description=''</em>, <em>creator=''</em>, <em>version='1.0'</em>, <em>timestamp=datetime.datetime(2018</em>, <em>2</em>, <em>5</em>, <em>15</em>, <em>46</em>, <em>40</em>, <em>97949)</em>, <em>keep_empty_elements=False</em>, <em>pretty_print=False</em>, <em>convention=True</em>, <em>integrity=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_kadmos.KadmosGraph.save" title="Permalink to this definition">¶</a></dt> <dd><p>Method to save the graph.</p> <p>Different output file types are implemented for saving graphs. They are listed in the following. kdms: the most simple file type which makes use of pickling @@ -2786,47 +2808,6 @@ architectures for the same problem in one VISTOMS instance.</p> </table> </dd></dl> -<dl class="method"> -<dt id="kadmos.graph.graph_data.DataGraph.add_edge"> -<code class="descname">add_edge</code><span class="sig-paren">(</span><em>u</em>, <em>v</em>, <em>**attr</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.add_edge" title="Permalink to this definition">¶</a></dt> -<dd><p>Add an edge between u and v.</p> -<p>The nodes u and v will be automatically added if they are -not already in the graph.</p> -<p>Edge attributes can be specified with keywords or by directly -accessing the edge’s attribute dictionary. See examples below.</p> -<dl class="docutils"> -<dt>u, v <span class="classifier-delimiter">:</span> <span class="classifier">nodes</span></dt> -<dd>Nodes can be, for example, strings or numbers. -Nodes must be hashable (and not None) Python objects.</dd> -<dt>attr <span class="classifier-delimiter">:</span> <span class="classifier">keyword arguments, optional</span></dt> -<dd>Edge data (or labels or objects) can be assigned using -keyword arguments.</dd> -</dl> -<p>add_edges_from : add a collection of edges</p> -<p>Adding an edge that already exists updates the edge data.</p> -<p>Many NetworkX algorithms designed for weighted graphs use -an edge attribute (by default <cite>weight</cite>) to hold a numerical value.</p> -<p>The following all add the edge e=(1, 2) to graph G:</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">G</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">()</span> <span class="c1"># or DiGraph, MultiGraph, MultiDiGraph, etc</span> -<span class="gp">>>> </span><span class="n">e</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="c1"># explicit two-node form</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="o">*</span><span class="n">e</span><span class="p">)</span> <span class="c1"># single edge as tuple of two nodes</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edges_from</span><span class="p">(</span> <span class="p">[(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)]</span> <span class="p">)</span> <span class="c1"># add edges from iterable container</span> -</pre></div> -</div> -<p>Associate data to edges using keywords:</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">7</span><span class="p">,</span> <span class="n">capacity</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="mf">342.7</span><span class="p">)</span> -</pre></div> -</div> -<p>For non-string attribute keys, use subscript notation.</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> -<span class="gp">>>> </span><span class="n">G</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="mi">0</span><span class="p">:</span> <span class="mi">5</span><span class="p">})</span> -<span class="gp">>>> </span><span class="n">G</span><span class="o">.</span><span class="n">edges</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="mi">0</span><span class="p">:</span> <span class="mi">5</span><span class="p">})</span> -</pre></div> -</div> -</dd></dl> - <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.add_edges_from"> <code class="descname">add_edges_from</code><span class="sig-paren">(</span><em>ebunch</em>, <em>**attr</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.add_edges_from" title="Permalink to this definition">¶</a></dt> @@ -2880,7 +2861,7 @@ attributes specified via keyword arguments.</p> <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.add_equation_label"> -<code class="descname">add_equation_label</code><span class="sig-paren">(</span><em>edge</em>, <em>label=None</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.add_equation_label" title="Permalink to this definition">¶</a></dt> +<code class="descname">add_equation_label</code><span class="sig-paren">(</span><em>edge</em>, <em>labeling_method='node_label'</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.add_equation_label" title="Permalink to this definition">¶</a></dt> <dd><p>Method to add an equation label to a edge that can (safely) be used as reference in an equation.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -2888,7 +2869,7 @@ attributes specified via keyword arguments.</p> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> <li><strong>edge</strong> (<em>str</em>) – graph edge under consideration</li> -<li><strong>label</strong> (<em>str</em>) – label to be added (if not given it will be determined based on the node label or key)</li> +<li><strong>labeling_method</strong> (<em>str</em>) – select method for automatic label string determination (node_id or node_label)</li> <li><strong>language</strong> (<em>str</em>) – equation language used for the equation label</li> </ul> </td> @@ -2905,7 +2886,7 @@ attributes specified via keyword arguments.</p> <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.add_equation_labels"> -<code class="descname">add_equation_labels</code><span class="sig-paren">(</span><em>nodes</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.add_equation_labels" title="Permalink to this definition">¶</a></dt> +<code class="descname">add_equation_labels</code><span class="sig-paren">(</span><em>nodes</em>, <em>language='Python'</em>, <em>labeling_method='node_id'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.add_equation_labels" title="Permalink to this definition">¶</a></dt> <dd><p>Method to add equation labels automatically to all input edges connected to the specified list of nodes</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -2914,6 +2895,7 @@ attributes specified via keyword arguments.</p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>nodes</strong> (<em>list</em>) – list of nodes</li> <li><strong>language</strong> (<em>str</em>) – equation language used for the equation label</li> +<li><strong>labeling_method</strong> (<em>str</em>) – select method for automatic label string determination (node_id or node_label)</li> </ul> </td> </tr> @@ -3066,6 +3048,12 @@ the graph.</dd> <dd><p>alias of <code class="xref py py-class docutils literal"><span class="pre">dict</span></code></p> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.change_graph_class"> +<code class="descname">change_graph_class</code><span class="sig-paren">(</span><em>graph_class</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.change_graph_class" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to adjust the class of a graph.</p> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.check"> <code class="descname">check</code><span class="sig-paren">(</span><em>raise_error=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.check" title="Permalink to this definition">¶</a></dt> @@ -3141,24 +3129,6 @@ performed automatically when using the save method.</p> </table> </dd></dl> -<dl class="method"> -<dt id="kadmos.graph.graph_data.DataGraph.cleancopy"> -<code class="descname">cleancopy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.cleancopy" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to make a clean copy of a graph.</p> -<p>This method can be used to avoid deep-copy problems in graph manipulation algorithms. -The graph class is kept.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">clean-copy of the graph</td> -</tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_data.DataGraph" title="kadmos.graph.graph_data.DataGraph">DataGraph</a></td> -</tr> -</tbody> -</table> -</dd></dl> - <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.clear"> <code class="descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.clear" title="Permalink to this definition">¶</a></dt> @@ -3239,6 +3209,22 @@ of the original graph without actually copying any data.</dd> </div> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.copy_as"> +<code class="descname">copy_as</code><span class="sig-paren">(</span><em>graph_class</em>, <em>as_view=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.copy_as" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to make a copy of a graph and make it into another KADMOS graph class.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">copy of the graph</td> +</tr> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.copy_node_with_suffix"> <code class="descname">copy_node_with_suffix</code><span class="sig-paren">(</span><em>node</em>, <em>suffix</em>, <em>label_extension</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.copy_node_with_suffix" title="Permalink to this definition">¶</a></dt> @@ -3283,7 +3269,7 @@ of the original graph without actually copying any data.</dd> <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.create_dsm"> -<code class="descname">create_dsm</code><span class="sig-paren">(</span><em>file_name</em>, <em>destination_folder=None</em>, <em>open_pdf=False</em>, <em>mpg=None</em>, <em>include_system_vars=True</em>, <em>summarize_vars=False</em>, <em>function_order=None</em>, <em>keep_tex_file=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.create_dsm" title="Permalink to this definition">¶</a></dt> +<code class="descname">create_dsm</code><span class="sig-paren">(</span><em>file_name</em>, <em>destination_folder=None</em>, <em>open_pdf=False</em>, <em>mpg=None</em>, <em>include_system_vars=True</em>, <em>summarize_vars=False</em>, <em>function_order=None</em>, <em>keep_tex_file=False</em>, <em>abbreviate_keywords=False</em>, <em>compile_pdf=True</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.create_dsm" title="Permalink to this definition">¶</a></dt> <dd><p>Method to create a (X)DSM PDF file</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -3291,13 +3277,14 @@ of the original graph without actually copying any data.</dd> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>file_name</strong> (<em>str</em>) – name of the file to be saved</li> -<li><strong>open_pdf</strong> (<em>bool</em>) – option for opening the created file directly</li> <li><strong>destination_folder</strong> (<em>str</em>) – destination folder for the file to be saved</li> +<li><strong>open_pdf</strong> (<em>bool</em>) – option for opening the created file directly</li> <li><strong>mpg</strong> (<a class="reference internal" href="#kadmos.graph.graph_process.MdaoProcessGraph" title="kadmos.graph.graph_process.MdaoProcessGraph"><em>MdaoProcessGraph</em></a>) – optional MPG graph to be saved with MDG as XDSM (if None a DSM is created)</li> <li><strong>include_system_vars</strong> (<em>bool</em>) – option for including system variables (only applicable for DSMs)</li> <li><strong>summarize_vars</strong> (<em>bool</em>) – option for summarizing label</li> <li><strong>function_order</strong> (<em>list</em>) – optional function order for the diagonal of the graph (only applicable for DSMs)</li> <li><strong>keep_tex_file</strong> (<em>bool</em>) – optional argument to keep the tex file of the PDF</li> +<li><strong>abbreviate_keywords</strong> (<em>bool</em>) – optional argument to keep make keywords shorter (input -> inp., output -> outp.)</li> </ul> </td> </tr> @@ -3305,6 +3292,38 @@ of the original graph without actually copying any data.</dd> </table> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.deepcopy"> +<code class="descname">deepcopy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.deepcopy" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to make a deep copy of a graph.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">deepcopy of the graph</td> +</tr> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.deepcopy_as"> +<code class="descname">deepcopy_as</code><span class="sig-paren">(</span><em>graph_class</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.deepcopy_as" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to make a deep copy of a graph and make it into another KADMOS graph class.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">deepcopy of the graph</td> +</tr> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="attribute"> <dt id="kadmos.graph.graph_data.DataGraph.degree"> <code class="descname">degree</code><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.degree" title="Permalink to this definition">¶</a></dt> @@ -3343,7 +3362,7 @@ nd_iter : iterator</p> <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.disconnect_problematic_variables_from"> -<code class="descname">disconnect_problematic_variables_from</code><span class="sig-paren">(</span><em>function</em>, <em>disconnect_collided_targets=True</em>, <em>disconnect_shared_sources=True</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.disconnect_problematic_variables_from" title="Permalink to this definition">¶</a></dt> +<code class="descname">disconnect_problematic_variables_from</code><span class="sig-paren">(</span><em>function</em>, <em>disconnect_collided_targets=True</em>, <em>disconnect_shared_sources=True</em>, <em>ignore_list=[]</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.disconnect_problematic_variables_from" title="Permalink to this definition">¶</a></dt> <dd><p>Method to automatically disconnect certain problematic variables with respect to a given function.</p> <p>If given as setting (disconnect_collided_targets=True) then the collided targets will be disconnected from this function. Also, if given as setting (disconnect_shared_sources=True), shared sources are also disconnected.</p> @@ -3354,7 +3373,8 @@ function. Also, if given as setting (disconnect_shared_sources=True), shared sou <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>function</strong> (<em>basestring</em>) – function around which problematic variables are disconnected</li> <li><strong>disconnect_collided_targets</strong> (<em>bool</em>) – setting to disconnect collided targets</li> -<li><strong>disconnect_shared_sources</strong> (<em>bool</em>) – setting to disconnect shared sources</li> +<li><strong>disconnect_shared_sources</strong> (<em>list</em>) – setting to disconnect shared sources</li> +<li><strong>disconnect_shared_sources</strong> – setting to ignore certain nodes</li> </ul> </td> </tr> @@ -3657,6 +3677,30 @@ the graph connections still being represented.</p> </table> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.get_coupling_matrix"> +<code class="descname">get_coupling_matrix</code><span class="sig-paren">(</span><em>function_order_method='manual'</em>, <em>node_selection=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.get_coupling_matrix" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to determine the role of the different functions in the FPG.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>function_order_method</strong> (<em>basestring</em>) – algorithm to be used for the order in which the functions are executed.</li> +<li><strong>node_selection</strong> (<em>list</em>) – selection of nodes for which the coupling matrix will be calculated only</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">graph with enriched function node attributes and function problem role dictionary</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference internal" href="#kadmos.graph.graph_data.FundamentalProblemGraph" title="kadmos.graph.graph_data.FundamentalProblemGraph">FundamentalProblemGraph</a></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.get_direct_coupling_nodes"> <code class="descname">get_direct_coupling_nodes</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.get_direct_coupling_nodes" title="Permalink to this definition">¶</a></dt> @@ -3733,6 +3777,22 @@ But it is safe to assign attributes <cite>G[u][v][‘foo’]</cite></p> </div> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.get_feedback_info"> +<code class="descname">get_feedback_info</code><span class="sig-paren">(</span><em>function_order</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.get_feedback_info" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to determine the number of feedback loops for a given function order</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>function_order</strong> (<em>list</em>) – function order of the nodes</td> +</tr> +</tbody> +</table> +<p>:return number of feedback loops +:rtype int</p> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.get_function_graph"> <code class="descname">get_function_graph</code><span class="sig-paren">(</span><em>keep_objective_variables=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.get_function_graph" title="Permalink to this definition">¶</a></dt> @@ -4044,6 +4104,51 @@ into an undirected graph.</p> </table> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.get_possible_function_order"> +<code class="descname">get_possible_function_order</code><span class="sig-paren">(</span><em>method</em>, <em>multi_start=None</em>, <em>check_graph=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.get_possible_function_order" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to find a possible function order, in the order: pre-coupled, coupled, post-coupled functions</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>method</strong> (<em>str</em>) – algorithm which will be used to minimize the feedback loops</li> +<li><strong>multi_start</strong> (<em>int</em>) – start the algorithm from multiple starting points</li> +<li><strong>check_graph</strong> (<em>bool</em>) – check whether graph has problematic variables</li> +</ul> +</td> +</tr> +</tbody> +</table> +<p>:return Possible function order +:rtype list</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.get_same_graph_class"> +<code class="descname">get_same_graph_class</code><span class="sig-paren">(</span><em>graph</em>, <em>copy_type='deep'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.get_same_graph_class" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to reinstantiate a given graph according to the same graph class as the self.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>graph</strong> (<em>DiGraph</em>) – graph object to be reinstantiated</li> +<li><strong>copy_type</strong> (<em>basestring</em>) – setting to have a deep or shallow copy of the graph</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">reinstantiated graph</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.get_sources"> <code class="descname">get_sources</code><span class="sig-paren">(</span><em>node</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.get_sources" title="Permalink to this definition">¶</a></dt> @@ -4320,63 +4425,176 @@ attribute lookup as <cite>edges[u, v][‘foo’]</cite>.</dd> </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_data.DataGraph.merge_function_modes"> -<code class="descname">merge_function_modes</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.merge_function_modes" title="Permalink to this definition">¶</a></dt> -<dd><p>Function to contract certain modes of the same function.</p> +<dt id="kadmos.graph.graph_data.DataGraph.mark_as_constraint"> +<code class="descname">mark_as_constraint</code><span class="sig-paren">(</span><em>node</em>, <em>operator</em>, <em>reference_value</em>, <em>remove_unused_outputs=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.mark_as_constraint" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to mark a node as a constraint.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>args</strong> (<em>list</em>) – function (first arg) and then followed by modes to be contracted.</li> -<li><strong>kwargs</strong> (<em>dict</em>) – new_label to specify new node label manually (optional)</li> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>node</strong> – node to be marked (on the left side of the operator</li> +<li><strong>operator</strong> (<em>str</em>) – constraint operator</li> +<li><strong>reference_value</strong> (<em>numbers.Number</em>) – value on the right side of the operator</li> </ul> </td> </tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">contracted graph</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></p> -</td> -</tr> </tbody> </table> </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_data.DataGraph.merge_function_nodes_based_on_modes"> -<code class="descname">merge_function_nodes_based_on_modes</code><span class="sig-paren">(</span><em>merge_funcs=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.merge_function_nodes_based_on_modes" title="Permalink to this definition">¶</a></dt> -<dd><p>This class method merges all execution modes of the same function into a single node.</p> -<p>Mainly used for illustration purposes since information on the execution modes gets lost.</p> +<dt id="kadmos.graph.graph_data.DataGraph.mark_as_constraints"> +<code class="descname">mark_as_constraints</code><span class="sig-paren">(</span><em>nodes</em>, <em>operators</em>, <em>reference_values</em>, <em>remove_unused_outputs=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.mark_as_constraints" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to mark multiple nodes as constraints.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>merge_funcs</strong> – List of tuple of functions to merge. If empty (default), all functions are merged.</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>nodes</strong> – list of nodes to be marked.</li> +<li><strong>operators</strong> – operators to be implemented (as list per node or as single operator for all)</li> +<li><strong>reference_values</strong> – reference values to be used (as list of values per node or as single value for all)</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">graph with enriched constraint nodes</p> +</td> </tr> </tbody> </table> -<p>Functions must be present in graph. -:type merge_funcs: list, tuple -:return: merged graph</p> </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_data.DataGraph.merge_parallel_functions"> -<code class="descname">merge_parallel_functions</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.merge_parallel_functions" title="Permalink to this definition">¶</a></dt> -<dd><p>Function to merge a list of functions</p> +<dt id="kadmos.graph.graph_data.DataGraph.mark_as_design_variable"> +<code class="descname">mark_as_design_variable</code><span class="sig-paren">(</span><em>node</em>, <em>lower_bound=None</em>, <em>upper_bound=None</em>, <em>samples=None</em>, <em>nominal_value=0.0</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.mark_as_design_variable" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to mark a single node as a design variable and add the required metadata for its definition.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>args</strong> (<em>node_ids</em>) – functions to be merged</li> -<li><strong>kwargs</strong> (<em>dict</em>) – new_label to specify new node label manually (optional)</li> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>node</strong> – </li> +<li><strong>lower_bound</strong> – </li> +<li><strong>upper_bound</strong> – </li> +<li><strong>samples</strong> – </li> </ul> </td> </tr> -</tbody> -</table> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.mark_as_design_variables"> +<code class="descname">mark_as_design_variables</code><span class="sig-paren">(</span><em>nodes</em>, <em>lower_bounds=None</em>, <em>upper_bounds=None</em>, <em>samples=None</em>, <em>nominal_values=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.mark_as_design_variables" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to mark a list of nodes as design variable and add metadata.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>nodes</strong> (<em>list</em><em> or </em><em>str</em>) – list of nodes present in the graph</li> +<li><strong>lower_bounds</strong> (<em>list</em><em> or </em><em>numbers.Number</em>) – list of lower bound values</li> +<li><strong>upper_bounds</strong> (<em>list</em><em> or </em><em>numbers.Number</em>) – list of upper bounds</li> +<li><strong>samples</strong> (<em>list</em>) – nested list of kadmos values</li> +<li><strong>nominal_values</strong> (<em>list</em><em> or </em><em>numbers.Number</em>) – list of nominal values</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.mark_as_objective"> +<code class="descname">mark_as_objective</code><span class="sig-paren">(</span><em>node</em>, <em>remove_unused_outputs=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.mark_as_objective" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to mark a single node as objective.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<em>basestring</em>) – variable node</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.mark_as_qois"> +<code class="descname">mark_as_qois</code><span class="sig-paren">(</span><em>nodes</em>, <em>remove_unused_outputs=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.mark_as_qois" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to mark a list of nodes as quantity of interest.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>nodes</strong> (<em>list</em>) – list of nodes present in the graph</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.merge_function_modes"> +<code class="descname">merge_function_modes</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.merge_function_modes" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to contract certain modes of the same function.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>args</strong> (<em>str</em>) – function (first arg) and then followed by modes to be contracted.</li> +<li><strong>kwargs</strong> (<em>dict</em><em> or </em><em>str</em>) – new_label to specify new node label manually (optional)</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">contracted graph</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference internal" href="#kadmos.graph.graph_kadmos.KadmosGraph" title="kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph</a></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.merge_function_nodes_based_on_modes"> +<code class="descname">merge_function_nodes_based_on_modes</code><span class="sig-paren">(</span><em>merge_funcs=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.merge_function_nodes_based_on_modes" title="Permalink to this definition">¶</a></dt> +<dd><p>This class method merges all execution modes of the same function into a single node.</p> +<p>Mainly used for illustration purposes since information on the execution modes gets lost.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>merge_funcs</strong> – List of tuple of functions to merge. If empty (default), all functions are merged.</td> +</tr> +</tbody> +</table> +<p>Functions must be present in graph. +:type merge_funcs: list, tuple +:return: merged graph</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.merge_parallel_functions"> +<code class="descname">merge_parallel_functions</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.merge_parallel_functions" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to merge a list of functions</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>args</strong> (<em>node_ids</em>) – functions to be merged</li> +<li><strong>kwargs</strong> (<em>dict</em>) – new_label to specify new node label manually (optional)</li> +</ul> +</td> +</tr> +</tbody> +</table> </dd></dl> <dl class="method"> @@ -4399,6 +4617,27 @@ function.</p> </table> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.minimize_feedback"> +<code class="descname">minimize_feedback</code><span class="sig-paren">(</span><em>nodes</em>, <em>method</em>, <em>multi_start=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.minimize_feedback" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to find the function order with minimum feedback</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>nodes</strong> (<em>list</em>) – nodes for which the feedback needs to be minimized</li> +<li><strong>method</strong> (<em>str</em>) – algorithm used to find optimal function order</li> +<li><strong>multi_start</strong> (<em>int</em>) – start the algorithm from multiple starting points</li> +</ul> +</td> +</tr> +</tbody> +</table> +<p>:return function order +:rtype list</p> +</dd></dl> + <dl class="attribute"> <dt id="kadmos.graph.graph_data.DataGraph.name"> <code class="descname">name</code><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.name" title="Permalink to this definition">¶</a></dt> @@ -5026,7 +5265,7 @@ remove_node of a function node might lead to unconnected variables in the graph. <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>args</strong> (<em>str</em>) – function node id(s)</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>args</strong> (<em>str</em><em> or </em><em>list</em>) – function node id(s)</td> </tr> </tbody> </table> @@ -5078,6 +5317,22 @@ in the container is not in the graph it is silently ignored.</dd> </div> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.remove_unused_outputs"> +<code class="descname">remove_unused_outputs</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.remove_unused_outputs" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to remove output nodes from an FPG which do not have a problem role.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">the nodes that were removed</td> +</tr> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list</td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.reverse"> <code class="descname">reverse</code><span class="sig-paren">(</span><em>copy=True</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.reverse" title="Permalink to this definition">¶</a></dt> @@ -5094,7 +5349,7 @@ the original graph.</dd> <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.save"> -<code class="descname">save</code><span class="sig-paren">(</span><em>file_name</em>, <em>file_type='kdms'</em>, <em>graph_check_critical=True</em>, <em>destination_folder=None</em>, <em>mpg=None</em>, <em>description=''</em>, <em>creator=''</em>, <em>version='1.0'</em>, <em>timestamp=datetime.datetime(2017</em>, <em>12</em>, <em>21</em>, <em>14</em>, <em>42</em>, <em>33</em>, <em>313726)</em>, <em>keep_empty_elements=False</em>, <em>pretty_print=False</em>, <em>convention=True</em>, <em>integrity=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.save" title="Permalink to this definition">¶</a></dt> +<code class="descname">save</code><span class="sig-paren">(</span><em>file_name</em>, <em>file_type='kdms'</em>, <em>graph_check_critical=True</em>, <em>destination_folder=None</em>, <em>mpg=None</em>, <em>description=''</em>, <em>creator=''</em>, <em>version='1.0'</em>, <em>timestamp=datetime.datetime(2018</em>, <em>2</em>, <em>5</em>, <em>15</em>, <em>46</em>, <em>40</em>, <em>97949)</em>, <em>keep_empty_elements=False</em>, <em>pretty_print=False</em>, <em>convention=True</em>, <em>integrity=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.save" title="Permalink to this definition">¶</a></dt> <dd><p>Method to save the graph.</p> <p>Different output file types are implemented for saving graphs. They are listed in the following. kdms: the most simple file type which makes use of pickling @@ -5177,6 +5432,22 @@ as a weight. If None, then each edge has weight 1.</dd> </div> </dd></dl> +<dl class="method"> +<dt id="kadmos.graph.graph_data.DataGraph.sort_non_coupled_nodes"> +<code class="descname">sort_non_coupled_nodes</code><span class="sig-paren">(</span><em>nodes</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.sort_non_coupled_nodes" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to sort the pre and post coupling nodes</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>nodes</strong> (<em>list</em>) – nodes that need to be sorted</td> +</tr> +</tbody> +</table> +<p>:return nodes in sorted order +:rtype list</p> +</dd></dl> + <dl class="method"> <dt id="kadmos.graph.graph_data.DataGraph.split_variables"> <code class="descname">split_variables</code><span class="sig-paren">(</span><em>*args</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.DataGraph.split_variables" title="Permalink to this definition">¶</a></dt> @@ -5440,18 +5711,37 @@ architectures for the same problem in one VISTOMS instance.</p> <dt id="kadmos.graph.graph_data.RepositoryConnectivityGraph"> <em class="property">class </em><code class="descclassname">kadmos.graph.graph_data.</code><code class="descname">RepositoryConnectivityGraph</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.RepositoryConnectivityGraph" title="Permalink to this definition">¶</a></dt> <dd><dl class="method"> -<dt id="kadmos.graph.graph_data.RepositoryConnectivityGraph.cleancopy"> -<code class="descname">cleancopy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.RepositoryConnectivityGraph.cleancopy" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to make a clean copy of a graph.</p> -<p>This method can be used to avoid deep-copy problems in graph manipulation algorithms. -The graph class is kept.</p> +<dt id="kadmos.graph.graph_data.RepositoryConnectivityGraph.create_mathematical_problem"> +<code class="descname">create_mathematical_problem</code><span class="sig-paren">(</span><em>n_disciplines</em>, <em>coupling_strength=None</em>, <em>n_global_var=None</em>, <em>n_local_var=None</em>, <em>n_coupling_var=None</em>, <em>n_local_constraints=None</em>, <em>n_global_constraints=None</em>, <em>B=None</em>, <em>C=None</em>, <em>D=None</em>, <em>E=None</em>, <em>F=None</em>, <em>G=None</em>, <em>H=None</em>, <em>I=None</em>, <em>J=None</em>, <em>r=None</em>, <em>s=None</em>, <em>write_problem_to_textfile=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.RepositoryConnectivityGraph.create_mathematical_problem" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to get a mathematical problem according to the variable complexity problem as described in: +Zhang D., Song B., Wang P. and He Y. ‘Performance Evaluation of MDO Architectures within a Variable +Complexity Problem’, Mathematical Problems in Engineering, 2017.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">clean-copy of the graph</td> -</tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_data.RepositoryConnectivityGraph" title="kadmos.graph.graph_data.RepositoryConnectivityGraph">RepositoryConnectivityGraph</a></td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>n_disciplines</strong> – Number of disciplines</li> +<li><strong>coupling_strength</strong> – percentage of couplings, 0 no couplings, 1 all possible couplings</li> +<li><strong>n_global_var</strong> – Number of global design variables</li> +<li><strong>n_local_var</strong> – Number of local design variables for each discipline</li> +<li><strong>n_coupling_var</strong> – Number of output variables for each discipline</li> +<li><strong>n_local_constraints</strong> – Number of local constraints</li> +<li><strong>n_global_constraints</strong> – Number of global constraints</li> +<li><strong>B</strong> – relation between the coupling variables</li> +<li><strong>C</strong> – relation between the global design variables and coupling variables</li> +<li><strong>D</strong> – relation between the local design variables and coupling variables</li> +<li><strong>E</strong> – relation between the global design variables and local constraints</li> +<li><strong>F</strong> – relation between the local design variables and local constraints</li> +<li><strong>G</strong> – relation between the coupling variables and local constraints</li> +<li><strong>H</strong> – relation between the global design variables and global constraints</li> +<li><strong>I</strong> – relation between the local design variables and global constraints</li> +<li><strong>J</strong> – relation between the coupling variables and global constraints</li> +<li><strong>r</strong> – positive scalars to be used for the local constraints</li> +<li><strong>s</strong> – positive scalars to be used for the global constraints</li> +<li><strong>write_problem_to_textfile</strong> – option to write generated problem to a textfile</li> +</ul> +</td> </tr> </tbody> </table> @@ -5630,24 +5920,6 @@ sort_by must be one of [“couplingsâ€, “system_inputsâ€, “edgesâ€, “no </table> </dd></dl> -<dl class="method"> -<dt id="kadmos.graph.graph_data.FundamentalProblemGraph.cleancopy"> -<code class="descname">cleancopy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.cleancopy" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to make a clean copy of a graph.</p> -<p>This method can be used to avoid deep-copy problems in graph manipulation algorithms. -The graph class is kept.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">clean-copy of the graph</td> -</tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_data.FundamentalProblemGraph" title="kadmos.graph.graph_data.FundamentalProblemGraph">FundamentalProblemGraph</a></td> -</tr> -</tbody> -</table> -</dd></dl> - <dl class="method"> <dt id="kadmos.graph.graph_data.FundamentalProblemGraph.create_mdg"> <code class="descname">create_mdg</code><span class="sig-paren">(</span><em>mg_function_ordering</em>, <em>name='MDG'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.create_mdg" title="Permalink to this definition">¶</a></dt> @@ -5696,24 +5968,6 @@ The graph class is kept.</p> </table> </dd></dl> -<dl class="method"> -<dt id="kadmos.graph.graph_data.FundamentalProblemGraph.get_coupling_matrix"> -<code class="descname">get_coupling_matrix</code><span class="sig-paren">(</span><em>function_order_method='manual'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.get_coupling_matrix" title="Permalink to this definition">¶</a></dt> -<dd><p>Function to determine the role of the different functions in the FPG.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>function_order_method</strong> (<em>basestring</em>) – algorithm to be used for the order in which the functions are executed.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">graph with enriched function node attributes and function problem role dictionary</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_data.FundamentalProblemGraph" title="kadmos.graph.graph_data.FundamentalProblemGraph">FundamentalProblemGraph</a></td> -</tr> -</tbody> -</table> -</dd></dl> - <dl class="method"> <dt id="kadmos.graph.graph_data.FundamentalProblemGraph.get_mdg"> <code class="descname">get_mdg</code><span class="sig-paren">(</span><em>name='MDG'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.get_mdg" title="Permalink to this definition">¶</a></dt> @@ -5775,68 +6029,16 @@ have to be divided in two parts: the first part does not use the design variabl </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_constraint"> -<code class="descname">mark_as_constraint</code><span class="sig-paren">(</span><em>nodes</em>, <em>lower_bounds=None</em>, <em>upper_bounds=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_constraint" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to mark a list of nodes as constraint.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>nodes</strong> (<em>list</em>) – list of nodes present in the graph</li> -<li><strong>lower_bounds</strong> (<em>list</em>) – list of lower bound values</li> -<li><strong>upper_bounds</strong> (<em>list</em>) – list of upper bound values</li> -</ul> -</td> -</tr> -</tbody> -</table> -</dd></dl> - -<dl class="method"> -<dt id="kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_design_variable"> -<code class="descname">mark_as_design_variable</code><span class="sig-paren">(</span><em>nodes</em>, <em>lower_bounds=None</em>, <em>nominal_values=None</em>, <em>upper_bounds=None</em>, <em>samples=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_design_variable" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to mark a list of nodes as design variable and add metadata.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>nodes</strong> (<em>list</em>) – list of nodes present in the graph</li> -<li><strong>lower_bounds</strong> (<em>list</em>) – list of lower bound values</li> -<li><strong>nominal_values</strong> (<em>list</em>) – list of nominal values</li> -<li><strong>upper_bounds</strong> (<em>list</em>) – list of upper bounds</li> -<li><strong>samples</strong> (<em>list</em>) – nested list of kadmos values</li> -</ul> -</td> -</tr> -</tbody> -</table> -</dd></dl> - -<dl class="method"> -<dt id="kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_objective"> -<code class="descname">mark_as_objective</code><span class="sig-paren">(</span><em>node</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_objective" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to mark a single node as objective.</p> +<dt id="kadmos.graph.graph_data.FundamentalProblemGraph.impose_mdao_architecture"> +<code class="descname">impose_mdao_architecture</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.impose_mdao_architecture" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to directly get both the MDG and MPG of an FPG.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<em>basestring</em>) – variable node</td> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">MdaoDataGraph and MdaoProcessGraph</td> </tr> -</tbody> -</table> -</dd></dl> - -<dl class="method"> -<dt id="kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_qoi"> -<code class="descname">mark_as_qoi</code><span class="sig-paren">(</span><em>nodes</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_qoi" title="Permalink to this definition">¶</a></dt> -<dd><p>Function to mark a list of nodes as quantity of interest.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>nodes</strong> (<em>list</em>) – list of nodes present in the graph</td> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">tuple</td> </tr> </tbody> </table> @@ -5850,25 +6052,7 @@ have to be divided in two parts: the first part does not use the design variabl <dl class="class"> <dt id="kadmos.graph.graph_process.ProcessGraph"> <em class="property">class </em><code class="descclassname">kadmos.graph.graph_process.</code><code class="descname">ProcessGraph</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.ProcessGraph" title="Permalink to this definition">¶</a></dt> -<dd><dl class="method"> -<dt id="kadmos.graph.graph_process.ProcessGraph.cleancopy"> -<code class="descname">cleancopy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.ProcessGraph.cleancopy" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to make a clean copy of a graph.</p> -<p>This method can be used to avoid deep-copy problems in graph manipulation algorithms. -The graph class is kept.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">clean-copy of the graph</td> -</tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_process.ProcessGraph" title="kadmos.graph.graph_process.ProcessGraph">ProcessGraph</a></td> -</tr> -</tbody> -</table> -</dd></dl> - -</dd></dl> +<dd></dd></dl> </div> <div class="section" id="mdaoprocessgraph"> @@ -5877,20 +6061,20 @@ The graph class is kept.</p> <dt id="kadmos.graph.graph_process.MdaoProcessGraph"> <em class="property">class </em><code class="descclassname">kadmos.graph.graph_process.</code><code class="descname">MdaoProcessGraph</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph" title="Permalink to this definition">¶</a></dt> <dd><dl class="method"> -<dt id="kadmos.graph.graph_process.MdaoProcessGraph.add_parallel_process"> -<code class="descname">add_parallel_process</code><span class="sig-paren">(</span><em>start_nodes</em>, <em>parallel_functions</em>, <em>start_step</em>, <em>end_node=None</em>, <em>end_in_converger=False</em>, <em>use_data_graph=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.add_parallel_process" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to add a process to run multiple functions in parallel from a single start node.</p> +<dt id="kadmos.graph.graph_process.MdaoProcessGraph.add_process"> +<code class="descname">add_process</code><span class="sig-paren">(</span><em>sequence</em>, <em>start_step</em>, <em>mdg</em>, <em>end_in_iterative_node=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.add_process" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a process to a list of functions.</p> +<p>The sequence is assumed to be the order of the functions in the input list. The sequence is considered simple, +since it is not analyzed for the possibility to run functions in parallel.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>start_nodes</strong> (<em>basestring</em><em> or </em><em>list</em>) – node or list of nodes from which all the functions are executed in parallel</li> -<li><strong>parallel_functions</strong> (<em>list</em>) – list of function to be run in parallel from the start node</li> -<li><strong>start_step</strong> (<em>int</em>) – process step number of the start_node</li> -<li><strong>end_node</strong> (<em>basestring</em>) – (optional) node to which all the parallel functions go after execution</li> -<li><strong>end_in_converger</strong> (<em>bool</em>) – (optional) indicate whether the end node finishes a convergence loop</li> -<li><strong>use_data_graph</strong> (<em>MdaoDataGraph</em><em> or </em><em>None</em>) – (optional) use data graph to assess whether nodes are actually coupled</li> +<li><strong>sequence</strong> (<em>list</em>) – list of functions in the required sequence</li> +<li><strong>start_step</strong> (<em>int</em>) – process step number for the first element in the sequence</li> +<li><strong>mdg</strong> (<em>MdaoDataGraph</em>) – data graph to be used for execution dependencies</li> +<li><strong>end_in_iterative_node</strong> (<em>basestring</em>) – (optional) iterative node to which the last function should go</li> </ul> </td> </tr> @@ -5899,19 +6083,17 @@ The graph class is kept.</p> </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_process.MdaoProcessGraph.add_simple_sequential_process"> -<code class="descname">add_simple_sequential_process</code><span class="sig-paren">(</span><em>functions</em>, <em>start_step</em>, <em>end_in_iterative_node=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.add_simple_sequential_process" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to add a simple sequential process to a list of functions.</p> -<p>The sequence is assumed to be the order of the functions in the input list. The sequence is considered simple, -since it is not analyzed for the possibility to run functions in parallel.</p> +<dt id="kadmos.graph.graph_process.MdaoProcessGraph.connect_nested_iterators"> +<code class="descname">connect_nested_iterators</code><span class="sig-paren">(</span><em>master</em>, <em>slave</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.connect_nested_iterators" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to connect a slave iterator to a master iterator in a nested configuration.</p> +<p>An example is if a converger inside an optimizer in MDF needs to be linked back.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>functions</strong> (<em>list</em>) – list of functions in the required sequence</li> -<li><strong>start_step</strong> – </li> -<li><strong>end_in_iterative_node</strong> (<em>basestring</em>) – (optional) iterative node to which the last function should go</li> +<li><strong>master</strong> (<em>basestring</em>) – upper iterator node in the nested configuration</li> +<li><strong>slave</strong> (<em>basestring</em>) – lower iterator node in the nested configuration</li> </ul> </td> </tr> @@ -5920,71 +6102,68 @@ since it is not analyzed for the possibility to run functions in parallel.</p> </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_process.MdaoProcessGraph.cleancopy"> -<code class="descname">cleancopy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.cleancopy" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to make a clean copy of a graph.</p> -<p>This method can be used to avoid deep-copy problems in graph manipulation algorithms. -The graph class is kept.</p> +<dt id="kadmos.graph.graph_process.MdaoProcessGraph.get_lowest_psn"> +<code class="descname">get_lowest_psn</code><span class="sig-paren">(</span><em>cycle</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.get_lowest_psn" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to retrieve the lowest process step number (PSN) of a list of nodes in a cycle.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">clean-copy of the graph</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>cycle</strong> (<em>list</em>) – list with nodes on a cycle</td> </tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#kadmos.graph.graph_process.MdaoProcessGraph" title="kadmos.graph.graph_process.MdaoProcessGraph">MdaoProcessGraph</a></td> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">the minimal PSN and the index of the first element having this PSN</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">tuple</td> </tr> </tbody> </table> </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_process.MdaoProcessGraph.connect_nested_iterators"> -<code class="descname">connect_nested_iterators</code><span class="sig-paren">(</span><em>master</em>, <em>slave</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.connect_nested_iterators" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to connect a slave iterator to a master iterator in a nested configuration.</p> -<p>An example is if a converger inside an optimizer in MDF needs to be linked back.</p> +<dt id="kadmos.graph.graph_process.MdaoProcessGraph.get_node_text"> +<code class="descname">get_node_text</code><span class="sig-paren">(</span><em>node</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.get_node_text" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to determine the text of a function node (for use in a XDSM diagram).</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>master</strong> (<em>basestring</em>) – upper iterator node in the nested configuration</li> -<li><strong>slave</strong> (<em>basestring</em>) – lower iterator node in the nested configuration</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<em>basestring</em>) – node</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">node text for in the XDSM function box</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">basestring</td> </tr> </tbody> </table> </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_process.MdaoProcessGraph.get_nested_process_ordering"> -<code class="descname">get_nested_process_ordering</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.get_nested_process_ordering" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to determine the nesting of iterative elements in the process graph.</p> +<dt id="kadmos.graph.graph_process.MdaoProcessGraph.get_ordered_cycles"> +<code class="descname">get_ordered_cycles</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.get_ordered_cycles" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get the cycles of a process graph ordered according to process step number.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">tuple with iterative_nodes, process_info dictionary, and nested_functions list</td> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">list with the cycles of a graph ordered based on PSN</td> </tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">tuple</td> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list</td> </tr> </tbody> </table> </dd></dl> <dl class="method"> -<dt id="kadmos.graph.graph_process.MdaoProcessGraph.get_node_text"> -<code class="descname">get_node_text</code><span class="sig-paren">(</span><em>node</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.get_node_text" title="Permalink to this definition">¶</a></dt> -<dd><p>Method to determine the text of a function node (for use in a XDSM diagram).</p> +<dt id="kadmos.graph.graph_process.MdaoProcessGraph.get_process_hierarchy"> +<code class="descname">get_process_hierarchy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.graph_process.MdaoProcessGraph.get_process_hierarchy" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to assess the hierarchy of the process based on the process lines in a ProcessGraph.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<em>basestring</em>) – node</td> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">nested list with process hierarchy, e.g. [COOR, A, [OPT, [CONV, D1, D2], F1, G1, G2]]</td> </tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">node text for in the XDSM function box</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">basestring</td> +<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list</td> </tr> </tbody> </table> @@ -6084,7 +6263,7 @@ The graph class is kept.</p> <dl class="method"> <dt id="kadmos.graph.mixin_equation.EquationMixin.add_equation_label"> -<code class="descname">add_equation_label</code><span class="sig-paren">(</span><em>edge</em>, <em>label=None</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.mixin_equation.EquationMixin.add_equation_label" title="Permalink to this definition">¶</a></dt> +<code class="descname">add_equation_label</code><span class="sig-paren">(</span><em>edge</em>, <em>labeling_method='node_label'</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.mixin_equation.EquationMixin.add_equation_label" title="Permalink to this definition">¶</a></dt> <dd><p>Method to add an equation label to a edge that can (safely) be used as reference in an equation.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -6092,7 +6271,7 @@ The graph class is kept.</p> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> <li><strong>edge</strong> (<em>str</em>) – graph edge under consideration</li> -<li><strong>label</strong> (<em>str</em>) – label to be added (if not given it will be determined based on the node label or key)</li> +<li><strong>labeling_method</strong> (<em>str</em>) – select method for automatic label string determination (node_id or node_label)</li> <li><strong>language</strong> (<em>str</em>) – equation language used for the equation label</li> </ul> </td> @@ -6109,7 +6288,7 @@ The graph class is kept.</p> <dl class="method"> <dt id="kadmos.graph.mixin_equation.EquationMixin.add_equation_labels"> -<code class="descname">add_equation_labels</code><span class="sig-paren">(</span><em>nodes</em>, <em>language='Python'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.mixin_equation.EquationMixin.add_equation_labels" title="Permalink to this definition">¶</a></dt> +<code class="descname">add_equation_labels</code><span class="sig-paren">(</span><em>nodes</em>, <em>language='Python'</em>, <em>labeling_method='node_id'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.mixin_equation.EquationMixin.add_equation_labels" title="Permalink to this definition">¶</a></dt> <dd><p>Method to add equation labels automatically to all input edges connected to the specified list of nodes</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -6118,6 +6297,7 @@ The graph class is kept.</p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>nodes</strong> (<em>list</em>) – list of nodes</li> <li><strong>language</strong> (<em>str</em>) – equation language used for the equation label</li> +<li><strong>labeling_method</strong> (<em>str</em>) – select method for automatic label string determination (node_id or node_label)</li> </ul> </td> </tr> @@ -6130,6 +6310,63 @@ The graph class is kept.</p> </div> <div class="section" id="vistomsmixin"> <h3>VistomsMixin<a class="headerlink" href="#vistomsmixin" title="Permalink to this headline">¶</a></h3> +<dl class="class"> +<dt id="kadmos.graph.mixin_vistoms.VistomsMixin"> +<em class="property">class </em><code class="descclassname">kadmos.graph.mixin_vistoms.</code><code class="descname">VistomsMixin</code><a class="headerlink" href="#kadmos.graph.mixin_vistoms.VistomsMixin" title="Permalink to this definition">¶</a></dt> +<dd><dl class="method"> +<dt id="kadmos.graph.mixin_vistoms.VistomsMixin.vistoms_add"> +<code class="descname">vistoms_add</code><span class="sig-paren">(</span><em>vistoms_dir</em>, <em>mpg=None</em>, <em>function_order=None</em>, <em>reference_file=None</em>, <em>compress=False</em>, <em>remove_after_compress=True</em>, <em>graph_id=None</em>, <em>replacement_id=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.mixin_vistoms.VistomsMixin.vistoms_add" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to add a graph to a existing VISTOMS instance.</p> +<p>In one VISTOMS instance different graphs can be shown. For example it is possible to include different +architectures for the same problem in one VISTOMS instance.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>vistoms_dir</strong> (<em>str</em>) – directory of the VISTOMS directory to be used for addition</li> +<li><strong>mpg</strong> (<a class="reference internal" href="#kadmos.graph.graph_process.MdaoProcessGraph" title="kadmos.graph.graph_process.MdaoProcessGraph"><em>MdaoProcessGraph</em></a>) – optional MPG graph to be saved with MDG as XDSM (if None a DSM is created)</li> +<li><strong>function_order</strong> (<em>list</em>) – optional function order for the diagonal of the graph (only applicable for DSMs)</li> +<li><strong>reference_file</strong> (<em>str</em>) – file from which reference values are extracted (either full path or file in same folder)</li> +<li><strong>compress</strong> (<em>bool</em>) – setting whether to compress the final VISTOMS instance folder to a zip file</li> +<li><strong>remove_after_compress</strong> (<em>bool</em>) – setting whether to remove the original folder after compression</li> +<li><strong>replacement_id</strong> (<em>basestr</em>) – indentifier of the graph to be replaced</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.graph.mixin_vistoms.VistomsMixin.vistoms_create"> +<code class="descname">vistoms_create</code><span class="sig-paren">(</span><em>vistoms_dir</em>, <em>vistoms_version=None</em>, <em>mpg=None</em>, <em>function_order=None</em>, <em>reference_file=None</em>, <em>compress=False</em>, <em>remove_after_compress=True</em>, <em>graph_id=None</em>, <em>use_png_figs=False</em>, <em>file_refs=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.graph.mixin_vistoms.VistomsMixin.vistoms_create" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to create a new VISTOMS instance from a graph.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>vistoms_dir</strong> (<em>str</em>) – directory of the VISTOMS directory to be created</li> +<li><strong>vistoms_version</strong> – version of the VISTOMS instance to be used (as stored in the package itself)</li> +<li><strong>vispack_version</strong> – str</li> +<li><strong>mpg</strong> (<a class="reference internal" href="#kadmos.graph.graph_process.MdaoProcessGraph" title="kadmos.graph.graph_process.MdaoProcessGraph"><em>MdaoProcessGraph</em></a>) – optional MPG graph to be saved with MDG as XDSM (if None a DSM is created)</li> +<li><strong>function_order</strong> (<em>list</em>) – optional function order for the diagonal of the graph (only applicable for DSMs)</li> +<li><strong>reference_file</strong> (<em>str</em>) – file from which reference values are extracted (either full path or file in same folder)</li> +<li><strong>compress</strong> (<em>bool</em>) – setting whether to compress the final VISTOMS instance folder to a zip file</li> +<li><strong>remove_after_compress</strong> (<em>bool</em>) – setting whether to remove the original folder after compression</li> +<li><strong>graph_id</strong> (<em>basestring</em>) – identifier of the new graph</li> +<li><strong>use_png_figs</strong> (<em>bool</em>) – setting whether to use the PNG figures instead of the SVG figures for local execution</li> +<li><strong>file_refs</strong> (<em>dict</em>) – setting to provide file references manually (to use VISTOMS on a server)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + </div> </div> <div class="section" id="cmdows"> @@ -6139,6 +6376,84 @@ The graph class is kept.</p> <dt id="kadmos.cmdows.cmdows.CMDOWS"> <em class="property">class </em><code class="descclassname">kadmos.cmdows.cmdows.</code><code class="descname">CMDOWS</code><span class="sig-paren">(</span><em>file_path=None</em>, <em>element=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS" title="Permalink to this definition">¶</a></dt> <dd><p>Class for with various methods for checking and manipulating CMDOWS files</p> +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_actor"> +<code class="descname">add_actor</code><span class="sig-paren">(</span><em>contact_uid</em>, <em>role</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_actor" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a role element to the organization branch.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_contact"> +<code class="descname">add_contact</code><span class="sig-paren">(</span><em>name</em>, <em>email</em>, <em>uid</em>, <em>company=None</em>, <em>department=None</em>, <em>function=None</em>, <em>address=None</em>, <em>telephone=None</em>, <em>country=None</em>, <em>roles=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_contact" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a contact element to the organization branch.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_dc"> +<code class="descname">add_dc</code><span class="sig-paren">(</span><em>uid</em>, <em>id</em>, <em>mode_id</em>, <em>instance_id</em>, <em>version</em>, <em>label</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_dc" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a designCompetence element to the designCompetences branch.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_dc_general_info"> +<code class="descname">add_dc_general_info</code><span class="sig-paren">(</span><em>dc_uid</em>, <em>description</em>, <em>status=None</em>, <em>creation_date=None</em>, <em>owner_uid=None</em>, <em>creator_uid=None</em>, <em>operator_uid=None</em>, <em>model_definition=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_dc_general_info" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a general info element to a dc branch.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_dc_inputs_element"> +<code class="descname">add_dc_inputs_element</code><span class="sig-paren">(</span><em>dc_uid</em>, <em>inputs_element</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_dc_inputs_element" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a inputs element to a DC element.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_dc_outputs_element"> +<code class="descname">add_dc_outputs_element</code><span class="sig-paren">(</span><em>dc_uid</em>, <em>outputs_element</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_dc_outputs_element" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a outputs element to a DC element.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_dc_performance_info"> +<code class="descname">add_dc_performance_info</code><span class="sig-paren">(</span><em>dc_uid</em>, <em>precision=None</em>, <em>fidelity_level=None</em>, <em>run_time=None</em>, <em>verification=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_dc_performance_info" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a performance info element to a DC branch.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_dc_remote_component_info"> +<code class="descname">add_dc_remote_component_info</code><span class="sig-paren">(</span><em>dc_uid</em>, <em>single_or_multi_execution</em>, <em>job_name</em>, <em>remote_engineer</em>, <em>notification_message</em>, <em>data_exchange_dict=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_dc_remote_component_info" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a remote execution info element to a dc branch.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_dc_verification"> +<code class="descname">add_dc_verification</code><span class="sig-paren">(</span><em>dc_uid</em>, <em>method</em>, <em>verifier</em>, <em>result</em>, <em>date</em>, <em>version</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_dc_verification" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a verification to a DC</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_element_to_element_of_uid"> +<code class="descname">add_element_to_element_of_uid</code><span class="sig-paren">(</span><em>uid</em>, <em>element_to_add</em>, <em>expected_tag_uid_el=None</em>, <em>expected_tag_new_el=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_element_to_element_of_uid" title="Permalink to this definition">¶</a></dt> +<dd><p>Generic method to add a subelement to an element with a certain UID.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_header"> +<code class="descname">add_header</code><span class="sig-paren">(</span><em>creator</em>, <em>description</em>, <em>timestamp=None</em>, <em>fileVersion='0.0'</em>, <em>cmdowsVersion='0.7'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_header" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add a header to a CMDOWS file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.add_new_parameters_from_element"> +<code class="descname">add_new_parameters_from_element</code><span class="sig-paren">(</span><em>parameters_element</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.add_new_parameters_from_element" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to add the new parameters based on a parameters element.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.assert_element_tag"> +<code class="descname">assert_element_tag</code><span class="sig-paren">(</span><em>el</em>, <em>expected_tag</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.assert_element_tag" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to assert that the tag of an element is as expected.</p> +</dd></dl> + <dl class="method"> <dt id="kadmos.cmdows.cmdows.CMDOWS.check"> <code class="descname">check</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.check" title="Permalink to this definition">¶</a></dt> @@ -6160,7 +6475,151 @@ The graph class is kept.</p> <dl class="method"> <dt id="kadmos.cmdows.cmdows.CMDOWS.check_uids"> <code class="descname">check_uids</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.check_uids" title="Permalink to this definition">¶</a></dt> -<dd><p>Method so check if all uIDs are actually unique in a CMDOWS file</p> +<dd><p>Method to check if all uIDs are actually unique in a CMDOWS file</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.ensure_abs_xpath"> +<code class="descname">ensure_abs_xpath</code><span class="sig-paren">(</span><em>xpath</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.ensure_abs_xpath" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to ensure that the elements given by an absolute XPath exist.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_design_competences_uids"> +<code class="descname">get_design_competences_uids</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_design_competences_uids" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get a list of all the design competences UIDs present in the file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_element_of_uid"> +<code class="descname">get_element_of_uid</code><span class="sig-paren">(</span><em>uid</em>, <em>expected_tag=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_element_of_uid" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get the element based on a UID value.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_executable_blocks_uids"> +<code class="descname">get_executable_blocks_uids</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_executable_blocks_uids" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get a list of all the executable block UIDs present in the file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_inputs_uids"> +<code class="descname">get_inputs_uids</code><span class="sig-paren">(</span><em>exblock_uid</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_inputs_uids" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to collect the inputs of a CMDOWS file executableBlock entry</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_mathematical_functions_uids"> +<code class="descname">get_mathematical_functions_uids</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_mathematical_functions_uids" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get a list of all the mathematical functions UIDs present in the file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_outputs_uids"> +<code class="descname">get_outputs_uids</code><span class="sig-paren">(</span><em>exblock_uid</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_outputs_uids" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to collect the outputs of a CMDOWS file executableBlock entry</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_parameters_uids"> +<code class="descname">get_parameters_uids</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_parameters_uids" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get a list of all the parameter UIDs present in the file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_used_parameter_uids"> +<code class="descname">get_used_parameter_uids</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_used_parameter_uids" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get a list of all the parameter UIDs used in the file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.get_xpath_of_uid"> +<code class="descname">get_xpath_of_uid</code><span class="sig-paren">(</span><em>uid</em>, <em>expected_tag=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.get_xpath_of_uid" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get the xpath based on a UID value.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_children_of_uid"> +<code class="descname">remove_children_of_uid</code><span class="sig-paren">(</span><em>uid</em>, <em>children_to_remove='__all__'</em>, <em>children_to_keep='__none__'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_children_of_uid" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove the children of a CMDOWS file element based on a UID.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_children_of_xpath"> +<code class="descname">remove_children_of_xpath</code><span class="sig-paren">(</span><em>xpath</em>, <em>children_to_remove='__all__'</em>, <em>children_to_keep='__none__'</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_children_of_xpath" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove the children of a CMDOWS file element based on an XPath.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_contact"> +<code class="descname">remove_contact</code><span class="sig-paren">(</span><em>contact_uid</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_contact" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove a contact based on its UID.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_data_graph_element"> +<code class="descname">remove_data_graph_element</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_data_graph_element" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove a dataGraph element from a CMDOWS file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_element_based_on_uid"> +<code class="descname">remove_element_based_on_uid</code><span class="sig-paren">(</span><em>uid</em>, <em>expected_tag=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_element_based_on_uid" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove an element based on its UID.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_element_based_on_xpath"> +<code class="descname">remove_element_based_on_xpath</code><span class="sig-paren">(</span><em>xpath</em>, <em>expected_amount=None</em>, <em>expected_text=None</em>, <em>higher_level_removal=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_element_based_on_xpath" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove an element based on its XPath.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_in_and_outputs"> +<code class="descname">remove_in_and_outputs</code><span class="sig-paren">(</span><em>exblock_uid</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_in_and_outputs" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove the in- and outputs of a CMDOWS file executableBlock entry</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_inputs"> +<code class="descname">remove_inputs</code><span class="sig-paren">(</span><em>exblock_uid</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_inputs" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove the inputs of a CMDOWS file executableBlock entry</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_outputs"> +<code class="descname">remove_outputs</code><span class="sig-paren">(</span><em>exblock_uid</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_outputs" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove the outputs of a CMDOWS file executableBlock entry</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_parameter"> +<code class="descname">remove_parameter</code><span class="sig-paren">(</span><em>param_uid</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_parameter" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove a parameter based on its UID.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_parameters"> +<code class="descname">remove_parameters</code><span class="sig-paren">(</span><em>params_uids</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_parameters" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove a list of parameters based on their UID.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_parameters_element"> +<code class="descname">remove_parameters_element</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_parameters_element" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove a parameters element from a CMDOWS file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_process_graph_element"> +<code class="descname">remove_process_graph_element</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_process_graph_element" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove a processGraph element from a CMDOWS file.</p> +</dd></dl> + +<dl class="method"> +<dt id="kadmos.cmdows.cmdows.CMDOWS.remove_workflow_element"> +<code class="descname">remove_workflow_element</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.cmdows.cmdows.CMDOWS.remove_workflow_element" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to remove a workflow element from a CMDOWS file.</p> </dd></dl> <dl class="method"> @@ -6207,6 +6666,12 @@ The graph class is kept.</p> <p>Below the utilities used by KADMOS are listed.</p> <div class="section" id="module-kadmos.utilities.general"> <span id="general"></span><h3>General<a class="headerlink" href="#module-kadmos.utilities.general" title="Permalink to this headline">¶</a></h3> +<dl class="function"> +<dt id="kadmos.utilities.general.assert_dict_keys"> +<code class="descclassname">kadmos.utilities.general.</code><code class="descname">assert_dict_keys</code><span class="sig-paren">(</span><em>dic</em>, <em>expected_keys</em>, <em>all_keys_required=False</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.general.assert_dict_keys" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to assert that a dictionary has the expected keys and (optionally) to check if is has all the keys.</p> +</dd></dl> + <dl class="function"> <dt id="kadmos.utilities.general.color_list"> <code class="descclassname">kadmos.utilities.general.</code><code class="descname">color_list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.general.color_list" title="Permalink to this definition">¶</a></dt> @@ -6221,6 +6686,13 @@ The graph class is kept.</p> </table> </dd></dl> +<dl class="function"> +<dt id="kadmos.utilities.general.dict_to_ord_dict"> +<code class="descclassname">kadmos.utilities.general.</code><code class="descname">dict_to_ord_dict</code><span class="sig-paren">(</span><em>dic</em>, <em>key_order</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.general.dict_to_ord_dict" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to transform a Python dictionary into a Python ordered dictionary. Note that the key_order list can have +items that are not present in the given dictionary. All keys of the dictionary should be in the order though.</p> +</dd></dl> + <dl class="function"> <dt id="kadmos.utilities.general.export_as_json"> <code class="descclassname">kadmos.utilities.general.</code><code class="descname">export_as_json</code><span class="sig-paren">(</span><em>data</em>, <em>filename</em>, <em>indent=None</em>, <em>sort_keys=True</em>, <em>cwd=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.general.export_as_json" title="Permalink to this definition">¶</a></dt> @@ -6249,9 +6721,34 @@ The graph class is kept.</p> </dd></dl> <dl class="function"> -<dt id="kadmos.utilities.general.format_string_for_d3js"> -<code class="descclassname">kadmos.utilities.general.</code><code class="descname">format_string_for_d3js</code><span class="sig-paren">(</span><em>string</em>, <em>prefix=''</em>, <em>suffix=''</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.general.format_string_for_d3js" title="Permalink to this definition">¶</a></dt> -<dd><p>Function to format a string such that it can be used in the dynamic visualization package.</p> +<dt id="kadmos.utilities.general.format_string_for_latex"> +<code class="descclassname">kadmos.utilities.general.</code><code class="descname">format_string_for_latex</code><span class="sig-paren">(</span><em>string</em>, <em>prefix=''</em>, <em>suffix=''</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.general.format_string_for_latex" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to format a string such that it can be used in LaTeX.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>string</strong> (<em>str</em>) – string to be formatted</li> +<li><strong>prefix</strong> (<em>basestring</em>) – prefix to be placed in front of the string</li> +<li><strong>suffix</strong> (<em>basestring</em>) – suffix to be appended to the string</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">formatted string</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">basestring</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="kadmos.utilities.general.format_string_for_vistoms"> +<code class="descclassname">kadmos.utilities.general.</code><code class="descname">format_string_for_vistoms</code><span class="sig-paren">(</span><em>string</em>, <em>prefix=''</em>, <em>suffix=''</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.general.format_string_for_vistoms" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to format a string such that it can be used in VISTOMS.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> @@ -6638,7 +7135,7 @@ The graph class is kept.</p> <dl class="function"> <dt id="kadmos.utilities.xml.get_element_details"> -<code class="descclassname">kadmos.utilities.xml.</code><code class="descname">get_element_details</code><span class="sig-paren">(</span><em>tree</em>, <em>uxpath</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.xml.get_element_details" title="Permalink to this definition">¶</a></dt> +<code class="descclassname">kadmos.utilities.xml.</code><code class="descname">get_element_details</code><span class="sig-paren">(</span><em>tree</em>, <em>xpath</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.xml.get_element_details" title="Permalink to this definition">¶</a></dt> <dd><p>Function to determine the value and dimension of an UXPath element in a reference file.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -6646,7 +7143,7 @@ The graph class is kept.</p> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> <li><strong>tree</strong> – ElementTree object used for finding the XPath</li> -<li><strong>uxpath</strong> – UXPath</li> +<li><strong>xpath</strong> – XPath</li> </ul> </td> </tr> @@ -6658,21 +7155,18 @@ The graph class is kept.</p> </dd></dl> <dl class="function"> -<dt id="kadmos.utilities.xml.get_xpath_from_uxpath"> -<code class="descclassname">kadmos.utilities.xml.</code><code class="descname">get_xpath_from_uxpath</code><span class="sig-paren">(</span><em>tree</em>, <em>uxpath</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.xml.get_xpath_from_uxpath" title="Permalink to this definition">¶</a></dt> -<dd><p>Utility function to determine the XPath belonging to a UXPath for a given ElementTree object.</p> +<dt id="kadmos.utilities.xml.get_uid_search_xpath"> +<code class="descclassname">kadmos.utilities.xml.</code><code class="descname">get_uid_search_xpath</code><span class="sig-paren">(</span><em>uid</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.utilities.xml.get_uid_search_xpath" title="Permalink to this definition">¶</a></dt> +<dd><p>Method to get the XPath expression for a UID which might contain quote characters.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>tree</strong> – ElementTree object used for finding the XPath</li> -<li><strong>uxpath</strong> – UXPath</li> -</ul> -</td> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>uid</strong> (<em>str</em>) – uID string</td> </tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">XPath</p> -</td> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">XPath expression</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">str</td> </tr> </tbody> </table> @@ -6756,8 +7250,8 @@ The graph class is kept.</p> </dd></dl> </div> -<div class="section" id="strings"> -<h3>Strings<a class="headerlink" href="#strings" title="Permalink to this headline">¶</a></h3> +<div class="section" id="module-kadmos.utilities.strings"> +<span id="strings"></span><h3>Strings<a class="headerlink" href="#module-kadmos.utilities.strings" title="Permalink to this headline">¶</a></h3> </div> <div class="section" id="module-kadmos.utilities.printing"> <span id="printing"></span><h3>Printing<a class="headerlink" href="#module-kadmos.utilities.printing" title="Permalink to this headline">¶</a></h3> @@ -6811,6 +7305,25 @@ print_indexed_list(message = “These are the tools: “, index_bracket = “rou <dt id="kadmos.knowledgebase.knowledgebase.KnowledgeBase"> <em class="property">class </em><code class="descclassname">kadmos.knowledgebase.knowledgebase.</code><code class="descname">KnowledgeBase</code><span class="sig-paren">(</span><em>kb_dir_path</em>, <em>knowledge_base</em>, <em>ignoreFunctions=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.knowledgebase.knowledgebase.KnowledgeBase" title="Permalink to this definition">¶</a></dt> <dd><p>Class that imports the data stored in a knowledge base. This is a start point for graph visualizations.</p> +<dl class="method"> +<dt id="kadmos.knowledgebase.knowledgebase.KnowledgeBase.get_function_dependencies"> +<code class="descname">get_function_dependencies</code><span class="sig-paren">(</span><em>funcName</em>, <em>mode</em>, <em>inOut=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.knowledgebase.knowledgebase.KnowledgeBase.get_function_dependencies" title="Permalink to this definition">¶</a></dt> +<dd><p>This function builds a directed graph (KadmosGraph object) for the specified function using the “networkx†package. If inOut +argument is specified, only the input or output of the function will be included in the graph, otherwise both.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Param:</th><td class="field-body">funcName: function name for which the graph is generated; must be present in knowledge base.</td> +</tr> +<tr class="field-even field"><th class="field-name">Param:</th><td class="field-body">inOut: default = None; if specified, must be “input†or “output†string. Specification of this argument enables the generation of the function graph with only input or output variables.</td> +</tr> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">functionGraph</td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="method"> <dt id="kadmos.knowledgebase.knowledgebase.KnowledgeBase.get_function_graph"> <code class="descname">get_function_graph</code><span class="sig-paren">(</span><em>funcName</em>, <em>inOut=None</em><span class="sig-paren">)</span><a class="headerlink" href="#kadmos.knowledgebase.knowledgebase.KnowledgeBase.get_function_graph" title="Permalink to this definition">¶</a></dt> @@ -6905,7 +7418,7 @@ argument is specified, only the input or output of the function will be included <li><a class="reference internal" href="#utilities">Utilities</a><ul> <li><a class="reference internal" href="#module-kadmos.utilities.general">General</a></li> <li><a class="reference internal" href="#module-kadmos.utilities.xml">XML</a></li> -<li><a class="reference internal" href="#strings">Strings</a></li> +<li><a class="reference internal" href="#module-kadmos.utilities.strings">Strings</a></li> <li><a class="reference internal" href="#module-kadmos.utilities.printing">Printing</a></li> </ul> </li> diff --git a/doc/genindex.html b/doc/genindex.html index e87e0a94308b49682082408bb060b7ce7112e65e..fe130ba7722b212b89c67af1f57d3da512240e97 100644 --- a/doc/genindex.html +++ b/doc/genindex.html @@ -71,6 +71,24 @@ <h2 id="A">A</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_actor">add_actor() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_contact">add_contact() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_dc">add_dc() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_dc_general_info">add_dc_general_info() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_dc_inputs_element">add_dc_inputs_element() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_dc_outputs_element">add_dc_outputs_element() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_dc_performance_info">add_dc_performance_info() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_dc_remote_component_info">add_dc_remote_component_info() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_dc_verification">add_dc_verification() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.add_default_description">add_default_description() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -81,12 +99,6 @@ <ul> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.add_default_name">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> -</li> - </ul></li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.add_edge">add_edge() (kadmos.graph.graph_data.DataGraph method)</a> - - <ul> - <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.add_edge">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.add_edges_from">add_edges_from() (kadmos.graph.graph_data.DataGraph method)</a> @@ -95,6 +107,8 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.add_edges_from">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_element_to_element_of_uid">add_element_to_element_of_uid() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.add_equation">add_equation() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -111,6 +125,8 @@ <li><a href="KADMOS.html#kadmos.graph.mixin_equation.EquationMixin.add_equation_label">(kadmos.graph.mixin_equation.EquationMixin method)</a> </li> </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.add_equation_labels">add_equation_labels() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -119,9 +135,11 @@ <li><a href="KADMOS.html#kadmos.graph.mixin_equation.EquationMixin.add_equation_labels">(kadmos.graph.mixin_equation.EquationMixin method)</a> </li> </ul></li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.add_function_problem_roles">add_function_problem_roles() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_header">add_header() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.add_new_parameters_from_element">add_new_parameters_from_element() (kadmos.cmdows.cmdows.CMDOWS method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.add_nodes_from">add_nodes_from() (kadmos.graph.graph_data.DataGraph method)</a> @@ -135,9 +153,7 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.add_objective_function_by_nodes">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> - <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.add_parallel_process">add_parallel_process() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> -</li> - <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.add_simple_sequential_process">add_simple_sequential_process() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.add_process">add_process() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.add_weighted_edges_from">add_weighted_edges_from() (kadmos.graph.graph_data.DataGraph method)</a> @@ -169,12 +185,22 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.adjlist_outer_dict_factory">(kadmos.graph.graph_kadmos.KadmosGraph attribute)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.utilities.general.assert_dict_keys">assert_dict_keys() (in module kadmos.utilities.general)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.assert_element_tag">assert_element_tag() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> </ul></td> </tr></table> <h2 id="C">C</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.change_graph_class">change_graph_class() (kadmos.graph.graph_data.DataGraph method)</a> + + <ul> + <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.change_graph_class">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> +</li> + </ul></li> <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.check">check() (kadmos.cmdows.cmdows.CMDOWS method)</a> <ul> @@ -201,22 +227,6 @@ </li> <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.check_uids">check_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> </li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.cleancopy">cleancopy() (kadmos.graph.graph_data.DataGraph method)</a> - - <ul> - <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.cleancopy">(kadmos.graph.graph_data.FundamentalProblemGraph method)</a> -</li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.RepositoryConnectivityGraph.cleancopy">(kadmos.graph.graph_data.RepositoryConnectivityGraph method)</a> -</li> - <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.cleancopy">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> -</li> - <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.cleancopy">(kadmos.graph.graph_process.MdaoProcessGraph method)</a> -</li> - <li><a href="KADMOS.html#kadmos.graph.graph_process.ProcessGraph.cleancopy">(kadmos.graph.graph_process.ProcessGraph method)</a> -</li> - </ul></li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.clear">clear() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -225,6 +235,8 @@ </ul></li> <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS">CMDOWS (class in kadmos.cmdows.cmdows)</a> </li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.utilities.general.color_list">color_list() (in module kadmos.utilities.general)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.connect_nested_iterators">connect_nested_iterators() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> @@ -233,6 +245,12 @@ <ul> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.copy">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> +</li> + </ul></li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.copy_as">copy_as() (kadmos.graph.graph_data.DataGraph method)</a> + + <ul> + <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.copy_as">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.copy_node_with_suffix">copy_node_with_suffix() (kadmos.graph.graph_data.DataGraph method)</a> @@ -253,6 +271,8 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.create_dsm">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.RepositoryConnectivityGraph.create_mathematical_problem">create_mathematical_problem() (kadmos.graph.graph_data.RepositoryConnectivityGraph method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.create_mdg">create_mdg() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.create_mpg">create_mpg() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> @@ -265,14 +285,28 @@ <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph">DataGraph (class in kadmos.graph.graph_data)</a> </li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.degree">degree (kadmos.graph.graph_data.DataGraph attribute)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.deepcopy">deepcopy() (kadmos.graph.graph_data.DataGraph method)</a> <ul> - <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.degree">(kadmos.graph.graph_kadmos.KadmosGraph attribute)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.deepcopy">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> +</li> + </ul></li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.deepcopy_as">deepcopy_as() (kadmos.graph.graph_data.DataGraph method)</a> + + <ul> + <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.deepcopy_as">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.degree">degree (kadmos.graph.graph_data.DataGraph attribute)</a> + + <ul> + <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.degree">(kadmos.graph.graph_kadmos.KadmosGraph attribute)</a> +</li> + </ul></li> + <li><a href="KADMOS.html#kadmos.utilities.general.dict_to_ord_dict">dict_to_ord_dict() (in module kadmos.utilities.general)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.disconnect_problematic_variables_from">disconnect_problematic_variables_from() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -297,15 +331,17 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.edge_subgraph">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.edges">edges (kadmos.graph.graph_data.DataGraph attribute)</a> <ul> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.edges">(kadmos.graph.graph_kadmos.KadmosGraph attribute)</a> </li> </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.utilities.xml.Element">Element() (in module kadmos.utilities.xml)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.ensure_abs_xpath">ensure_abs_xpath() (kadmos.cmdows.cmdows.CMDOWS method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.mixin_equation.EquationMixin">EquationMixin (class in kadmos.graph.mixin_equation)</a> </li> @@ -323,10 +359,12 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.find_all_nodes">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> - <li><a href="KADMOS.html#kadmos.utilities.general.format_string_for_d3js">format_string_for_d3js() (in module kadmos.utilities.general)</a> + <li><a href="KADMOS.html#kadmos.utilities.general.format_string_for_latex">format_string_for_latex() (in module kadmos.utilities.general)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="KADMOS.html#kadmos.utilities.general.format_string_for_vistoms">format_string_for_vistoms() (in module kadmos.utilities.general)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.fresh_copy">fresh_copy() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -359,7 +397,9 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.get_contracted_graph">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.get_coupling_matrix">get_coupling_matrix() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_coupling_matrix">get_coupling_matrix() (kadmos.graph.graph_data.DataGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_design_competences_uids">get_design_competences_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_direct_coupling_nodes">get_direct_coupling_nodes() (kadmos.graph.graph_data.DataGraph method)</a> @@ -376,6 +416,12 @@ <li><a href="KADMOS.html#kadmos.utilities.xml.get_element_details">get_element_details() (in module kadmos.utilities.xml)</a> </li> <li><a href="KADMOS.html#kadmos.utilities.general.get_element_dict">get_element_dict() (in module kadmos.utilities.general)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_element_of_uid">get_element_of_uid() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_executable_blocks_uids">get_executable_blocks_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_feedback_info">get_feedback_info() (kadmos.graph.graph_data.DataGraph method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_data.RepositoryConnectivityGraph.get_fpg_based_on_function_nodes">get_fpg_based_on_function_nodes() (kadmos.graph.graph_data.RepositoryConnectivityGraph method)</a> </li> @@ -386,6 +432,8 @@ <li><a href="KADMOS.html#kadmos.graph.graph_data.RepositoryConnectivityGraph.get_fpg_by_function_nodes">get_fpg_by_function_nodes() (kadmos.graph.graph_data.RepositoryConnectivityGraph method)</a> </li> <li><a href="KADMOS.html#kadmos.utilities.general.get_friendly_id">get_friendly_id() (in module kadmos.utilities.general)</a> +</li> + <li><a href="KADMOS.html#kadmos.knowledgebase.knowledgebase.KnowledgeBase.get_function_dependencies">get_function_dependencies() (kadmos.knowledgebase.knowledgebase.KnowledgeBase method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_function_graph">get_function_graph() (kadmos.graph.graph_data.DataGraph method)</a> @@ -415,9 +463,15 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.get_graph_properties">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_inputs_uids">get_inputs_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> <li><a href="KADMOS.html#kadmos.knowledgebase.knowledgebase.KnowledgeBase.get_kb_graphs">get_kb_graphs() (kadmos.knowledgebase.knowledgebase.KnowledgeBase method)</a> </li> <li><a href="KADMOS.html#kadmos.utilities.general.get_list_entries">get_list_entries() (in module kadmos.utilities.general)</a> +</li> + <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.get_lowest_psn">get_lowest_psn() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_mathematical_functions_uids">get_mathematical_functions_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> </li> <li><a href="KADMOS.html#kadmos.utilities.general.get_mdao_setup">get_mdao_setup() (in module kadmos.utilities.general)</a> </li> @@ -428,8 +482,6 @@ </ul></td> <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.get_mpg">get_mpg() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> -</li> - <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.get_nested_process_ordering">get_nested_process_ordering() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_node_attributes">get_node_attributes() (kadmos.graph.graph_data.DataGraph method)</a> @@ -475,6 +527,12 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.get_number_of_couplings">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.get_ordered_cycles">get_ordered_cycles() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_outputs_uids">get_outputs_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_parameters_uids">get_parameters_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_partitioned_graph">get_partitioned_graph() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -482,11 +540,21 @@ </li> </ul></li> <li><a href="KADMOS.html#kadmos.graph.graph_data.RepositoryConnectivityGraph.get_path_combinations">get_path_combinations() (kadmos.graph.graph_data.RepositoryConnectivityGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_possible_function_order">get_possible_function_order() (kadmos.graph.graph_data.DataGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.get_process_hierarchy">get_process_hierarchy() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph.get_process_list">get_process_list() (kadmos.graph.graph_process.MdaoProcessGraph method)</a> </li> <li><a href="KADMOS.html#kadmos.knowledgebase.knowledgebase.KnowledgeBase.get_rcg">get_rcg() (kadmos.knowledgebase.knowledgebase.KnowledgeBase method)</a> </li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_same_graph_class">get_same_graph_class() (kadmos.graph.graph_data.DataGraph method)</a> + + <ul> + <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.get_same_graph_class">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> +</li> + </ul></li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.get_sources">get_sources() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -512,10 +580,14 @@ </li> </ul></li> <li><a href="KADMOS.html#kadmos.utilities.general.get_uid">get_uid() (in module kadmos.utilities.general)</a> +</li> + <li><a href="KADMOS.html#kadmos.utilities.xml.get_uid_search_xpath">get_uid_search_xpath() (in module kadmos.utilities.xml)</a> </li> <li><a href="KADMOS.html#kadmos.utilities.general.get_unique_friendly_id">get_unique_friendly_id() (in module kadmos.utilities.general)</a> </li> - <li><a href="KADMOS.html#kadmos.utilities.xml.get_xpath_from_uxpath">get_xpath_from_uxpath() (in module kadmos.utilities.xml)</a> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_used_parameter_uids">get_used_parameter_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.get_xpath_of_uid">get_xpath_of_uid() (kadmos.cmdows.cmdows.CMDOWS method)</a> </li> </ul></td> </tr></table> @@ -563,6 +635,8 @@ <h2 id="I">I</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.impose_mdao_architecture">impose_mdao_architecture() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.in_degree">in_degree (kadmos.graph.graph_data.DataGraph attribute)</a> <ul> @@ -583,14 +657,14 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.inspect">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.inspect_node">inspect_node() (kadmos.graph.graph_data.DataGraph method)</a> <ul> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.inspect_node">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.inspect_nodes">inspect_nodes() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -625,6 +699,8 @@ </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="KADMOS.html#module-kadmos.utilities.strings">kadmos.utilities.strings (module)</a> +</li> <li><a href="KADMOS.html#module-kadmos.utilities.xml">kadmos.utilities.xml (module)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph">KadmosGraph (class in kadmos.graph.graph_kadmos)</a> @@ -649,18 +725,22 @@ </li> <li><a href="KADMOS.html#kadmos.utilities.general.make_singular">make_singular() (in module kadmos.utilities.general)</a> </li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_constraint">mark_as_constraint() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.mark_as_constraint">mark_as_constraint() (kadmos.graph.graph_data.DataGraph method)</a> </li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_design_variable">mark_as_design_variable() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.mark_as_constraints">mark_as_constraints() (kadmos.graph.graph_data.DataGraph method)</a> </li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_objective">mark_as_objective() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.mark_as_design_variable">mark_as_design_variable() (kadmos.graph.graph_data.DataGraph method)</a> </li> - <li><a href="KADMOS.html#kadmos.graph.graph_data.FundamentalProblemGraph.mark_as_qoi">mark_as_qoi() (kadmos.graph.graph_data.FundamentalProblemGraph method)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.mark_as_design_variables">mark_as_design_variables() (kadmos.graph.graph_data.DataGraph method)</a> </li> - <li><a href="KADMOS.html#kadmos.graph.mixin_mdao.MdaoMixin">MdaoMixin (class in kadmos.graph.mixin_mdao)</a> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.mark_as_objective">mark_as_objective() (kadmos.graph.graph_data.DataGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.mark_as_qois">mark_as_qois() (kadmos.graph.graph_data.DataGraph method)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="KADMOS.html#kadmos.graph.mixin_mdao.MdaoMixin">MdaoMixin (class in kadmos.graph.mixin_mdao)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_process.MdaoProcessGraph">MdaoProcessGraph (class in kadmos.graph.graph_process)</a> </li> <li><a href="KADMOS.html#kadmos.utilities.xml.merge">merge() (in module kadmos.utilities.xml)</a> @@ -689,6 +769,8 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.merge_sequential_functions">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.minimize_feedback">minimize_feedback() (kadmos.graph.graph_data.DataGraph method)</a> +</li> </ul></td> </tr></table> @@ -867,6 +949,14 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.relabel_function_nodes">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_children_of_uid">remove_children_of_uid() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_children_of_xpath">remove_children_of_xpath() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_contact">remove_contact() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_data_graph_element">remove_data_graph_element() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.remove_edge">remove_edge() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -879,15 +969,23 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.remove_edges_from">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_element_based_on_uid">remove_element_based_on_uid() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_element_based_on_xpath">remove_element_based_on_xpath() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.remove_function_nodes">remove_function_nodes() (kadmos.graph.graph_data.DataGraph method)</a> <ul> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.remove_function_nodes">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.utilities.general.remove_if_exists">remove_if_exists() (in module kadmos.utilities.general)</a> +</li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> - <li><a href="KADMOS.html#kadmos.utilities.general.remove_if_exists">remove_if_exists() (in module kadmos.utilities.general)</a> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_in_and_outputs">remove_in_and_outputs() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_inputs">remove_inputs() (kadmos.cmdows.cmdows.CMDOWS method)</a> </li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.remove_node">remove_node() (kadmos.graph.graph_data.DataGraph method)</a> @@ -903,6 +1001,20 @@ <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.remove_nodes_from">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_outputs">remove_outputs() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_parameter">remove_parameter() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_parameters">remove_parameters() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_parameters_element">remove_parameters_element() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_process_graph_element">remove_process_graph_element() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.remove_unused_outputs">remove_unused_outputs() (kadmos.graph.graph_data.DataGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.remove_workflow_element">remove_workflow_element() (kadmos.cmdows.cmdows.CMDOWS method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.RepositoryConnectivityGraph">RepositoryConnectivityGraph (class in kadmos.graph.graph_data)</a> </li> <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.resolve_uids">resolve_uids() (kadmos.cmdows.cmdows.CMDOWS method)</a> @@ -941,14 +1053,16 @@ </li> <li><a href="KADMOS.html#kadmos.cmdows.cmdows.CMDOWS.simplify_equations">simplify_equations() (kadmos.cmdows.cmdows.CMDOWS method)</a> </li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.size">size() (kadmos.graph.graph_data.DataGraph method)</a> <ul> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.size">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> </li> </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.sort_non_coupled_nodes">sort_non_coupled_nodes() (kadmos.graph.graph_data.DataGraph method)</a> +</li> <li><a href="KADMOS.html#kadmos.graph.graph_data.DataGraph.split_variables">split_variables() (kadmos.graph.graph_data.DataGraph method)</a> <ul> @@ -1023,6 +1137,8 @@ <ul> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.vistoms_add">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.graph.mixin_vistoms.VistomsMixin.vistoms_add">(kadmos.graph.mixin_vistoms.VistomsMixin method)</a> </li> </ul></li> </ul></td> @@ -1031,8 +1147,12 @@ <ul> <li><a href="KADMOS.html#kadmos.graph.graph_kadmos.KadmosGraph.vistoms_create">(kadmos.graph.graph_kadmos.KadmosGraph method)</a> +</li> + <li><a href="KADMOS.html#kadmos.graph.mixin_vistoms.VistomsMixin.vistoms_create">(kadmos.graph.mixin_vistoms.VistomsMixin method)</a> </li> </ul></li> + <li><a href="KADMOS.html#kadmos.graph.mixin_vistoms.VistomsMixin">VistomsMixin (class in kadmos.graph.mixin_vistoms)</a> +</li> </ul></td> </tr></table> diff --git a/doc/objects.inv b/doc/objects.inv index bd121f00d9a12da75faf57252c6b51798c3adbd3..fdc046df12d7eec5eab1aad619e689fd3d798eb3 100644 Binary files a/doc/objects.inv and b/doc/objects.inv differ diff --git a/doc/py-modindex.html b/doc/py-modindex.html index 0c780c7bc2b3ecffc165bcbc9724270372fd9924..6f7d0ebeae5e622e590a38e63c1b3d9e8d567227 100644 --- a/doc/py-modindex.html +++ b/doc/py-modindex.html @@ -73,6 +73,11 @@ <td>    <a href="KADMOS.html#module-kadmos.utilities.printing"><code class="xref">kadmos.utilities.printing</code></a></td><td> <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="KADMOS.html#module-kadmos.utilities.strings"><code class="xref">kadmos.utilities.strings</code></a></td><td> + <em></em></td></tr> <tr class="cg-1"> <td></td> <td>    diff --git a/doc/searchindex.js b/doc/searchindex.js index b9ebc829b366a3427c3e6bceb463c8b0abde0018..8097b00ce1dfa18c54aa8bccde4b9d03f674567c 100644 --- a/doc/searchindex.js +++ b/doc/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["KADMOS"],envversion:52,filenames:["KADMOS.rst"],objects:{"":{kadmos:[0,0,0,"-"]},"kadmos.cmdows.cmdows":{CMDOWS:[0,1,1,""]},"kadmos.cmdows.cmdows.CMDOWS":{check:[0,2,1,""],check_references:[0,2,1,""],check_schema:[0,2,1,""],check_uids:[0,2,1,""],resolve_uids:[0,2,1,""],save:[0,2,1,""],schema:[0,2,1,""],simplify:[0,2,1,""],simplify_equations:[0,2,1,""],version:[0,2,1,""]},"kadmos.graph.graph_data":{DataGraph:[0,1,1,""],FundamentalProblemGraph:[0,1,1,""],RepositoryConnectivityGraph:[0,1,1,""]},"kadmos.graph.graph_data.DataGraph":{add_default_description:[0,2,1,""],add_default_name:[0,2,1,""],add_edge:[0,2,1,""],add_edges_from:[0,2,1,""],add_equation:[0,2,1,""],add_equation_label:[0,2,1,""],add_equation_labels:[0,2,1,""],add_nodes_from:[0,2,1,""],add_objective_function_by_nodes:[0,2,1,""],add_weighted_edges_from:[0,2,1,""],adj:[0,3,1,""],adjacency:[0,2,1,""],adjlist_inner_dict_factory:[0,3,1,""],adjlist_outer_dict_factory:[0,3,1,""],check:[0,2,1,""],check_cmdows_integrity:[0,2,1,""],check_for_coupling:[0,2,1,""],cleancopy:[0,2,1,""],clear:[0,2,1,""],copy:[0,2,1,""],copy_node_with_suffix:[0,2,1,""],count_function_nodes:[0,2,1,""],create_dsm:[0,2,1,""],degree:[0,3,1,""],disconnect_problematic_variables_from:[0,2,1,""],edge_attr_dict_factory:[0,3,1,""],edge_subgraph:[0,2,1,""],edges:[0,3,1,""],find_all_nodes:[0,2,1,""],fresh_copy:[0,2,1,""],get_adjacency_matrix:[0,2,1,""],get_categorized_nodes:[0,2,1,""],get_contracted_graph:[0,2,1,""],get_direct_coupling_nodes:[0,2,1,""],get_edge_data:[0,2,1,""],get_function_graph:[0,2,1,""],get_function_metadata:[0,2,1,""],get_function_nodes:[0,2,1,""],get_graph_properties:[0,2,1,""],get_node_attributes:[0,2,1,""],get_node_subcategory:[0,2,1,""],get_nodes_based_on_strings:[0,2,1,""],get_nodes_indegree:[0,2,1,""],get_nodes_outdegree:[0,2,1,""],get_nodes_subcategory:[0,2,1,""],get_number_of_couplings:[0,2,1,""],get_partitioned_graph:[0,2,1,""],get_sources:[0,2,1,""],get_subgraph_by_function_nodes:[0,2,1,""],get_system_inputs:[0,2,1,""],get_targets:[0,2,1,""],has_edge:[0,2,1,""],has_node:[0,2,1,""],has_nodes:[0,2,1,""],has_predecessor:[0,2,1,""],has_successor:[0,2,1,""],in_degree:[0,3,1,""],in_edges:[0,3,1,""],inspect:[0,2,1,""],inspect_node:[0,2,1,""],inspect_nodes:[0,2,1,""],is_directed:[0,2,1,""],is_multigraph:[0,2,1,""],make_all_variables_valid:[0,2,1,""],merge_function_modes:[0,2,1,""],merge_function_nodes_based_on_modes:[0,2,1,""],merge_parallel_functions:[0,2,1,""],merge_sequential_functions:[0,2,1,""],name:[0,3,1,""],nbunch_iter:[0,2,1,""],neighbors:[0,2,1,""],node:[0,3,1,""],node_dict_factory:[0,3,1,""],node_is_function:[0,2,1,""],node_is_hole:[0,2,1,""],node_is_objective_function:[0,2,1,""],node_is_output:[0,2,1,""],node_is_variable:[0,2,1,""],nodes:[0,3,1,""],number_of_edges:[0,2,1,""],number_of_nodes:[0,2,1,""],order:[0,2,1,""],out_degree:[0,3,1,""],out_edges:[0,3,1,""],plot_adjacency_matrix:[0,2,1,""],plot_graph:[0,2,1,""],pred:[0,3,1,""],predecessors:[0,2,1,""],print_graph:[0,2,1,""],relabel_function_nodes:[0,2,1,""],remove_edge:[0,2,1,""],remove_edges_from:[0,2,1,""],remove_function_nodes:[0,2,1,""],remove_node:[0,2,1,""],remove_nodes_from:[0,2,1,""],reverse:[0,2,1,""],save:[0,2,1,""],select_objectives_from_graph:[0,2,1,""],size:[0,2,1,""],split_variables:[0,2,1,""],subgraph:[0,2,1,""],succ:[0,3,1,""],successors:[0,2,1,""],to_directed:[0,2,1,""],to_undirected:[0,2,1,""],vistoms_add:[0,2,1,""],vistoms_create:[0,2,1,""]},"kadmos.graph.graph_data.FundamentalProblemGraph":{add_function_problem_roles:[0,2,1,""],cleancopy:[0,2,1,""],create_mdg:[0,2,1,""],create_mpg:[0,2,1,""],get_coupling_matrix:[0,2,1,""],get_mdg:[0,2,1,""],get_mg_function_ordering:[0,2,1,""],get_mpg:[0,2,1,""],mark_as_constraint:[0,2,1,""],mark_as_design_variable:[0,2,1,""],mark_as_objective:[0,2,1,""],mark_as_qoi:[0,2,1,""]},"kadmos.graph.graph_data.RepositoryConnectivityGraph":{cleancopy:[0,2,1,""],get_fpg_based_on_function_nodes:[0,2,1,""],get_fpg_based_on_list_functions:[0,2,1,""],get_fpg_based_on_sinks:[0,2,1,""],get_fpg_by_function_nodes:[0,2,1,""],get_function_paths_by_objective:[0,2,1,""],get_path_combinations:[0,2,1,""],select_function_combination_from:[0,2,1,""]},"kadmos.graph.graph_kadmos":{KadmosGraph:[0,1,1,""]},"kadmos.graph.graph_kadmos.KadmosGraph":{add_default_description:[0,2,1,""],add_default_name:[0,2,1,""],add_edge:[0,2,1,""],add_edges_from:[0,2,1,""],add_equation:[0,2,1,""],add_equation_label:[0,2,1,""],add_equation_labels:[0,2,1,""],add_nodes_from:[0,2,1,""],add_objective_function_by_nodes:[0,2,1,""],add_weighted_edges_from:[0,2,1,""],adj:[0,3,1,""],adjacency:[0,2,1,""],adjlist_inner_dict_factory:[0,3,1,""],adjlist_outer_dict_factory:[0,3,1,""],check:[0,2,1,""],check_cmdows_integrity:[0,2,1,""],check_for_coupling:[0,2,1,""],cleancopy:[0,2,1,""],clear:[0,2,1,""],copy:[0,2,1,""],copy_node_with_suffix:[0,2,1,""],count_function_nodes:[0,2,1,""],create_dsm:[0,2,1,""],degree:[0,3,1,""],disconnect_problematic_variables_from:[0,2,1,""],edge_attr_dict_factory:[0,3,1,""],edge_subgraph:[0,2,1,""],edges:[0,3,1,""],find_all_nodes:[0,2,1,""],fresh_copy:[0,2,1,""],get_adjacency_matrix:[0,2,1,""],get_categorized_nodes:[0,2,1,""],get_contracted_graph:[0,2,1,""],get_direct_coupling_nodes:[0,2,1,""],get_edge_data:[0,2,1,""],get_function_graph:[0,2,1,""],get_function_metadata:[0,2,1,""],get_function_nodes:[0,2,1,""],get_graph_properties:[0,2,1,""],get_node_attributes:[0,2,1,""],get_node_subcategory:[0,2,1,""],get_nodes_based_on_strings:[0,2,1,""],get_nodes_indegree:[0,2,1,""],get_nodes_outdegree:[0,2,1,""],get_nodes_subcategory:[0,2,1,""],get_number_of_couplings:[0,2,1,""],get_partitioned_graph:[0,2,1,""],get_sources:[0,2,1,""],get_subgraph_by_function_nodes:[0,2,1,""],get_system_inputs:[0,2,1,""],get_targets:[0,2,1,""],has_edge:[0,2,1,""],has_node:[0,2,1,""],has_nodes:[0,2,1,""],has_predecessor:[0,2,1,""],has_successor:[0,2,1,""],in_degree:[0,3,1,""],in_edges:[0,3,1,""],inspect:[0,2,1,""],inspect_node:[0,2,1,""],inspect_nodes:[0,2,1,""],is_directed:[0,2,1,""],is_multigraph:[0,2,1,""],make_all_variables_valid:[0,2,1,""],merge_function_modes:[0,2,1,""],merge_function_nodes_based_on_modes:[0,2,1,""],merge_parallel_functions:[0,2,1,""],merge_sequential_functions:[0,2,1,""],name:[0,3,1,""],nbunch_iter:[0,2,1,""],neighbors:[0,2,1,""],node:[0,3,1,""],node_dict_factory:[0,3,1,""],node_is_function:[0,2,1,""],node_is_hole:[0,2,1,""],node_is_objective_function:[0,2,1,""],node_is_output:[0,2,1,""],node_is_variable:[0,2,1,""],nodes:[0,3,1,""],number_of_edges:[0,2,1,""],number_of_nodes:[0,2,1,""],order:[0,2,1,""],out_degree:[0,3,1,""],out_edges:[0,3,1,""],plot_adjacency_matrix:[0,2,1,""],plot_graph:[0,2,1,""],pred:[0,3,1,""],predecessors:[0,2,1,""],print_graph:[0,2,1,""],relabel_function_nodes:[0,2,1,""],remove_edge:[0,2,1,""],remove_edges_from:[0,2,1,""],remove_function_nodes:[0,2,1,""],remove_node:[0,2,1,""],remove_nodes_from:[0,2,1,""],reverse:[0,2,1,""],save:[0,2,1,""],select_objectives_from_graph:[0,2,1,""],size:[0,2,1,""],split_variables:[0,2,1,""],subgraph:[0,2,1,""],succ:[0,3,1,""],successors:[0,2,1,""],to_directed:[0,2,1,""],to_undirected:[0,2,1,""],vistoms_add:[0,2,1,""],vistoms_create:[0,2,1,""]},"kadmos.graph.graph_process":{MdaoProcessGraph:[0,1,1,""],ProcessGraph:[0,1,1,""]},"kadmos.graph.graph_process.MdaoProcessGraph":{add_parallel_process:[0,2,1,""],add_simple_sequential_process:[0,2,1,""],cleancopy:[0,2,1,""],connect_nested_iterators:[0,2,1,""],get_nested_process_ordering:[0,2,1,""],get_node_text:[0,2,1,""],get_process_list:[0,2,1,""],inspect_process:[0,2,1,""]},"kadmos.graph.graph_process.ProcessGraph":{cleancopy:[0,2,1,""]},"kadmos.graph.mixin_equation":{EquationMixin:[0,1,1,""]},"kadmos.graph.mixin_equation.EquationMixin":{add_equation:[0,2,1,""],add_equation_label:[0,2,1,""],add_equation_labels:[0,2,1,""]},"kadmos.graph.mixin_mdao":{MdaoMixin:[0,1,1,""]},"kadmos.graph.mixin_mdao.MdaoMixin":{insert_node_on_diagonal:[0,2,1,""],remove_node_from_diagonal:[0,2,1,""]},"kadmos.knowledgebase.knowledgebase":{KnowledgeBase:[0,1,1,""]},"kadmos.knowledgebase.knowledgebase.KnowledgeBase":{get_function_graph:[0,2,1,""],get_kb_graphs:[0,2,1,""],get_rcg:[0,2,1,""],print_circular_connections_in_log:[0,2,1,""]},"kadmos.utilities":{general:[0,0,0,"-"],printing:[0,0,0,"-"],xml:[0,0,0,"-"]},"kadmos.utilities.general":{color_list:[0,4,1,""],export_as_json:[0,4,1,""],format_string_for_d3js:[0,4,1,""],get_element_dict:[0,4,1,""],get_friendly_id:[0,4,1,""],get_list_entries:[0,4,1,""],get_mdao_setup:[0,4,1,""],get_uid:[0,4,1,""],get_unique_friendly_id:[0,4,1,""],hex_to_rgb:[0,4,1,""],make_camel_case:[0,4,1,""],make_plural:[0,4,1,""],make_singular:[0,4,1,""],open_file:[0,4,1,""],remove_if_exists:[0,4,1,""],test_attr_cond:[0,4,1,""],transform_data_into_strings:[0,4,1,""],transform_string_into_format:[0,4,1,""],translate_dict_keys:[0,4,1,""],translate_list:[0,4,1,""],unmake_camel_case:[0,4,1,""]},"kadmos.utilities.printing":{print_in_table:[0,4,1,""],print_indexed_list:[0,4,1,""]},"kadmos.utilities.xml":{Element:[0,4,1,""],get_element_details:[0,4,1,""],get_xpath_from_uxpath:[0,4,1,""],merge:[0,4,1,""],recursively_empty:[0,4,1,""],recursively_stringify:[0,4,1,""],recursively_unique_attribute:[0,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:function"},terms:{"1e4":0,"5pm":0,"boolean":0,"case":0,"class":0,"default":0,"export":0,"final":0,"float":0,"function":0,"import":0,"int":0,"long":0,"new":0,"return":0,"true":0,"while":0,Adding:0,But:0,For:0,IDs:0,Not:0,That:0,The:0,There:0,These:0,Use:0,Useful:0,Will:0,__class__:0,__iter__:0,__len__:0,_check_category_a:0,_check_category_b:0,_check_category_c:0,_extra:0,_tag:0,abbreviate_keyword:[],abl:0,abov:0,absolut:[],access:0,accord:0,account:0,act:0,action:0,actual:0,add:0,add_actor:[],add_contact:[],add_dc_general_info:[],add_dc_performance_info:[],add_dc_remote_component_info:[],add_dc_verif:[],add_default_descript:0,add_default_nam:0,add_edg:0,add_edges_from:0,add_equ:0,add_equation_label:0,add_function_problem_rol:0,add_nod:0,add_nodes_from:0,add_objective_function_by_nod:0,add_parallel_process:0,add_path:0,add_process:[],add_simple_sequential_process:0,add_weighted_edges_from:0,added:0,addit:0,address:[],adher:0,adj:0,adj_it:0,adjac:0,adjlist_inner_dict_factori:0,adjlist_outer_dict_factori:0,adjust:0,advanc:0,affect:0,after:0,aircraft:0,algorithm:0,alia:0,all:0,all_keys_requir:[],all_nod:0,allow:0,allow_unconverged_coupl:0,along:0,alreadi:0,als:0,also:0,alwai:[],american:0,amount:0,analys:0,analysi:0,analyz:0,ani:0,anoth:0,appear:0,append:0,appli:0,applic:0,appyl:0,arbitrari:0,architectur:0,architecture_rol:[],arg:0,argument:0,around:0,as_view:0,ask:0,assert:[],assert_dict_kei:[],assert_element_tag:[],assess:0,assign:0,associ:0,assum:0,attempt:0,attr:0,attr_cond:0,attr_dict:0,attr_exclud:0,attr_includ:0,attr_list:0,attr_valu:0,attrdict:0,attrib:0,attribut:0,automat:0,avail:0,avoid:0,back:0,bar:0,base:0,baselin:0,basestr:0,becaus:0,becom:0,been:0,befor:0,behav:0,behavior:0,being:0,belong:0,below:0,between:0,block:0,blue:0,bool:0,both:0,bound:0,box:0,bracket:0,branch:[],build:0,calcul:[],call:0,camelcas:0,can:0,cannot:0,capac:0,categori:0,caus:0,certain:0,chang:0,change_graph_class:[],charact:[],characterist:0,check:0,check_cmdows_integr:0,check_for_coupl:0,check_graph:[],check_refer:0,check_schema:0,check_uid:0,child:0,children:[],children_to_remov:[],choic:0,choos:0,circular:0,circularconnect:0,clariti:0,clean:0,cleancopi:0,clear:0,close:0,clutter:0,cmdow:[],collect:0,collid:0,collis:0,color:0,color_list:0,color_set:0,column:0,combin:0,common:0,compani:[],compar:0,comparison:0,compet:[],complet:0,complex:[],compon:0,compos:0,compress:0,comput:0,condit:0,config:0,configur:0,confus:0,connect:0,connect_converg:[],connect_coordin:[],connect_doe_block:[],connect_nested_iter:0,connect_nodes_as_output:[],connect_optim:[],connect_qoi_nodes_as_input:[],consid:0,consider:0,consist:0,consol:0,constraint:0,constraint_nod:[],contact:[],contact_uid:[],contain:0,content:0,contig:0,continu:0,contract:0,contracted_graph:0,contraction_level:0,contrast:0,control:0,conv:[],conv_typ:[],conveni:0,convent:0,converg:0,convert:0,coor:[],coordin:[],copi:0,copy_a:[],copy_node_a:[],copy_node_with_suffix:0,copy_typ:0,correct:0,correspond:0,could:0,count:0,count_function_nod:0,countri:[],coupl:0,coupling_funct:[],coupling_strength:[],cpac:0,creat:0,create_dsm:0,create_mathematical_problem:[],create_mdg:0,create_mpg:0,creation_d:[],creator:0,creator_uid:[],criteria:0,cross:0,current:0,custom:0,cut:0,cwd:0,cycl:[],d3j:0,data:0,data_dictionari:0,data_exchange_dict:[],datadict:0,date:[],datetim:0,dc_uid:[],ddict:0,deep:0,deepcopi:0,deepcopy_a:[],defin:0,definit:[],deg:0,degre:0,degreeview:0,delet:0,delft:0,depart:[],depend:[],deprec:0,descend:0,describ:0,descript:0,design:0,design_variable_nod:[],desir:0,destin:0,destination_fold:0,detail:0,determin:0,develop:0,diagon:0,diagonal_po:0,diagram:0,dic:[],dict:0,dict_to_ord_dict:[],dictionari:0,differ:0,digraph:0,dimens:0,direct:0,directli:0,directori:0,disciplin:0,disciplinari:0,disconnect:0,disconnect_collided_target:0,disconnect_problematic_variables_from:0,disconnect_shared_sourc:0,disregard:0,distinguis:0,divid:0,doc:0,doctest:0,doe:0,doe_block:[],doesn:0,doing:0,done:0,dont:0,download:0,draw:0,dsm:0,dtc:0,due:0,duplic:0,dynam:0,each:0,ebunch:0,edg:0,edge_attr_dict_factori:0,edge_dict:0,edge_ind:0,edge_label:0,edge_or_nod:0,edge_subgraph:0,edgedataview:0,edu:0,effect:0,either:0,element:0,elementtre:0,email:[],empti:0,enabl:0,encod:0,encount:0,end:0,end_in_converg:0,end_in_iterative_nod:0,end_nod:0,engin:[],enrich:0,ensur:0,ensure_abs_xpath:[],entir:0,entri:0,entries_to_remov:0,equat:0,equival:0,error:0,especi:0,etc:0,evalu:0,even:0,everi:0,everyth:0,exactli:0,exampl:0,exblock_uid:[],exce:0,except:0,exchang:0,exclud:0,exclus:0,execut:0,executableblock:[],exhaust:0,exist:0,expect:0,expected_amount:[],expected_kei:[],expected_tag:[],expected_text:[],explicit:0,export_as_json:0,express:0,extens:0,extract:0,fail:0,fals:0,feedback:0,feedforward:[],fidelity_level:[],fig_num:0,fig_siz:0,figur:0,file:0,file_nam:0,file_path:0,file_ref:0,file_typ:0,filenam:0,filter:0,find:0,find_all_nod:0,finish:0,first:0,folder:0,follow:0,foo:0,foovalu:0,form:0,format:0,format_string_for_d3j:0,format_string_for_latex:[],format_string_for_vistom:[],found:0,four:0,fpg:0,fresh:0,fresh_copi:0,from:0,front:0,full:0,func_ord:[],funcnam:0,function_ord:0,function_order_method:0,functiongraph:0,fundament:0,further:0,futur:0,gauss:0,gener:[],get:0,get_adjacency_matrix:0,get_categorized_nod:0,get_contracted_graph:0,get_coupling_matrix:0,get_design_competences_uid:[],get_direct_coupling_nod:0,get_edge_data:0,get_element_detail:0,get_element_dict:0,get_element_of_uid:[],get_executable_blocks_uid:[],get_feedback_info:[],get_fpg_based_on_function_nod:0,get_fpg_based_on_list_funct:0,get_fpg_based_on_sink:0,get_fpg_by_function_nod:0,get_friendly_id:0,get_function_depend:[],get_function_graph:0,get_function_metadata:0,get_function_nod:0,get_function_paths_by_object:0,get_graph_properti:0,get_inputs_uid:[],get_kb_graph:0,get_list_entri:0,get_lowest_psn:[],get_mathematical_functions_uid:[],get_mdao_setup:0,get_mdg:0,get_mg_function_ord:0,get_mpg:0,get_nested_process_ord:0,get_node_attribut:0,get_node_subcategori:0,get_node_text:0,get_nodes_based_on_str:0,get_nodes_indegre:0,get_nodes_outdegre:0,get_nodes_subcategori:0,get_number_of_coupl:0,get_ordered_cycl:[],get_outputs_uid:[],get_parameters_uid:[],get_partitioned_graph:0,get_path_combin:0,get_possible_function_ord:[],get_process_hierarchi:[],get_process_list:0,get_rcg:0,get_same_graph_class:[],get_sourc:0,get_subgraph_by_function_nod:0,get_system_input:0,get_target:0,get_uid:0,get_uid_search_xpath:[],get_unique_friendly_id:0,get_used_parameter_uid:[],get_xpath_from_uxpath:0,get_xpath_of_uid:[],give:0,given:0,gkhome:0,glaro:0,global:[],graph_check_crit:0,graph_class:[],graph_data:0,graph_id:0,graph_kadmo:0,graph_process:0,graph_properti:0,graphml:0,group:0,guarante:0,guess:0,handl:0,has:0,has_edg:0,has_nod:0,has_predecessor:0,has_successor:0,hashabl:0,have:0,header:0,hello:0,henc:0,here:0,hex:0,hex_to_rgb:0,hierarchi:[],higher_level_remov:[],highest:0,hold:0,hole:0,how:0,howev:0,html:0,http:0,ident:0,identifi:0,idf:0,idiom:0,ids:0,ignor:0,ignore_func:0,ignore_list:[],ignorefunct:0,illustr:0,implement:0,in_degre:0,in_edg:0,incid:0,includ:0,include_al:0,include_couplings_as_final_output:[],include_reference_data:0,include_system_var:0,indec:0,indegre:0,indegreeview:0,indent:0,indentifi:0,independ:0,index:0,index_bracket:0,indic:0,induc:0,inedgeview:0,info:0,inform:0,initi:0,inout:0,inp:[],inplac:0,input:0,input_list:0,inputless:0,insert:0,insert_node_on_diagon:0,insid:0,inspect:0,inspect_nod:0,inspect_process:0,inspir:0,instanc:0,instanceid:0,instead:0,integ:0,integr:0,interest:0,interfac:0,invalid:0,is_direct:0,is_multigraph:0,italian:0,item:0,iter:0,iterative_nod:0,itertool:0,its:0,itself:0,jacobi:[],japanes:0,job_nam:[],join:0,json:0,just:0,kb_dir_path:0,kdm:0,keep:0,keep_empty_el:0,keep_objective_vari:0,keep_tex_fil:0,kei:0,kept:0,key_ord:[],keyerror:0,keys_to_be_remov:0,keyword:0,knowledg:0,knowledge_bas:0,kwarg:0,label:0,label_extens:0,labeling_method:[],languag:0,larg:0,last:0,latex:[],lead:0,least:0,left:[],len:0,length:0,less:0,let:0,level:0,librari:0,like:0,limit:0,line:[],link:0,list:0,list_of_funct:0,list_of_nod:0,list_of_sink:0,list_of_tool:0,literatur:0,local:0,log:0,lookup:0,loop:0,lost:0,lower:0,lower_bound:0,lowest:0,mai:0,mainli:0,make:0,make_all_variables_valid:0,make_camel_cas:0,make_plur:0,make_plural_opt:0,make_singular:0,makeel:0,mani:0,manipul:0,manipulate_coupling_nod:[],manual:0,map:0,mark:0,mark_as_constraint:0,mark_as_design_vari:0,mark_as_object:0,mark_as_qoi:0,master:0,match:0,mathemat:[],matplotlib:0,matrix:0,max_func:0,maxim:0,maximum:0,mda:0,mda_typ:0,mdao:0,mdao_setup:0,mdaodatagraph:0,mdf:0,mdg:0,mdo:0,mdo_architectur:0,meet:0,membership:0,memori:0,merg:0,merge_func:0,merge_function_mod:0,merge_function_nodes_based_on_mod:0,merge_parallel_funct:0,merge_sequential_funct:0,merger:0,messag:0,metadata:0,method:0,meti:0,mg_function_ord:0,might:0,min_func:0,mind:0,minim:[],minimize_feedback:[],minimum:0,mixin_equ:0,mixin_mdao:0,mixin_vistom:[],mode:0,modeid:0,model_definit:[],modifi:[],modul:0,more:0,most:0,mpg:0,multi_start:[],multidigraph:0,multigraph:0,multipl:0,must:0,my_obj_fcn_nam:0,mygraph:0,n_coupling_var:[],n_disciplin:[],n_global_constraint:[],n_global_var:[],n_local_var:[],n_part:0,name:0,named_obj_fcn:0,nativ:0,nbr:0,nbrdict:0,nbunch:0,nbunch_it:0,nd_iter:0,nedg:0,need:0,neighbor:0,nest:0,nested_funct:0,networkx:0,networkxerror:0,never:0,new_label:0,niter:0,nnode:0,node:0,node_dict_factori:0,node_id:0,node_is_funct:0,node_is_hol:0,node_is_objective_funct:0,node_is_output:0,node_is_vari:0,node_label:[],node_select:[],nodedata:0,nodedataview:0,nodeview:0,nomin:0,nominal_valu:0,non:0,none:0,nonetyp:0,normal:0,notat:0,note:0,notification_messag:[],nsmap:0,number:0,number_of_edg:0,number_of_nod:0,numer:0,obj_vars_cov:0,object:0,objective_nod:[],obtain:0,off:0,onc:0,one:0,ones:0,onli:0,only_feedback:0,open:0,open_fil:0,open_pdf:0,oper:0,operator_uid:[],opt:[],optim:0,option:0,order:0,org:0,organ:[],origin:0,other:0,otherwis:0,our:0,out:0,out_degre:0,out_edg:0,outdegre:0,outdegreeview:0,outedgedataview:0,outedgeview:0,outgo:0,outp:[],output:0,outputless:0,over:0,overal:0,overrid:[],override_with_final_output:[],overview:0,overwrit:0,own:0,owner_uid:[],packag:0,page:0,pair:0,parallel:0,parallel_funct:0,param:0,param_uid:[],paramet:0,params_uid:[],parser:0,part:0,partit:0,pass:0,pate:0,path:0,path_graph:0,paus:0,pdf:0,peopl:0,per:0,percentag:[],perform:0,permit:0,pickl:0,place:0,platform:0,plot:0,plot_adjacency_matrix:0,plot_graph:0,plural:0,png:0,point:0,posit:0,possibl:0,post:0,pre:0,preced:0,precis:[],pred:0,predecessor:0,prefer:0,prefix:0,presenc:0,present:0,pretti:0,pretty_print:0,print:[],print_attribut:0,print_circular_connections_in_log:0,print_contain:0,print_coupl:0,print_graph:0,print_in_log:0,print_in_t:0,print_indexed_list:0,problem:0,problemat:0,process:0,process_info:0,processgraph:[],produc:0,product:0,prompt:0,properti:0,provid:0,psg:0,psn:[],pull:0,pure:0,purpos:0,pymerg:0,pyplot:0,python:0,qoi:[],qoi_nod:[],quantiti:0,queri:0,quickli:0,quietli:0,quot:[],rais:0,raise_error:0,raise_error_if_tru:0,rang:0,rce:0,rcg:0,read:0,readabl:0,reciproc:0,recognis:0,recurs:0,recursively_empti:0,recursively_stringifi:0,recursively_unique_attribut:0,red:0,reduc:0,reduct:0,ref:0,refer:0,reference_fil:0,reference_valu:[],refin:0,reflect:0,reinstanti:[],rel:0,relabel:0,relabel_function_nod:0,relat:[],relev:0,remain:0,remot:[],remote_engin:[],remov:0,remove_after_compress:0,remove_children_of:[],remove_contact:[],remove_data_graph_el:[],remove_edg:0,remove_edges_from:0,remove_element_based_on_uid:[],remove_element_based_on_xpath:[],remove_feedback:[],remove_feedforward:[],remove_function_nod:0,remove_if_exist:0,remove_in_and_output:[],remove_input:[],remove_nod:0,remove_node_from_diagon:0,remove_nodes_from:0,remove_output:[],remove_paramet:[],remove_parameters_el:[],remove_process_graph_el:[],remove_workflow_el:[],renam:0,replac:0,replacement_id:0,report:0,repres:0,represent:0,reproduc:0,request:0,requir:0,resolv:0,resolve_uid:0,resourc:0,respect:0,rest:0,result:0,retriev:0,revers:0,rgb:0,right:0,role:0,round:0,routin:0,row1:0,row2:0,rtype:[],rule:0,run:0,run_tim:[],runtim:0,safe:0,same:0,sampl:0,sampledir:0,samplefil:0,satisfi:0,save:0,save_a:0,scalar:[],schema:0,script:0,search:0,second:0,see:0,seidel:0,select:0,select_function_combination_from:0,select_objectives_from_graph:0,self:0,sellar:0,separ:0,sequenc:0,sequenti:0,server:0,set:0,sever:0,shallow:0,share:0,shorter:[],should:0,show:0,show_now:0,shown:0,side:[],sidebar:0,signific:0,silent:0,similar:0,simpl:0,simpler:0,simpli:0,simplifi:0,simplify_equ:0,sinc:0,singl:0,single_or_multi_execut:[],singular:0,sink:0,size:0,skip:0,slave:0,small:0,some:0,song:[],sort:0,sort_bi:0,sort_kei:0,sort_non_coupled_nod:[],sourc:0,space:0,specif:0,specifi:0,split:0,split_vari:0,splittabl:0,squar:0,standard:0,start:0,start_nod:0,start_step:0,statement:0,statu:[],step:0,still:0,store:0,str:0,string:[],stringifi:0,structur:0,style:0,sub:0,subcategori:0,subclass:0,subgraph:0,subscript:0,subset:0,succ:0,successor:0,suffix:0,suit:0,sum:0,summar:0,summarize_var:0,suppli:0,sure:0,svg:0,symbol:0,syntax:0,system:0,system_input:0,tabl:0,tabul:0,tag:[],take:0,taken:0,target:0,technic:0,telephon:[],test:0,test_attr_cond:0,test_valu:0,tex:0,text:0,textfil:[],thei:0,them:0,therefor:0,thi:0,think:0,third:0,those:0,though:0,through:0,thu:0,time:0,timestamp:0,titl:0,to_direct:0,to_undirect:0,todo:0,togeth:0,tool:0,total:0,tpwgt:0,transfer:0,transform:0,transform_data_into_str:0,transform_string_into_format:0,translat:0,translate_dict_kei:0,translate_list:0,tree:0,tupl:0,twice:0,two:0,type:0,typic:0,uid:0,uid_length:0,uml:0,umn:0,unconnect:0,under:0,underscor:0,undirect:0,uniqu:0,unmake_camel_cas:0,unnamed_funct:0,unpack:0,until:0,unwant:[],updat:0,upper:0,upper_bound:0,usag:0,use:0,use_d3js_node_id:0,use_data_graph:0,use_png_fig:0,use_pretty_print:0,used:0,used_id:0,useful:0,user:0,user_prompt_select_opt:0,using:0,usual:0,utf:0,uxpath:0,valid:0,valu:0,var_dim:0,var_valu:0,variabl:0,variableinstance1:0,variableinstance2:0,variableinstance3:0,variableinstance4:0,varieti:0,variou:0,verif:[],verifi:[],versatil:0,version:0,via:0,view:0,vispack_vers:0,vistom:0,vistoms_add:0,vistoms_cr:0,vistoms_dir:0,vistoms_vers:0,visual:0,wai:0,wang:[],want:0,warn:0,weight:0,well:0,what:0,when:0,where:0,whether:0,which:0,window:0,wing:0,within:[],without:0,wn2898:0,work:0,workflow:0,write:[],write_problem_to_textfil:[],written:0,wrong:0,xdsm:0,xml:[],xml_declar:0,xpath:0,yet:0,yield:0,you:0,your:0,zero:0,zhang:[],zip:0},titles:["Welcome to KADMOS\u2019s documentation!"],titleterms:{cmdow:0,code:0,datagraph:0,document:0,equationmixin:0,fundamentalproblemgraph:0,gener:0,graph:0,kadmo:0,kadmosgraph:0,knowledgebas:0,mdaodatagraph:[],mdaomixin:0,mdaoprocessgraph:0,print:0,processgraph:0,repositoryconnectivitygraph:0,string:0,util:0,vispackmixin:[],vistomsmixin:0,welcom:0,xml:0}}) \ No newline at end of file +Search.setIndex({docnames:["KADMOS"],envversion:52,filenames:["KADMOS.rst"],objects:{"":{kadmos:[0,0,0,"-"]},"kadmos.cmdows.cmdows":{CMDOWS:[0,1,1,""]},"kadmos.cmdows.cmdows.CMDOWS":{add_actor:[0,2,1,""],add_contact:[0,2,1,""],add_dc:[0,2,1,""],add_dc_general_info:[0,2,1,""],add_dc_inputs_element:[0,2,1,""],add_dc_outputs_element:[0,2,1,""],add_dc_performance_info:[0,2,1,""],add_dc_remote_component_info:[0,2,1,""],add_dc_verification:[0,2,1,""],add_element_to_element_of_uid:[0,2,1,""],add_header:[0,2,1,""],add_new_parameters_from_element:[0,2,1,""],assert_element_tag:[0,2,1,""],check:[0,2,1,""],check_references:[0,2,1,""],check_schema:[0,2,1,""],check_uids:[0,2,1,""],ensure_abs_xpath:[0,2,1,""],get_design_competences_uids:[0,2,1,""],get_element_of_uid:[0,2,1,""],get_executable_blocks_uids:[0,2,1,""],get_inputs_uids:[0,2,1,""],get_mathematical_functions_uids:[0,2,1,""],get_outputs_uids:[0,2,1,""],get_parameters_uids:[0,2,1,""],get_used_parameter_uids:[0,2,1,""],get_xpath_of_uid:[0,2,1,""],remove_children_of_uid:[0,2,1,""],remove_children_of_xpath:[0,2,1,""],remove_contact:[0,2,1,""],remove_data_graph_element:[0,2,1,""],remove_element_based_on_uid:[0,2,1,""],remove_element_based_on_xpath:[0,2,1,""],remove_in_and_outputs:[0,2,1,""],remove_inputs:[0,2,1,""],remove_outputs:[0,2,1,""],remove_parameter:[0,2,1,""],remove_parameters:[0,2,1,""],remove_parameters_element:[0,2,1,""],remove_process_graph_element:[0,2,1,""],remove_workflow_element:[0,2,1,""],resolve_uids:[0,2,1,""],save:[0,2,1,""],schema:[0,2,1,""],simplify:[0,2,1,""],simplify_equations:[0,2,1,""],version:[0,2,1,""]},"kadmos.graph.graph_data":{DataGraph:[0,1,1,""],FundamentalProblemGraph:[0,1,1,""],RepositoryConnectivityGraph:[0,1,1,""]},"kadmos.graph.graph_data.DataGraph":{add_default_description:[0,2,1,""],add_default_name:[0,2,1,""],add_edges_from:[0,2,1,""],add_equation:[0,2,1,""],add_equation_label:[0,2,1,""],add_equation_labels:[0,2,1,""],add_nodes_from:[0,2,1,""],add_objective_function_by_nodes:[0,2,1,""],add_weighted_edges_from:[0,2,1,""],adj:[0,3,1,""],adjacency:[0,2,1,""],adjlist_inner_dict_factory:[0,3,1,""],adjlist_outer_dict_factory:[0,3,1,""],change_graph_class:[0,2,1,""],check:[0,2,1,""],check_cmdows_integrity:[0,2,1,""],check_for_coupling:[0,2,1,""],clear:[0,2,1,""],copy:[0,2,1,""],copy_as:[0,2,1,""],copy_node_with_suffix:[0,2,1,""],count_function_nodes:[0,2,1,""],create_dsm:[0,2,1,""],deepcopy:[0,2,1,""],deepcopy_as:[0,2,1,""],degree:[0,3,1,""],disconnect_problematic_variables_from:[0,2,1,""],edge_attr_dict_factory:[0,3,1,""],edge_subgraph:[0,2,1,""],edges:[0,3,1,""],find_all_nodes:[0,2,1,""],fresh_copy:[0,2,1,""],get_adjacency_matrix:[0,2,1,""],get_categorized_nodes:[0,2,1,""],get_contracted_graph:[0,2,1,""],get_coupling_matrix:[0,2,1,""],get_direct_coupling_nodes:[0,2,1,""],get_edge_data:[0,2,1,""],get_feedback_info:[0,2,1,""],get_function_graph:[0,2,1,""],get_function_metadata:[0,2,1,""],get_function_nodes:[0,2,1,""],get_graph_properties:[0,2,1,""],get_node_attributes:[0,2,1,""],get_node_subcategory:[0,2,1,""],get_nodes_based_on_strings:[0,2,1,""],get_nodes_indegree:[0,2,1,""],get_nodes_outdegree:[0,2,1,""],get_nodes_subcategory:[0,2,1,""],get_number_of_couplings:[0,2,1,""],get_partitioned_graph:[0,2,1,""],get_possible_function_order:[0,2,1,""],get_same_graph_class:[0,2,1,""],get_sources:[0,2,1,""],get_subgraph_by_function_nodes:[0,2,1,""],get_system_inputs:[0,2,1,""],get_targets:[0,2,1,""],has_edge:[0,2,1,""],has_node:[0,2,1,""],has_nodes:[0,2,1,""],has_predecessor:[0,2,1,""],has_successor:[0,2,1,""],in_degree:[0,3,1,""],in_edges:[0,3,1,""],inspect:[0,2,1,""],inspect_node:[0,2,1,""],inspect_nodes:[0,2,1,""],is_directed:[0,2,1,""],is_multigraph:[0,2,1,""],make_all_variables_valid:[0,2,1,""],mark_as_constraint:[0,2,1,""],mark_as_constraints:[0,2,1,""],mark_as_design_variable:[0,2,1,""],mark_as_design_variables:[0,2,1,""],mark_as_objective:[0,2,1,""],mark_as_qois:[0,2,1,""],merge_function_modes:[0,2,1,""],merge_function_nodes_based_on_modes:[0,2,1,""],merge_parallel_functions:[0,2,1,""],merge_sequential_functions:[0,2,1,""],minimize_feedback:[0,2,1,""],name:[0,3,1,""],nbunch_iter:[0,2,1,""],neighbors:[0,2,1,""],node:[0,3,1,""],node_dict_factory:[0,3,1,""],node_is_function:[0,2,1,""],node_is_hole:[0,2,1,""],node_is_objective_function:[0,2,1,""],node_is_output:[0,2,1,""],node_is_variable:[0,2,1,""],nodes:[0,3,1,""],number_of_edges:[0,2,1,""],number_of_nodes:[0,2,1,""],order:[0,2,1,""],out_degree:[0,3,1,""],out_edges:[0,3,1,""],plot_adjacency_matrix:[0,2,1,""],plot_graph:[0,2,1,""],pred:[0,3,1,""],predecessors:[0,2,1,""],print_graph:[0,2,1,""],relabel_function_nodes:[0,2,1,""],remove_edge:[0,2,1,""],remove_edges_from:[0,2,1,""],remove_function_nodes:[0,2,1,""],remove_node:[0,2,1,""],remove_nodes_from:[0,2,1,""],remove_unused_outputs:[0,2,1,""],reverse:[0,2,1,""],save:[0,2,1,""],select_objectives_from_graph:[0,2,1,""],size:[0,2,1,""],sort_non_coupled_nodes:[0,2,1,""],split_variables:[0,2,1,""],subgraph:[0,2,1,""],succ:[0,3,1,""],successors:[0,2,1,""],to_directed:[0,2,1,""],to_undirected:[0,2,1,""],vistoms_add:[0,2,1,""],vistoms_create:[0,2,1,""]},"kadmos.graph.graph_data.FundamentalProblemGraph":{add_function_problem_roles:[0,2,1,""],create_mdg:[0,2,1,""],create_mpg:[0,2,1,""],get_mdg:[0,2,1,""],get_mg_function_ordering:[0,2,1,""],get_mpg:[0,2,1,""],impose_mdao_architecture:[0,2,1,""]},"kadmos.graph.graph_data.RepositoryConnectivityGraph":{create_mathematical_problem:[0,2,1,""],get_fpg_based_on_function_nodes:[0,2,1,""],get_fpg_based_on_list_functions:[0,2,1,""],get_fpg_based_on_sinks:[0,2,1,""],get_fpg_by_function_nodes:[0,2,1,""],get_function_paths_by_objective:[0,2,1,""],get_path_combinations:[0,2,1,""],select_function_combination_from:[0,2,1,""]},"kadmos.graph.graph_kadmos":{KadmosGraph:[0,1,1,""]},"kadmos.graph.graph_kadmos.KadmosGraph":{add_default_description:[0,2,1,""],add_default_name:[0,2,1,""],add_edges_from:[0,2,1,""],add_equation:[0,2,1,""],add_equation_label:[0,2,1,""],add_equation_labels:[0,2,1,""],add_nodes_from:[0,2,1,""],add_objective_function_by_nodes:[0,2,1,""],add_weighted_edges_from:[0,2,1,""],adj:[0,3,1,""],adjacency:[0,2,1,""],adjlist_inner_dict_factory:[0,3,1,""],adjlist_outer_dict_factory:[0,3,1,""],change_graph_class:[0,2,1,""],check:[0,2,1,""],check_cmdows_integrity:[0,2,1,""],check_for_coupling:[0,2,1,""],clear:[0,2,1,""],copy:[0,2,1,""],copy_as:[0,2,1,""],copy_node_with_suffix:[0,2,1,""],count_function_nodes:[0,2,1,""],create_dsm:[0,2,1,""],deepcopy:[0,2,1,""],deepcopy_as:[0,2,1,""],degree:[0,3,1,""],disconnect_problematic_variables_from:[0,2,1,""],edge_attr_dict_factory:[0,3,1,""],edge_subgraph:[0,2,1,""],edges:[0,3,1,""],find_all_nodes:[0,2,1,""],fresh_copy:[0,2,1,""],get_adjacency_matrix:[0,2,1,""],get_categorized_nodes:[0,2,1,""],get_contracted_graph:[0,2,1,""],get_direct_coupling_nodes:[0,2,1,""],get_edge_data:[0,2,1,""],get_function_graph:[0,2,1,""],get_function_metadata:[0,2,1,""],get_function_nodes:[0,2,1,""],get_graph_properties:[0,2,1,""],get_node_attributes:[0,2,1,""],get_node_subcategory:[0,2,1,""],get_nodes_based_on_strings:[0,2,1,""],get_nodes_indegree:[0,2,1,""],get_nodes_outdegree:[0,2,1,""],get_nodes_subcategory:[0,2,1,""],get_number_of_couplings:[0,2,1,""],get_partitioned_graph:[0,2,1,""],get_same_graph_class:[0,2,1,""],get_sources:[0,2,1,""],get_subgraph_by_function_nodes:[0,2,1,""],get_system_inputs:[0,2,1,""],get_targets:[0,2,1,""],has_edge:[0,2,1,""],has_node:[0,2,1,""],has_nodes:[0,2,1,""],has_predecessor:[0,2,1,""],has_successor:[0,2,1,""],in_degree:[0,3,1,""],in_edges:[0,3,1,""],inspect:[0,2,1,""],inspect_node:[0,2,1,""],inspect_nodes:[0,2,1,""],is_directed:[0,2,1,""],is_multigraph:[0,2,1,""],make_all_variables_valid:[0,2,1,""],merge_function_modes:[0,2,1,""],merge_function_nodes_based_on_modes:[0,2,1,""],merge_parallel_functions:[0,2,1,""],merge_sequential_functions:[0,2,1,""],name:[0,3,1,""],nbunch_iter:[0,2,1,""],neighbors:[0,2,1,""],node:[0,3,1,""],node_dict_factory:[0,3,1,""],node_is_function:[0,2,1,""],node_is_hole:[0,2,1,""],node_is_objective_function:[0,2,1,""],node_is_output:[0,2,1,""],node_is_variable:[0,2,1,""],nodes:[0,3,1,""],number_of_edges:[0,2,1,""],number_of_nodes:[0,2,1,""],order:[0,2,1,""],out_degree:[0,3,1,""],out_edges:[0,3,1,""],plot_adjacency_matrix:[0,2,1,""],plot_graph:[0,2,1,""],pred:[0,3,1,""],predecessors:[0,2,1,""],print_graph:[0,2,1,""],relabel_function_nodes:[0,2,1,""],remove_edge:[0,2,1,""],remove_edges_from:[0,2,1,""],remove_function_nodes:[0,2,1,""],remove_node:[0,2,1,""],remove_nodes_from:[0,2,1,""],reverse:[0,2,1,""],save:[0,2,1,""],select_objectives_from_graph:[0,2,1,""],size:[0,2,1,""],split_variables:[0,2,1,""],subgraph:[0,2,1,""],succ:[0,3,1,""],successors:[0,2,1,""],to_directed:[0,2,1,""],to_undirected:[0,2,1,""],vistoms_add:[0,2,1,""],vistoms_create:[0,2,1,""]},"kadmos.graph.graph_process":{MdaoProcessGraph:[0,1,1,""],ProcessGraph:[0,1,1,""]},"kadmos.graph.graph_process.MdaoProcessGraph":{add_process:[0,2,1,""],connect_nested_iterators:[0,2,1,""],get_lowest_psn:[0,2,1,""],get_node_text:[0,2,1,""],get_ordered_cycles:[0,2,1,""],get_process_hierarchy:[0,2,1,""],get_process_list:[0,2,1,""],inspect_process:[0,2,1,""]},"kadmos.graph.mixin_equation":{EquationMixin:[0,1,1,""]},"kadmos.graph.mixin_equation.EquationMixin":{add_equation:[0,2,1,""],add_equation_label:[0,2,1,""],add_equation_labels:[0,2,1,""]},"kadmos.graph.mixin_mdao":{MdaoMixin:[0,1,1,""]},"kadmos.graph.mixin_mdao.MdaoMixin":{insert_node_on_diagonal:[0,2,1,""],remove_node_from_diagonal:[0,2,1,""]},"kadmos.graph.mixin_vistoms":{VistomsMixin:[0,1,1,""]},"kadmos.graph.mixin_vistoms.VistomsMixin":{vistoms_add:[0,2,1,""],vistoms_create:[0,2,1,""]},"kadmos.knowledgebase.knowledgebase":{KnowledgeBase:[0,1,1,""]},"kadmos.knowledgebase.knowledgebase.KnowledgeBase":{get_function_dependencies:[0,2,1,""],get_function_graph:[0,2,1,""],get_kb_graphs:[0,2,1,""],get_rcg:[0,2,1,""],print_circular_connections_in_log:[0,2,1,""]},"kadmos.utilities":{general:[0,0,0,"-"],printing:[0,0,0,"-"],strings:[0,0,0,"-"],xml:[0,0,0,"-"]},"kadmos.utilities.general":{assert_dict_keys:[0,4,1,""],color_list:[0,4,1,""],dict_to_ord_dict:[0,4,1,""],export_as_json:[0,4,1,""],format_string_for_latex:[0,4,1,""],format_string_for_vistoms:[0,4,1,""],get_element_dict:[0,4,1,""],get_friendly_id:[0,4,1,""],get_list_entries:[0,4,1,""],get_mdao_setup:[0,4,1,""],get_uid:[0,4,1,""],get_unique_friendly_id:[0,4,1,""],hex_to_rgb:[0,4,1,""],make_camel_case:[0,4,1,""],make_plural:[0,4,1,""],make_singular:[0,4,1,""],open_file:[0,4,1,""],remove_if_exists:[0,4,1,""],test_attr_cond:[0,4,1,""],transform_data_into_strings:[0,4,1,""],transform_string_into_format:[0,4,1,""],translate_dict_keys:[0,4,1,""],translate_list:[0,4,1,""],unmake_camel_case:[0,4,1,""]},"kadmos.utilities.printing":{print_in_table:[0,4,1,""],print_indexed_list:[0,4,1,""]},"kadmos.utilities.xml":{Element:[0,4,1,""],get_element_details:[0,4,1,""],get_uid_search_xpath:[0,4,1,""],merge:[0,4,1,""],recursively_empty:[0,4,1,""],recursively_stringify:[0,4,1,""],recursively_unique_attribute:[0,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:function"},terms:{"1e4":0,"5pm":0,"boolean":0,"case":0,"class":0,"default":0,"export":0,"final":0,"float":0,"function":0,"import":0,"int":0,"long":0,"new":0,"return":0,"true":0,"while":0,Adding:0,But:0,For:0,IDs:0,Not:0,That:0,The:0,There:0,These:0,Use:0,Useful:0,Will:0,__all__:0,__class__:0,__iter__:0,__len__:0,__none__:0,_check_category_a:0,_check_category_b:0,_check_category_c:0,_extra:0,_tag:0,abbreviate_keyword:0,abl:0,abov:0,absolut:0,access:0,accord:0,account:0,act:0,action:0,actual:0,add:0,add_actor:0,add_contact:0,add_dc:0,add_dc_general_info:0,add_dc_inputs_el:0,add_dc_outputs_el:0,add_dc_performance_info:0,add_dc_remote_component_info:0,add_dc_verif:0,add_default_descript:0,add_default_nam:0,add_edg:0,add_edges_from:0,add_element_to_element_of_uid:0,add_equ:0,add_equation_label:0,add_function_problem_rol:0,add_head:0,add_new_parameters_from_el:0,add_nod:0,add_nodes_from:0,add_objective_function_by_nod:0,add_parallel_process:[],add_path:0,add_process:0,add_simple_sequential_process:[],add_weighted_edges_from:0,added:0,addit:0,address:0,adher:0,adj:0,adj_it:0,adjac:0,adjlist_inner_dict_factori:0,adjlist_outer_dict_factori:0,adjust:0,advanc:0,affect:0,after:0,aircraft:0,algorithm:0,alia:0,all:0,all_keys_requir:0,all_nod:0,allow:0,allow_unconverged_coupl:0,along:0,alreadi:0,als:0,also:0,alwai:[],american:0,amount:0,analys:0,analysi:0,analyz:0,ani:0,anoth:0,appear:0,append:0,appli:0,applic:0,appyl:0,arbitrari:0,architectur:0,architecture_rol:[],arg:0,argument:0,around:0,as_view:0,ask:0,assert:0,assert_dict_kei:0,assert_element_tag:0,assess:0,assign:0,associ:0,assum:0,attempt:0,attr:0,attr_cond:0,attr_dict:0,attr_exclud:0,attr_includ:0,attr_list:0,attr_valu:0,attrdict:0,attrib:0,attribut:0,automat:0,avail:0,avoid:[],back:0,bar:0,base:0,baselin:0,basestr:0,becaus:0,becom:0,been:0,befor:0,behav:0,behavior:0,being:0,belong:0,below:0,between:0,block:0,blue:0,bool:0,both:0,bound:0,box:0,bracket:0,branch:0,build:0,calcul:0,call:0,camelcas:0,can:0,cannot:0,capac:[],categori:0,caus:0,certain:0,chang:0,change_graph_class:0,charact:0,characterist:0,check:0,check_cmdows_integr:0,check_for_coupl:0,check_graph:0,check_refer:0,check_schema:0,check_uid:0,child:0,children:0,children_to_keep:0,children_to_remov:0,choic:0,choos:0,circular:0,circularconnect:0,clariti:0,clean:0,cleancopi:[],clear:0,close:0,clutter:0,cmdow:[],cmdowsvers:0,collect:0,collid:0,collis:0,color:0,color_list:0,color_set:0,column:0,combin:0,common:0,compani:0,compar:0,comparison:0,compet:0,compile_pdf:0,complet:0,complex:0,compon:0,compos:0,compress:0,comput:0,condit:0,config:0,configur:0,confus:0,connect:0,connect_converg:[],connect_coordin:[],connect_doe_block:[],connect_nested_iter:0,connect_nodes_as_output:[],connect_optim:[],connect_qoi_nodes_as_input:[],consid:0,consider:0,consist:0,consol:0,constraint:0,constraint_nod:[],contact:0,contact_uid:0,contain:0,content:0,contig:0,continu:0,contract:0,contracted_graph:0,contraction_level:0,contrast:0,control:0,conv:0,conv_typ:[],conveni:0,convent:0,converg:0,convert:0,coor:0,coordin:[],copi:0,copy_a:0,copy_node_a:[],copy_node_with_suffix:0,copy_typ:0,correct:0,correspond:0,could:0,count:0,count_function_nod:0,countri:0,coupl:0,coupling_funct:[],coupling_strength:0,cpac:0,creat:0,create_dsm:0,create_mathematical_problem:0,create_mdg:0,create_mpg:0,creation_d:0,creator:0,creator_uid:0,criteria:0,cross:0,current:0,custom:0,cut:0,cwd:0,cycl:0,d3j:0,data:0,data_dictionari:0,data_exchange_dict:0,datadict:0,date:0,datetim:0,dc_uid:0,ddict:0,deep:0,deepcopi:0,deepcopy_a:0,defin:0,definit:0,deg:0,degre:0,degreeview:0,delet:0,delft:0,depart:0,depend:0,deprec:0,descend:0,describ:0,descript:0,design:0,design_variable_nod:[],designcompet:0,desir:0,destin:0,destination_fold:0,detail:0,determin:0,develop:0,diagon:0,diagonal_po:0,diagram:0,dic:0,dict:0,dict_to_ord_dict:0,dictionari:0,differ:0,digraph:0,dimens:0,direct:0,directli:0,directori:0,disciplin:0,disciplinari:0,disconnect:0,disconnect_collided_target:0,disconnect_problematic_variables_from:0,disconnect_shared_sourc:0,disregard:0,distinguis:0,divid:0,doc:0,doctest:0,doe:0,doe_block:[],doesn:0,doing:0,done:0,dont:0,download:0,draw:0,dsm:0,dtc:0,due:0,duplic:0,dynam:0,each:0,ebunch:0,edg:0,edge_attr_dict_factori:0,edge_dict:0,edge_ind:0,edge_label:0,edge_or_nod:0,edge_subgraph:0,edgedataview:0,edu:0,effect:0,either:0,element:0,element_to_add:0,elementtre:0,email:0,empti:0,enabl:0,encod:0,encount:0,end:0,end_in_converg:[],end_in_iterative_nod:0,end_nod:[],engin:0,enrich:0,ensur:0,ensure_abs_xpath:0,entir:0,entri:0,entries_to_remov:0,equat:0,equival:0,error:0,especi:0,etc:0,evalu:0,even:0,everi:0,everyth:0,exactli:0,exampl:0,exblock_uid:0,exce:0,except:0,exchang:0,exclud:0,exclus:0,execut:0,executableblock:0,exhaust:0,exist:0,expect:0,expected_amount:0,expected_kei:0,expected_tag:0,expected_tag_new_el:0,expected_tag_uid_el:0,expected_text:0,explicit:[],export_as_json:0,express:0,extens:0,extract:0,fail:0,fals:0,feedback:0,feedforward:[],fidelity_level:0,fig_num:0,fig_siz:0,figur:0,file:0,file_nam:0,file_path:0,file_ref:0,file_typ:0,filenam:0,filevers:0,filter:0,find:0,find_all_nod:0,finish:[],first:0,folder:0,follow:0,foo:0,foovalu:0,form:0,format:0,format_string_for_d3j:[],format_string_for_latex:0,format_string_for_vistom:0,found:0,four:0,fpg:0,fresh:0,fresh_copi:0,from:0,front:0,full:0,func_ord:[],funcnam:0,function_ord:0,function_order_method:0,functiongraph:0,fundament:0,further:0,futur:0,gauss:0,gener:[],get:0,get_adjacency_matrix:0,get_categorized_nod:0,get_contracted_graph:0,get_coupling_matrix:0,get_design_competences_uid:0,get_direct_coupling_nod:0,get_edge_data:0,get_element_detail:0,get_element_dict:0,get_element_of_uid:0,get_executable_blocks_uid:0,get_feedback_info:0,get_fpg_based_on_function_nod:0,get_fpg_based_on_list_funct:0,get_fpg_based_on_sink:0,get_fpg_by_function_nod:0,get_friendly_id:0,get_function_depend:0,get_function_graph:0,get_function_metadata:0,get_function_nod:0,get_function_paths_by_object:0,get_graph_properti:0,get_inputs_uid:0,get_kb_graph:0,get_list_entri:0,get_lowest_psn:0,get_mathematical_functions_uid:0,get_mdao_setup:0,get_mdg:0,get_mg_function_ord:0,get_mpg:0,get_nested_process_ord:[],get_node_attribut:0,get_node_subcategori:0,get_node_text:0,get_nodes_based_on_str:0,get_nodes_indegre:0,get_nodes_outdegre:0,get_nodes_subcategori:0,get_number_of_coupl:0,get_ordered_cycl:0,get_outputs_uid:0,get_parameters_uid:0,get_partitioned_graph:0,get_path_combin:0,get_possible_function_ord:0,get_process_hierarchi:0,get_process_list:0,get_rcg:0,get_same_graph_class:0,get_sourc:0,get_subgraph_by_function_nod:0,get_system_input:0,get_target:0,get_uid:0,get_uid_search_xpath:0,get_unique_friendly_id:0,get_used_parameter_uid:0,get_xpath_from_uxpath:[],get_xpath_of_uid:0,give:0,given:0,gkhome:0,glaro:0,global:0,graph_check_crit:0,graph_class:0,graph_data:0,graph_id:0,graph_kadmo:0,graph_process:0,graph_properti:0,graphml:0,group:0,guarante:0,guess:0,handl:0,has:0,has_edg:0,has_nod:0,has_predecessor:0,has_successor:0,hashabl:0,have:0,header:0,hello:0,henc:0,here:0,hex:0,hex_to_rgb:0,hierarchi:0,higher_level_remov:0,highest:0,hold:0,hole:0,how:0,howev:0,html:0,http:0,ident:0,identifi:0,idf:0,idiom:0,ids:0,ignor:0,ignore_func:0,ignore_list:0,ignorefunct:0,illustr:0,implement:0,impose_mdao_architectur:0,in_degre:0,in_edg:0,incid:0,includ:0,include_al:0,include_couplings_as_final_output:[],include_reference_data:0,include_system_var:0,indec:0,indegre:0,indegreeview:0,indent:0,indentifi:0,independ:0,index:0,index_bracket:0,indic:0,induc:0,inedgeview:0,info:0,inform:0,initi:0,inout:0,inp:0,inplac:0,input:0,input_list:0,inputless:0,inputs_el:0,insert:0,insert_node_on_diagon:0,insid:0,inspect:0,inspect_nod:0,inspect_process:0,inspir:0,instanc:0,instance_id:0,instanceid:0,instead:0,integ:0,integr:0,interest:0,interfac:0,invalid:0,is_direct:0,is_multigraph:0,italian:0,item:0,iter:0,iterative_nod:[],itertool:0,its:0,itself:0,jacobi:[],japanes:0,job_nam:0,join:0,json:0,just:0,kb_dir_path:0,kdm:0,keep:0,keep_empty_el:0,keep_objective_vari:0,keep_tex_fil:0,kei:0,kept:[],key_ord:0,keyerror:0,keys_to_be_remov:0,keyword:0,knowledg:0,knowledge_bas:0,kwarg:0,label:0,label_extens:0,labeling_method:0,languag:0,larg:0,last:0,latex:0,lead:0,least:0,left:0,len:0,length:[],less:0,let:0,level:0,librari:0,like:0,limit:0,line:0,link:0,list:0,list_of_funct:0,list_of_nod:0,list_of_sink:0,list_of_tool:0,literatur:0,local:0,log:0,lookup:0,loop:0,lost:0,lower:0,lower_bound:0,lowest:0,mai:0,mainli:0,make:0,make_all_variables_valid:0,make_camel_cas:0,make_plur:0,make_plural_opt:0,make_singular:0,makeel:0,mani:0,manipul:0,manipulate_coupling_nod:[],manual:0,map:0,mark:0,mark_as_constraint:0,mark_as_design_vari:0,mark_as_object:0,mark_as_qoi:0,master:0,match:0,mathemat:0,matplotlib:0,matrix:0,max_func:0,maxim:0,maximum:0,mda:0,mda_typ:0,mdao:0,mdao_setup:0,mdaodatagraph:0,mdf:0,mdg:0,mdo:0,mdo_architectur:0,meet:0,membership:0,memori:0,merg:0,merge_func:0,merge_function_mod:0,merge_function_nodes_based_on_mod:0,merge_parallel_funct:0,merge_sequential_funct:0,merger:0,messag:0,metadata:0,method:0,meti:0,mg_function_ord:0,might:0,min_func:0,mind:0,minim:0,minimize_feedback:0,minimum:0,mixin_equ:0,mixin_mdao:0,mixin_vistom:0,mode:0,mode_id:0,modeid:0,model_definit:0,modifi:[],modul:0,more:0,most:0,mpg:0,multi_start:0,multidigraph:0,multigraph:0,multipl:0,must:0,my_obj_fcn_nam:0,mygraph:0,n_coupling_var:0,n_disciplin:0,n_global_constraint:0,n_global_var:0,n_local_constraint:0,n_local_var:0,n_part:0,name:0,named_obj_fcn:0,nativ:0,nbr:0,nbrdict:0,nbunch:0,nbunch_it:0,nd_iter:0,nedg:0,need:0,neighbor:0,nest:0,nested_funct:[],networkx:0,networkxerror:0,never:0,new_label:0,niter:0,nnode:0,node:0,node_dict_factori:0,node_id:0,node_is_funct:0,node_is_hol:0,node_is_objective_funct:0,node_is_output:0,node_is_vari:0,node_label:0,node_select:0,nodedata:0,nodedataview:0,nodeview:0,nomin:0,nominal_valu:0,non:0,none:0,nonetyp:0,normal:0,notat:0,note:0,notification_messag:0,nsmap:0,number:0,number_of_edg:0,number_of_nod:0,numer:0,obj_vars_cov:0,object:0,objective_nod:[],obtain:0,off:0,onc:0,one:0,ones:0,onli:0,only_feedback:0,open:0,open_fil:0,open_pdf:0,oper:0,operator_uid:0,opt:0,optim:0,option:0,order:0,org:0,organ:0,origin:0,other:0,otherwis:0,our:0,out:0,out_degre:0,out_edg:0,outdegre:0,outdegreeview:0,outedgedataview:0,outedgeview:0,outgo:0,outp:0,output:0,outputless:0,outputs_el:0,over:0,overal:0,overrid:[],override_with_final_output:[],overview:0,overwrit:0,own:0,owner_uid:0,packag:0,page:0,pair:0,parallel:0,parallel_funct:[],param:0,param_uid:0,paramet:0,parameters_el:0,params_uid:0,parser:0,part:0,partit:0,pass:0,pate:0,path:0,path_graph:0,paus:0,pdf:0,peopl:0,per:0,percentag:0,perform:0,permit:0,pickl:0,place:0,platform:0,plot:0,plot_adjacency_matrix:0,plot_graph:0,plural:0,png:0,point:0,posit:0,possibl:0,post:0,pre:0,preced:0,precis:0,pred:0,predecessor:0,prefer:0,prefix:0,presenc:0,present:0,pretti:0,pretty_print:0,print:[],print_attribut:0,print_circular_connections_in_log:0,print_contain:0,print_coupl:0,print_graph:0,print_in_log:0,print_in_t:0,print_indexed_list:0,problem:0,problemat:0,process:0,process_info:[],processgraph:[],produc:0,product:0,prompt:0,properti:0,provid:0,psg:0,psn:0,pull:0,pure:0,purpos:0,pymerg:0,pyplot:0,python:0,qoi:[],qoi_nod:[],quantiti:0,queri:0,quickli:0,quietli:0,quot:0,rais:0,raise_error:0,raise_error_if_tru:0,rang:0,rce:0,rcg:0,read:0,readabl:0,reciproc:0,recognis:0,recurs:0,recursively_empti:0,recursively_stringifi:0,recursively_unique_attribut:0,red:0,reduc:0,reduct:0,ref:0,refer:0,reference_fil:0,reference_valu:0,refin:0,reflect:0,reinstanti:0,rel:0,relabel:0,relabel_function_nod:0,relat:0,relev:0,remain:0,remot:0,remote_engin:0,remov:0,remove_after_compress:0,remove_children_of:[],remove_children_of_uid:0,remove_children_of_xpath:0,remove_contact:0,remove_data_graph_el:0,remove_edg:0,remove_edges_from:0,remove_element_based_on_uid:0,remove_element_based_on_xpath:0,remove_feedback:[],remove_feedforward:[],remove_function_nod:0,remove_if_exist:0,remove_in_and_output:0,remove_input:0,remove_nod:0,remove_node_from_diagon:0,remove_nodes_from:0,remove_output:0,remove_paramet:0,remove_parameters_el:0,remove_process_graph_el:0,remove_unused_output:0,remove_workflow_el:0,renam:0,replac:0,replacement_id:0,report:0,repres:0,represent:0,reproduc:0,request:0,requir:0,resolv:0,resolve_uid:0,resourc:0,respect:0,rest:0,result:0,retriev:0,revers:0,rgb:0,right:0,role:0,round:0,routin:0,row1:0,row2:0,rtype:0,rule:0,run:0,run_tim:0,runtim:0,safe:0,same:0,sampl:0,sampledir:0,samplefil:0,satisfi:0,save:0,save_a:0,scalar:0,schema:0,script:0,search:0,second:0,see:0,seidel:0,select:0,select_function_combination_from:0,select_objectives_from_graph:0,self:0,sellar:0,separ:0,sequenc:0,sequenti:[],server:0,set:0,sever:0,shallow:0,share:0,shorter:0,should:0,show:0,show_now:0,shown:0,side:0,sidebar:0,signific:0,silent:0,similar:0,simpl:0,simpler:0,simpli:0,simplifi:0,simplify_equ:0,sinc:0,singl:0,single_or_multi_execut:0,singular:0,sink:0,size:0,skip:0,slave:0,small:0,some:0,song:0,sort:0,sort_bi:0,sort_kei:0,sort_non_coupled_nod:0,sourc:0,space:0,specif:0,specifi:0,split:0,split_vari:0,splittabl:0,squar:0,standard:0,start:0,start_nod:[],start_step:0,statement:0,statu:0,step:0,still:0,store:0,str:0,string:[],stringifi:0,structur:0,style:0,sub:0,subcategori:0,subclass:0,subel:0,subgraph:0,subscript:0,subset:0,succ:0,successor:0,suffix:0,suit:0,sum:0,summar:0,summarize_var:0,suppli:0,sure:0,svg:0,symbol:0,syntax:0,system:0,system_input:0,tabl:0,tabul:0,tag:0,take:0,taken:0,target:0,technic:0,telephon:0,test:0,test_attr_cond:0,test_valu:0,tex:0,text:0,textfil:0,thei:0,them:0,therefor:0,thi:0,think:0,third:0,those:0,though:0,through:0,thu:0,time:0,timestamp:0,titl:0,to_direct:0,to_undirect:0,todo:0,togeth:0,tool:0,total:0,tpwgt:0,transfer:0,transform:0,transform_data_into_str:0,transform_string_into_format:0,translat:0,translate_dict_kei:0,translate_list:0,tree:0,tupl:0,twice:0,two:0,type:0,typic:0,uid:0,uid_length:0,uml:0,umn:0,unconnect:0,under:0,underscor:0,undirect:0,uniqu:0,unmake_camel_cas:0,unnamed_funct:0,unpack:0,until:0,unwant:[],updat:0,upper:0,upper_bound:0,usag:0,use:0,use_d3js_node_id:0,use_data_graph:[],use_png_fig:0,use_pretty_print:0,used:0,used_id:0,useful:0,user:0,user_prompt_select_opt:0,using:0,usual:0,utf:0,uxpath:0,valid:0,valu:0,var_dim:0,var_valu:0,variabl:0,variableinstance1:0,variableinstance2:0,variableinstance3:0,variableinstance4:0,varieti:0,variou:0,verif:0,verifi:0,versatil:0,version:0,via:0,view:0,vispack_vers:0,vistom:0,vistoms_add:0,vistoms_cr:0,vistoms_dir:0,vistoms_vers:0,visual:0,wai:0,wang:0,want:0,warn:0,weight:0,well:0,were:0,what:0,when:0,where:0,whether:0,which:0,window:0,wing:0,within:0,without:0,wn2898:0,work:0,workflow:0,write:0,write_problem_to_textfil:0,written:0,wrong:0,xdsm:0,xml:[],xml_declar:0,xpath:0,yet:0,yield:0,you:0,your:0,zero:0,zhang:0,zip:0},titles:["Welcome to KADMOS\u2019s documentation!"],titleterms:{cmdow:0,code:0,datagraph:0,document:0,equationmixin:0,fundamentalproblemgraph:0,gener:0,graph:0,kadmo:0,kadmosgraph:0,knowledgebas:0,mdaodatagraph:[],mdaomixin:0,mdaoprocessgraph:0,print:0,processgraph:0,repositoryconnectivitygraph:0,string:0,util:0,vispackmixin:[],vistomsmixin:0,welcom:0,xml:0}}) \ No newline at end of file diff --git a/examples/knowledgebases/tu_delft_wing_design/TUDWingDesign-geometry.xml b/examples/knowledgebases/tu_delft_wing_design/TUDWingDesign-geometry.xml new file mode 100644 index 0000000000000000000000000000000000000000..f30c4a79f5c6bb9519ded551142dbc4d2ee25a04 --- /dev/null +++ b/examples/knowledgebases/tu_delft_wing_design/TUDWingDesign-geometry.xml @@ -0,0 +1,3095 @@ +<?xml version="1.0" encoding="utf-8"?> +<cpacs> + <header> + <name>AGILE_DC-1_Reference_L0_MDA</name> + <description>AGILE D2.5 - Reference Aircraft Design Challenge L0</description> + <cpacsVersion>2.3</cpacsVersion> + </header> + <vehicles uID="AGILE_DC1_vehicleID"> + <aircraft> + <model uID="agile_v13_modelID"> + <reference> + <length>3.7317</length> + <area>82.7</area> + <point> + <x>15.6949</x> + <y>0.0</y> + <z>0.0</z> + </point> + </reference> + <wings> + <wing symmetry="x-z-plane" uID="MainWing_wingID"> + <name>MainWing</name> + <parentUID>Fuselage_fuselageID</parentUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>2</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>12.2479</x> + <y>0</y> + <z>-0.90003</z> + </translation> + </transformation> + <sections> + <section uID="MainWing_wingSection1ID"> + <name>MainWingSection1</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="MainWing_wingSection1Element1ID"> + <name>MainWingSection1</name> + <airfoilUID>Profile_MainWing_1ID</airfoilUID> + <transformation> + <scaling> + <x>6.3923</x> + <y>6.3923</y> + <z>6.3923</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="MainWing_wingSection2ID"> + <name>MainWingSection2</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="MainWing_wingSection2Element1ID"> + <name>MainWingSection2</name> + <airfoilUID>Profile_MainWing_2ID</airfoilUID> + <transformation> + <scaling> + <x>2.71737</x> + <y>2.71737</y> + <z>2.71737</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="MainWing_wingSection3ID"> + <name>MainWingSection3</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="MainWing_wingSection3Element1ID"> + <name>MainWingSection3</name> + <airfoilUID>Profile_MainWing_3ID</airfoilUID> + <transformation> + <scaling> + <x>1.05165</x> + <y>1.05165</y> + <z>1.05165</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + </sections> + <positionings> + <positioning uID="MainWing_wingPositioning1ID"> + <name>MainWingPositioning1</name> + <length>0</length> + <sweepAngle>0</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <toSectionUID>MainWing_wingSection1ID</toSectionUID> + </positioning> + <positioning uID="MainWing_wingPositioning2ID"> + <name>MainWingPositioning2</name> + <length>6.73236</length> + <sweepAngle>33.2273</sweepAngle> + <dihedralAngle>6</dihedralAngle> + <fromSectionUID>MainWing_wingSection1ID</fromSectionUID> + <toSectionUID>MainWing_wingSection2ID</toSectionUID> + </positioning> + <positioning uID="MainWing_wingPositioning3ID"> + <name>MainWingPositioning3</name> + <length>9.60746</length> + <sweepAngle>28.4037</sweepAngle> + <dihedralAngle>6</dihedralAngle> + <fromSectionUID>MainWing_wingSection2ID</fromSectionUID> + <toSectionUID>MainWing_wingSection3ID</toSectionUID> + </positioning> + </positionings> + <segments> + <segment uID="MainWing_wingSegment1ID"> + <name>MainWingSegment1</name> + <fromElementUID>MainWing_wingSection1Element1ID</fromElementUID> + <toElementUID>MainWing_wingSection2Element1ID</toElementUID> + </segment> + <segment uID="MainWing_wingSegment2ID"> + <name>MainWingSegment2</name> + <fromElementUID>MainWing_wingSection2Element1ID</fromElementUID> + <toElementUID>MainWing_wingSection3Element1ID</toElementUID> + </segment> + </segments> + <referenceValues> + <referenceArea>84.523</referenceArea> + </referenceValues> + </wing> + <wing symmetry="x-z-plane" uID="HorizontalStabiliser_wingID"> + <name>HorizontalStabiliser</name> + <parentUID>Fuselage_fuselageID</parentUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>29.743</x> + <y>0</y> + <z>0.90002</z> + </translation> + </transformation> + <sections> + <section uID="HorizontalStabiliser_wingSection1ID"> + <name>HorizontalStabiliserSection1</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="HorizontalStabiliser_wingSection1Element1ID"> + <name>HorizontalStabiliserSection1</name> + <airfoilUID>Profile_HorizontalStabiliser_1ID</airfoilUID> + <transformation> + <scaling> + <x>3.2362</x> + <y>3.2362</y> + <z>3.2362</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="HorizontalStabiliser_wingSection2ID"> + <name>HorizontalStabiliserSection2</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="HorizontalStabiliser_wingSection2Element1ID"> + <name>HorizontalStabiliserSection2</name> + <airfoilUID>Profile_HorizontalStabiliser_2ID</airfoilUID> + <transformation> + <scaling> + <x>1.13267</x> + <y>1.13267</y> + <z>1.13267</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + </sections> + <positionings> + <positioning uID="HorizontalStabiliser_wingPositioning1ID"> + <name>HorizontalStabiliserPositioning1</name> + <length>0</length> + <sweepAngle>0</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <toSectionUID>HorizontalStabiliser_wingSection1ID</toSectionUID> + </positioning> + <positioning uID="HorizontalStabiliser_wingPositioning2ID"> + <name>HorizontalStabiliserPositioning2</name> + <length>5.30725</length> + <sweepAngle>34.2802</sweepAngle> + <dihedralAngle>6</dihedralAngle> + <fromSectionUID>HorizontalStabiliser_wingSection1ID</fromSectionUID> + <toSectionUID>HorizontalStabiliser_wingSection2ID</toSectionUID> + </positioning> + </positionings> + <segments> + <segment uID="HorizontalStabiliser_wingSegment1ID"> + <name>HorizontalStabiliserSegment1</name> + <fromElementUID>HorizontalStabiliser_wingSection1Element1ID</fromElementUID> + <toElementUID>HorizontalStabiliser_wingSection2Element1ID</toElementUID> + </segment> + </segments> + <componentSegments> + <componentSegment uID="htp_Cseg"> + <name>htp_CSeg</name> + <description>htp_CSeg</description> + <structure> + <upperShell uID=""> + <skin> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </skin> + <stringer> + <stringerStructureUID isLink="True">Stringer_WING_up</stringerStructureUID> + <pitch>0.14</pitch> + <angle>0.0</angle> + </stringer> + </upperShell> + <lowerShell uID=""> + <skin> + <material> + <materialUID isLink="True">aluminium2024</materialUID> + <thickness>0.003</thickness> + </material> + </skin> + <stringer> + <stringerStructureUID isLink="True">Stringer_WING_low</stringerStructureUID> + <pitch>0.14</pitch> + <angle>0.0</angle> + </stringer> + </lowerShell> + <ribsDefinitions> + <ribsDefinition uID="htp_ribs"> + <name>trapezoid_ribs</name> + <ribsPositioning> + <ribReference>htp_Spar_FS</ribReference> + <etaStart>0.</etaStart> + <etaEnd>1.</etaEnd> + <ribStart>leadingEdge</ribStart> + <ribEnd>trailingEdge</ribEnd> + <numberOfRibs>5.0</numberOfRibs> + <ribCrossingBehaviour>cross</ribCrossingBehaviour> + <ribRotation> + <ribRotationReference>globalY</ribRotationReference> + <z>90.</z> + </ribRotation> + </ribsPositioning> + <ribCrossSection> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.03</thickness> + </material> + </ribCrossSection> + </ribsDefinition> + </ribsDefinitions> + <spars> + <sparPositions> + <sparPosition uID="htp_Spar_FS_P0"> + <eta>0.0</eta> + <xsi>0.22</xsi> + </sparPosition> + <sparPosition uID="htp_Spar_FS_P1"> + <eta>1.0</eta> + <xsi>0.22</xsi> + </sparPosition> + <sparPosition uID="htp_Spar_RS_P0"> + <eta>0.0</eta> + <xsi>0.55</xsi> + </sparPosition> + <sparPosition uID="htp_Spar_RS_P1"> + <eta>1.0</eta> + <xsi>0.55</xsi> + </sparPosition> + </sparPositions> + <sparSegments> + <sparSegment uID="htp_Spar_FS"> + <name>htp_Spar_FS</name> + <description>htp_Spar_FS</description> + <sparPositionUIDs> + <sparPositionUID isLink="True">htp_Spar_FS_P0</sparPositionUID> + <sparPositionUID isLink="True">htp_Spar_FS_P1</sparPositionUID> + </sparPositionUIDs> + <sparCrossSection> + <upperCap> + <area>0.0003</area> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </upperCap> + <lowerCap> + <area>0.0003</area> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </lowerCap> + <web1> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + <relPos>0.5</relPos> + </web1> + <rotation>90.0</rotation> + </sparCrossSection> + </sparSegment> + <sparSegment uID="htp_Spar_RS"> + <name>htp_Spar_RS</name> + <description>htp_Spar_RS</description> + <sparPositionUIDs> + <sparPositionUID isLink="True">htp_Spar_RS_P0</sparPositionUID> + <sparPositionUID isLink="True">htp_Spar_RS_P1</sparPositionUID> + </sparPositionUIDs> + <sparCrossSection> + <upperCap> + <area>0.0003</area> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </upperCap> + <lowerCap> + <area>0.0003</area> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </lowerCap> + <web1> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + <relPos>0.5</relPos> + </web1> + <rotation>90.0</rotation> + </sparCrossSection> + </sparSegment> + </sparSegments> + </spars> + </structure> + <controlSurfaces> + <trailingEdgeDevices> + <trailingEdgeDevice uID="elevatorUID"> + <name>elevator</name> + <description>elevator from VAMPzero</description> + <parentUID isLink="True">htp</parentUID> + <outerShape> + <innerBorder> + <etaLE>0.325723003695</etaLE> + <xsiLE>0.446576244084</xsiLE> + <leadingEdgeShape> + <relHeightLE>0.5</relHeightLE> + <xsiUpperSkin>0.85</xsiUpperSkin> + <xsiLowerSkin>0.85</xsiLowerSkin> + </leadingEdgeShape> + </innerBorder> + <outerBorder> + <etaLE>0.966286150185</etaLE> + <xsiLE>0.588077959118</xsiLE> + <leadingEdgeShape> + <relHeightLE>0.5</relHeightLE> + <xsiUpperSkin>0.85</xsiUpperSkin> + <xsiLowerSkin>0.85</xsiLowerSkin> + </leadingEdgeShape> + </outerBorder> + </outerShape> + <path> + <innerHingePoint> + <hingeXsi>0.75</hingeXsi> + <hingeRelHeight>0.2</hingeRelHeight> + </innerHingePoint> + <outerHingePoint> + <hingeXsi>0.75</hingeXsi> + <hingeRelHeight>0.2</hingeRelHeight> + </outerHingePoint> + <steps> + <step> + <relDeflection>25</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>25.0</hingeLineRotation> + </step> + <step> + <relDeflection>0</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>0.0</hingeLineRotation> + </step> + <step> + <relDeflection>-25</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>-25.0</hingeLineRotation> + </step> + </steps> + </path> + </trailingEdgeDevice> + <trailingEdgeDevice uID="stabilizerUID"> + <name>stabilizer</name> + <description>stabilizer exported from VAMPzero</description> + <parentUID isLink="True">htp</parentUID> + <outerShape> + <innerBorder> + <etaLE>0.0</etaLE> + <xsiLE>0.0</xsiLE> + </innerBorder> + <outerBorder> + <etaLE>1.0</etaLE> + <xsiLE>0.0</xsiLE> + </outerBorder> + </outerShape> + <path> + <innerHingePoint> + <hingeXsi>0.25</hingeXsi> + <hingeRelHeight>0.5</hingeRelHeight> + </innerHingePoint> + <outerHingePoint> + <hingeXsi>0.25</hingeXsi> + <hingeRelHeight>0.5</hingeRelHeight> + </outerHingePoint> + <steps> + <step> + <relDeflection>25</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>25.0</hingeLineRotation> + </step> + <step> + <relDeflection>0</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>0.0</hingeLineRotation> + </step> + <step> + <relDeflection>-25</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>-25.0</hingeLineRotation> + </step> + </steps> + </path> + </trailingEdgeDevice> + </trailingEdgeDevices> + </controlSurfaces> + <fromElementUID isLink="True">HorizontalStabiliser_wingSection1Element1ID</fromElementUID> + <toElementUID isLink="True">HorizontalStabiliser_wingSection2Element1ID</toElementUID> + </componentSegment> + </componentSegments> + </wing> + <wing uID="VerticalStabiliser_wingID"> + <name>VerticalStabiliser</name> + <parentUID>Fuselage_fuselageID</parentUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>90</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>29.0546</x> + <y>0</y> + <z>0.90002</z> + </translation> + </transformation> + <sections> + <section uID="VerticalStabiliser_wingSection1ID"> + <name>VerticalStabiliserSection1</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="VerticalStabiliser_wingSection1Element1ID"> + <name>VerticalStabiliserSection1</name> + <airfoilUID>Profile_VerticalStabiliser_1ID</airfoilUID> + <transformation> + <scaling> + <x>4.12099</x> + <y>4.12099</y> + <z>4.12099</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="VerticalStabiliser_wingSection2ID"> + <name>VerticalStabiliserSection2</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="VerticalStabiliser_wingSection2Element1ID"> + <name>VerticalStabiliserSection2</name> + <airfoilUID>Profile_VerticalStabiliser_2ID</airfoilUID> + <transformation> + <scaling> + <x>1.43655</x> + <y>1.43655</y> + <z>1.43655</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + </sections> + <positionings> + <positioning uID="VerticalStabiliser_wingPositioning1ID"> + <name>VerticalStabiliserPositioning1</name> + <length>0</length> + <sweepAngle>0</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <toSectionUID>VerticalStabiliser_wingSection1ID</toSectionUID> + </positioning> + <positioning uID="VerticalStabiliser_wingPositioning2ID"> + <name>VerticalStabiliserPositioning2</name> + <length>6.28106</length> + <sweepAngle>43.6333</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>VerticalStabiliser_wingSection1ID</fromSectionUID> + <toSectionUID>VerticalStabiliser_wingSection2ID</toSectionUID> + </positioning> + </positionings> + <segments> + <segment uID="VerticalStabiliser_wingSegment1ID"> + <name>VerticalStabiliserSegment1</name> + <fromElementUID>VerticalStabiliser_wingSection1Element1ID</fromElementUID> + <toElementUID>VerticalStabiliser_wingSection2Element1ID</toElementUID> + </segment> + </segments> + <componentSegments> + <componentSegment uID="vtp_Cseg"> + <name>vtp_CSeg</name> + <description>vtp_CSeg</description> + <fromElementUID isLink="True">VerticalStabiliser_wingSection1Element1ID</fromElementUID> + <toElementUID isLink="True">VerticalStabiliser_wingSection2Element1ID</toElementUID> + <structure> + <upperShell uID=""> + <skin> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </skin> + <stringer> + <stringerStructureUID isLink="True">Stringer_WING_up</stringerStructureUID> + <pitch>0.14</pitch> + <angle>0.0</angle> + </stringer> + </upperShell> + <lowerShell uID=""> + <skin> + <material> + <materialUID isLink="True">aluminium2024</materialUID> + <thickness>0.003</thickness> + </material> + </skin> + <stringer> + <stringerStructureUID isLink="True">Stringer_WING_low</stringerStructureUID> + <pitch>0.14</pitch> + <angle>0.0</angle> + </stringer> + </lowerShell> + <ribsDefinitions> + <ribsDefinition uID="vtp_ribs"> + <name>trapezoid_ribs</name> + <ribsPositioning> + <ribReference>vtp_Spar_FS</ribReference> + <etaStart>0.</etaStart> + <etaEnd>1.</etaEnd> + <ribStart>leadingEdge</ribStart> + <ribEnd>trailingEdge</ribEnd> + <numberOfRibs>5.0</numberOfRibs> + <ribCrossingBehaviour>cross</ribCrossingBehaviour> + <ribRotation> + <ribRotationReference>globalY</ribRotationReference> + <z>90.</z> + </ribRotation> + </ribsPositioning> + <ribCrossSection> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.03</thickness> + </material> + </ribCrossSection> + </ribsDefinition> + </ribsDefinitions> + <spars> + <sparPositions> + <sparPosition uID="vtp_Spar_FS_P0"> + <eta>0.0</eta> + <xsi>0.22</xsi> + </sparPosition> + <sparPosition uID="vtp_Spar_FS_P1"> + <eta>1.0</eta> + <xsi>0.22</xsi> + </sparPosition> + <sparPosition uID="vtp_Spar_RS_P0"> + <eta>0.0</eta> + <xsi>0.55</xsi> + </sparPosition> + <sparPosition uID="vtp_Spar_RS_P1"> + <eta>1.0</eta> + <xsi>0.55</xsi> + </sparPosition> + </sparPositions> + <sparSegments> + <sparSegment uID="vtp_Spar_FS"> + <name>vtp_Spar_FS</name> + <description>vtp_Spar_FS</description> + <sparPositionUIDs> + <sparPositionUID isLink="True">vtp_Spar_FS_P0</sparPositionUID> + <sparPositionUID isLink="True">vtp_Spar_FS_P1</sparPositionUID> + </sparPositionUIDs> + <sparCrossSection> + <upperCap> + <area>0.0003</area> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </upperCap> + <lowerCap> + <area>0.0003</area> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </lowerCap> + <web1> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + <relPos>0.5</relPos> + </web1> + <rotation>90.0</rotation> + </sparCrossSection> + </sparSegment> + <sparSegment uID="vtp_Spar_RS"> + <name>vtp_Spar_RS</name> + <description>vtp_Spar_RS</description> + <sparPositionUIDs> + <sparPositionUID isLink="True">vtp_Spar_RS_P0</sparPositionUID> + <sparPositionUID isLink="True">vtp_Spar_RS_P1</sparPositionUID> + </sparPositionUIDs> + <sparCrossSection> + <upperCap> + <area>0.0003</area> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </upperCap> + <lowerCap> + <area>0.0003</area> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + </lowerCap> + <web1> + <material> + <materialUID isLink="True">aluminium7075</materialUID> + <thickness>0.003</thickness> + </material> + <relPos>0.5</relPos> + </web1> + <rotation>90.0</rotation> + </sparCrossSection> + </sparSegment> + </sparSegments> + </spars> + </structure> + <controlSurfaces> + <trailingEdgeDevices> + <trailingEdgeDevice uID="rudderUID"> + <name>rudder</name> + <description>rudder from VAMPzero</description> + <parentUID isLink="True">vtp_Cseg</parentUID> + <outerShape> + <innerBorder> + <etaLE>0.0</etaLE> + <xsiLE>0.355528586144</xsiLE> + <leadingEdgeShape> + <relHeightLE>0.5</relHeightLE> + <xsiUpperSkin>0.85</xsiUpperSkin> + <xsiLowerSkin>0.85</xsiLowerSkin> + </leadingEdgeShape> + </innerBorder> + <outerBorder> + <etaLE>1.0</etaLE> + <xsiLE>0.355528586144</xsiLE> + <leadingEdgeShape> + <relHeightLE>0.5</relHeightLE> + <xsiUpperSkin>0.85</xsiUpperSkin> + <xsiLowerSkin>0.85</xsiLowerSkin> + </leadingEdgeShape> + </outerBorder> + </outerShape> + <path> + <innerHingePoint> + <hingeXsi>0.75</hingeXsi> + <hingeRelHeight>0.2</hingeRelHeight> + </innerHingePoint> + <outerHingePoint> + <hingeXsi>0.75</hingeXsi> + <hingeRelHeight>0.2</hingeRelHeight> + </outerHingePoint> + <steps> + <step> + <relDeflection>25</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>25.0</hingeLineRotation> + </step> + <step> + <relDeflection>0</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>0.0</hingeLineRotation> + </step> + <step> + <relDeflection>-25</relDeflection> + <innerHingeTranslation> + <x>0.0</x> + <y>0.0</y> + <z>0.0</z> + </innerHingeTranslation> + <outerHingeTranslation> + <x>0.0</x> + <z>0.0</z> + </outerHingeTranslation> + <hingeLineRotation>-25.0</hingeLineRotation> + </step> + </steps> + </path> + </trailingEdgeDevice> + </trailingEdgeDevices> + </controlSurfaces> + </componentSegment> + </componentSegments> + </wing> + </wings> + <engines> + <engine symmetry="x-z-plane" uID="model_engine"> + <transformation> + <translation refType="absGlobal"> + <x>11.8389319755</x> + <y>4.215</y> + <z>-1.75194260911</z> + </translation> + <translation refType="absLocal"> + <x>13.6765</x> + <y>5.7482</y> + <z>-2.33895</z> + </translation> + </transformation> + </engine> + </engines> + <name>Agile-DC1-v13</name> + <description>Agile DC1 v13: 2:2 abreast 9180kg, right fuselage dims, medium BPR engine (6), max payload+range mission, LFL 1400 and TOFL 1500m, increased CLmax values</description> + <global> + <designRange> + <actual>1000</actual> + <required unit="m">3500000</required> + </designRange> + <paxSeats>90</paxSeats> + <cargoCapacity>2000</cargoCapacity> + <airportCompatability> + <takeOffFieldLength> + <required>2000</required> + <actual>222</actual> + </takeOffFieldLength> + <landingFieldLength> + <required>2000</required> + <actual>222</actual> + </landingFieldLength> + <numberFieldFlights>10</numberFieldFlights> + </airportCompatability> + <performanceTargets> + <cruiseMach> + <required>0.78</required> + <actual>0.7</actual> + </cruiseMach> + <initialCruiseAltitude> + <required>12000</required> + <actual>11000</actual> + </initialCruiseAltitude> + <timeToClimb> + <required>1222</required> + <actual>2562</actual> + </timeToClimb> + </performanceTargets> + </global> + <fuselages> + <fuselage uID="Fuselage_fuselageID"> + <name>Fuselage</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <sections> + <section uID="Fuselage_fuselageSection1ID"> + <name>FuselageSection1</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection1Element1ID"> + <name>FuselageSection1</name> + <profileUID>Profile_Fuselage_1ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection2ID"> + <name>FuselageSection2</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection2Element1ID"> + <name>FuselageSection2</name> + <profileUID>Profile_Fuselage_2ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection3ID"> + <name>FuselageSection3</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection3Element1ID"> + <name>FuselageSection3</name> + <profileUID>Profile_Fuselage_3ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection4ID"> + <name>FuselageSection4</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection4Element1ID"> + <name>FuselageSection4</name> + <profileUID>Profile_Fuselage_4ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection5ID"> + <name>FuselageSection5</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection5Element1ID"> + <name>FuselageSection5</name> + <profileUID>Profile_Fuselage_5ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection6ID"> + <name>FuselageSection6</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection6Element1ID"> + <name>FuselageSection6</name> + <profileUID>Profile_Fuselage_6ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection7ID"> + <name>FuselageSection7</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection7Element1ID"> + <name>FuselageSection7</name> + <profileUID>Profile_Fuselage_7ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection8ID"> + <name>FuselageSection8</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection8Element1ID"> + <name>FuselageSection8</name> + <profileUID>Profile_Fuselage_8ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection9ID"> + <name>FuselageSection9</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection9Element1ID"> + <name>FuselageSection9</name> + <profileUID>Profile_Fuselage_9ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection10ID"> + <name>FuselageSection10</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection10Element1ID"> + <name>FuselageSection10</name> + <profileUID>Profile_Fuselage_10ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection11ID"> + <name>FuselageSection11</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection11Element1ID"> + <name>FuselageSection11</name> + <profileUID>Profile_Fuselage_11ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection12ID"> + <name>FuselageSection12</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection12Element1ID"> + <name>FuselageSection12</name> + <profileUID>Profile_Fuselage_12ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection13ID"> + <name>FuselageSection13</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection13Element1ID"> + <name>FuselageSection13</name> + <profileUID>Profile_Fuselage_13ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection14ID"> + <name>FuselageSection14</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection14Element1ID"> + <name>FuselageSection14</name> + <profileUID>Profile_Fuselage_14ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection15ID"> + <name>FuselageSection15</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection15Element1ID"> + <name>FuselageSection15</name> + <profileUID>Profile_Fuselage_15ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection16ID"> + <name>FuselageSection16</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection16Element1ID"> + <name>FuselageSection16</name> + <profileUID>Profile_Fuselage_16ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection17ID"> + <name>FuselageSection17</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection17Element1ID"> + <name>FuselageSection17</name> + <profileUID>Profile_Fuselage_17ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection18ID"> + <name>FuselageSection18</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection18Element1ID"> + <name>FuselageSection18</name> + <profileUID>Profile_Fuselage_18ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection19ID"> + <name>FuselageSection19</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection19Element1ID"> + <name>FuselageSection19</name> + <profileUID>Profile_Fuselage_19ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection20ID"> + <name>FuselageSection20</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection20Element1ID"> + <name>FuselageSection20</name> + <profileUID>Profile_Fuselage_20ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection21ID"> + <name>FuselageSection21</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection21Element1ID"> + <name>FuselageSection21</name> + <profileUID>Profile_Fuselage_21ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection22ID"> + <name>FuselageSection22</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection22Element1ID"> + <name>FuselageSection22</name> + <profileUID>Profile_Fuselage_22ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection23ID"> + <name>FuselageSection23</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection23Element1ID"> + <name>FuselageSection23</name> + <profileUID>Profile_Fuselage_23ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection24ID"> + <name>FuselageSection24</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection24Element1ID"> + <name>FuselageSection24</name> + <profileUID>Profile_Fuselage_24ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection25ID"> + <name>FuselageSection25</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection25Element1ID"> + <name>FuselageSection25</name> + <profileUID>Profile_Fuselage_25ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection26ID"> + <name>FuselageSection26</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection26Element1ID"> + <name>FuselageSection26</name> + <profileUID>Profile_Fuselage_26ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection27ID"> + <name>FuselageSection27</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection27Element1ID"> + <name>FuselageSection27</name> + <profileUID>Profile_Fuselage_27ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection28ID"> + <name>FuselageSection28</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection28Element1ID"> + <name>FuselageSection28</name> + <profileUID>Profile_Fuselage_28ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection29ID"> + <name>FuselageSection29</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection29Element1ID"> + <name>FuselageSection29</name> + <profileUID>Profile_Fuselage_29ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + <section uID="Fuselage_fuselageSection30ID"> + <name>FuselageSection30</name> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + <elements> + <element uID="Fuselage_fuselageSection30Element1ID"> + <name>FuselageSection30</name> + <profileUID>Profile_Fuselage_30ID</profileUID> + <transformation> + <scaling> + <x>1</x> + <y>1</y> + <z>1</z> + </scaling> + <rotation> + <x>0</x> + <y>0</y> + <z>0</z> + </rotation> + <translation refType="absLocal"> + <x>0</x> + <y>0</y> + <z>0</z> + </translation> + </transformation> + </element> + </elements> + </section> + </sections> + <positionings> + <positioning uID="Fuselage_fuselagePositioning1ID"> + <name>FuselagePositioning1</name> + <length>0.021104</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <toSectionUID>Fuselage_fuselageSection1ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning2ID"> + <name>FuselagePositioning2</name> + <length>0.0849068</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection2ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning3ID"> + <name>FuselagePositioning3</name> + <length>0.274377</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection3ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning4ID"> + <name>FuselagePositioning4</name> + <length>0.583757</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection4ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning5ID"> + <name>FuselagePositioning5</name> + <length>1.00365</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection5ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning6ID"> + <name>FuselagePositioning6</name> + <length>1.52129</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection6ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning7ID"> + <name>FuselagePositioning7</name> + <length>2.12095</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection7ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning8ID"> + <name>FuselagePositioning8</name> + <length>2.78442</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection8ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning9ID"> + <name>FuselagePositioning9</name> + <length>3.49153</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection9ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning10ID"> + <name>FuselagePositioning10</name> + <length>4.2208</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection10ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning11ID"> + <name>FuselagePositioning11</name> + <length>4.6862</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection11ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning12ID"> + <name>FuselagePositioning12</name> + <length>6.04468</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection12ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning13ID"> + <name>FuselagePositioning13</name> + <length>8.1862</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection13ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning14ID"> + <name>FuselagePositioning14</name> + <length>10.9373</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection14ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning15ID"> + <name>FuselagePositioning15</name> + <length>14.075</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection15ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning16ID"> + <name>FuselagePositioning16</name> + <length>17.3452</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection16ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning17ID"> + <name>FuselagePositioning17</name> + <length>20.4829</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection17ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning18ID"> + <name>FuselagePositioning18</name> + <length>23.234</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection18ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning19ID"> + <name>FuselagePositioning19</name> + <length>25.3755</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection19ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning20ID"> + <name>FuselagePositioning20</name> + <length>26.734</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection20ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning21ID"> + <name>FuselagePositioning21</name> + <length>27.1994</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection21ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning22ID"> + <name>FuselagePositioning22</name> + <length>28.3683</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection22ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning23ID"> + <name>FuselagePositioning23</name> + <length>29.5018</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection23ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning24ID"> + <name>FuselagePositioning24</name> + <length>30.5653</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection24ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning25ID"> + <name>FuselagePositioning25</name> + <length>31.5265</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection25ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning26ID"> + <name>FuselagePositioning26</name> + <length>32.3562</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection26ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning27ID"> + <name>FuselagePositioning27</name> + <length>33.0293</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection27ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning28ID"> + <name>FuselagePositioning28</name> + <length>33.5252</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection28ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning29ID"> + <name>FuselagePositioning29</name> + <length>33.8289</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection29ID</toSectionUID> + </positioning> + <positioning uID="Fuselage_fuselagePositioning30ID"> + <name>FuselagePositioning30</name> + <length>33.9312</length> + <sweepAngle>90</sweepAngle> + <dihedralAngle>0</dihedralAngle> + <fromSectionUID>Fuselage_fuselageSection1ID</fromSectionUID> + <toSectionUID>Fuselage_fuselageSection30ID</toSectionUID> + </positioning> + </positionings> + <segments> + <segment uID="Fuselage_fuselageSegment1ID"> + <name>FuselageSegment1</name> + <fromElementUID>Fuselage_fuselageSection1Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection2Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment2ID"> + <name>FuselageSegment2</name> + <fromElementUID>Fuselage_fuselageSection2Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection3Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment3ID"> + <name>FuselageSegment3</name> + <fromElementUID>Fuselage_fuselageSection3Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection4Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment4ID"> + <name>FuselageSegment4</name> + <fromElementUID>Fuselage_fuselageSection4Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection5Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment5ID"> + <name>FuselageSegment5</name> + <fromElementUID>Fuselage_fuselageSection5Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection6Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment6ID"> + <name>FuselageSegment6</name> + <fromElementUID>Fuselage_fuselageSection6Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection7Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment7ID"> + <name>FuselageSegment7</name> + <fromElementUID>Fuselage_fuselageSection7Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection8Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment8ID"> + <name>FuselageSegment8</name> + <fromElementUID>Fuselage_fuselageSection8Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection9Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment9ID"> + <name>FuselageSegment9</name> + <fromElementUID>Fuselage_fuselageSection9Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection10Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment10ID"> + <name>FuselageSegment10</name> + <fromElementUID>Fuselage_fuselageSection10Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection11Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment11ID"> + <name>FuselageSegment11</name> + <fromElementUID>Fuselage_fuselageSection11Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection12Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment12ID"> + <name>FuselageSegment12</name> + <fromElementUID>Fuselage_fuselageSection12Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection13Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment13ID"> + <name>FuselageSegment13</name> + <fromElementUID>Fuselage_fuselageSection13Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection14Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment14ID"> + <name>FuselageSegment14</name> + <fromElementUID>Fuselage_fuselageSection14Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection15Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment15ID"> + <name>FuselageSegment15</name> + <fromElementUID>Fuselage_fuselageSection15Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection16Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment16ID"> + <name>FuselageSegment16</name> + <fromElementUID>Fuselage_fuselageSection16Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection17Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment17ID"> + <name>FuselageSegment17</name> + <fromElementUID>Fuselage_fuselageSection17Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection18Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment18ID"> + <name>FuselageSegment18</name> + <fromElementUID>Fuselage_fuselageSection18Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection19Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment19ID"> + <name>FuselageSegment19</name> + <fromElementUID>Fuselage_fuselageSection19Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection20Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment20ID"> + <name>FuselageSegment20</name> + <fromElementUID>Fuselage_fuselageSection20Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection21Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment21ID"> + <name>FuselageSegment21</name> + <fromElementUID>Fuselage_fuselageSection21Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection22Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment22ID"> + <name>FuselageSegment22</name> + <fromElementUID>Fuselage_fuselageSection22Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection23Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment23ID"> + <name>FuselageSegment23</name> + <fromElementUID>Fuselage_fuselageSection23Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection24Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment24ID"> + <name>FuselageSegment24</name> + <fromElementUID>Fuselage_fuselageSection24Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection25Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment25ID"> + <name>FuselageSegment25</name> + <fromElementUID>Fuselage_fuselageSection25Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection26Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment26ID"> + <name>FuselageSegment26</name> + <fromElementUID>Fuselage_fuselageSection26Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection27Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment27ID"> + <name>FuselageSegment27</name> + <fromElementUID>Fuselage_fuselageSection27Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection28Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment28ID"> + <name>FuselageSegment28</name> + <fromElementUID>Fuselage_fuselageSection28Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection29Element1ID</toElementUID> + </segment> + <segment uID="Fuselage_fuselageSegment29ID"> + <name>FuselageSegment29</name> + <fromElementUID>Fuselage_fuselageSection29Element1ID</fromElementUID> + <toElementUID>Fuselage_fuselageSection30Element1ID</toElementUID> + </segment> + </segments> + </fuselage> + </fuselages> + </model> + </aircraft> + <engines> + <engine uID="engine"> + <transformation> + <translation refType="absLocal"> + <x>13.6765</x> + <y>5.7482</y> + <z>-2.33895</z> + </translation> + </transformation> + <analysis> + <bpr00>4.4</bpr00> + <thrust00>61367.6832837</thrust00> + <performanceMaps> + <performanceMap> + <flightLevel mapType="vector"> 120 </flightLevel> + <machNumber mapType="vector"> 0.9 </machNumber> + <thrust mapType="vector"> </thrust> + <mDotFuel mapType="vector"/> + </performanceMap> + </performanceMaps> + <mass> + <mass>2266.0</mass> + </mass> + <thrust00>61367.6832837</thrust00> + </analysis> + </engine> + </engines> + <profiles> + <wingAirfoils> + <wingAirfoil uID="Profile_MainWing_1ID"> + <name>Profile_MainWing_1</name> + <pointList> + <x mapType="vector">1;0.9898;0.9799;0.9699;0.9599;0.9499;0.9399;0.9299;0.9199;0.9098;0.8997;0.8896;0.8795;0.8693;0.8591;0.8489;0.8387;0.8285;0.8182;0.808;0.7978;0.7875;0.7772;0.767;0.7567;0.7465;0.7362;0.7259;0.7156;0.7054;0.6951;0.6848;0.6745;0.6642;0.6539;0.6436;0.6333;0.623;0.6127;0.6024;0.5921;0.5817;0.5714;0.5611;0.5508;0.5405;0.5301;0.5198;0.5095;0.4991;0.4888;0.4785;0.4681;0.4578;0.4475;0.4371;0.4268;0.4164;0.4061;0.3957;0.3854;0.3751;0.3647;0.3544;0.344;0.3337;0.3233;0.313;0.3026;0.2923;0.282;0.2716;0.2613;0.2509;0.2406;0.2303;0.2199;0.2096;0.1993;0.189;0.1786;0.1683;0.158;0.1477;0.1375;0.1272;0.117;0.1067;0.0965;0.0864;0.0763;0.0662;0.0563;0.0465;0.0369;0.0277;0.019;0.0113;0.0051;0.0013;0;0;0.0015;0.0062;0.013;0.021;0.0297;0.0389;0.0484;0.058;0.0679;0.0778;0.0878;0.0979;0.108;0.1182;0.1284;0.1386;0.1488;0.1591;0.1694;0.1797;0.19;0.2003;0.2106;0.2209;0.2312;0.2415;0.2519;0.2622;0.2725;0.2829;0.2932;0.3036;0.3139;0.3242;0.3346;0.3449;0.3553;0.3656;0.376;0.3863;0.3966;0.407;0.4173;0.4276;0.438;0.4483;0.4586;0.4689;0.4793;0.4896;0.4999;0.5102;0.5205;0.5307;0.541;0.5512;0.5614;0.5716;0.5818;0.592;0.6021;0.6123;0.6224;0.6326;0.6427;0.6528;0.6629;0.673;0.6831;0.6932;0.7032;0.7133;0.7234;0.7334;0.7435;0.7536;0.7638;0.7739;0.7841;0.7943;0.8045;0.8147;0.825;0.8352;0.8455;0.8557;0.866;0.8763;0.8866;0.8969;0.9072;0.9175;0.9278;0.9382;0.9485;0.9588;0.9692;0.9795;0.9899;1</x> + <y mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</y> + <z mapType="vector">0.0021;0.005;0.0078;0.0105;0.0132;0.0159;0.0186;0.0211;0.0236;0.026;0.0283;0.0304;0.0325;0.0344;0.0362;0.038;0.0397;0.0412;0.0428;0.0442;0.0456;0.047;0.0484;0.0497;0.051;0.0523;0.0536;0.0548;0.056;0.0572;0.0583;0.0594;0.0605;0.0615;0.0625;0.0635;0.0644;0.0653;0.0661;0.067;0.0678;0.0685;0.0692;0.0699;0.0706;0.0712;0.0719;0.0724;0.073;0.0735;0.074;0.0745;0.0749;0.0754;0.0757;0.0761;0.0764;0.0767;0.077;0.0772;0.0774;0.0776;0.0777;0.0778;0.0778;0.0778;0.0778;0.0777;0.0776;0.0775;0.0773;0.077;0.0767;0.0764;0.076;0.0756;0.0751;0.0745;0.0738;0.0731;0.0723;0.0714;0.0704;0.0693;0.0681;0.0668;0.0653;0.0638;0.062;0.06;0.0578;0.0554;0.0525;0.0492;0.0453;0.0406;0.0349;0.0281;0.0198;0.0102;0;0;-0.0102;-0.0194;-0.0272;-0.0337;-0.0393;-0.0441;-0.0482;-0.0518;-0.0551;-0.058;-0.0606;-0.0629;-0.0651;-0.067;-0.0687;-0.0703;-0.0718;-0.0731;-0.0742;-0.0753;-0.0762;-0.0771;-0.078;-0.0788;-0.0795;-0.0801;-0.0807;-0.0812;-0.0816;-0.0819;-0.0822;-0.0824;-0.0826;-0.0827;-0.0828;-0.0827;-0.0826;-0.0824;-0.0822;-0.0819;-0.0815;-0.0812;-0.0807;-0.0802;-0.0796;-0.079;-0.0784;-0.0777;-0.077;-0.0762;-0.0753;-0.0742;-0.0731;-0.0718;-0.0704;-0.0689;-0.0672;-0.0655;-0.0637;-0.0619;-0.0599;-0.0579;-0.0559;-0.0538;-0.0517;-0.0495;-0.0473;-0.045;-0.0427;-0.0404;-0.038;-0.0356;-0.0332;-0.0309;-0.0286;-0.0264;-0.0243;-0.0224;-0.0205;-0.0187;-0.0171;-0.0155;-0.014;-0.0125;-0.0111;-0.0099;-0.0087;-0.0075;-0.0065;-0.0056;-0.0047;-0.004;-0.0034;-0.0029;-0.0024;-0.0021;-0.0018;-0.0017;-0.0018;-0.0021</z> + </pointList> + </wingAirfoil> + <wingAirfoil uID="Profile_MainWing_2ID"> + <name>Profile_MainWing_2</name> + <pointList> + <x mapType="vector">1;0.9898;0.9798;0.9698;0.9598;0.9498;0.9397;0.9297;0.9196;0.9096;0.8995;0.8893;0.8792;0.869;0.8589;0.8487;0.8385;0.8283;0.8181;0.8079;0.7977;0.7874;0.7772;0.767;0.7568;0.7465;0.7363;0.7261;0.7158;0.7056;0.6953;0.6851;0.6748;0.6646;0.6543;0.644;0.6338;0.6235;0.6132;0.603;0.5927;0.5824;0.5721;0.5619;0.5516;0.5413;0.531;0.5207;0.5104;0.5002;0.4899;0.4796;0.4693;0.459;0.4487;0.4384;0.4281;0.4178;0.4075;0.3972;0.3869;0.3766;0.3663;0.356;0.3457;0.3354;0.3251;0.3148;0.3045;0.2942;0.2839;0.2736;0.2633;0.253;0.2427;0.2324;0.2221;0.2118;0.2015;0.1913;0.181;0.1707;0.1605;0.1502;0.14;0.1297;0.1195;0.1093;0.0991;0.089;0.0789;0.0688;0.0589;0.049;0.0393;0.0299;0.0209;0.0127;0.0059;0.0013;0;0;0.0015;0.0064;0.0133;0.0215;0.0304;0.0397;0.0492;0.059;0.0688;0.0788;0.0888;0.0989;0.1091;0.1192;0.1294;0.1396;0.1499;0.1601;0.1704;0.1807;0.191;0.2013;0.2116;0.2219;0.2322;0.2425;0.2528;0.2631;0.2734;0.2837;0.294;0.3043;0.3147;0.325;0.3353;0.3456;0.3559;0.3663;0.3766;0.3869;0.3972;0.4075;0.4178;0.4281;0.4384;0.4487;0.459;0.4693;0.4796;0.4899;0.5002;0.5105;0.5207;0.531;0.5413;0.5515;0.5617;0.5719;0.5821;0.5923;0.6025;0.6126;0.6228;0.6329;0.643;0.6532;0.6633;0.6734;0.6835;0.6936;0.7037;0.7138;0.7238;0.7339;0.744;0.7541;0.7642;0.7744;0.7845;0.7947;0.8049;0.8151;0.8253;0.8356;0.8458;0.856;0.8663;0.8766;0.8868;0.8971;0.9074;0.9177;0.928;0.9383;0.9486;0.9589;0.9692;0.9795;0.9899;1</x> + <y mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</y> + <z mapType="vector">0.0019;0.0044;0.0068;0.0093;0.0117;0.0141;0.0164;0.0187;0.0209;0.023;0.025;0.027;0.0288;0.0305;0.0322;0.0338;0.0353;0.0367;0.0381;0.0394;0.0407;0.042;0.0433;0.0445;0.0457;0.0469;0.0481;0.0492;0.0504;0.0515;0.0525;0.0536;0.0546;0.0556;0.0565;0.0574;0.0583;0.0591;0.0599;0.0607;0.0615;0.0622;0.0629;0.0636;0.0642;0.0649;0.0655;0.066;0.0666;0.0671;0.0676;0.0681;0.0685;0.069;0.0693;0.0697;0.0701;0.0704;0.0706;0.0709;0.0711;0.0713;0.0714;0.0716;0.0716;0.0717;0.0717;0.0716;0.0716;0.0715;0.0713;0.0711;0.0709;0.0706;0.0703;0.0699;0.0694;0.0689;0.0683;0.0677;0.067;0.0661;0.0652;0.0643;0.0631;0.0619;0.0606;0.0592;0.0576;0.0558;0.0538;0.0516;0.049;0.046;0.0425;0.0384;0.0333;0.0271;0.0194;0.0102;0;0;-0.0102;-0.0192;-0.0268;-0.0331;-0.0384;-0.0429;-0.0467;-0.0501;-0.0531;-0.0558;-0.0582;-0.0603;-0.0623;-0.064;-0.0656;-0.0671;-0.0684;-0.0695;-0.0706;-0.0715;-0.0724;-0.0731;-0.0738;-0.0745;-0.075;-0.0756;-0.0761;-0.0764;-0.0768;-0.077;-0.0772;-0.0774;-0.0774;-0.0775;-0.0775;-0.0774;-0.0773;-0.0772;-0.0769;-0.0766;-0.0762;-0.0758;-0.0753;-0.0748;-0.0743;-0.0737;-0.0731;-0.0724;-0.0717;-0.0709;-0.0701;-0.0692;-0.0682;-0.0671;-0.0659;-0.0646;-0.0632;-0.0617;-0.0601;-0.0584;-0.0566;-0.0548;-0.053;-0.0511;-0.0491;-0.0471;-0.0451;-0.043;-0.0409;-0.0388;-0.0366;-0.0344;-0.0322;-0.03;-0.0279;-0.0258;-0.0238;-0.0219;-0.0201;-0.0184;-0.0168;-0.0152;-0.0138;-0.0124;-0.0111;-0.0098;-0.0087;-0.0076;-0.0066;-0.0057;-0.0049;-0.0042;-0.0035;-0.003;-0.0025;-0.0022;-0.0019;-0.0017;-0.0017;-0.0019</z> + </pointList> + </wingAirfoil> + <wingAirfoil uID="Profile_MainWing_3ID"> + <name>Profile_MainWing_3</name> + <pointList> + <x mapType="vector">1;0.9902;0.9803;0.9703;0.9604;0.9504;0.9404;0.9304;0.9204;0.9104;0.9004;0.8903;0.8803;0.8703;0.8602;0.8501;0.8401;0.83;0.8199;0.8098;0.7997;0.7896;0.7795;0.7694;0.7593;0.7492;0.739;0.7289;0.7187;0.7086;0.6984;0.6882;0.6781;0.6679;0.6577;0.6475;0.6373;0.6271;0.6169;0.6067;0.5965;0.5863;0.576;0.5658;0.5556;0.5454;0.5352;0.5249;0.5147;0.5045;0.4943;0.4841;0.4738;0.4636;0.4534;0.4432;0.4329;0.4227;0.4125;0.4023;0.3921;0.3818;0.3716;0.3614;0.3511;0.3409;0.3307;0.3205;0.3103;0.3001;0.2898;0.2796;0.2694;0.2592;0.249;0.2388;0.2286;0.2184;0.2082;0.198;0.1879;0.1777;0.1675;0.1573;0.1472;0.137;0.1269;0.1168;0.1067;0.0966;0.0865;0.0764;0.0664;0.0565;0.0466;0.0368;0.0273;0.0183;0.0102;0.0034;0;0;0.0041;0.0122;0.0215;0.0311;0.0409;0.0508;0.0608;0.0708;0.0808;0.0908;0.1008;0.1109;0.1209;0.131;0.1411;0.1512;0.1613;0.1714;0.1815;0.1916;0.2017;0.2118;0.2219;0.2321;0.2422;0.2523;0.2625;0.2726;0.2828;0.2929;0.3031;0.3132;0.3234;0.3335;0.3437;0.3538;0.364;0.3741;0.3843;0.3944;0.4046;0.4147;0.4248;0.435;0.4451;0.4552;0.4654;0.4755;0.4856;0.4957;0.5058;0.5159;0.526;0.5361;0.5462;0.5563;0.5664;0.5764;0.5865;0.5966;0.6066;0.6167;0.6267;0.6368;0.6468;0.6568;0.6669;0.6769;0.6869;0.6969;0.707;0.717;0.727;0.737;0.7471;0.7571;0.7671;0.7772;0.7872;0.7973;0.8074;0.8175;0.8276;0.8377;0.8478;0.858;0.8681;0.8783;0.8884;0.8986;0.9087;0.9189;0.929;0.9391;0.9493;0.9594;0.9696;0.9797;0.9898;1</x> + <y mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</y> + <z mapType="vector">0.0024;0.0049;0.0074;0.0098;0.0121;0.0144;0.0166;0.0188;0.0209;0.023;0.025;0.027;0.0289;0.0308;0.0327;0.0345;0.0363;0.0381;0.0398;0.0414;0.0431;0.0447;0.0462;0.0477;0.0491;0.0505;0.0519;0.0532;0.0544;0.0556;0.0567;0.0578;0.0588;0.0597;0.0606;0.0614;0.0622;0.0629;0.0635;0.0641;0.0647;0.0652;0.0656;0.0661;0.0664;0.0668;0.0671;0.0674;0.0676;0.0678;0.0679;0.0681;0.0682;0.0682;0.0682;0.0682;0.0682;0.0681;0.068;0.0679;0.0677;0.0675;0.0673;0.0671;0.0668;0.0664;0.0661;0.0657;0.0652;0.0648;0.0643;0.0637;0.0631;0.0625;0.0618;0.0611;0.0604;0.0596;0.0588;0.0579;0.057;0.056;0.0549;0.0538;0.0526;0.0514;0.0501;0.0486;0.0471;0.0455;0.0437;0.0418;0.0398;0.0375;0.0349;0.0318;0.0282;0.0233;0.0171;0.0095;0;0;-0.009;-0.015;-0.0192;-0.0224;-0.025;-0.0272;-0.0292;-0.0311;-0.0328;-0.0343;-0.0358;-0.0372;-0.0386;-0.0399;-0.0411;-0.0422;-0.0433;-0.0443;-0.0453;-0.0462;-0.047;-0.0478;-0.0485;-0.0492;-0.0498;-0.0503;-0.0508;-0.0512;-0.0515;-0.0518;-0.052;-0.0521;-0.0522;-0.0522;-0.0521;-0.052;-0.0518;-0.0516;-0.0513;-0.051;-0.0506;-0.0502;-0.0496;-0.0491;-0.0485;-0.0478;-0.0471;-0.0463;-0.0455;-0.0446;-0.0436;-0.0427;-0.0416;-0.0406;-0.0394;-0.0383;-0.037;-0.0358;-0.0345;-0.0332;-0.0318;-0.0304;-0.029;-0.0275;-0.026;-0.0245;-0.0229;-0.0214;-0.0198;-0.0182;-0.0166;-0.015;-0.0133;-0.0117;-0.0101;-0.0086;-0.007;-0.0056;-0.0042;-0.0029;-0.0018;-0.0007;0.0002;0.0009;0.0015;0.0019;0.0022;0.0024;0.0024;0.0023;0.0022;0.002;0.0017;0.0013;0.0009;0.0004;-0.0002;-0.0009;-0.0016;-0.0024</z> + </pointList> + </wingAirfoil> + <wingAirfoil uID="Profile_HorizontalStabiliser_1ID"> + <name>Profile_HorizontalStabiliser_1</name> + <pointList> + <x mapType="vector">1;0.98952;0.969839;0.946227;0.920506;0.893968;0.867152;0.840237;0.81328;0.786301;0.759311;0.732314;0.705318;0.678327;0.651346;0.624382;0.597439;0.570525;0.543645;0.516806;0.490016;0.463283;0.436617;0.410027;0.383526;0.357128;0.33085;0.304713;0.278743;0.252974;0.227451;0.202237;0.177426;0.153163;0.129693;0.107423;0.086964;0.06902;0.054048;0.041996;0.032424;0.024799;0.018663;0.013682;0.009627;0.006354;0.003785;0.001888;0.000655;6.9e-05;6.9e-05;0.000655;0.001888;0.003785;0.006355;0.009627;0.013682;0.018663;0.024799;0.032424;0.041996;0.054048;0.06902;0.086964;0.107423;0.129694;0.153163;0.177426;0.202238;0.227452;0.252975;0.278744;0.304713;0.33085;0.357128;0.383526;0.410027;0.436617;0.463284;0.490017;0.516807;0.543645;0.570525;0.59744;0.624382;0.651347;0.678327;0.705318;0.732315;0.759311;0.786301;0.81328;0.840237;0.867152;0.893968;0.920506;0.946227;0.969839;0.98952;1</x> + <y mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</y> + <z mapType="vector">0.00126;0.002721;0.005415;0.008563;0.011893;0.015226;0.01849;0.021666;0.024749;0.027736;0.030628;0.033423;0.03612;0.038715;0.041204;0.043582;0.045844;0.047981;0.049986;0.051849;0.053559;0.055104;0.05647;0.057641;0.058601;0.059331;0.059809;0.060012;0.059914;0.059485;0.058693;0.057503;0.055874;0.053768;0.051155;0.048034;0.044472;0.040632;0.036739;0.032971;0.02941;0.026051;0.022853;0.019763;0.016731;0.013712;0.010671;0.007597;0.00451;0.001471;-0.001471;-0.004511;-0.007597;-0.010671;-0.013712;-0.016731;-0.019764;-0.022853;-0.026051;-0.02941;-0.032972;-0.036739;-0.040632;-0.044472;-0.048034;-0.051155;-0.053768;-0.055874;-0.057503;-0.058693;-0.059485;-0.059914;-0.060012;-0.059809;-0.059331;-0.058601;-0.057641;-0.05647;-0.055104;-0.053559;-0.051849;-0.049986;-0.047981;-0.045843;-0.043582;-0.041204;-0.038714;-0.03612;-0.033423;-0.030628;-0.027736;-0.024749;-0.021666;-0.01849;-0.015226;-0.011893;-0.008563;-0.005415;-0.002721;-0.00126</z> + </pointList> + </wingAirfoil> + <wingAirfoil uID="Profile_HorizontalStabiliser_2ID"> + <name>Profile_HorizontalStabiliser_2</name> + <pointList> + <x mapType="vector">1;0.98952;0.969839;0.946227;0.920506;0.893968;0.867152;0.840237;0.81328;0.786301;0.759311;0.732314;0.705318;0.678327;0.651346;0.624382;0.597439;0.570525;0.543645;0.516806;0.490016;0.463283;0.436617;0.410027;0.383526;0.357128;0.33085;0.304713;0.278743;0.252974;0.227451;0.202237;0.177426;0.153163;0.129693;0.107423;0.086964;0.06902;0.054048;0.041996;0.032424;0.024799;0.018663;0.013682;0.009627;0.006354;0.003785;0.001888;0.000655;6.9e-05;6.9e-05;0.000655;0.001888;0.003785;0.006355;0.009627;0.013682;0.018663;0.024799;0.032424;0.041996;0.054048;0.06902;0.086964;0.107423;0.129694;0.153163;0.177426;0.202238;0.227452;0.252975;0.278744;0.304713;0.33085;0.357128;0.383526;0.410027;0.436617;0.463284;0.490017;0.516807;0.543645;0.570525;0.59744;0.624382;0.651347;0.678327;0.705318;0.732315;0.759311;0.786301;0.81328;0.840237;0.867152;0.893968;0.920506;0.946227;0.969839;0.98952;1</x> + <y mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</y> + <z mapType="vector">0.00126;0.002721;0.005415;0.008563;0.011893;0.015226;0.01849;0.021666;0.024749;0.027736;0.030628;0.033423;0.03612;0.038715;0.041204;0.043582;0.045844;0.047981;0.049986;0.051849;0.053559;0.055104;0.05647;0.057641;0.058601;0.059331;0.059809;0.060012;0.059914;0.059485;0.058693;0.057503;0.055874;0.053768;0.051155;0.048034;0.044472;0.040632;0.036739;0.032971;0.02941;0.026051;0.022853;0.019763;0.016731;0.013712;0.010671;0.007597;0.00451;0.001471;-0.001471;-0.004511;-0.007597;-0.010671;-0.013712;-0.016731;-0.019764;-0.022853;-0.026051;-0.02941;-0.032972;-0.036739;-0.040632;-0.044472;-0.048034;-0.051155;-0.053768;-0.055874;-0.057503;-0.058693;-0.059485;-0.059914;-0.060012;-0.059809;-0.059331;-0.058601;-0.057641;-0.05647;-0.055104;-0.053559;-0.051849;-0.049986;-0.047981;-0.045843;-0.043582;-0.041204;-0.038714;-0.03612;-0.033423;-0.030628;-0.027736;-0.024749;-0.021666;-0.01849;-0.015226;-0.011893;-0.008563;-0.005415;-0.002721;-0.00126</z> + </pointList> + </wingAirfoil> + <wingAirfoil uID="Profile_VerticalStabiliser_1ID"> + <name>Profile_VerticalStabiliser_1</name> + <pointList> + <x mapType="vector">1;0.98952;0.969839;0.946227;0.920506;0.893968;0.867152;0.840237;0.81328;0.786301;0.759311;0.732314;0.705318;0.678327;0.651346;0.624382;0.597439;0.570525;0.543645;0.516806;0.490016;0.463283;0.436617;0.410027;0.383526;0.357128;0.33085;0.304713;0.278743;0.252974;0.227451;0.202237;0.177426;0.153163;0.129693;0.107423;0.086964;0.06902;0.054048;0.041996;0.032424;0.024799;0.018663;0.013682;0.009627;0.006354;0.003785;0.001888;0.000655;6.9e-05;6.9e-05;0.000655;0.001888;0.003785;0.006355;0.009627;0.013682;0.018663;0.024799;0.032424;0.041996;0.054048;0.06902;0.086964;0.107423;0.129694;0.153163;0.177426;0.202238;0.227452;0.252975;0.278744;0.304713;0.33085;0.357128;0.383526;0.410027;0.436617;0.463284;0.490017;0.516807;0.543645;0.570525;0.59744;0.624382;0.651347;0.678327;0.705318;0.732315;0.759311;0.786301;0.81328;0.840237;0.867152;0.893968;0.920506;0.946227;0.969839;0.98952;1</x> + <y mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</y> + <z mapType="vector">0.00126;0.002721;0.005415;0.008563;0.011893;0.015226;0.01849;0.021666;0.024749;0.027736;0.030628;0.033423;0.03612;0.038715;0.041204;0.043582;0.045844;0.047981;0.049986;0.051849;0.053559;0.055104;0.05647;0.057641;0.058601;0.059331;0.059809;0.060012;0.059914;0.059485;0.058693;0.057503;0.055874;0.053768;0.051155;0.048034;0.044472;0.040632;0.036739;0.032971;0.02941;0.026051;0.022853;0.019763;0.016731;0.013712;0.010671;0.007597;0.00451;0.001471;-0.001471;-0.004511;-0.007597;-0.010671;-0.013712;-0.016731;-0.019764;-0.022853;-0.026051;-0.02941;-0.032972;-0.036739;-0.040632;-0.044472;-0.048034;-0.051155;-0.053768;-0.055874;-0.057503;-0.058693;-0.059485;-0.059914;-0.060012;-0.059809;-0.059331;-0.058601;-0.057641;-0.05647;-0.055104;-0.053559;-0.051849;-0.049986;-0.047981;-0.045843;-0.043582;-0.041204;-0.038714;-0.03612;-0.033423;-0.030628;-0.027736;-0.024749;-0.021666;-0.01849;-0.015226;-0.011893;-0.008563;-0.005415;-0.002721;-0.00126</z> + </pointList> + </wingAirfoil> + <wingAirfoil uID="Profile_VerticalStabiliser_2ID"> + <name>Profile_VerticalStabiliser_2</name> + <pointList> + <x mapType="vector">1;0.98952;0.969839;0.946227;0.920506;0.893968;0.867152;0.840237;0.81328;0.786301;0.759311;0.732314;0.705318;0.678327;0.651346;0.624382;0.597439;0.570525;0.543645;0.516806;0.490016;0.463283;0.436617;0.410027;0.383526;0.357128;0.33085;0.304713;0.278743;0.252974;0.227451;0.202237;0.177426;0.153163;0.129693;0.107423;0.086964;0.06902;0.054048;0.041996;0.032424;0.024799;0.018663;0.013682;0.009627;0.006354;0.003785;0.001888;0.000655;6.9e-05;6.9e-05;0.000655;0.001888;0.003785;0.006355;0.009627;0.013682;0.018663;0.024799;0.032424;0.041996;0.054048;0.06902;0.086964;0.107423;0.129694;0.153163;0.177426;0.202238;0.227452;0.252975;0.278744;0.304713;0.33085;0.357128;0.383526;0.410027;0.436617;0.463284;0.490017;0.516807;0.543645;0.570525;0.59744;0.624382;0.651347;0.678327;0.705318;0.732315;0.759311;0.786301;0.81328;0.840237;0.867152;0.893968;0.920506;0.946227;0.969839;0.98952;1</x> + <y mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</y> + <z mapType="vector">0.00126;0.002721;0.005415;0.008563;0.011893;0.015226;0.01849;0.021666;0.024749;0.027736;0.030628;0.033423;0.03612;0.038715;0.041204;0.043582;0.045844;0.047981;0.049986;0.051849;0.053559;0.055104;0.05647;0.057641;0.058601;0.059331;0.059809;0.060012;0.059914;0.059485;0.058693;0.057503;0.055874;0.053768;0.051155;0.048034;0.044472;0.040632;0.036739;0.032971;0.02941;0.026051;0.022853;0.019763;0.016731;0.013712;0.010671;0.007597;0.00451;0.001471;-0.001471;-0.004511;-0.007597;-0.010671;-0.013712;-0.016731;-0.019764;-0.022853;-0.026051;-0.02941;-0.032972;-0.036739;-0.040632;-0.044472;-0.048034;-0.051155;-0.053768;-0.055874;-0.057503;-0.058693;-0.059485;-0.059914;-0.060012;-0.059809;-0.059331;-0.058601;-0.057641;-0.05647;-0.055104;-0.053559;-0.051849;-0.049986;-0.047981;-0.045843;-0.043582;-0.041204;-0.038714;-0.03612;-0.033423;-0.030628;-0.027736;-0.024749;-0.021666;-0.01849;-0.015226;-0.011893;-0.008563;-0.005415;-0.002721;-0.00126</z> + </pointList> + </wingAirfoil> + </wingAirfoils> + <fuselageProfiles> + <fuselageProfile uID="Profile_Fuselage_1ID"> + <name>Profile_Fuselage_1</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.00760827;-0.0151289;-0.0224751;-0.0295622;-0.0363087;-0.0426367;-0.0484732;-0.0537511;-0.0584094;-0.0611548;-0.0634929;-0.0654046;-0.0668743;-0.0678901;-0.0684436;-0.0685304;-0.0681497;-0.0673046;-0.0643827;-0.0599899;-0.0542266;-0.0472243;-0.0391432;-0.0301677;-0.0205031;-0.01037;-8.42605e-18;8.42605e-18;0.01037;0.0205031;0.0301677;0.0391432;0.0472243;0.0542266;0.0599899;0.0643827;0.0673046;0.0681497;0.0685304;0.0684436;0.0678901;0.0668743;0.0654046;0.0634929;0.0611548;0.0584094;0.0537511;0.0484732;0.0426367;0.0363087;0.0295622;0.0224751;0.0151289;0.00760827;0</y> + <z mapType="vector">-0.380603;-0.381012;-0.382234;-0.384255;-0.387053;-0.390594;-0.394837;-0.399735;-0.40523;-0.41126;-0.415649;-0.420268;-0.425079;-0.430044;-0.43512;-0.440268;-0.445444;-0.450607;-0.455715;-0.465696;-0.475122;-0.483779;-0.491468;-0.498014;-0.503267;-0.507108;-0.509448;-0.510234;-0.510234;-0.509448;-0.507108;-0.503267;-0.498014;-0.491468;-0.483779;-0.475122;-0.465696;-0.455715;-0.450607;-0.445444;-0.440268;-0.43512;-0.430044;-0.425079;-0.420268;-0.415649;-0.41126;-0.40523;-0.399735;-0.394837;-0.390594;-0.387053;-0.384255;-0.382234;-0.381012;-0.380603</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_2ID"> + <name>Profile_Fuselage_2</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0269479;-0.0535852;-0.0796049;-0.104707;-0.128603;-0.151016;-0.171688;-0.190382;-0.206882;-0.216606;-0.224887;-0.231658;-0.236864;-0.240461;-0.242422;-0.242729;-0.241381;-0.238388;-0.228039;-0.21248;-0.192066;-0.167265;-0.138642;-0.106852;-0.0726203;-0.0367297;-2.98444e-17;2.98444e-17;0.0367297;0.0726203;0.106852;0.138642;0.167265;0.192066;0.21248;0.228039;0.238388;0.241381;0.242729;0.242422;0.240461;0.236864;0.231658;0.224887;0.216606;0.206882;0.190382;0.171688;0.151016;0.128603;0.104707;0.0796049;0.0535852;0.0269479;0</y> + <z mapType="vector">-0.202044;-0.203493;-0.207822;-0.214982;-0.224889;-0.237431;-0.252463;-0.26981;-0.289273;-0.310629;-0.326176;-0.342536;-0.359577;-0.37716;-0.395141;-0.413373;-0.431708;-0.449995;-0.468086;-0.503438;-0.536825;-0.567487;-0.594721;-0.617906;-0.636513;-0.650115;-0.658403;-0.661187;-0.661187;-0.658403;-0.650115;-0.636513;-0.617906;-0.594721;-0.567487;-0.536825;-0.503438;-0.468086;-0.449995;-0.431708;-0.413373;-0.395141;-0.37716;-0.359577;-0.342536;-0.326176;-0.310629;-0.289273;-0.26981;-0.252463;-0.237431;-0.224889;-0.214982;-0.207822;-0.203493;-0.202044</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_3ID"> + <name>Profile_Fuselage_3</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0514493;-0.102306;-0.151983;-0.199908;-0.24553;-0.288321;-0.32779;-0.36348;-0.394981;-0.413546;-0.429357;-0.442285;-0.452223;-0.459092;-0.462836;-0.463422;-0.460848;-0.455133;-0.435374;-0.405669;-0.366696;-0.319344;-0.264697;-0.204003;-0.138648;-0.0701249;-5.69794e-17;5.69794e-17;0.0701249;0.138648;0.204003;0.264697;0.319344;0.366696;0.405669;0.435374;0.455133;0.460848;0.463422;0.462836;0.459092;0.452223;0.442285;0.429357;0.413546;0.394981;0.36348;0.32779;0.288321;0.24553;0.199908;0.151983;0.102306;0.0514493;0</y> + <z mapType="vector">0.0458874;0.0431216;0.0348563;0.0211867;0.00227037;-0.0216747;-0.0503726;-0.0834924;-0.120653;-0.161425;-0.191107;-0.222343;-0.254878;-0.288447;-0.322776;-0.357585;-0.39259;-0.427505;-0.462045;-0.529538;-0.593282;-0.651821;-0.703818;-0.748083;-0.783607;-0.809577;-0.8254;-0.830715;-0.830715;-0.8254;-0.809577;-0.783607;-0.748083;-0.703818;-0.651821;-0.593282;-0.529538;-0.462045;-0.427505;-0.39259;-0.357585;-0.322776;-0.288447;-0.254878;-0.222343;-0.191107;-0.161425;-0.120653;-0.0834924;-0.0503726;-0.0216747;0.00227037;0.0211867;0.0348563;0.0431216;0.0458874</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_4ID"> + <name>Profile_Fuselage_4</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0750025;-0.149141;-0.22156;-0.291425;-0.357932;-0.420313;-0.47785;-0.529879;-0.575801;-0.602865;-0.625914;-0.64476;-0.659248;-0.669262;-0.674719;-0.675574;-0.671821;-0.66349;-0.634686;-0.591382;-0.534566;-0.465538;-0.385874;-0.297394;-0.20212;-0.102228;-8.30642e-17;8.30642e-17;0.102228;0.20212;0.297394;0.385874;0.465538;0.534566;0.591382;0.634686;0.66349;0.671821;0.675574;0.674719;0.669262;0.659248;0.64476;0.625914;0.602865;0.575801;0.529879;0.47785;0.420313;0.357932;0.291425;0.22156;0.149141;0.0750025;0</y> + <z mapType="vector">0.305768;0.301737;0.289687;0.26976;0.242184;0.207277;0.165441;0.117159;0.0629876;0.0035503;-0.0397198;-0.0852555;-0.132685;-0.181622;-0.231667;-0.282411;-0.333441;-0.38434;-0.434692;-0.533083;-0.626009;-0.711347;-0.787147;-0.851677;-0.903463;-0.941322;-0.964389;-0.972137;-0.972137;-0.964389;-0.941322;-0.903463;-0.851677;-0.787147;-0.711347;-0.626009;-0.533083;-0.434692;-0.38434;-0.333441;-0.282411;-0.231667;-0.181622;-0.132685;-0.0852555;-0.0397198;0.0035503;0.0629876;0.117159;0.165441;0.207277;0.242184;0.26976;0.289687;0.301737;0.305768</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_5ID"> + <name>Profile_Fuselage_5</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0962309;-0.191353;-0.284269;-0.373909;-0.459239;-0.539277;-0.613099;-0.679854;-0.738774;-0.773498;-0.80307;-0.82725;-0.845839;-0.858687;-0.865688;-0.866786;-0.86197;-0.851282;-0.814325;-0.758764;-0.685868;-0.597302;-0.49509;-0.381567;-0.259327;-0.131162;-1.06574e-16;1.06574e-16;0.131162;0.259327;0.381567;0.49509;0.597302;0.685868;0.758764;0.814325;0.851282;0.86197;0.866786;0.865688;0.858687;0.845839;0.82725;0.80307;0.773498;0.738774;0.679854;0.613099;0.539277;0.459239;0.373909;0.284269;0.191353;0.0962309;0</y> + <z mapType="vector">0.556032;0.550859;0.5354;0.509832;0.474451;0.429664;0.375988;0.31404;0.244536;0.168276;0.112759;0.0543348;-0.00651942;-0.0693073;-0.133517;-0.198623;-0.264096;-0.329401;-0.394004;-0.520244;-0.639471;-0.748963;-0.846217;-0.929011;-0.995455;-1.04403;-1.07363;-1.08357;-1.08357;-1.07363;-1.04403;-0.995455;-0.929011;-0.846217;-0.748963;-0.639471;-0.520244;-0.394004;-0.329401;-0.264096;-0.198623;-0.133517;-0.0693073;-0.00651942;0.0543348;0.112759;0.168276;0.244536;0.31404;0.375988;0.429664;0.474451;0.509832;0.5354;0.550859;0.556032</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_6ID"> + <name>Profile_Fuselage_6</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.116018;-0.230698;-0.34272;-0.450792;-0.553668;-0.650162;-0.739163;-0.819645;-0.89068;-0.932543;-0.968196;-0.997348;-1.01976;-1.03525;-1.04369;-1.04501;-1.03921;-1.02632;-0.981766;-0.91478;-0.826895;-0.720119;-0.59689;-0.460025;-0.312649;-0.158131;-1.28488e-16;1.28488e-16;0.158131;0.312649;0.460025;0.59689;0.720119;0.826895;0.91478;0.981766;1.02632;1.03921;1.04501;1.04369;1.03525;1.01976;0.997348;0.968196;0.932543;0.89068;0.819645;0.739163;0.650162;0.553668;0.450792;0.34272;0.230698;0.116018;0</y> + <z mapType="vector">0.796924;0.790687;0.772049;0.741224;0.698568;0.644572;0.579859;0.505174;0.421378;0.329438;0.262505;0.192068;0.118701;0.0430027;-0.0344091;-0.112903;-0.191838;-0.270571;-0.348458;-0.500655;-0.644398;-0.776403;-0.893654;-0.993472;-1.07358;-1.13214;-1.16782;-1.17981;-1.17981;-1.16782;-1.13214;-1.07358;-0.993472;-0.893654;-0.776403;-0.644398;-0.500655;-0.348458;-0.270571;-0.191838;-0.112903;-0.0344091;0.0430027;0.118701;0.192068;0.262505;0.329438;0.421378;0.505174;0.579859;0.644572;0.698568;0.741224;0.772049;0.790687;0.796924</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_7ID"> + <name>Profile_Fuselage_7</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.133077;-0.264621;-0.393115;-0.517077;-0.635081;-0.745764;-0.847852;-0.940168;-1.02165;-1.06967;-1.11056;-1.144;-1.16971;-1.18748;-1.19716;-1.19868;-1.19202;-1.17723;-1.12613;-1.04929;-0.948484;-0.826007;-0.684659;-0.527668;-0.358622;-0.181383;-1.47381e-16;1.47381e-16;0.181383;0.358622;0.527668;0.684659;0.826007;0.948484;1.04929;1.12613;1.17723;1.19202;1.19868;1.19716;1.18748;1.16971;1.144;1.11056;1.06967;1.02165;0.940168;0.847852;0.745764;0.635081;0.517077;0.393115;0.264621;0.133077;0</y> + <z mapType="vector">1.00719;1.00004;0.978662;0.943304;0.894376;0.83244;0.758211;0.672544;0.576427;0.470967;0.394193;0.313398;0.229243;0.142414;0.0536191;-0.0364167;-0.126959;-0.217269;-0.306609;-0.481185;-0.646064;-0.797479;-0.931972;-1.04647;-1.13835;-1.20553;-1.24645;-1.2602;-1.2602;-1.24645;-1.20553;-1.13835;-1.04647;-0.931972;-0.797479;-0.646064;-0.481185;-0.306609;-0.217269;-0.126959;-0.0364167;0.0536191;0.142414;0.229243;0.313398;0.394193;0.470967;0.576427;0.672544;0.758211;0.83244;0.894376;0.943304;0.978662;1.00004;1.00719</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_8ID"> + <name>Profile_Fuselage_8</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.147337;-0.292977;-0.435239;-0.572485;-0.703133;-0.825677;-0.938704;-1.04091;-1.13112;-1.18429;-1.22957;-1.26659;-1.29505;-1.31472;-1.32544;-1.32712;-1.31975;-1.30338;-1.2468;-1.16173;-1.05012;-0.914519;-0.758024;-0.584211;-0.397051;-0.200819;-1.63174e-16;1.63174e-16;0.200819;0.397051;0.584211;0.758024;0.914519;1.05012;1.16173;1.2468;1.30338;1.31975;1.32712;1.32544;1.31472;1.29505;1.26659;1.22957;1.18429;1.13112;1.04091;0.938704;0.825677;0.703133;0.572485;0.435239;0.292977;0.147337;0</y> + <z mapType="vector">1.18088;1.17296;1.1493;1.11015;1.05598;0.987405;0.905222;0.810375;0.703958;0.587198;0.502197;0.412745;0.319572;0.223438;0.125129;0.0254449;-0.0747993;-0.174786;-0.2737;-0.466983;-0.64953;-0.81717;-0.966074;-1.09284;-1.19457;-1.26894;-1.31425;-1.32948;-1.32948;-1.31425;-1.26894;-1.19457;-1.09284;-0.966074;-0.81717;-0.64953;-0.466983;-0.2737;-0.174786;-0.0747993;0.0254449;0.125129;0.223438;0.319572;0.412745;0.502197;0.587198;0.703958;0.810375;0.905222;0.987405;1.05598;1.11015;1.1493;1.17296;1.18088</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_9ID"> + <name>Profile_Fuselage_9</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.158826;-0.315821;-0.469176;-0.617124;-0.757959;-0.890058;-1.0119;-1.12208;-1.21932;-1.27663;-1.32544;-1.36535;-1.39603;-1.41723;-1.42879;-1.4306;-1.42265;-1.40501;-1.34402;-1.25231;-1.132;-0.985826;-0.817129;-0.629763;-0.42801;-0.216478;-1.75897e-16;1.75897e-16;0.216478;0.42801;0.629763;0.817129;0.985826;1.132;1.25231;1.34402;1.40501;1.42265;1.4306;1.42879;1.41723;1.39603;1.36535;1.32544;1.27663;1.21932;1.12208;1.0119;0.890058;0.757959;0.617124;0.469176;0.315821;0.158826;0</y> + <z mapType="vector">1.31647;1.30794;1.28242;1.24022;1.18183;1.10791;1.01932;0.917075;0.802361;0.676496;0.584867;0.48844;0.388002;0.284373;0.178398;0.0709417;-0.0371189;-0.144902;-0.251528;-0.459882;-0.656663;-0.837375;-0.997889;-1.13454;-1.2442;-1.32437;-1.37322;-1.38963;-1.38963;-1.37322;-1.32437;-1.2442;-1.13454;-0.997889;-0.837375;-0.656663;-0.459882;-0.251528;-0.144902;-0.0371189;0.0709417;0.178398;0.284373;0.388002;0.48844;0.584867;0.676496;0.802361;0.917075;1.01932;1.10791;1.18183;1.24022;1.28242;1.30794;1.31647</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_10ID"> + <name>Profile_Fuselage_10</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.167385;-0.33284;-0.49446;-0.65038;-0.798805;-0.938022;-1.06643;-1.18254;-1.28503;-1.34543;-1.39687;-1.43892;-1.47126;-1.49361;-1.50578;-1.50746;-1.50746;-1.50769;-1.49932;-1.48073;-1.41644;-1.3198;-1.193;-1.03895;-0.861164;-0.663701;-0.451075;-0.228144;-1.85376e-16;1.85376e-16;0.228144;0.451075;0.663701;0.861164;1.03895;1.193;1.3198;1.41644;1.48073;1.49932;1.50769;1.50746;1.50746;1.50578;1.49361;1.47126;1.43892;1.39687;1.34543;1.28503;1.18254;1.06643;0.938022;0.798805;0.65038;0.49446;0.33284;0.167385;0</y> + <z mapType="vector">1.4125;1.4035;1.37661;1.33214;1.2706;1.1927;1.09933;0.991579;0.870683;0.738035;0.641468;0.539845;0.433995;0.324781;0.213095;0.0998478;-1.21431e-17;-1.04083e-17;-0.0140362;-0.127628;-0.24;-0.459582;-0.666967;-0.857417;-1.02658;-1.17059;-1.28617;-1.37066;-1.42214;-1.43943;-1.43943;-1.42214;-1.37066;-1.28617;-1.17059;-1.02658;-0.857417;-0.666967;-0.459582;-0.24;-0.127628;-0.0140362;-1.04083e-17;-1.21431e-17;0.0998478;0.213095;0.324781;0.433995;0.539845;0.641468;0.738035;0.870683;0.991579;1.09933;1.1927;1.2706;1.33214;1.37661;1.4035;1.4125</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_11ID"> + <name>Profile_Fuselage_11</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.170215;-0.338336;-0.502295;-0.660075;-0.809738;-0.949443;-1.07747;-1.19226;-1.29239;-1.34981;-1.39871;-1.43873;-1.46958;-1.49103;-1.50292;-1.50517;-1.49775;-1.48073;-1.41929;-1.32466;-1.19904;-1.04538;-0.867254;-0.668842;-0.454782;-0.230083;-1.84815e-16;1.84815e-16;0.230083;0.454782;0.668842;0.867254;1.04538;1.19904;1.32466;1.41929;1.48073;1.49775;1.50517;1.50292;1.49103;1.46958;1.43873;1.39871;1.34981;1.29239;1.19226;1.07747;0.949443;0.809738;0.660075;0.502295;0.338336;0.170215;0</y> + <z mapType="vector">1.44226;1.43282;1.40459;1.35794;1.29343;1.21187;1.11425;1.00179;0.875866;0.738035;0.640312;0.538033;0.431945;0.322822;0.211459;0.09867;-0.0147213;-0.127887;-0.24;-0.462387;-0.672814;-0.866355;-1.03848;-1.18517;-1.30298;-1.38915;-1.44168;-1.45932;-1.45932;-1.44168;-1.38915;-1.30298;-1.18517;-1.03848;-0.866355;-0.672814;-0.462387;-0.24;-0.127887;-0.0147213;0.09867;0.211459;0.322822;0.431945;0.538033;0.640312;0.738035;0.875866;1.00179;1.11425;1.21187;1.29343;1.35794;1.40459;1.43282;1.44226</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_12ID"> + <name>Profile_Fuselage_12</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.175211;-0.348035;-0.516116;-0.677163;-0.828981;-0.969502;-1.09681;-1.20917;-1.30506;-1.35719;-1.40161;-1.43805;-1.4663;-1.4862;-1.49763;-1.50053;-1.49489;-1.48073;-1.4245;-1.33355;-1.21009;-1.05713;-0.878398;-0.67825;-0.461567;-0.233631;-1.83808e-16;1.83808e-16;0.233631;0.461567;0.67825;0.878398;1.05713;1.21009;1.33355;1.4245;1.48073;1.49489;1.50053;1.49763;1.4862;1.4663;1.43805;1.40161;1.35719;1.30506;1.20917;1.09681;0.969502;0.828981;0.677163;0.516116;0.348035;0.175211;0</y> + <z mapType="vector">1.49503;1.48478;1.45419;1.40366;1.33389;1.24583;1.14068;1.01986;0.885037;0.738035;0.638276;0.534848;0.428346;0.319386;0.208596;0.0966149;-0.0159107;-0.128332;-0.24;-0.467501;-0.683478;-0.882665;-1.06021;-1.21177;-1.33367;-1.42293;-1.47737;-1.49566;-1.49566;-1.47737;-1.42293;-1.33367;-1.21177;-1.06021;-0.882665;-0.683478;-0.467501;-0.24;-0.128332;-0.0159107;0.0966149;0.208596;0.319386;0.428346;0.534848;0.638276;0.738035;0.885037;1.01986;1.14068;1.24583;1.33389;1.40366;1.45419;1.48478;1.49503</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_13ID"> + <name>Profile_Fuselage_13</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.175669;-0.34892;-0.51737;-0.6787;-0.830689;-0.971247;-1.09844;-1.21051;-1.30593;-1.35757;-1.40157;-1.43768;-1.46572;-1.48551;-1.49695;-1.49996;-1.49455;-1.48073;-1.42514;-1.33464;-1.21144;-1.05857;-0.879761;-0.679402;-0.462398;-0.234066;-1.83703e-16;1.83703e-16;0.234066;0.462398;0.679402;0.879761;1.05857;1.21144;1.33464;1.42514;1.48073;1.49455;1.49996;1.49695;1.48551;1.46572;1.43768;1.40157;1.35757;1.30593;1.21051;1.09844;0.971247;0.830689;0.6787;0.51737;0.34892;0.175669;0</y> + <z mapType="vector">1.50005;1.48973;1.45891;1.40801;1.33773;1.24904;1.14317;1.02156;0.885893;0.738035;0.638095;0.534567;0.428033;0.319092;0.208356;0.0964481;-0.0160019;-0.128362;-0.24;-0.468111;-0.684754;-0.884622;-1.06282;-1.21498;-1.33737;-1.427;-1.48168;-1.50005;-1.50005;-1.48168;-1.427;-1.33737;-1.21498;-1.06282;-0.884622;-0.684754;-0.468111;-0.24;-0.128362;-0.0160019;0.0964481;0.208356;0.319092;0.428033;0.534567;0.638095;0.738035;0.885893;1.02156;1.14317;1.24904;1.33773;1.40801;1.45891;1.48973;1.50005</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_14ID"> + <name>Profile_Fuselage_14</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.175669;-0.34892;-0.51737;-0.6787;-0.830689;-0.971247;-1.09844;-1.21051;-1.30593;-1.35757;-1.40157;-1.43768;-1.46572;-1.48551;-1.49695;-1.49996;-1.49455;-1.48073;-1.42514;-1.33464;-1.21144;-1.05857;-0.879761;-0.679402;-0.462398;-0.234066;-1.83703e-16;1.83703e-16;0.234066;0.462398;0.679402;0.879761;1.05857;1.21144;1.33464;1.42514;1.48073;1.49455;1.49996;1.49695;1.48551;1.46572;1.43768;1.40157;1.35757;1.30593;1.21051;1.09844;0.971247;0.830689;0.6787;0.51737;0.34892;0.175669;0</y> + <z mapType="vector">1.50005;1.48973;1.45891;1.40801;1.33773;1.24904;1.14317;1.02156;0.885893;0.738035;0.638095;0.534567;0.428033;0.319092;0.208356;0.0964481;-0.0160019;-0.128362;-0.24;-0.468111;-0.684754;-0.884622;-1.06282;-1.21498;-1.33737;-1.427;-1.48168;-1.50005;-1.50005;-1.48168;-1.427;-1.33737;-1.21498;-1.06282;-0.884622;-0.684754;-0.468111;-0.24;-0.128362;-0.0160019;0.0964481;0.208356;0.319092;0.428033;0.534567;0.638095;0.738035;0.885893;1.02156;1.14317;1.24904;1.33773;1.40801;1.45891;1.48973;1.50005</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_15ID"> + <name>Profile_Fuselage_15</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.175669;-0.34892;-0.51737;-0.6787;-0.830689;-0.971247;-1.09844;-1.21051;-1.30593;-1.35757;-1.40157;-1.43768;-1.46572;-1.48551;-1.49695;-1.49996;-1.49455;-1.48073;-1.42514;-1.33464;-1.21144;-1.05857;-0.879761;-0.679402;-0.462398;-0.234066;-1.83703e-16;1.83703e-16;0.234066;0.462398;0.679402;0.879761;1.05857;1.21144;1.33464;1.42514;1.48073;1.49455;1.49996;1.49695;1.48551;1.46572;1.43768;1.40157;1.35757;1.30593;1.21051;1.09844;0.971247;0.830689;0.6787;0.51737;0.34892;0.175669;0</y> + <z mapType="vector">1.50005;1.48973;1.45891;1.40801;1.33773;1.24904;1.14317;1.02156;0.885893;0.738035;0.638095;0.534567;0.428033;0.319092;0.208356;0.0964481;-0.0160019;-0.128362;-0.24;-0.468111;-0.684754;-0.884622;-1.06282;-1.21498;-1.33737;-1.427;-1.48168;-1.50005;-1.50005;-1.48168;-1.427;-1.33737;-1.21498;-1.06282;-0.884622;-0.684754;-0.468111;-0.24;-0.128362;-0.0160019;0.0964481;0.208356;0.319092;0.428033;0.534567;0.638095;0.738035;0.885893;1.02156;1.14317;1.24904;1.33773;1.40801;1.45891;1.48973;1.50005</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_16ID"> + <name>Profile_Fuselage_16</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.175662;-0.348914;-0.517377;-0.678739;-0.830787;-0.971432;-1.09875;-1.21098;-1.3066;-1.35836;-1.40244;-1.43859;-1.46661;-1.48633;-1.49764;-1.50048;-1.49483;-1.48073;-1.42463;-1.33377;-1.21036;-1.05741;-0.878664;-0.678474;-0.461729;-0.233716;-1.83786e-16;1.83786e-16;0.233716;0.461729;0.678474;0.878664;1.05741;1.21036;1.33377;1.42463;1.48073;1.49483;1.50048;1.49764;1.48633;1.46661;1.43859;1.40244;1.35836;1.3066;1.21098;1.09875;0.971432;0.830787;0.678739;0.517377;0.348914;0.175662;0</y> + <z mapType="vector">1.49917;1.48886;1.45808;1.40725;1.33707;1.2485;1.14275;1.02128;0.885755;0.738035;0.638146;0.534639;0.428102;0.319142;0.20838;0.0964462;-0.016022;-0.128384;-0.24;-0.467621;-0.683729;-0.883049;-1.06072;-1.2124;-1.3344;-1.42372;-1.47821;-1.49652;-1.49652;-1.47821;-1.42372;-1.3344;-1.2124;-1.06072;-0.883049;-0.683729;-0.467621;-0.24;-0.128384;-0.016022;0.0964462;0.20838;0.319142;0.428102;0.534639;0.638146;0.738035;0.885755;1.02128;1.14275;1.2485;1.33707;1.40725;1.45808;1.48886;1.49917</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_17ID"> + <name>Profile_Fuselage_17</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.175611;-0.348904;-0.517594;-0.679454;-0.83235;-0.974263;-1.10332;-1.21782;-1.31626;-1.36984;-1.4151;-1.45173;-1.47948;-1.49818;-1.50768;-1.50793;-1.49892;-1.48073;-1.4175;-1.3216;-1.19524;-1.04133;-0.863417;-0.665603;-0.452447;-0.228861;-1.8517e-16;1.8517e-16;0.228861;0.452447;0.665603;0.863417;1.04133;1.19524;1.3216;1.4175;1.48073;1.49892;1.50793;1.50768;1.49818;1.47948;1.45173;1.4151;1.36984;1.31626;1.21782;1.10332;0.974263;0.83235;0.679454;0.517594;0.348904;0.175611;0</y> + <z mapType="vector">1.48673;1.47663;1.44646;1.39661;1.32775;1.24078;1.13685;1.01734;0.88381;0.738035;0.638866;0.535631;0.429028;0.319778;0.208619;0.0963014;-0.0164149;-0.128768;-0.24;-0.460619;-0.669129;-0.860722;-1.03098;-1.17598;-1.29238;-1.3775;-1.42936;-1.44679;-1.44679;-1.42936;-1.3775;-1.29238;-1.17598;-1.03098;-0.860722;-0.669129;-0.460619;-0.24;-0.128768;-0.0164149;0.0963014;0.208619;0.319778;0.429028;0.535631;0.638866;0.738035;0.88381;1.01734;1.13685;1.24078;1.32775;1.39661;1.44646;1.47663;1.48673</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_18ID"> + <name>Profile_Fuselage_18</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.175832;-0.349588;-0.519218;-0.68272;-0.838165;-0.983716;-1.11766;-1.23841;-1.34455;-1.40314;-1.45163;-1.48952;-1.51644;-1.53209;-1.53633;-1.52912;-1.51052;-1.48073;-1.39918;-1.29045;-1.15666;-1.00039;-0.824688;-0.632961;-0.428934;-0.216571;-1.90889e-16;1.90889e-16;0.216571;0.428934;0.632961;0.824688;1.00039;1.15666;1.29045;1.39918;1.48073;1.51052;1.52912;1.53633;1.53209;1.51644;1.48952;1.45163;1.40314;1.34455;1.23841;1.11766;0.983716;0.838165;0.68272;0.519218;0.349588;0.175832;0</y> + <z mapType="vector">1.45358;1.44401;1.41543;1.36818;1.3028;1.22007;1.12097;1.00667;0.878524;0.738035;0.640777;0.538103;0.431062;0.320746;0.208282;0.0948189;-0.0184848;-0.130472;-0.24;-0.4411;-0.628928;-0.799831;-0.950485;-1.07796;-1.17977;-1.25394;-1.29903;-1.31416;-1.31416;-1.29903;-1.25394;-1.17977;-1.07796;-0.950485;-0.799831;-0.628928;-0.4411;-0.24;-0.130472;-0.0184848;0.0948189;0.208282;0.320746;0.431062;0.538103;0.640777;0.738035;0.878524;1.00667;1.12097;1.22007;1.3028;1.36818;1.41543;1.44401;1.45358</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_19ID"> + <name>Profile_Fuselage_19</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.171561;-0.341303;-0.507426;-0.668169;-0.821826;-0.96677;-1.10146;-1.22447;-1.3345;-1.39767;-1.44857;-1.48644;-1.5107;-1.52099;-1.51716;-1.49926;-1.46758;-1.42259;-1.3248;-1.20692;-1.07074;-0.918311;-0.751952;-0.574183;-0.3877;-0.195332;-1.95014e-16;1.95014e-16;0.195332;0.3877;0.574183;0.751952;0.918311;1.07074;1.20692;1.3248;1.42259;1.46758;1.49926;1.51716;1.52099;1.5107;1.48644;1.44857;1.39767;1.3345;1.22447;1.10146;0.96677;0.821826;0.668169;0.507426;0.341303;0.171561;0</y> + <z mapType="vector">1.40515;1.39631;1.36987;1.32611;1.26551;1.18869;1.09649;0.989864;0.869956;0.738035;0.642103;0.539138;0.430703;0.318445;0.204066;0.089304;-0.0241001;-0.134426;-0.24;-0.409315;-0.565362;-0.705768;-0.828395;-0.931378;-1.01315;-1.07246;-1.10842;-1.12046;-1.12046;-1.10842;-1.07246;-1.01315;-0.931378;-0.828395;-0.705768;-0.565362;-0.409315;-0.24;-0.134426;-0.0241001;0.089304;0.204066;0.318445;0.430703;0.539138;0.642103;0.738035;0.869956;0.989864;1.09649;1.18869;1.26551;1.32611;1.36987;1.39631;1.40515</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_20ID"> + <name>Profile_Fuselage_20</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.162522;-0.323372;-0.480897;-0.633477;-0.779541;-0.917589;-1.0462;-1.16405;-1.26993;-1.33438;-1.38495;-1.42069;-1.44093;-1.44527;-1.43364;-1.40628;-1.3637;-1.30674;-1.20499;-1.08859;-0.958951;-0.817648;-0.666394;-0.507027;-0.341488;-0.17179;-1.91908e-16;1.91908e-16;0.17179;0.341488;0.507027;0.666394;0.817648;0.958951;1.08859;1.20499;1.30674;1.3637;1.40628;1.43364;1.44527;1.44093;1.42069;1.38495;1.33438;1.26993;1.16405;1.0462;0.917589;0.779541;0.633477;0.480897;0.323372;0.162522;0</y> + <z mapType="vector">1.36175;1.3535;1.32883;1.288;1.23142;1.15969;1.07352;0.973821;0.861608;0.738035;0.641563;0.537151;0.426787;0.31257;0.196675;0.0813069;-0.0313402;-0.139125;-0.24;-0.378415;-0.504841;-0.617728;-0.715696;-0.797543;-0.862267;-0.909073;-0.937388;-0.946866;-0.946866;-0.937388;-0.909073;-0.862267;-0.797543;-0.715696;-0.617728;-0.504841;-0.378415;-0.24;-0.139125;-0.0313402;0.0813069;0.196675;0.31257;0.426787;0.537151;0.641563;0.738035;0.861608;0.973821;1.07352;1.15969;1.23142;1.288;1.32883;1.3535;1.36175</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_21ID"> + <name>Profile_Fuselage_21</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.158809;-0.315997;-0.469962;-0.619133;-0.761988;-0.89707;-1.023;-1.1385;-1.24238;-1.30717;-1.35747;-1.39225;-1.4108;-1.41273;-1.39801;-1.37646;-1.37646;-1.36694;-1.32016;-1.25862;-1.15615;-1.04101;-0.914462;-0.777892;-0.632797;-0.480768;-0.323469;-0.162626;-1.90505e-16;1.90505e-16;0.162626;0.323469;0.480768;0.632797;0.777892;0.914462;1.04101;1.15615;1.25862;1.32016;1.36694;1.37646;1.37646;1.39801;1.41273;1.4108;1.39225;1.35747;1.30717;1.24238;1.1385;1.023;0.89707;0.761988;0.619133;0.469962;0.315997;0.158809;0</y> + <z mapType="vector">1.34539;1.33736;1.31335;1.27361;1.21854;1.1487;1.06481;0.967721;0.858424;0.738035;0.641215;0.536136;0.42495;0.309937;0.193454;0.0778887;-4.51028e-17;1.38778e-16;-0.0343905;-0.141082;-0.24;-0.36657;-0.481734;-0.58423;-0.672935;-0.746877;-0.805244;-0.847398;-0.872877;-0.881401;-0.881401;-0.872877;-0.847398;-0.805244;-0.746877;-0.672935;-0.58423;-0.481734;-0.36657;-0.24;-0.141082;-0.0343905;1.38778e-16;-4.51028e-17;0.0778887;0.193454;0.309937;0.42495;0.536136;0.641215;0.738035;0.858424;0.967721;1.06481;1.1487;1.21854;1.27361;1.31335;1.33736;1.34539</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_22ID"> + <name>Profile_Fuselage_22</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.138612;-0.275811;-0.410195;-0.540395;-0.665083;-0.782986;-0.892901;-0.993708;-1.08438;-1.14093;-1.18483;-1.21519;-1.23138;-1.23307;-1.22022;-1.1931;-1.15227;-1.09855;-1.00912;-0.90862;-0.798166;-0.678964;-0.552322;-0.419626;-0.282332;-0.141944;-1.66277e-16;1.66277e-16;0.141944;0.282332;0.419626;0.552322;0.678964;0.798166;0.90862;1.00912;1.09855;1.15227;1.1931;1.22022;1.23307;1.23138;1.21519;1.18483;1.14093;1.08438;0.993708;0.892901;0.782986;0.665083;0.540395;0.410195;0.275811;0.138612;0</y> + <z mapType="vector">1.29468;1.28756;1.26629;1.23107;1.18227;1.12038;1.04605;0.960013;0.863162;0.756481;0.670685;0.577571;0.479045;0.377129;0.273909;0.171503;0.0720081;-0.0225352;-0.110189;-0.222348;-0.324398;-0.415224;-0.493828;-0.55935;-0.611072;-0.648426;-0.671003;-0.678557;-0.678557;-0.671003;-0.648426;-0.611072;-0.55935;-0.493828;-0.415224;-0.324398;-0.222348;-0.110189;-0.0225352;0.0720081;0.171503;0.273909;0.377129;0.479045;0.577571;0.670685;0.756481;0.863162;0.960013;1.04605;1.12038;1.18227;1.23107;1.26629;1.28756;1.29468</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_23ID"> + <name>Profile_Fuselage_23</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.115885;-0.230588;-0.342939;-0.451791;-0.556034;-0.654606;-0.746499;-0.830777;-0.90658;-0.95386;-0.990566;-1.01595;-1.02948;-1.03089;-1.02015;-0.99748;-0.96334;-0.918432;-0.843659;-0.75964;-0.667297;-0.56764;-0.461762;-0.350824;-0.23604;-0.11867;-1.39014e-16;1.39014e-16;0.11867;0.23604;0.350824;0.461762;0.56764;0.667297;0.75964;0.843659;0.918432;0.96334;0.99748;1.02015;1.03089;1.02948;1.01595;0.990566;0.95386;0.90658;0.830777;0.746499;0.654606;0.556034;0.451791;0.342939;0.230588;0.115885;0</y> + <z mapType="vector">1.23706;1.23098;1.21281;1.18273;1.14106;1.08821;1.02473;0.951255;0.868545;0.77744;0.704172;0.624653;0.540513;0.453476;0.365328;0.277873;0.192906;0.112167;0.0373106;-0.0584715;-0.145622;-0.223186;-0.290314;-0.346269;-0.390439;-0.422339;-0.44162;-0.448071;-0.448071;-0.44162;-0.422339;-0.390439;-0.346269;-0.290314;-0.223186;-0.145622;-0.0584715;0.0373106;0.112167;0.192906;0.277873;0.365328;0.453476;0.540513;0.624653;0.704172;0.77744;0.868545;0.951255;1.02473;1.08821;1.14106;1.18273;1.21281;1.23098;1.23706</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_24ID"> + <name>Profile_Fuselage_24</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0920396;-0.18314;-0.272373;-0.358827;-0.44162;-0.519908;-0.592893;-0.659829;-0.720034;-0.757585;-0.786739;-0.806897;-0.817646;-0.818767;-0.810237;-0.79223;-0.765115;-0.729448;-0.670061;-0.60333;-0.529988;-0.450837;-0.366746;-0.278635;-0.187471;-0.0942518;-1.10409e-16;1.10409e-16;0.0942518;0.187471;0.278635;0.366746;0.450837;0.529988;0.60333;0.670061;0.729448;0.765115;0.79223;0.810237;0.818767;0.817646;0.806897;0.786739;0.757585;0.720034;0.659829;0.592893;0.519908;0.44162;0.358827;0.272373;0.18314;0.0920396;0</y> + <z mapType="vector">1.17298;1.16806;1.15334;1.12899;1.09524;1.05243;1.00102;0.941516;0.874531;0.800747;0.741408;0.677007;0.608864;0.538375;0.466986;0.396158;0.327345;0.261956;0.201331;0.12376;0.053178;-0.00963954;-0.0640047;-0.109322;-0.145094;-0.170929;-0.186544;-0.191769;-0.191769;-0.186544;-0.170929;-0.145094;-0.109322;-0.0640047;-0.00963954;0.053178;0.12376;0.201331;0.261956;0.327345;0.396158;0.466986;0.538375;0.608864;0.677007;0.741408;0.800747;0.874531;0.941516;1.00102;1.05243;1.09524;1.12899;1.15334;1.16806;1.17298</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_25ID"> + <name>Profile_Fuselage_25</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0693292;-0.137951;-0.205166;-0.270288;-0.332652;-0.391623;-0.446599;-0.497019;-0.542369;-0.570654;-0.592614;-0.607798;-0.615895;-0.61674;-0.610314;-0.59675;-0.576326;-0.549459;-0.504726;-0.454461;-0.399215;-0.339595;-0.276253;-0.209883;-0.141213;-0.0709956;-8.31663e-17;8.31663e-17;0.0709956;0.141213;0.209883;0.276253;0.339595;0.399215;0.454461;0.504726;0.549459;0.576326;0.59675;0.610314;0.61674;0.615895;0.607798;0.592614;0.570654;0.542369;0.497019;0.446599;0.391623;0.332652;0.270288;0.205166;0.137951;0.0693292;0</y> + <z mapType="vector">1.10741;1.10367;1.09249;1.07399;1.04834;1.01582;0.976759;0.93155;0.880656;0.824597;0.779513;0.730583;0.67881;0.625254;0.571014;0.517201;0.464918;0.415237;0.369176;0.310239;0.256613;0.208886;0.167581;0.13315;0.105971;0.0863423;0.0744781;0.0705089;0.0705089;0.0744781;0.0863423;0.105971;0.13315;0.167581;0.208886;0.256613;0.310239;0.369176;0.415237;0.464918;0.517201;0.571014;0.625254;0.67881;0.730583;0.779513;0.824597;0.880656;0.93155;0.976759;1.01582;1.04834;1.07399;1.09249;1.10367;1.10741</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_26ID"> + <name>Profile_Fuselage_26</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.049198;-0.0978941;-0.145592;-0.191804;-0.236059;-0.277907;-0.31692;-0.352699;-0.384881;-0.404953;-0.420536;-0.431311;-0.437057;-0.437656;-0.433097;-0.423471;-0.408977;-0.389912;-0.358168;-0.322499;-0.283295;-0.240986;-0.196037;-0.148939;-0.100209;-0.0503805;-5.90172e-17;5.90172e-17;0.0503805;0.100209;0.148939;0.196037;0.240986;0.283295;0.322499;0.358168;0.389912;0.408977;0.423471;0.433097;0.437656;0.437057;0.431311;0.420536;0.404953;0.384881;0.352699;0.31692;0.277907;0.236059;0.191804;0.145592;0.0978941;0.049198;0</y> + <z mapType="vector">1.04425;1.04165;1.03388;1.02101;1.00317;0.980557;0.953391;0.92195;0.886557;0.847571;0.816218;0.78219;0.746185;0.70894;0.671219;0.633796;0.597436;0.562886;0.530853;0.489866;0.452573;0.419381;0.390656;0.366711;0.34781;0.334159;0.325909;0.323148;0.323148;0.325909;0.334159;0.34781;0.366711;0.390656;0.419381;0.452573;0.489866;0.530853;0.562886;0.597436;0.633796;0.671219;0.70894;0.746185;0.78219;0.816218;0.847571;0.886557;0.92195;0.953391;0.980557;1.00317;1.02101;1.03388;1.04165;1.04425</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_27ID"> + <name>Profile_Fuselage_27</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0327759;-0.0652174;-0.0969936;-0.12778;-0.157264;-0.185143;-0.211133;-0.234969;-0.256409;-0.269781;-0.280162;-0.287341;-0.291169;-0.291568;-0.28853;-0.282118;-0.272462;-0.259761;-0.238613;-0.21485;-0.188732;-0.160546;-0.1306;-0.0992237;-0.0667595;-0.0335637;-3.93175e-17;3.93175e-17;0.0335637;0.0667595;0.0992237;0.1306;0.160546;0.188732;0.21485;0.238613;0.259761;0.272462;0.282118;0.28853;0.291568;0.291169;0.287341;0.280162;0.269781;0.256409;0.234969;0.211133;0.185143;0.157264;0.12778;0.0969936;0.0652174;0.0327759;0</y> + <z mapType="vector">0.988024;0.986438;0.981694;0.973842;0.962961;0.949162;0.932587;0.913404;0.891809;0.868023;0.848893;0.828131;0.806163;0.783439;0.760424;0.737591;0.715406;0.694326;0.674782;0.649774;0.62702;0.606769;0.589242;0.574633;0.563101;0.554772;0.549738;0.548053;0.548053;0.549738;0.554772;0.563101;0.574633;0.589242;0.606769;0.62702;0.649774;0.674782;0.694326;0.715406;0.737591;0.760424;0.783439;0.806163;0.828131;0.848893;0.868023;0.891809;0.913404;0.932587;0.949162;0.962961;0.973842;0.981694;0.986438;0.988024</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_28ID"> + <name>Profile_Fuselage_28</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0207606;-0.0413094;-0.0614368;-0.0809375;-0.0996125;-0.117271;-0.133734;-0.148832;-0.162412;-0.170882;-0.177458;-0.182005;-0.18443;-0.184682;-0.182758;-0.178696;-0.17258;-0.164535;-0.15114;-0.136088;-0.119545;-0.101692;-0.0827237;-0.0628493;-0.0422862;-0.0212596;-2.49041e-17;2.49041e-17;0.0212596;0.0422862;0.0628493;0.0827237;0.101692;0.119545;0.136088;0.15114;0.164535;0.17258;0.178696;0.182758;0.184682;0.18443;0.182005;0.177458;0.170882;0.162412;0.148832;0.133734;0.117271;0.0996125;0.0809375;0.0614368;0.0413094;0.0207606;0</y> + <z mapType="vector">0.943811;0.943021;0.940661;0.936754;0.931341;0.924475;0.916229;0.906684;0.89594;0.884105;0.874587;0.864258;0.853328;0.842021;0.83057;0.81921;0.808172;0.797684;0.78796;0.775518;0.764196;0.754121;0.745401;0.738132;0.732394;0.72825;0.725745;0.724907;0.724907;0.725745;0.72825;0.732394;0.738132;0.745401;0.754121;0.764196;0.775518;0.78796;0.797684;0.808172;0.81921;0.83057;0.842021;0.853328;0.864258;0.874587;0.884105;0.89594;0.906684;0.916229;0.924475;0.931341;0.936754;0.940661;0.943021;0.943811</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_29ID"> + <name>Profile_Fuselage_29</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0134438;-0.0267504;-0.0397841;-0.052412;-0.0645053;-0.0759405;-0.086601;-0.096378;-0.105172;-0.110657;-0.114915;-0.117859;-0.11943;-0.119593;-0.118347;-0.115717;-0.111757;-0.106547;-0.0978725;-0.0881255;-0.0774127;-0.0658516;-0.0535688;-0.0406989;-0.0273829;-0.0137669;-1.6127e-17;1.6127e-17;0.0137669;0.0273829;0.0406989;0.0535688;0.0658516;0.0774127;0.0881255;0.0978725;0.106547;0.111757;0.115717;0.118347;0.119593;0.11943;0.117859;0.114915;0.110657;0.105172;0.096378;0.086601;0.0759405;0.0645053;0.052412;0.0397841;0.0267504;0.0134438;0</y> + <z mapType="vector">0.915758;0.915474;0.914626;0.913223;0.911278;0.908812;0.905849;0.90242;0.898561;0.894309;0.89089;0.887179;0.883253;0.879191;0.875078;0.870996;0.867031;0.863264;0.85977;0.855301;0.851234;0.847614;0.844481;0.84187;0.839809;0.83832;0.837421;0.83712;0.83712;0.837421;0.83832;0.839809;0.84187;0.844481;0.847614;0.851234;0.855301;0.85977;0.863264;0.867031;0.870996;0.875078;0.879191;0.883253;0.887179;0.89089;0.894309;0.898561;0.90242;0.905849;0.908812;0.911278;0.913223;0.914626;0.915474;0.915758</z> + </pointList> + </fuselageProfile> + <fuselageProfile uID="Profile_Fuselage_30ID"> + <name>Profile_Fuselage_30</name> + <pointList> + <x mapType="vector">0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0</x> + <y mapType="vector">0;-0.0109799;-0.0218478;-0.0324928;-0.0428063;-0.0526831;-0.0620226;-0.0707293;-0.0787144;-0.0858966;-0.0903763;-0.0938541;-0.0962589;-0.0975413;-0.097675;-0.0966574;-0.0945092;-0.0912745;-0.0870196;-0.079935;-0.0719744;-0.063225;-0.0537827;-0.043751;-0.0332398;-0.0223644;-0.0112438;-1.31713e-17;1.31713e-17;0.0112438;0.0223644;0.0332398;0.043751;0.0537827;0.063225;0.0719744;0.079935;0.0870196;0.0912745;0.0945092;0.0966574;0.097675;0.0975413;0.0962589;0.0938541;0.0903763;0.0858966;0.0787144;0.0707293;0.0620226;0.0526831;0.0428063;0.0324928;0.0218478;0.0109799;0</y> + <z mapType="vector">0.906311;0.906198;0.905859;0.905299;0.904522;0.903537;0.902354;0.900985;0.899443;0.897745;0.89638;0.894898;0.89333;0.891708;0.890065;0.888435;0.886852;0.885347;0.883952;0.882167;0.880543;0.879097;0.877846;0.876804;0.87598;0.875386;0.875027;0.874906;0.874906;0.875027;0.875386;0.87598;0.876804;0.877846;0.879097;0.880543;0.882167;0.883952;0.885347;0.886852;0.888435;0.890065;0.891708;0.89333;0.894898;0.89638;0.897745;0.899443;0.900985;0.902354;0.903537;0.904522;0.905299;0.905859;0.906198;0.906311</z> + </pointList> + </fuselageProfile> + </fuselageProfiles> + </profiles> + <materials> + <material uID="aluminium2024"> + <rho>2.8e3</rho> + <k11>80.9561216474e9</k11> + <sig11>0.3268e9</sig11> + </material> + <material uID="aluminium7075"> + <rho>2.8e3</rho> + <k11>80.9561216474e9</k11> + <sig11>0.3268e9</sig11> + </material> + </materials> + </vehicles> +</cpacs> diff --git a/examples/knowledgebases/tu_delft_wing_design/TUDWingDesign-toolspecific.xml b/examples/knowledgebases/tu_delft_wing_design/TUDWingDesign-toolspecific.xml new file mode 100644 index 0000000000000000000000000000000000000000..1bb38c0b0ad088b9f83bfc6b3bc58d38aa229d2a --- /dev/null +++ b/examples/knowledgebases/tu_delft_wing_design/TUDWingDesign-toolspecific.xml @@ -0,0 +1,159 @@ +<?xml version="1.0" encoding="utf-8"?> +<cpacs> + <toolspecific> + <sCAM> + <modes>wing_length_morph;wing_sweep_morph;wing_taper_morph;wing_root_chord_morph;wing_dihedral_morph</modes> + <wing_length_morph modes="wing_length_morph"> + <wingUID>MainWing_wingID</wingUID> + <required_length unit="m">20.540000</required_length> + </wing_length_morph> + <wing_sweep_morph modes="wing_sweep_morph"> + <wingUID>MainWing_wingID</wingUID> + <required_sweeps mapType="vector" unit="deg">6.500000;10.300000</required_sweeps> + </wing_sweep_morph> + <wing_taper_morph modes="wing_taper_morph"> + <wingUID>MainWing_wingID</wingUID> + <required_tapers mapType="vector" unit="-">0.950000;0.100000</required_tapers> + </wing_taper_morph> + <wing_root_chord_morph modes="wing_root_chord_morph"> + <wingUID>MainWing_wingID</wingUID> + <required_root_chord unit="m">9.500000</required_root_chord> + </wing_root_chord_morph> + <wing_dihedral_morph modes="wing_dihedral_morph"> + <wingUID>MainWing_wingID</wingUID> + <required_wing_dihedral unit="deg">18.000000</required_wing_dihedral> + </wing_dihedral_morph> + </sCAM> + <hANGAR> + <loadCpacsFile>AGILE_DC1_L0_MDA.xml</loadCpacsFile> + <mode>AGILE_DC1</mode> + </hANGAR> + <cAGA> + <modes>mainWingRefArea;mainWingFuelTankVol</modes> + <mainWingFuelTankVol modes="mainWingFuelTankVol"> + <fuelTankUIDs>wing_tank_inner;wing_tank_middle;wing_tank_outer</fuelTankUIDs> + </mainWingFuelTankVol> + <mainWingRefArea modes="mainWingRefArea"> + <wingUID>MainWing_wingID</wingUID> + </mainWingRefArea> + </cAGA> + <cNSTRNT> + <modes>wingLoading;fuelTankVolume</modes> + <wingLoading modes="wingLoading"> + <modelUID>agile_v13_modelID</modelUID> + <wingUID>MainWing_wingID</wingUID> + <maxWingLoading unit="N/m^2">5343.4083</maxWingLoading> + </wingLoading> + <fuelTankVolume modes="fuelTankVolume"> + <modelUID>agile_v13_modelID</modelUID> + <fuelTankUIDs>wing_tank_inner;wing_tank_middle;wing_tank_outer</fuelTankUIDs> + <fuelDensity unit="kg/m^3">8.171500e+002</fuelDensity> + <fuelTankEfficiencyFactor unit="-">0.93</fuelTankEfficiencyFactor> + </fuelTankVolume> + </cNSTRNT> + <mTOW> + <modelUID>agile_v13_modelID</modelUID> + <wingUID>MainWing_wingID</wingUID> + <freshDesignMasses>True</freshDesignMasses> + </mTOW> + <oBJ> + <modes>MTOW</modes> + <MTOW modes="MTOW"> + <modelUID>agile_v13_modelID</modelUID> + <mtow_ref>45045.858310</mtow_ref> + </MTOW> + </oBJ> + <q3D> + <aircraftmodelUID modes="APM">agile_v13_modelID</aircraftmodelUID> + <typeOfRun>flightLoadCase</typeOfRun> + <wingUID>MainWing_wingID</wingUID> + <n_afp>100</n_afp> + <AVL.nchord>8</AVL.nchord> + <AVL.nspan>20</AVL.nspan> + <Q3D.n_wing>8</Q3D.n_wing> + <flightLoadCaseUID modes="FLC">Design-maneuver-speed_2.5g_F0_MTOM_max_fuel_12000m</flightLoadCaseUID> + </q3D> + <EMWET uID="EMWET"> + <wingUID>MainWing_wingID</wingUID> + <loadcaseUID>Design-maneuver-speed_2.5g_F0_MTOM_max_fuel_12000m</loadcaseUID> + <preferences> + <preference_description>"model" to obtain from model, "given" to take given value</preference_description> + <spar_pref>model</spar_pref> + <fueltank_pref>given</fueltank_pref> + <rib_pref>model</rib_pref> + </preferences> + <spars> + <spar_start_x>0.2</spar_start_x> + <spar_end_x>0.8</spar_end_x> + </spars> + <fueltank> + <fueltank_start_y>0.1</fueltank_start_y> + <fueltank_end_y>0.7</fueltank_end_y> + </fueltank> + <stringer_efficiency>0.96</stringer_efficiency> + <ribpitch>0.5</ribpitch> + <display>0</display> + </EMWET> + <initiator> + <settings> + <NumberOfFlights>100000</NumberOfFlights> + <AirworthinessRegulations>Far-25</AirworthinessRegulations> + <LoiterTime>30</LoiterTime> + <DivRange>500</DivRange> + <WingLocation>Low</WingLocation> + <TailType>Standard</TailType> + <RootAirfoil>boeing-a</RootAirfoil> + <KinkAirfoil>boeing-b</KinkAirfoil> + <TipAirfoil>boeing-c</TipAirfoil> + <Parts mainPart="Fuselage"> + <fuselage name="Fuselage" type="Conventional"/> + <wing name="Main Wing" type="MainWing"/> + <wing name="Horizontal Stabiliser" type="HorizontalTail"/> + <wing name="Vertical Stabiliser" type="VerticalTail"/> + <engine name="Engine-1" type="TurboFan"> + <location>Main Wing</location> + <bypassRatio>6.0</bypassRatio> + </engine> + <engine name="Engine-2" type="TurboFan"> + <location>Main Wing</location> + <bypassRatio>6.0</bypassRatio> + </engine> + </Parts> + </settings> + <initialguesses> + <LDmax>16</LDmax> + <SFC>0.5</SFC> + <FFStartUp>0.990</FFStartUp> + <FFTaxi>0.990</FFTaxi> + <CLmaxLanding>3.2</CLmaxLanding> + <CLmaxTakeOff>2.2</CLmaxTakeOff> + <CLmaxClean>1.2</CLmaxClean> + <WingAspectRatio>9.39</WingAspectRatio> + </initialguesses> + </initiator> + <proteus> + <inputData> + <wingUID>MainWing_wingID</wingUID> + <beamElements>8</beamElements> + <spanwisePanels>12</spanwisePanels> + <chordwisePanels>10</chordwisePanels> + <crosssectionalElements>75</crosssectionalElements> + <linear>1</linear> + <trim>1</trim> + <weightDefinition>1</weightDefinition> + <gravity>1</gravity> + <graphic>0</graphic> + </inputData> + <outputData> + <loadCases> + </loadCases> + </outputData> + </proteus> + <sMFA> + <modelUID>agile_v13_modelID</modelUID> + <specificFuelConsumption unit="N/Ns">1.8639e-004</specificFuelConsumption> + <fuelFractionFactor unit="-">0.938</fuelFractionFactor> + <dragCoefficientWinglessAircraft unit="-">0.0100000</dragCoefficientWinglessAircraft> + </sMFA> + </toolspecific> +</cpacs> diff --git a/examples/scripts/sellar_problem.py b/examples/scripts/sellar_problem.py index 219703cd0577b05fe6e8d4d1655ad46f9a869df4..801e842d711faea9270dfa13e5e8b9f3fed8889a 100644 --- a/examples/scripts/sellar_problem.py +++ b/examples/scripts/sellar_problem.py @@ -1,5 +1,6 @@ # Imports import logging +import matplotlib from collections import OrderedDict @@ -111,30 +112,26 @@ rcg.add_equation('F1', 'x1**2+z2+y1+exp(-y2)', 'Python') rcg.add_equation('F1', 'x1^2+z2+y1+e^{-y2}', 'LaTeX') rcg.add_equation('F1', '<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi><msup><mn>1</mn><mn>2</mn></msup><mo>+</mo><mi>z</mi><mn>2</mn><mo>+</mo><mi>y</mi><mn>1</mn><mo>+</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>y</mi><mn>2</mn></mrow></msup></math>', 'MathML') # Add some (optional) organization information -contacts = [{'attrib': {'uID': 'ivangent'}, 'name': 'Imco van Gent', 'email': 'i.vangent@tudelft.nl', 'company': 'TU Delft'}, - {'attrib': {'uID': 'lmuller'}, 'name': 'Lukas Muller', 'email': 'l.muller@student.tudelft.nl', 'company': 'TU Delft'}] -architects = [{'contactUID': 'ivangent'}, {'contactUID': 'lmuller'}] -integrators = [{'contactUID': 'lmuller'}] -rcg.graph['organization'] = OrderedDict([('contacts', contacts), - ('organigram', {'architects': architects, - 'integrators': integrators})]) +rcg.add_contact('Imco van Gent','i.vangent@tudelft.nl','ivangent',company='TU Delft', roles=['architect','integrator']) +rcg.add_contact('Lukas Muller','l.muller@student.tudelft.nl','lmuller',company='TU Delft', roles='architect') + # Add some (optional) ranges rcg.adj['/data_schema/geometry/z1']['D1']['valid_ranges'] = {'limit_range': {'minimum': -5, 'maximum': 5.}, 'list_range': [('list_range_item', 7.5), ('list_range_item', 8)]} # Add some (optional) metadata -rcg.node['F2']['general_info'] = {'description': 'dummy function that is not part of the original Sellar problem'} -rcg.node['F2']['performance_info'] = {'precision': 20, - 'fidelity_level': 2, - 'run_time': 1.5} +rcg.add_dc_general_info('F2','dummy function that is not part of the original Sellar problem') +rcg.add_dc_performance_info('F2',precision=20,fidelity_level=2,run_time=1.5) function_order = ['A', 'D1', 'D2', 'D3', 'F1', 'F2', 'G1', 'G2'] # Create a DSM visualization of the RCG rcg.create_dsm(file_name='RCG', function_order=function_order, include_system_vars=True, destination_folder=pdf_dir, - keep_tex_file=False, compile_pdf=True) + keep_tex_file=True, compile_pdf=False) # Create a VISTOMS visualization of the RCG rcg.vistoms_create(vistoms_dir, function_order=function_order, compress=False) +rcg.plot_graph() + # Save the RCG as kdms rcg.save('RCG', destination_folder=kdms_dir) # Save the RCG as cmdows (and do an integrity check) diff --git a/examples/scripts/sellar_problem/(X)DSM/MDAO_converged-DOE-J.pdf b/examples/scripts/sellar_problem/(X)DSM/Mdao_converged-DOE-J.pdf similarity index 100% rename from examples/scripts/sellar_problem/(X)DSM/MDAO_converged-DOE-J.pdf rename to examples/scripts/sellar_problem/(X)DSM/Mdao_converged-DOE-J.pdf diff --git a/examples/scripts/sellar_problem/(X)DSM/MDAO_unconverged-DOE-GS.pdf b/examples/scripts/sellar_problem/(X)DSM/Mdao_unconverged-DOE-GS.pdf similarity index 100% rename from examples/scripts/sellar_problem/(X)DSM/MDAO_unconverged-DOE-GS.pdf rename to examples/scripts/sellar_problem/(X)DSM/Mdao_unconverged-DOE-GS.pdf diff --git a/examples/scripts/sellar_problem/(X)DSM/MDAO_unconverged-MDA-J.pdf b/examples/scripts/sellar_problem/(X)DSM/Mdao_unconverged-MDA-J.pdf similarity index 100% rename from examples/scripts/sellar_problem/(X)DSM/MDAO_unconverged-MDA-J.pdf rename to examples/scripts/sellar_problem/(X)DSM/Mdao_unconverged-MDA-J.pdf diff --git a/examples/scripts/sellar_problem/(X)DSM/RCG.tex b/examples/scripts/sellar_problem/(X)DSM/RCG.tex new file mode 100644 index 0000000000000000000000000000000000000000..58fa50eecec6a36e7fc26536f1f44a956022f417 --- /dev/null +++ b/examples/scripts/sellar_problem/(X)DSM/RCG.tex @@ -0,0 +1,129 @@ +\documentclass{article} +\usepackage{geometry} +\usepackage{amsfonts} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{tikz} + +\input{/Users/imcovangent/Documents/PhD/Software/KADMOS/kadmos/external/XDSM_writer/diagram_border} + +\begin{document} + +\input{/Users/imcovangent/Documents/PhD/Software/KADMOS/kadmos/external/XDSM_writer/diagram_styles} + +\begin{tikzpicture} + + \matrix[MatrixSetup] + { + %Row 1 + & + \node [DataIO] (41-EMPTY) {$a$}; & + & + & + & + & + & + & + \\ + & + \node [RcgAnalysis] (41) {A}; & + \node [DataInter] (4431-41) {$c$}; & + \node [DataInter] (4432-41) {$c$}; & + & + & + & + & + \\ + & + & + \node [RcgAnalysis] (4431) {D1}; & + \node [DataInter] (4432-4431) {$y1$}; & + \node [DataInter] (4433-4431) {$y1$}; & + \node [DataInter] (4631-4431) {$y1$}; & + & + \node [DataInter] (4731-4431) {$y1$}; & + \\ + & + & + \node [DataInter] (4431-4432) {$y2$}; & + \node [RcgAnalysis] (4432) {D2}; & + \node [DataInter] (4433-4432) {$y2$}; & + \node [DataInter] (4631-4432) {$y2$}; & + & + & + \node [DataInter] (4732-4432) {$y2$}; \\ + %Row 5 + & + & + \node [DataInter] (4431-4433) {$x1$\\[1pt] $z2$\\[1pt] $z1$}; & + \node [DataInter] (4432-4433) {$z2$\\[1pt] $z1$}; & + \node [RcgAnalysis] (4433) {D3}; & + \node [DataInter] (4631-4433) {$x1$\\[1pt] $z2$}; & + \node [DataInter] (4632-4433) {$x1$\\[1pt] $z2$\\[1pt] $z1$}; & + & + \\ + \node [DataIO] (EMPTY-4631) {$f$}; & + & + & + & + & + \node [RcgAnalysis] (4631) {F1}; & + & + & + \\ + \node [DataIO] (EMPTY-4632) {$f$}; & + & + & + & + & + & + \node [RcgAnalysis] (4632) {F2}; & + & + \\ + \node [DataIO] (EMPTY-4731) {$g1$}; & + & + & + & + & + & + & + \node [RcgAnalysis] (4731) {G1}; & + \\ + \node [DataIO] (EMPTY-4732) {$g2$}; & + & + & + & + & + & + & + & + \node [RcgAnalysis] (4732) {G2}; \\ + %Row 10 + }; + + \begin{pgfonlayer}{data} + \path + % Horizontal edges + (41) edge [DataLine] (4432-41) + (4431) edge [DataLine] (4731-4431) + (4431-4432) edge [DataLine] (4732-4432) + (4431-4433) edge [DataLine] (4632-4433) + (EMPTY-4631) edge [DataLine] (4631) + (EMPTY-4632) edge [DataLine] (4632) + (EMPTY-4731) edge [DataLine] (4731) + (EMPTY-4732) edge [DataLine] (4732) + % Vertical edges + (41-EMPTY) edge [DataLine] (41) + (4431-41) edge [DataLine] (4431-4433) + (4432-41) edge [DataLine] (4432-4433) + (4433-4431) edge [DataLine] (4433) + (4631-4431) edge [DataLine] (4631) + (4632-4433) edge [DataLine] (4632) + (4731-4431) edge [DataLine] (4731) + (4732-4432) edge [DataLine] (4732) + ; + \end{pgfonlayer} + +\end{tikzpicture} + +\end{document} diff --git a/examples/scripts/ssbj.py b/examples/scripts/ssbj.py index e0c095c6a393d448c15f8bc250d35cfd7bfefba9..2db67b5058b6988124aaa46f7c8af4973b8e8be4 100644 --- a/examples/scripts/ssbj.py +++ b/examples/scripts/ssbj.py @@ -27,7 +27,8 @@ vistoms_dir = 'ssbj/VISTOMS' print('Loading repository connectivity graph...') -rcg = load(os.path.join(kb_dir, 'ssbj', '__cmdows__SSBJ.xml')) +rcg = load(os.path.join(kb_dir, 'ssbj', 'ssbj_toolrepo_cmdows.xml'), + check_list=['consistent_root', 'invalid_leaf_elements', 'schemas']) print('Scripting RCG...') @@ -77,6 +78,13 @@ rcg.add_mathematical_function([[item[0], item[1]] for item in zip(prop_nodes, pr 'C[prop]', [[item[0], '{}/1.0'.format(item[1]), 'Python'] for item in zip(c_props, prop_labels)]) +# Add some (optional) organization information +rcg.add_contact('Imco van Gent', 'i.vangent@tudelft.nl', 'ivangent', company='TU Delft', roles=['architect', + 'integrator']) +rcg.add_contact('Lukas Muller', 'l.muller@student.tudelft.nl', 'lmuller', company='TU Delft', roles='architect') +rcg.add_contact_roles('ivangent', roles='integrator') + + # Add the objective R = [node for node in rcg.find_all_nodes(category='variable') if node.endswith('/R')] R_label = R[0].split('/')[-1] @@ -178,6 +186,7 @@ for mdao_definition in mdao_definitions: mdg.graph['description'] = 'Solution strategy to solve the super-sonic business jet test case optimization problem using the strategy: {}.'.format(mdao_definition) mpg.graph['name'] = 'XDSM - ' + mdao_definition + ' - Mdao' mpg.graph['description'] = 'Solution strategy to solve the super-sonic business jet test case optimization problem using the strategy: {}.'.format(mdao_definition) + print 'Scripting ' + str(mdao_definition) + '...' # Create a DSM visualization of the Mdao mdg.create_dsm(file_name='Mdao_' + mdao_definition, include_system_vars=True, destination_folder=pdf_dir, mpg=mpg) diff --git a/examples/scripts/ssbj/(X)DSM/FPG_MDF-GS.pdf b/examples/scripts/ssbj/(X)DSM/FPG_MDF-GS.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d7e1e1dc02ba4f0f45c77ef9d85c986855eac61f Binary files /dev/null and b/examples/scripts/ssbj/(X)DSM/FPG_MDF-GS.pdf differ diff --git a/examples/scripts/ssbj/(X)DSM/RCG.pdf b/examples/scripts/ssbj/(X)DSM/RCG.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fc12825340608d5cb9849cb754517f6228d738b1 Binary files /dev/null and b/examples/scripts/ssbj/(X)DSM/RCG.pdf differ diff --git a/examples/scripts/tu_delft_wing_design.py b/examples/scripts/tu_delft_wing_design.py index 38df08ac723e7c61adc97f88a98a3d83bea1b9e7..847674ffadff36b7f823f8a85f86dafd614ffd50 100644 --- a/examples/scripts/tu_delft_wing_design.py +++ b/examples/scripts/tu_delft_wing_design.py @@ -1,12 +1,13 @@ # Imports import os import logging +import matplotlib -from kadmos.graph import load, FundamentalProblemGraph +from kadmos.graph import load, FundamentalProblemGraph, KadmosGraph from kadmos.utilities.general import get_mdao_setup # Settings for logging -logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.WARNING) +logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG) # List of MDAO definitions that can be wrapped around the problem # TODO: Adjust to just seven options (MDA-seq, MDA-par, DOE-seq, DOE-par, IDF, MDF-seq, MDF-par) @@ -26,11 +27,11 @@ mdao_definitions = ['unconverged-MDA-GS', # 0 'IDF'] # 12 # Settings for scripting -mdao_definitions_loop_all = False # Option for looping through all MDAO definitions -mdao_definition_id = 12 # Option for selecting a MDAO definition (in case mdao_definitions_loop_all=False) +mdao_definitions_loop_all = True # Option for looping through all MDAO definitions +mdao_definition_id = 12 # Option for selecting a MDAO definition (in case mdao_definitions_loop_all=False) # Settings for creating the CMDOWS files -create_rcg_cmdows = False # Option for creating the RCG CMDOWS file, set to False to save time +create_rcg_cmdows = True # Option for creating the RCG CMDOWS file, set to False to save time # Settings for creating visualizations create_vis = True # Create visualisations @@ -48,7 +49,7 @@ vistoms_dir = 'tu_delft_wing_design/VISTOMS' print 'Loading knowledge base using CMDOWS file {}...'.format(cmdows_input_file) -rcg = load(os.path.join(kb_dir, kb_name, cmdows_input_file)) +rcg = load(os.path.join(kb_dir, kb_name, cmdows_input_file),check_list=['consistent_root', 'invalid_leaf_elements']) print 'Scripting RCG...' @@ -272,27 +273,18 @@ for mdao_definition in mdao_definitions: # Add some more (optional) metadata for node in fpg.get_function_nodes(): if 'Q3D' in node or 'MTOW' in node: - single_or_multi = "Single" if 'unconverged-MDA' in mdao_architecture else "Multiple" - execution_info = { - 'remote_component_info': { - 'job_settings': { - 'single_or_multi_execution': single_or_multi, - 'remote_engineer': {'contact_u_i_d': 'ivangent'}, - 'job_name': 'job_' + fpg.node[node]['label'].replace(' ', ''), - 'notification_message': 'Hi Imco, could you please run this tool ' + fpg.node[node]['label'].replace(' ', '') + ' for me for my ' + mdao_architecture + ' AGILE workflow execution. Thanks.' - }, - 'data_exchange_settings': { - 'urlsite': 'https://teamsites-extranet.dlr.de/ly/AGILE/', - 'folder': 'CMDOWS_parser_tests' - } - } - } - fpg.node[node]['execution_info'] = execution_info + single_or_multi = "single" if 'unconverged-MDA' in mdao_architecture else "multiple" + job_name = 'job_' + fpg.node[node]['label'].replace(' ', '') + notification_message = 'Hi Imco, could you please run this tool ' + fpg.node[node]['label'].replace(' ', '')\ + + ' for me for my ' + mdao_architecture + ' AGILE workflow execution. Thanks.' + fpg.add_dc_remote_component_info(node, single_or_multi, job_name, 'ivangent', notification_message, + data_exchange_dict={'urlsite': 'https://teamsites-extranet.dlr.de/ly/AGILE/', + 'folder': 'CMDOWS_parser_tests'}) # Create a DSM and a VISTOMS visualization of the FPG if create_vis: fpg.create_dsm(file_name='FPG_'+mdao_definition, function_order=function_order, include_system_vars=True, - summarize_vars=True, destination_folder=pdf_dir) + summarize_vars=True, destination_folder=pdf_dir, keep_tex_file=False) fpg.vistoms_add(vistoms_dir, function_order=function_order, reference_file=ref_vals) # Save CMDOWS file diff --git a/examples/scripts/tu_delft_wing_design/(X)DSM/Mdao_unconverged-MDA-J.pdf b/examples/scripts/tu_delft_wing_design/(X)DSM/Mdao_unconverged-MDA-J.pdf new file mode 100644 index 0000000000000000000000000000000000000000..db4f3f3dc2093bdb44cfc875fac26ace949de131 Binary files /dev/null and b/examples/scripts/tu_delft_wing_design/(X)DSM/Mdao_unconverged-MDA-J.pdf differ diff --git a/examples/scripts/tu_delft_wing_design/CMDOWS/RCG.xml.REMOVED.git-id b/examples/scripts/tu_delft_wing_design/CMDOWS/RCG.xml.REMOVED.git-id index 93873df382260c3ba60600f105252cb51dd725ea..8c4b7826f8c6846d487c41a14e4e498b09656170 100644 --- a/examples/scripts/tu_delft_wing_design/CMDOWS/RCG.xml.REMOVED.git-id +++ b/examples/scripts/tu_delft_wing_design/CMDOWS/RCG.xml.REMOVED.git-id @@ -1 +1 @@ -a61235b5289b5416a6f4c9180b5cb16730275f79 \ No newline at end of file +d6cdfaaaf13791f1ffa1b38efd4e84ed3541dd53 \ No newline at end of file diff --git a/kadmos/__init__.py b/kadmos/__init__.py index aed57348cf7244714dba915f8fec8ca924c2b8c8..4e27eedb8d6753eb48f512c5a9defdf1024d6ee7 100644 --- a/kadmos/__init__.py +++ b/kadmos/__init__.py @@ -1 +1 @@ -__version__ = "0.7.6" +__version__ = "0.7.7" diff --git a/kadmos/cmdows/cmdows.py b/kadmos/cmdows/cmdows.py index 6669e1b4d4563cfd4ac7944d777edd1223daa30a..ab4d0930aa62806c4080d23f3478987ebade4e80 100644 --- a/kadmos/cmdows/cmdows.py +++ b/kadmos/cmdows/cmdows.py @@ -26,7 +26,7 @@ class CMDOWS(object): # Initialization and check functions # # ----------------------------------------- # def __init__(self, file_path=None, element=None): - self.SINGLE_MULTI_OPTIONS = ['single', 'multiple'] #CHANGE to lowercase + self.SINGLE_MULTI_OPTIONS = ['single', 'multiple'] self.VERIFICATION_ELEMENTS = ['method', 'verifier', 'result', 'date', 'version'] self.MODEL_DEFINITION_ELEMENTS = ['reference_data_set', 'analysis_method', 'fitting_method', 'relatedDesignCompetenceID', 'relatedDesignCompetenceVersion'] #CHANGE last two added. self.DATA_EXCHANGE_SETTINGS_ELEMENTS = ['dataserver', 'urlsite', 'web_authentication_protocol', 'context', @@ -101,10 +101,16 @@ class CMDOWS(object): def check(self): """Method to execute all checks""" result = True - for name in dir(self): - if name.startswith('check_'): - method = getattr(self, name) - result = result and method() + #for name in dir(self): + # if name.startswith('check_'): + # method = getattr(self, name) + # result = result and method() + result_uids = CMDOWS.check_uids(self) + result_schema = CMDOWS.check_schema(self) + result_references = CMDOWS.check_references(self) + CMDOWS.remove_unused_contacts(self) + if result_uids == False or result_schema == False or result_references == False: + result = False return result def check_schema(self): @@ -136,6 +142,16 @@ class CMDOWS(object): logger.warning('The following uIDs do not exist although they are referred to: ' + ', '.join(invalids)) return result + def remove_unused_contacts(self): + """Method to check if there are uID in CMDOWS file which are not refered to and remove them""" + ids = [element.attrib['uID'] for element in self.root.xpath('.//contact[@uID]')] + references = [element.text for element in self.root.xpath('.//*[contains(name(), "UID")]')] + invalids = list(set([id for id in ids if id not in references])) + for invalid in invalids: + for contact in self.root.xpath('.//contact[@uID="'+invalid+'"]'): + contact.getparent().remove(contact) + return + def assert_element_tag(self, el, expected_tag): """Method to assert that the tag of an element is as expected.""" if expected_tag: diff --git a/kadmos/graph/graph_data.py b/kadmos/graph/graph_data.py index 25deb1b500c9840eb6031d0d1730a2431d8e9e22..c9ca9653a3e3f72e41a8e31dcdede545b0083983 100644 --- a/kadmos/graph/graph_data.py +++ b/kadmos/graph/graph_data.py @@ -189,7 +189,6 @@ class DataGraph(KadmosGraph): # ---------------------------------------------------------------------------------------------------------------- # # GRAPH-SPECIFIC METHODS # # ---------------------------------------------------------------------------------------------------------------- # - def mark_as_design_variable(self, node, lower_bound=None, upper_bound=None, samples=None, nominal_value=0.0, ignore_outdegree=False): """Method to mark a single node as a design variable and add the required metadata for its definition. @@ -407,6 +406,40 @@ class DataGraph(KadmosGraph): return + def unmark_variable(self, node): + """Function to unmark any marked variable. + + :param node: variable node to be unmarked + :type node: basestring + """ + + # Input assertions + assert isinstance(node, basestring) + assert self.has_node(node), 'Node {} is not present in the graph.'.format(node) + assert self.node[node]['category'] == 'variable', 'Node {} should be of category variable.'.format(node) + + # Unmark design variable + if 'problem_role' in self.node[node]: + pr = self.node[node]['problem_role'] + if pr == self.PROBLEM_ROLES_VARS[0]: # design variable + del self.node[node]['problem_role'] + if 'valid_ranges' in self.node[node]: + del self.node[node]['valid_ranges'] + if 'samples' in self.node[node]: + del self.node[node]['samples'] + if 'nominal_value' in self.node[node]: + del self.node[node]['nominal_value'] + elif pr == self.PROBLEM_ROLES_VARS[1]: # objective + del self.node[node]['problem_role'] + elif pr == self.PROBLEM_ROLES_VARS[2]: # constraint + del self.node[node]['problem_role'] + del self.node[node]['constraint_operator'] + del self.node[node]['reference_value'] + elif pr == self.PROBLEM_ROLES_VARS[3]: # quantity of interest + del self.node[node]['problem_role'] + else: + raise AssertionError('Invalid problem role {} found on variable node {}'.format(pr, node)) + def remove_unused_outputs(self): """ Function to remove output nodes from an FPG which do not have a problem role. @@ -4166,15 +4199,17 @@ class MdaoDataGraph(DataGraph, MdaoMixin): # Create architecture element nodes cmdows_architecture_parameters = cmdows.find('architectureElements/parameters') - for cmdows_architecture_parameter in list(cmdows_architecture_parameters): - for cmdows_single_architecture_parameter in list(cmdows_architecture_parameter): - cmdows_uid = cmdows_single_architecture_parameter.get('uID') - attrb = cmdows.finddict(cmdows_single_architecture_parameter, ordered=False, camel_case_conversion=True) - attrb = translate_dict_keys(attrb, {'related_parameter_u_i_d': 'related_to_schema_node'}) - self.add_node(cmdows_uid, - attr_dict=attrb, - category='variable', - architecture_role=unmake_camel_case(cmdows_single_architecture_parameter.tag, ' ')) + if cmdows_architecture_parameters is not None: + for cmdows_architecture_parameter in list(cmdows_architecture_parameters): + for cmdows_single_architecture_parameter in list(cmdows_architecture_parameter): + cmdows_uid = cmdows_single_architecture_parameter.get('uID') + attrb = cmdows.finddict(cmdows_single_architecture_parameter, ordered=False, + camel_case_conversion=True) + attrb = translate_dict_keys(attrb, {'related_parameter_u_i_d': 'related_to_schema_node'}) + self.add_node(cmdows_uid, + attr_dict=attrb, + category='variable', + architecture_role=unmake_camel_case(cmdows_single_architecture_parameter.tag, ' ')) cmdows_architecture_exe_blocks = cmdows.find('architectureElements/executableBlocks') for cmdows_architecture_exe_block in list(cmdows_architecture_exe_blocks): for cmdows_single_architecture_exe_block in list(cmdows_architecture_exe_block): diff --git a/kadmos/graph/graph_kadmos.py b/kadmos/graph/graph_kadmos.py index 41692538cd6296b124206bd158bd08c7b7135652..45eef58772ce9a658f6d8d1270d01ba7906ca0cd 100644 --- a/kadmos/graph/graph_kadmos.py +++ b/kadmos/graph/graph_kadmos.py @@ -22,6 +22,7 @@ import matplotlib.pyplot as plt from lxml import etree from datetime import datetime from copy import deepcopy +from collections import OrderedDict from kadmos.external.XDSM_writer.XDSM import XDSM from kadmos.cmdows import CMDOWS @@ -613,6 +614,8 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): :type keep_tex_file: bool :param abbreviate_keywords: optional argument to keep make keywords shorter (input -> inp., output -> outp.) :type abbreviate_keywords: bool + :param compile_pdf: optional argument to compile the PDF + :type compile_pdf: bool :param colors_based_on: option to base the colors either on the problem role or the partitions :type colors_based_on: str """ @@ -959,9 +962,12 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # Create designCompetences/designCompetence/metadata with children # TODO: Preferably make sure that contacts are always saved to the database? cmdows_metadata = cmdows_design_competence.add('metadata') - cmdows_metadata.add('general_info', graph_design_competence_data.get('general_info'), camel_case_conversion=True) - cmdows_metadata.add('performance_info', graph_design_competence_data.get('performance_info'), camel_case_conversion=True) - cmdows_metadata.add('execution_info', graph_design_competence_data.get('execution_info'), camel_case_conversion=True) + cmdows_metadata.add('general_info', graph_design_competence_data.get('general_info'), + camel_case_conversion=True) + cmdows_metadata.add('performance_info', graph_design_competence_data.get('performance_info'), + camel_case_conversion=True) + cmdows_metadata.add('execution_info', graph_design_competence_data.get('execution_info'), + camel_case_conversion=True) # Create designCompetences/designCompetence/projectSpecific cmdows_design_competence.add('projectSpecific', graph_design_competence_data.get('projectSpecific')) @@ -1024,7 +1030,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # LOAD METHODS # # ---------------------------------------------------------------------------------------------------------------- # - def load_cmdows(self, cmdows, io_xsd_check, ignore_modes=False): + def load_cmdows(self, cmdows, check_list, ignore_modes=False, keep_running=False): # Create organization node self._load_cmdows_header(cmdows) @@ -1033,7 +1039,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): self._load_cmdows_parameters(cmdows) # Create function nodes - self._load_cmdows_executables(cmdows, io_xsd_check, ignore_modes=ignore_modes) + self._load_cmdows_executables(cmdows, check_list, ignore_modes=ignore_modes, keep_running=keep_running) # Create architecture element nodes if hasattr(self, '_load_cmdows_architecture_elements'): @@ -1054,12 +1060,15 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): return - def _load_cmdows_executables(self, cmdows, io_xsd_check, ignore_modes=False): + def _load_cmdows_executables(self, cmdows, check_list, ignore_modes=False, keep_running=False): - self._load_cmdows_competences(cmdows, io_xsd_check, ignore_modes=ignore_modes) + self._load_cmdows_competences(cmdows, check_list, ignore_modes=ignore_modes, keep_running=keep_running) self._load_cmdows_equations(cmdows) - def _load_cmdows_competences(self, cmdows, io_xsd_check, ignore_modes=False): + def _load_cmdows_competences(self, cmdows, check_list=None, ignore_modes=False, keep_running=False): + + inputs_list = [] + outputs_list = [] for function in cmdows.findall('executableBlocks/designCompetences/designCompetence'): self.add_node(function.get('uID'), @@ -1069,33 +1078,28 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): instance=function.findtext('instanceID'), version=function.findtext('version'), label=function.findtext('label'), - general_info=function.finddict('metadata/generalInfo', ordered=False, camel_case_conversion=True), - performance_info=function.finddict('metadata/performanceInfo', ordered=False, camel_case_conversion=True), - execution_info=function.finddict('metadata/executionInfo', ordered=False, camel_case_conversion=True), + general_info=function.finddict('metadata/generalInfo', ordered=False, + camel_case_conversion=True), + performance_info=function.finddict('metadata/performanceInfo', ordered=False, + camel_case_conversion=True), + execution_info=function.finddict('metadata/executionInfo', ordered=False, + camel_case_conversion=True), projectSpecific=function.finddict('projectSpecific')) for inp in function.findall('inputs/input'): - self.add_edge(inp.findtext('parameterUID'), function.get('uID'), valid_ranges=inp.finddict( - 'validRanges', ordered=False, camel_case_conversion=True)) + self.add_edge(inp.findtext('parameterUID'), function.get('uID'), + valid_ranges=inp.finddict('validRanges', ordered=False, camel_case_conversion=True)) if not function.findall('inputs/input'): # Determine assumed input file location (same folder as CMDOWS file) input_file_path = os.path.join(os.path.split(os.path.normpath(function.base))[0], function.findtext('ID') + '-input.xml').replace('file:'+os.path.sep, '') + if os.path.isfile(input_file_path): - inputs = _read_io_xml_file(input_file_path, function.findtext('modeID'), io_xsd_check, - ignore_modes=ignore_modes) - for input in inputs['leafNodes']: - # Add new parameter if it does not exist yet - if not self.has_node(input['xpath']): - self.add_node(input['xpath'], - category='variable', - shape='o', - label=input['xpath'].split('/')[ - -1]) # TODO: Extend this to pick up XML attributes for description, note, unit, data_type - self.add_edge(input['xpath'], function.get('uID')) + inputs_list.append([input_file_path, function]) else: logger.warning('Could not find inputs for function: ' + function.get('uID')) + # # # for output in function.findall('outputs/output'): self.add_edge(function.get('uID'), output.findtext('parameterUID')) @@ -1103,22 +1107,38 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): if not function.findall('outputs/output'): # Determine assumed output file location (same folder as CMDOWS file) output_file_path = os.path.join(os.path.split(os.path.normpath(function.base))[0], - function.findtext('ID') + '-output.xml').replace('file:'+os.path.sep, '') + function.findtext('ID') + '-output.xml').replace('file:'+os.path.sep, + '') if os.path.isfile(output_file_path): - outputs = _read_io_xml_file(output_file_path, function.findtext('modeID'), io_xsd_check, - ignore_modes=ignore_modes) - for output in outputs['leafNodes']: - # Add new parameter if it does not exist yet - if not self.has_node(output['xpath']): - self.add_node(output['xpath'], - category='variable', - shape='o', - label=output['xpath'].split('/')[ - -1]) # TODO: Extend this to pick up XML attributes for description, note, unit, data_type - self.add_edge(function.get('uID'), output['xpath']) + outputs_list.append([output_file_path, function]) else: logger.warning('Could not find outputs for function: ' + function.get('uID')) + io_list = inputs_list+outputs_list + + _perform_check_list(io_list, check_list, keep_running=keep_running) + + for input_el in inputs_list: + inputs = _read_io_xml_file(input_el[0], input_el[1].findtext('modeID'), ignore_modes=ignore_modes) + for input in inputs['leafNodes']: + if not self.has_node(input['xpath']): + self.add_node(input['xpath'], + category='variable', + shape='o', + label=input['xpath'].split('/')[-1]) # TODO: Extend this to pick up XML attributes for description, note, unit, data_type + self.add_edge(input['xpath'], input_el[1].get('uID')) + + for output_el in outputs_list: + outputs = _read_io_xml_file(output_el[0], output_el[1].findtext('modeID'), ignore_modes=ignore_modes) + for output in outputs['leafNodes']: + # Add new parameter if it does not exist yet + if not self.has_node(output['xpath']): + self.add_node(output['xpath'], + category='variable', + shape='o', + label=output['xpath'].split('/')[-1]) # TODO: Extend this to pick up XML attributes for description, note, unit, data_type + self.add_edge(output_el[1].get('uID'), output['xpath']) + return def _load_cmdows_parameters(self, cmdows): @@ -1255,7 +1275,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): if file_type == 'cmdows': self._save_cmdows(file_path, description=description, creator=creator, version=version, timestamp=timestamp, mpg=mpg, keep_empty_elements=keep_empty_elements, - pretty_print=pretty_print, convention=convention) + pretty_print=pretty_print, convention=convention, check=True) if integrity: self.check_cmdows_integrity(convention=convention, mpg=mpg) elif file_type == 'kdms': @@ -1313,7 +1333,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): if mpg is not None: mpg = copy.deepcopy(mpg) mpg.relabel_function_nodes(mapping) - mpg.graph['process_hierarchy'] = mpg.get_process_hierarchy() # Needs to be updated to meet convention + mpg.graph['process_hierarchy'] = mpg.get_process_hierarchy() # Needs to be updated to meet convention # Set basic variables and create CMDOWS element cmdows_version = str(graph.CMDOWS_VERSION) @@ -1450,6 +1470,171 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # GRAPH SPECIFIC METHODS # # ---------------------------------------------------------------------------------------------------------------- # + def add_contact(self, name, email, uid, company=None, department=None, function=None, address=None, + telephone=None, country=None, roles=None): + + already = False + contacts = [] + organigram = {} + contact = OrderedDict([('attrib', {'uID': uid}), ('name', name), ('email', email),('company', company), + ('department', department),('function', function),('address', address), + ('telephone', telephone),('country', country)]) + + role_options = ['architect', 'integrator', 'collaborativeEngineer', 'toolSpecialist', 'customer'] + architects = [] + integrators = [] + collaborative_engineers = [] + tool_specialists = [] + customers = [] + + dict = {'architect':architects, 'integrator':integrators,'collaborativeEngineer':collaborative_engineers, + 'toolSpecialist':tool_specialists,'customer':customers} + + if isinstance(roles, list): + for role in roles: + if role not in role_options: + logger.warning('Invalid role {} was provided for {}. Approriate roles are: {}'.format(role, name, + role_options)) + else: + dict[role].append({'contactUID':uid}) + elif isinstance(roles, basestring): + role = roles + if role not in role_options: + logger.warning('Invalid role {} was provided for {}. Approriate roles are: {}'.format(role, name, + role_options)) + else: + dict[role].append({'contactUID':uid}) + + for role in role_options: + if 'organization' in self.graph: + if role+'s' in self.graph['organization']['organigram']: + for contact_uid in self.graph['organization']['organigram'][role+'s']: + if contact_uid not in dict[role]: + dict[role].append(contact_uid) + else: + already = True + if len(dict[role]) > 0: + organigram[role+'s'] = dict[role] + + if 'organization' in self.graph: + if isinstance(self.graph['organization']['contacts'], list): + for old_contact in self.graph['organization']['contacts']: + contacts.append(old_contact) + if old_contact['attrib'] == contact['attrib']: + already = True + else: + contacts.append(self.graph['organization']['contacts']) + if self.graph['organization']['contacts']['attrib'] == contact['attrib']: + already = True + + if not already: + contacts.append(contact) + else: + logger.debug("{} is already defined in CMDOWS. Please use add_contact_roles() to add new roles to this" + " existing contact.".format(contact['attrib'])) + self.graph['organization']['contacts'] = contacts + self.graph['organization']['organigram'] = organigram + else: + self.graph['organization'] = OrderedDict([('contacts', contact), ('organigram', organigram)]) + return + + def add_contact_roles(self, uid, roles): + + assert 'organization' in self.graph, 'There are no contacts present to add a role to.' + assert any(uid in contact['attrib']['uID'] for contact in self.graph['organization']['contacts']),\ + '{} does not exist as a contact yet.'.format(uid) + + already = False + duplicates = [] + organigram = {} + role_options = ['architect', 'integrator', 'collaborativeEngineer', 'toolSpecialist', 'customer'] + architects = [] + integrators = [] + collaborative_engineers = [] + tool_specialists = [] + customers = [] + + dict = {'architect': architects, 'integrator': integrators, 'collaborativeEngineer': collaborative_engineers, + 'toolSpecialist': tool_specialists, 'customer': customers} + + if isinstance(roles, list): + for role in roles: + if role not in role_options: + logger.warning('Invalid role {} was provided for {}. Approriate roles are: {}'.format(role, uid, + role_options)) + else: + dict[role].append({'contactUID': uid}) + elif isinstance(roles, basestring): + role = roles + if role not in role_options: + logger.warning('Invalid role {} was provided for {}. Approriate roles are: {}'.format(role, uid, + role_options)) + else: + dict[role].append({'contactUID': uid}) + + for role in role_options: + if role + 's' in self.graph['organization']['organigram']: + for contact_uid in self.graph['organization']['organigram'][role + 's']: + if contact_uid not in dict[role]: + dict[role].append(contact_uid) + else: + already = True + duplicates.append(role) + if len(dict[role]) > 0: + organigram[role + 's'] = dict[role] + + if already: + logger.debug('{} was/were already defined as (a) role(s) for {} in CMDOWS.'.format(duplicates, uid)) + + self.graph['organization']['organigram'] = organigram + return + + def add_dc_general_info(self, dc_uid, description, status=None, creation_date=None, owner_uid=None, + creator_uid=None, operator_uid=None, model_definition=None): + self.node[dc_uid]['general_info'] = {'description': description} + options = ['status', 'creation_date', 'owner', 'creator', 'operator', 'model_definition'] + uid_options = ['owner','creator','operator'] + dict = {'status':status,'creation_date': creation_date, 'owner': owner_uid, 'creator': creator_uid, + 'operator': operator_uid, 'model_definition': model_definition} + + for option in options: + if option in uid_options and dict[option]: + self.node[dc_uid]['general_info'].update({option : {'contactUID': dict[option]}}) + elif dict[option]: + self.node[dc_uid]['general_info'].update({option : dict[option]}) + return + + def add_dc_performance_info(self, dc_uid, precision=None, fidelity_level=None, run_time=None, verification=None): + options = ['precision','fidelity_level','run_time','verification'] + dict = {'precision': precision, 'fidelity_level':fidelity_level, 'run_time': run_time, + 'verification': verification} + if not precision and not fidelity_level and not run_time and not verification: + logger.warning("At least one element of the performance info of {} must have a value".format(dc_uid)) + else: + first = True + for option in options: + if dict[option]: + if first: + self.node[dc_uid].update({'performance_info':{option : dict[option]}}) + first = False + else: + self.node[dc_uid]['performance_info'].update({option: dict[option]}) + return + + def add_dc_remote_component_info(self, dc_uid, single_or_multi_execution, job_name, remote_engineer, + notification_message, data_exchange_dict=None): + + self.node[dc_uid].update({'execution_info' + :{'remote_component_info' + :{'job_settings':{'single_or_multi_execution': single_or_multi_execution, + 'remote_engineer': {'contact_u_i_d': remote_engineer}, + 'job_name': job_name, + 'notification_message': notification_message}}}}) + if data_exchange_dict: + self.node[dc_uid]['execution_info']['remote_component_info'].update({'data_exchange_settings' : + data_exchange_dict}) + return + def add_node(self, n, attr_dict=None, **attr): # Execute base function @@ -2899,12 +3084,70 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # Make the mapping if mapping is None: mapping = {} + labels = [] + ids = [] + modes = [] + instances = [] + versions = [] + ids_set = set() + multiples = set() + ids_dict = {} + des_comps = [] + for design_competence in design_competences: id = self.node[design_competence].get('name', design_competence) mode = self.node[design_competence].get('mode', 'main') instance = self.node[design_competence].get('instance', '1') version = self.node[design_competence].get('version', '1.0') mapping[design_competence] = '{}[{}][{}][{}]'.format(id, mode, instance, version) + des_comps.append(design_competence) + labels.append([id]) + ids.append(id) + modes.append(mode) + instances.append(instance) + versions.append(version) + ids_set.add(id) + + # check if there are IDs that are used multiple times + if len(ids_set) < len(ids): + # create a dictionary with index locations of all design competences + for i in range(len(ids)): + if ids[i] in ids_dict: + if isinstance(ids_dict[ids[i]], int): + ids_dict[ids[i]] = [ids_dict[ids[i]], i] + else: + update = [] + for index in ids_dict[ids[i]]: + update.append(index) + update.append(i) + ids_dict[ids[i]] = update + multiples.add(ids[i]) + else: + ids_dict[ids[i]]=i + # for the IDs that are used multiple times determine if there is a difference in mode/instance/version + for multiple in multiples: + indices = ids_dict[multiple] + modes_set = set() + instances_set = set() + versions_set = set() + for index in indices: + modes_set.add(modes[index]) + instances_set.add(instances[index]) + versions_set.add(versions[index]) + for index in indices: + if len(modes_set) > 1: + labels[index].append(modes[index]) + if len(instances_set) > 1: + labels[index].append(instances[index]) + if len(versions_set) > 1: + labels[index].append(versions[index]) + + # create mapping using the correct labeling + for i in range(len(des_comps)): + label = labels[i][0] + for j in range(1, len(labels[i])): + label += '['+labels[i][j]+']' + mapping[des_comps[i]] = label # Do the relabeling nx.relabel_nodes(self, mapping, copy=False) @@ -2913,13 +3156,16 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): if 'problem_formulation' in self.graph: if 'mg_function_ordering' in self.graph: for group in self.graph['mg_function_ordering']: - self.graph['mg_function_ordering'][group] = translate_list(self.graph['mg_function_ordering'][group], mapping) + self.graph['mg_function_ordering'][group] = translate_list(self.graph['mg_function_ordering'] + [group], mapping) if 'function_order' in self.graph['problem_formulation']: - self.graph['problem_formulation']['function_order'] = translate_list(self.graph['problem_formulation']['function_order'], mapping) + self.graph['problem_formulation']['function_order'] = translate_list(self.graph['problem_formulation'] + ['function_order'], mapping) if 'function_ordering' in self.graph['problem_formulation']: for group in self.graph['problem_formulation']['function_ordering']: - self.graph['problem_formulation']['function_ordering'][group] = translate_list(self.graph['problem_formulation']['function_ordering'][group], mapping) + self.graph['problem_formulation']['function_ordering'][group] = \ + translate_list(self.graph['problem_formulation']['function_ordering'][group], mapping) return mapping @@ -3169,7 +3415,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): else: suffix_strs = ['']*len(args[1:]) for idx, arg in enumerate(args[1:]): - node_name = args[0] + suffix_strs[idx] + '[' + arg + ']' + instance_str + version_str + node_name = args[0] + suffix_strs[idx] function_nodes.append(node_name) assert self.has_node(node_name), 'Node "' + node_name + '" is not present in the graph.' assert self.node[node_name]['category'], 'Node "' + node_name + '" is not of category "function".' @@ -3499,7 +3745,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): return len(self.find_all_nodes(category='function')) def find_all_nodes(self, category='all', subcategory='all', attr_cond=None, attr_include=None, attr_exclude=None, - print_in_log=False, print_attributes='all'): + xpath_include=None, xpath_exclude=None, print_in_log=False, print_attributes='all'): """ Advanced search function to get nodes and their properties. @@ -3513,6 +3759,10 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): :type attr_include: list :param attr_exclude: attributes to exclude from search :type attr_exclude: list + :param xpath_include: xpaths to exclusively include in search + :type xpath_include: list + :param xpath_exclude: xpaths to exclude from search + :type xpath_exclude: list :param print_in_log: parameter to set printing in log on or off :type print_in_log: bool :param print_attributes: attributes that should be printed in the log @@ -3618,6 +3868,11 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): >>> all_nodes = self.find_all_nodes(category='all', subcategory='all inputs', >>> attr_cond=['execution time', '>', 5], print_in_log=True) + + Get all nodes with any of the listed attribute values: + + >>> all_nodes = self.find_all_nodes(category='all', subcategory='all', + >>> attr_include=[['problem_role'['constraint','objective']],['instance', 1]]) """ # TODO: Update docstring @@ -3631,10 +3886,40 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): assert isinstance(category, str) assert isinstance(subcategory, str) assert isinstance(attr_cond, type(None)) or isinstance(attr_cond, list) + assert isinstance(attr_include, type(None)) or isinstance(attr_include, list) + assert isinstance(attr_exclude, type(None)) or isinstance(attr_exclude, list) + assert isinstance(xpath_include, type(None)) or isinstance(xpath_include, list) + assert isinstance(xpath_exclude, type(None)) or isinstance(xpath_exclude, list) assert isinstance(print_in_log, bool) assert isinstance(print_attributes, str) or isinstance(print_attributes, list) - if isinstance(attr_cond, list): + if isinstance(attr_cond, type(None)): + pass + elif isinstance(attr_cond[0], basestring): assert len(attr_cond) == 3, "Attribute condition needs to be a list with three entries." + else: + assert isinstance(attr_cond[0][0], basestring), "Attribute condition can only handle one nesting level." + for attr in attr_cond: + assert len(attr) == 3, "Attribute conditions need to be nested lists with three entries." + if isinstance(attr_include, type(None)): + pass + elif isinstance(attr_include[0], basestring): + assert len(attr_include) == 2, "Attribute included needs to be a list with the attribute" \ + " and (a list of) the desired value(s)." + else: + assert isinstance(attr_include[0][0], basestring), "Attributes included can only handle one nesting level." + for attr in attr_include: + assert len(attr) == 2, "Attributes included need to be nested lists with the attribute and " \ + "(a list of) desired value(s)." + if isinstance(attr_exclude, type(None)): + pass + elif isinstance(attr_exclude[0], basestring): + assert len(attr_exclude) == 2, "Attribute excluded needs to be a list with the attribute" \ + " and (a list of) the desired value(s)." + else: + assert isinstance(attr_exclude[0][0], basestring), "Attributes excluded can only handle one nesting level." + for attr in attr_exclude: + assert len(attr) == 2, "Attributes excluded need to be nested lists with the attribute" \ + " and (a list of) desired value(s)." assert len({category}.intersection(possible_categories)) != 0, \ "Specified category '%s' does not exist. Please choose from %s." % (category, str(possible_categories)) assert len({subcategory}.intersection(possible_subcategories)) != 0, \ @@ -3684,7 +3969,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # Determine if the node has a valid attribute value to be added if attr_cond is None: eval_node = True - elif isinstance(attr_cond, list): + elif isinstance(attr_cond[0], basestring): if attr_cond[0] in self.node[item]: if test_attr_cond(self.node[item][attr_cond[0]], attr_cond[1], attr_cond[2]): eval_node = True @@ -3692,6 +3977,16 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): eval_node = False else: eval_node = False + else: + eval_node=True + for attr in attr_cond: + if attr[0] in self.node[item]: + if test_attr_cond(self.node[item][attr[0]], attr[1], attr[2]) and eval_node: + eval_node = True + else: + eval_node = False + else: + eval_node = False # noinspection PyUnboundLocalVariable if eval_node: if print_in_log: @@ -3702,23 +3997,79 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): if print_in_log: print '' + # include all nodes (from selection) that have any of the specified attributes. if attr_include: + filtered = set() + if isinstance(attr_include,type(None)): + pass + elif isinstance(attr_include[0], basestring): + for node in all_nodes: + if self.node[node].get(attr_include[0]): + if self.node[node][attr_include[0]] in attr_include[1]: + filtered.add(node) + else: + for attr in attr_include: + for node in all_nodes: + if self.node[node].get(attr[0]): + if self.node[node][attr[0]] in attr[1]: + filtered.add(node) + filtered = list(filtered) + all_nodes = filtered + + # include all nodes (from selection) that have none of the specified attributes. + if attr_exclude: filtered = list() - for node in all_nodes: - if self.node[node].get(attr_include[0]): - if self.node[node][attr_include[0]] in attr_include[1]: + if isinstance(attr_exclude, type(None)): + pass + elif isinstance(attr_exclude[0], basestring): + for node in all_nodes: + choice = True + if self.node[node].get(attr_exclude[0]): + if self.node[node][attr_exclude[0]] in attr_exclude[1]: + choice = False + if choice: filtered.append(node) + else: + for attr in attr_exclude: + for node in all_nodes: + choice = True + if self.node[node].get(attr[0]): + if self.node[node][attr[0]] in attr[1]: + choice = False + if choice: + filtered.append(node) all_nodes = filtered - if attr_exclude: + if xpath_include: filtered = list() - for node in all_nodes: - choice = True - if self.node[node].get(attr_exclude[0]): - if self.node[node][attr_exclude[0]] in attr_exclude[1]: + for xpath in xpath_include: + path = xpath.split('/') + for node in all_nodes: + node_path = self.node[node]['name'].split('/') + for el in range(len(path)): choice = False - if choice: - filtered.append(node) + if node_path[el] == path[el]: + choice = True + if not choice: + break + if choice: + filtered.append(node) + all_nodes = filtered + + if xpath_exclude: + filtered = list() + for xpath in xpath_exclude: + path = xpath.split('/') + for node in all_nodes: + node_path = self.node[node]['name'].split('/') + for el in range(len(path)): + choice = True + if node_path[el] == path[el]: + choice = False + if choice: + break + if choice: + filtered.append(node) all_nodes = filtered return all_nodes @@ -3787,8 +4138,8 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): print '- - - - - - - - -\n' return - def plot_graph(self, fig_num=1, fig_size=(18, 11), color_setting='default', save_as=None, show_now=True, title=None, - edge_label=False): + def plot_graph(self, fig_num=1, color_setting='default', positioning='circular', save_as=None, show_now=True, + title=None, edge_label=False): """Function to plot a graph. Note that you need to add matplotlib.pyplot.show() at the end of your code to see the plot window. @@ -3796,6 +4147,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): :param fig_num: figure number :param fig_size: size of figure window :param color_setting: choose from 'default', 'sinks', 'categories', 'partitions' + :param positioning: choose from 'circular', 'spring' :param save_as: save plot as figure file :param show_now: Boolean whether to plot directly (pausing the execution until the plot is closed), or not. :param title: title string of the graph @@ -3803,14 +4155,15 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): :return: window with plot """ - # Create figure - f = plt.figure(num=fig_num, figsize=fig_size) # Create node labels node_labels = {} for node, data in self.nodes(data=True): node_labels[node] = self.node[node]['label'] + # Create figure + f = plt.figure(num=fig_num, figsize=(min(len(node_labels)/3, 50), min(len(node_labels)/3, 50))) + # Create edge labels if edge_label: edge_labels = {} @@ -3822,37 +4175,49 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): else: # if attribute not found, add empty string edge_labels[edge_tple] = '' + # Define node sizes + node_sizes = {'variable': max(10000/len(node_labels), 100), + 'variable group': max(20000/len(node_labels), 100), + 'function': max(30000/len(node_labels), 100), + 'architecture element': max(30000/len(node_labels), 100)} + # Need to create a layout when doing separate calls to draw nodes and edges - pos = nx.spring_layout(self) + if positioning == 'circular': + pos = nx.circular_layout(self) + elif positioning == 'spring': + pos = nx.spring_layout(self) - # Define node sizes - node_sizes = {'o': 500, - 'd': 1000, - 's': 1500, - '8': 1500} + # Define node shapes + node_shapes = {'variable': 'o', + 'variable group': 's', + 'function': 'd', + 'architecture element': '8'} # Dynamic node shape, color, and size creation if color_setting == 'default': + + node_cate = set((category[1]["category"] for category in self.nodes(data=True))) + # Get all distinct node classes according to the node shape attribute - node_colors = {'o': '#FFEBCD', - 'd': '#00BFFF', - 's': '#FFD700', - '8': '#66FF99'} # Based on html hex string colors - legend_names = {'o': 'variable', - 'd': 'variable group', - 's': 'function', - '8': 'architecture element'} - node_shapes = set((a_shape[1]["shape"] for a_shape in self.nodes(data=True))) - - for a_shape in node_shapes: + node_colors = {'variable': '#FFEBCD', + 'variable group': '#00BFFF', + 'function': '#FFD700', + 'architecture element': '#66FF99'} # Based on html hex string colors + legend_names = {'variable': 'variable', + 'variable group':'variable group', + 'function':'function', + 'architecture element': 'architecture element'} + + for category in node_cate: # Filter and draw the subset of nodes with the same symbol in the positions that are now known through # the use of the layout. - nx.draw_networkx_nodes(self, pos, - node_shape=a_shape, with_labels=False, + nx.draw_networkx_nodes(self, pos, with_labels=False, nodelist=[s_node[0] for s_node in - filter(lambda x: x[1]["shape"] == a_shape, self.nodes(data=True))], - node_color=node_colors[a_shape], - node_size=node_sizes[a_shape]) + filter(lambda x: x[1]["category"] == category, self.nodes(data=True))], + node_shape=node_shapes[category], + node_color=node_colors[category], + node_size=node_sizes[category]) + elif color_setting == 'sinks': # Get sink list from graph sink_list = self.graph['sinks'] @@ -3865,11 +4230,11 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): legend_names = {'non-sink': 'linked', 'sink': 'sink'} # Get all distinct node classes according to the node shape attribute - node_shapes = set((a_shape[1]["shape"] for a_shape in self.nodes(data=True))) + node_cate = set((category[1]["category"] for category in self.nodes(data=True))) - for a_shape in node_shapes: - nodelist = [s_node[0] for s_node in - filter(lambda x: x[1]["shape"] == a_shape, self.nodes(data=True))] + for category in node_cate: + nodelist = nodelist=[s_node[0] for s_node in + filter(lambda x: x[1]["category"] == category, self.nodes(data=True))] node_color = [] for entry in nodelist: sink_found = False @@ -3884,10 +4249,11 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # Filter and draw the subset of nodes with the same symbol in the positions that are now known through # the use of the layout. nx.draw_networkx_nodes(self, pos, - node_shape=a_shape, with_labels=False, + node_shape=node_shapes[category], with_labels=False, nodelist=nodelist, node_color=node_color, - node_size=node_sizes[a_shape]) + node_size=node_sizes[category]) + elif color_setting == 'categories': # Group graph nodes self.get_nodes_subcategory() @@ -3903,10 +4269,10 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): 'problematic': 'problematic', 'wrong': 'wrong'} # Get all distinct node classes according to the node shape attribute - node_shapes = set((a_shape[1]["shape"] for a_shape in self.nodes(data=True))) - for a_shape in node_shapes: + node_cate = set((category[1]["category"] for category in self.nodes(data=True))) + for category in node_cate: nodelist = [s_node[0] for s_node in - filter(lambda x: x[1]["shape"] == a_shape, self.nodes(data=True))] + filter(lambda x: x[1]["category"] == category, self.nodes(data=True))] node_color = [] for node in nodelist: if node in grouped_nodes['variable']['hole'] or \ @@ -3938,10 +4304,11 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # Draw the subset of nodes with the same symbol in the positions that are now known through the # use of the layout. nx.draw_networkx_nodes(self, pos, - node_shape=a_shape, with_labels=False, + node_shape=node_shapes[category], with_labels=False, nodelist=nodelist, node_color=node_color, - node_size=node_sizes[a_shape]) + node_size=node_sizes[category]) + elif color_setting == 'partitions': # Check if partition has been performed # node_colors = [] @@ -3950,11 +4317,11 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): raise IOError('Input graph has not been partitioned (node attributes are missing).') # Get all distinct node classes according to the node shape attribute - node_shapes = set((a_shape[1]["shape"] for a_shape in self.nodes(data=True))) + node_cate = set((category[1]["category"] for category in self.nodes(data=True))) color_set = set() - for a_shape in node_shapes: + for category in node_cate: nodelist = [s_node[0] for s_node in - filter(lambda x: x[1]["shape"] == a_shape, self.nodes(data=True))] + filter(lambda x: x[1]["category"] == category, self.nodes(data=True))] node_color = [] for node in nodelist: node_color.append(self.node[node]['part_color']) @@ -3962,10 +4329,10 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # Draw the subset of nodes with the same symbol in the positions that are now known through the # use of the layout. nx.draw_networkx_nodes(self, pos, - node_shape=a_shape, with_labels=False, + node_shape=node_shapes[category], with_labels=False, nodelist=nodelist, node_color=node_color, - node_size=node_sizes[a_shape]) + node_size=node_sizes[category]) # Create the legend data n_part_colors = len(color_set) node_colors = dict() @@ -3980,11 +4347,13 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): for category in node_colors: ax.plot([0], [0], color=node_colors[category], label=legend_names[category]) - nx.draw_networkx_edges(self, pos, arrows=True, ax=ax) - nx.draw_networkx_labels(self, pos, node_labels) - if edge_label: - # noinspection PyUnboundLocalVariable - nx.draw_networkx_edge_labels(self, pos, edge_labels, label_pos=0.35) + nx.draw_networkx_edges(self, pos, arrows=True, ax=ax, width=0.5, arrowstyle='->', + nodesize=node_sizes['function']) + if len(node_labels)<100: + nx.draw_networkx_labels(self, pos, node_labels, fontsize=10, ax=ax) + if edge_label: + # noinspection PyUnboundLocalVariable + nx.draw_networkx_edge_labels(self, pos, edge_labels, label_pos=0.35) plt.legend() if title: @@ -4032,7 +4401,8 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin): # noinspection PyUnboundLocalVariable -def load(file_name, file_type=None, file_check_critical=True, source_folder=None, io_xsd_check=False, ignore_modes=False): +def load(file_name, file_type=None, check_list=None, file_check_critical=True, source_folder=None, ignore_modes=False, + keep_running=False): """Function to load a KadmosGraph from a file. Different input file types are implemented. They are listed in the following. @@ -4049,9 +4419,13 @@ def load(file_name, file_type=None, file_check_critical=True, source_folder=None :type file_check_critical: bool :param source_folder: source folder which contains the input file :type source_folder: str - :param io_xsd_check: boolean to check XML input/output files against a schema file (XSD) in case of CMDOWS file in - combination with in- and output XML files. - :type source_folder: bool + :param check_list: list with checks to be performed on in case of CMDOWS file with in- and output XML files. + check options: + 'consistent_root': to check XML input/output files have the same, single root element. + 'invalid_leaf_elements': to check XML input/output files for invalid leaf elements. + 'schemas': to check XML input/output files against a schema file (XSD) in case of CMDOWS file in combination + with in- and output XML files. + :type check_list: list :return: graph loaded from file :rtype: KadmosGraph @@ -4081,7 +4455,7 @@ def load(file_name, file_type=None, file_check_critical=True, source_folder=None # TODO: Load also header info and/or metadata of files logger.info('Loading the ' + file_type.upper() + ' file ' + file_path + '...') if file_type == 'cmdows': - graph, mpg = _load_cmdows(file_path, io_xsd_check, ignore_modes=ignore_modes) + graph, mpg = _load_cmdows(file_path, check_list, ignore_modes=ignore_modes, keep_running=keep_running) elif file_type == 'kdms': graph = _load_kdms(file_path) elif file_type == 'graphml': @@ -4112,6 +4486,130 @@ def load(file_name, file_type=None, file_check_critical=True, source_folder=None return graph, mpg +def check_database(file_name, source_folder=None, check_list=None, keep_running=False): + """Method to check the XML-files inside the database for parse errors, inconsistent roots, invalid leaf elements + and schema inconsistencies. + + :param file_name: name of the cmdows file. + :type file_name: str + :param file_type: file_type + :type file_type: str + :param source_folder: source folder which contains the input file + :type source_folder: str + :param check_list: list with checks to be performed on in case of CMDOWS file with in- and output XML files. + check options: + 'consistent_root': to check XML input/output files have the same, single root element. + 'invalid_leaf_elements': to check XML input/output files for invalid leaf elements. + 'schemas': to check XML input/output files against a schema file (XSD) in case of CMDOWS file in combination + with in- and output XML files. + :type check_list: list + + :return: graph loaded from file + :rtype: KadmosGraph + """ + + # Try to detect the file type automatically + if file_name.lower().endswith(tuple(file_extensions)): + file_type = file_types[file_extensions.index(os.path.splitext(file_name)[1].lower()[1:])] + else: + raise IOError('The file type of ' + file_name + ' could not be detected automatically. ' + 'Please provide it with the file_type input argument.') + + # Check if the file type is valid + file_type = file_type.lower() + if file_type == 'cmdows': + pass + else: + raise IOError('The specified file type ' + file_type + ' cannot be checked. Please use the file type: cmdows.') + + # Get path to file + if source_folder is None: + file_path = file_name + else: + file_path = os.path.join(source_folder, file_name) + + cmdows = CMDOWS(file_path=file_path) + if not cmdows.check(): + logger.warning('The CMDOWS file ' + file_path + ' has some flaws. You may use a previous version of KADMOS to' + ' ensure proper loading of the CMDOWS file.') + + # Parse + cmdows = etree.parse(file_path, parser).getroot() + + # Clean + cmdows.clean() + + inputs_list = [] + outputs_list = [] + + for function in cmdows.findall('executableBlocks/designCompetences/designCompetence'): + if not function.findall('inputs/input'): + # Determine assumed input file location (same folder as CMDOWS file) + input_file_path = os.path.join(os.path.split(os.path.normpath(function.base))[0], + function.findtext('ID') + '-input.xml').replace('file:' + os.path.sep, + '') + if os.path.isfile(input_file_path): + inputs_list.append([input_file_path, function]) + else: + logger.warning('Could not find inputs for function: ' + function.get('uID')) + + if not function.findall('inputs/input'): + # Determine assumed input file location (same folder as CMDOWS file) + output_file_path = os.path.join(os.path.split(os.path.normpath(function.base))[0], + function.findtext('ID') + '-output.xml').replace('file:' + os.path.sep, + '') + if os.path.isfile(input_file_path): + outputs_list.append([output_file_path, function]) + else: + logger.warning('Could not find outputs for function: ' + function.get('uID')) + + io_list = inputs_list + outputs_list + + _perform_check_list(io_list, check_list, keep_running=keep_running) + + return + + +def _perform_check_list(io_list, check_list, keep_running=False): + + root_check = False + leaf_check = False + xsd_check = False + # Check which checks need to be performed + if check_list: + checks_detected = 0 + if 'consistent_root' in check_list: + root_check = True + checks_detected += 1 + if 'invalid_leaf_elements' in check_list: + leaf_check = True + checks_detected += 1 + if 'schemas' in check_list: + xsd_check = True + checks_detected += 1 + # Check if checks were added correctly + if checks_detected is not len(check_list): + logger.warning("Invalid check_list element input detected. Valid options: 'consistent_root'," + " 'invalid_leaf_elements' or 'schemas'") + + parse_check(io_list) + + # Check consistency of root + if root_check: + _check_roots(io_list, keep_running=keep_running) + + # Check for invalid leaf elements + if leaf_check: + leafs = _get_leafs(io_list) + _check_leafs(io_list, leafs, keep_running=keep_running) + + # Check file against XSD schema + if xsd_check: + schema_path = _get_data_schema(os.path.split(io_list[0][0])[0]) + _validate_file_against_schema(io_list[0][0], schema_path, keep_running=keep_running) + + return + def _load_kdms(file_path): # Parse @@ -4149,7 +4647,7 @@ def _load_graphml(file_path): # noinspection PyUnboundLocalVariable -def _load_cmdows(file_path, io_xsd_check, ignore_modes=False): +def _load_cmdows(file_path, check_list=None, ignore_modes=False, keep_running=False): from graph_data import RepositoryConnectivityGraph, FundamentalProblemGraph, MdaoDataGraph @@ -4179,7 +4677,7 @@ def _load_cmdows(file_path, io_xsd_check, ignore_modes=False): raise IOError('The CMDOWS file ' + file_path + ' is missing basic elements and cannot be loaded.') # Load the graph (and MPG in case this one is provided) - mpg = graph.load_cmdows(cmdows, io_xsd_check, ignore_modes=ignore_modes) + mpg = graph.load_cmdows(cmdows, check_list, ignore_modes=ignore_modes, keep_running=keep_running) # Clean up graph try: @@ -4195,7 +4693,7 @@ def _load_cmdows(file_path, io_xsd_check, ignore_modes=False): return graph, None -def _read_io_xml_file(file_path, mode, xsd_check, ignore_modes=False): +def _read_io_xml_file(file_path, mode, ignore_modes=False): # Check input assert os.path.isfile(file_path), 'File {} does not exist.'.format(file_path) @@ -4216,11 +4714,6 @@ def _read_io_xml_file(file_path, mode, xsd_check, ignore_modes=False): p = c.getparent() p.remove(c) - # Check file against XSD schema - if xsd_check: - schema_path = _get_data_schema(os.path.split(file_path)[0]) - _validate_file_against_schema(file_path, schema_path) - # iterate through tree and add data to dict, only touch leaf nodes leafNodesList = [] completeNodeList = [] @@ -4343,7 +4836,9 @@ def _check_execution_mode_for_element(element, tree, file, req_mode, ignore_mode modesFound = False if 'modes' in element.attrib and re.search("[^\s]", element.attrib['modes']): # if 'modes' key present and has characters - assert isinstance(element.attrib['modes'], basestring), "If provided, modes-attribute of element {} in {} must be of type string.".format(elementPath, file) + assert isinstance(element.attrib['modes'], basestring), "If provided, modes-attribute of element {} in " \ + "{} must be of type string.".format(elementPath, + file) execModes = element.attrib['modes'] modesFound = True @@ -4353,7 +4848,8 @@ def _check_execution_mode_for_element(element, tree, file, req_mode, ignore_mode modesFound = True execModes = anc.attrib['modes'] else: - print "WARNING: Multiple 'modes' attributes found in ancestry of element {} in {}; lowest one is applied.".format(elementPath, file) + logger.warning("Multiple 'modes' attributes found in ancestry of element {} in {}; lowest one is " \ + "applied.".format(elementPath, file)) break negModesList = [] @@ -4366,7 +4862,8 @@ def _check_execution_mode_for_element(element, tree, file, req_mode, ignore_mode negPattern = "^-" if any(re.search(negPattern, mode) for mode in modesList): assert all(re.search(negPattern, mode) for mode in modesList), \ - "Either all or none of the 'modes'-attributes of element {} in {} must be negative!".format(elementPath, file) + "Either all or none of the 'modes'-attributes of element {} in {} must be " \ + "negative!".format(elementPath, file) negModesList = [mode[1:] for mode in modesList] modesList = [] @@ -4386,7 +4883,6 @@ def _get_data_schema(kb_dir): (PRIVATE) This function retrieves the data schema (.xsd) file from the KB folder and stores filename in instance. :return: data_schema_path """ - schema_pattern = "(.xsd)$" # Determine name of XML Schema file @@ -4409,14 +4905,14 @@ def _get_data_schema(kb_dir): return os.path.join(kb_dir, data_schema) -def _validate_file_against_schema(file_path, schema_path): +def _validate_file_against_schema(file_path, schema_path, keep_running=False): """ (PRIVATE) Check the read-write XML file in the knowledge base against the XML Schema. Argument is list/tuple of nodes to ignore in validation. Root node can not be ignored. :rtype: Error """ - + logger.info('Checking for invalidities w.r.t. schema') # Parse the XML file tree = etree.parse(file_path) @@ -4434,8 +4930,118 @@ def _validate_file_against_schema(file_path, schema_path): for error in xmlschema.error_log: logger.debug('ERROR ON LINE {} in file {}: {}'.format(error.line, os.path.split(file_path)[1], error.message.encode("utf-8"))) - raise AssertionError('The provided file {} is not valid w.r.t. the schema {} (set logger to debug for ' - 'additional info).'.format(os.path.split(file_path)[1], os.path.split(schema_path)[1])) + if not keep_running: + raise AssertionError('The provided file {} is not valid w.r.t. the schema {} (set logger to debug for ' + 'additional info).'.format(os.path.split(file_path)[1], os.path.split(schema_path)[1])) + return + +def _check_roots(io_list, keep_running=False): + """ + This function checks if there are inconsistent roots in the XML input and output files. + :rtype: Warning + """ + logger.info('Checking for inconsistent roots...') + + first_file = True + for entry in io_list: + file_path = entry[0] + file_name = os.path.split(file_path)[1] + if os.path.isfile(file_path): + tree = etree.parse(file_path, parser) + current_root = tree.getroot() + if not first_file: + # Give warning if root is inconsistent + if current_root.tag != previous_root.tag: + logger.debug('Inconsistent root of element found in XML file {}'.format(file_name)) + logger.debug('Inconsistent root: {}'.format(current_root.tag)) + logger.debug('Inconsistent w.r.t. standard root: {}'.format(previous_root.tag)) + if not keep_running: + raise IOError('Inconsistent root in file {} (root found: {}, expected root: {})' + .format(file_name, current_root.tag, previous_root.tag)) + previous_root = current_root + first_file = False return +def _get_leafs(io_list): + """ + This function generates a list of unique leaf elements with findable path, path and file_name. + :return: leafs + """ + logger.info('Obtaining leaf elements...') + leafs = set() + for entry in io_list: + file_path = entry[0] + file_name = os.path.split(file_path)[1] + if os.path.isfile(file_path): + tree = etree.parse(file_path, parser) + for el in tree.iter(): + if not el.getchildren(): + path_list = [] + child = el + while child.getparent() is not None: + parent = child.getparent() + path_list.append(child.tag) + child = parent + path_list = reversed(path_list) + first = True + path = '//' + for part in path_list: + if first: + path += str(part) + first = False + else: + path += '/'+str(part) + leafs.add((path, tree.getpath(el), file_name)) + leafs = list(leafs) + return leafs + + +def _check_leafs(io_list, leafs, keep_running=False): + """ + This function checks if there are elements in other files with the same element that still have child elements. + :rtype: Warning + """ + logger.info('Checking for invalid leaf elements...') + for entry in io_list: + file_path = entry[0] + file_name = os.path.split(file_path)[1] + logger.info(' {} (file: {}/{}).'.format(file_name, io_list.index(entry)+1, len(io_list))) + if os.path.isfile(file_path): + tree = etree.parse(file_path, parser) + for leaf in leafs: + el = tree.find(leaf[0]) + if el is not None: + if el.getchildren(): + path = tree.getpath(el.getchildren()[0]) + logger.debug('Invalid leaf element found in XML file {}'.format(leaf[2])) + logger.debug('Invalid leaf element path {}'.format(leaf[1])) + logger.debug('Reason for invalidity: longer path {} found in file {}'.format(path, file_name)) + leafs.remove(leaf) + if not keep_running: + raise AssertionError('Invalid leaf element found in XML file {}\n'.format(leaf[2]) + + 'Invalid leaf element path {}\n'.format(leaf[1]) + + 'Reason for invalidity: longer path {} found in file {}'.format(path, file_name)) + return + + +def parse_check(io_list, keep_running=False): + logger.info('Checking for parsing errors...') + for entry in io_list: + file_path=entry[0] + if os.path.isfile(file_path): + tree = _try_parsing(file_path) + return + + +def _try_parsing(file_path, keep_running=False): + try: + tree = etree.parse(file_path, parser) + except etree.XMLSyntaxError as e: + logger.debug('Could not parse XML file {}. Check file structure.'.format(os.path.split(file_path)[1])) + logger.debug('To avoid parser errors, use an XML editor to build and adjust files.') + logger.warning('ERROR: {}'.format(e)) + raise IOError('Could not parse XML file {}. Check file structure.'.format(os.path.split(file_path)[1])) + return tree + + diff --git a/kadmos/graph/graph_process.py b/kadmos/graph/graph_process.py index e0db4ed0a815423598c9cd8a932f417f9a13a633..e4bfe45536a1aba046bb102bfaba1827683c245e 100644 --- a/kadmos/graph/graph_process.py +++ b/kadmos/graph/graph_process.py @@ -651,7 +651,7 @@ class MdaoProcessGraph(ProcessGraph): return node_text - def get_process_list(self, use_d3js_node_ids=True): + def get_process_list(self, use_d3js_node_ids=False): """Method to get the xdsm workflow process list (for use in dynamic visualizations). :param use_d3js_node_ids: setting whether node names should be changed into node ids according to D3js notation. diff --git a/kadmos/graph/mixin_vistoms.py b/kadmos/graph/mixin_vistoms.py index f9146a687c55df96874cefef33b2205c8c695526..1b5586d39060012d8cf2c6e7013f503e833da5db 100644 --- a/kadmos/graph/mixin_vistoms.py +++ b/kadmos/graph/mixin_vistoms.py @@ -38,7 +38,7 @@ LOCAL_FILE_REFS = dict(REP__Acknowledgements__REP="file:include/Acknowledgements class VistomsMixin(object): def vistoms_create(self, vistoms_dir, vistoms_version=None, mpg=None, function_order=None, reference_file=None, - compress=False, remove_after_compress=True, graph_id=None, use_png_figs=False, file_refs=None): + compress=False, remove_after_compress=True, graph_id=None, use_png_figs=False, file_refs=None, xml_file=None): """Function to create a new VISTOMS instance from a graph. :type self: KadmosGraph @@ -62,6 +62,8 @@ class VistomsMixin(object): :type use_png_figs: bool :param file_refs: setting to provide file references manually (to use VISTOMS on a server) :type file_refs: dict + :param xml_file: Name of the CMDOWS xml file + :type xml_file: file """ # Check inputs self._vistoms_assertions(mpg, function_order, reference_file, vistoms_version, graph_id) @@ -94,7 +96,7 @@ class VistomsMixin(object): # Determine graph data entry graph_entry = self._vispack_get_graph_data_entry(graph_id, mpg=mpg, order=function_order, - reference_file=reference_file) + reference_file=reference_file, xml_file=xml_file) # Put graph data entry in the data dictionary data['graphs'].append(graph_entry) @@ -146,7 +148,7 @@ class VistomsMixin(object): return def vistoms_add(self, vistoms_dir, mpg=None, function_order=None, reference_file=None, compress=False, - remove_after_compress=True, graph_id=None, replacement_id=None): + remove_after_compress=True, graph_id=None, replacement_id=None, xml_file=None): """Function to add a graph to a existing VISTOMS instance. In one VISTOMS instance different graphs can be shown. For example it is possible to include different @@ -166,6 +168,8 @@ class VistomsMixin(object): :type remove_after_compress: bool :param replacement_id: indentifier of the graph to be replaced :type replacement_id: basestr + :param xml_file: Name of the CMDOWS xml-file + :type xml_file: file """ # Check inputs @@ -207,7 +211,7 @@ class VistomsMixin(object): # Determine graph data entry graph_entry = self._vispack_get_graph_data_entry(graph_id, mpg=mpg, order=function_order, - reference_file=reference_file) + reference_file=reference_file, xml_file=xml_file) # Add graph_entry at the right location if replacement_id is None: @@ -255,7 +259,7 @@ class VistomsMixin(object): logger.warning('Both an FPG and order list are given. The FPG is used for the determination of the order.') assert isinstance(graph_id, basestring) or graph_id is None - def _vispack_get_graph_data_entry(self, graph_id, mpg=None, order=None, reference_file=None): + def _vispack_get_graph_data_entry(self, graph_id, mpg=None, order=None, reference_file=None, xml_file=None): """ Function to make the json files required to for the VISTOMS instance. @@ -266,6 +270,8 @@ class VistomsMixin(object): :type order: list, None :param reference_file: file from which reference values are extracted (either full path or file in same folder) :type reference_file: file + :param xml_file: Name of the CMDOWS xml-file + :type xml_file: file :return: dictionary entry with all graph data :rtype: dict """ @@ -473,7 +479,7 @@ class VistomsMixin(object): # Extend tools_data with tool outputs for input_tool in input_tools: if input_tool not in tools_data: - tools_data[input_tool] = dict(name=format_string_for_vistoms(input_tool), + tools_data[input_tool] = dict(name=input_tool, input=[], output=[key]) else: @@ -482,7 +488,7 @@ class VistomsMixin(object): for tool in full_graph['attributes']['tools']: if key in full_graph[tool]: if tool not in edge_bundles: - edge_bundles[tool] = dict(name=format_string_for_vistoms(tool), input=[], + edge_bundles[tool] = dict(name=tool, input=[], pipeline_data=dict()) # Add input tools edge_bundles[tool]['input'].extend(input_tools) @@ -494,7 +500,7 @@ class VistomsMixin(object): # Check if variable is also input to the coordinator if key in full_graph[coordinator_str]: if coordinator_str not in edge_bundles: - edge_bundles[coordinator_str] = dict(name=format_string_for_vistoms(coordinator_str), + edge_bundles[coordinator_str] = dict(name=coordinator_str, input=[], pipeline_data=dict()) # Add input tools to coordinator @@ -509,13 +515,13 @@ class VistomsMixin(object): if key is not 'attributes': if key is coordinator_str: if key not in tools_data: - tools_data[key] = dict(name=format_string_for_vistoms(key), input=full_graph[key], + tools_data[key] = dict(name=key, input=full_graph[key], output=[]) else: tools_data[key]['input'] = full_graph[key] elif self.node[key]['category'] == 'function': if key not in tools_data: - tools_data[key] = dict(name=format_string_for_vistoms(key), input=full_graph[key], + tools_data[key] = dict(name=key, input=full_graph[key], output=[]) else: tools_data[key]['input'] = full_graph[key] @@ -626,6 +632,7 @@ class VistomsMixin(object): # noinspection PyUnboundLocalVariable xdsm_dict['nodes'].append(dict(type=block_type, id=format_string_for_vistoms(block, prefix='id_'), + uID=block, name=format_string_for_vistoms(block), metadata=block_metadata)) @@ -634,24 +641,30 @@ class VistomsMixin(object): name_keyword = ' couplings' if item['name'] is coordinator_str: to_node_id = format_string_for_vistoms(coordinator_str, prefix='id_') + to_node_uID = coordinator_str name_keyword = ' outputs' else: to_node_id = format_string_for_vistoms(item['name'], prefix='id_') + to_node_uID = item['name'] for from_node in item['input']: if from_node is coordinator_str: from_node_id = format_string_for_vistoms(coordinator_str, prefix='id_') + from_node_uID = coordinator_str name_keyword = ' inputs' else: from_node_id = format_string_for_vistoms(from_node, prefix='id_') + from_node_uID = from_node if not to_node_id == from_node_id: # check to avoid showing circular couplings on top of the diagonal xdsm_dict['edges'].append({"to": to_node_id, "from": from_node_id, + "to_uID": to_node_uID, + "from_uID": from_node_uID, "name": ','.join(item['pipeline_data'][from_node]), "short_name": str(len(item['pipeline_data'][from_node])) + name_keyword}) # Add workflow if mpg: - xdsm_dict['workflow'] = mpg.get_process_list() + xdsm_dict['workflow'] = mpg.get_process_list(use_d3js_node_ids=True) else: xdsm_dict['workflow'] = [] diff --git a/kadmos/utilities/general.py b/kadmos/utilities/general.py index b07f2a86b456316f017e18509ab0af5e37729e1a..0af7b592bc067e69c25645513af81a2ea7744641 100644 --- a/kadmos/utilities/general.py +++ b/kadmos/utilities/general.py @@ -469,7 +469,7 @@ def format_string_for_vistoms(string, prefix='', suffix=''): :return: formatted string :rtype: basestring """ - replacement_list = ((' ', ''), ('_', ''), ('[', ''), (']', '')) + replacement_list = ((' ', ''), ('_', '-'), ('[', ''), (']', ''),('.','-')) for repl in replacement_list: string = string.replace(repl[0], repl[1]) return str(prefix) + string + str(suffix) @@ -690,3 +690,35 @@ def get_group_vars(sa, current_group_idx): return global_des_vars_group, local_des_vars_group, local_cnstrnt_vars_group, local_group_couplings_group, \ external_group_couplings_group + +def convert_bytes(num): + """ + this function will convert bytes to MB.... GB... etc + """ + for x in ['bytes', 'KB', 'MB', 'GB', 'TB']: + if num < 1024.0: + return "%3.1f %s" % (num, x) + num /= 1024.0 + + +def file_size(file_path): + """ + this function will return the file size + """ + if os.path.isfile(file_path): + file_info = os.stat(file_path) + return convert_bytes(file_info.st_size) + else: + raise IOError('Could not find file: {}'.format(file_path)) + + +def file_size_MB(file_path): + """ + this function will return the file size + """ + if os.path.isfile(file_path): + file_info = os.stat(file_path) + return file_info.st_size/1024.0/1024.0 + else: + raise IOError('Could not find file: {}'.format(file_path)) + diff --git a/setup.py b/setup.py index b3291e0bb98885d4a3a6a1dc560d93a4bde01588..5ac4d899bdaafe27de5960b9eca70dfdf42debf3 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages -version = '0.7.6' +version = '0.7.7' def readme(): @@ -36,7 +36,8 @@ setup(name='kadmos', 'matlab', 'networkx>=2.0', 'numpy', - 'progressbar2' + 'progressbar2', + 'deap' ], include_package_data=True, zip_safe=False)