<div class="section" id="variable-inheritance">
<span id="index-0"></span><span id="id1"></span>
<div class="line-block">
<div class="line">In the previous chapter, we saw how to define a <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a> for a <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-task"><em class="xref std std-term">task</em></a>.</div>
<div class="line">When all the tasks of the same <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-family"><em class="xref std std-term">family</em></a> share the same variable value,</div>
<div class="line">the value could be defined at the family level.</div>
<div class="line">This is termed <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable-inheritance"><em class="xref std std-term">variable inheritance</em></a></div>
</div>
<div class="line-block">
<div class="line">In the examples below the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a> could have been defined at the</div>
<div class="line">level of the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite"><em class="xref std std-term">suite</em></a>, achieving the same results.</div>
</div>
<div class="line-block">
<div class="line">Variables are inherited from the parent node.</div>
<div class="line">If a variable is redefined lower in the tree, it is said to be overridden.</div>
<div class="line">In this case the new definition is the one being used.</div>
<div class="line">It is possible to override generated variables.</div>
<div class="line">This is not recommended and you should understand all the consequences</div>
<div class="line">if you decide to do so.</div>
</div>
<div class="section" id="text">
<h2>Text<a class="headerlink" href="#text" title="Permalink to this headline">¶</a></h2>
<div class="highlight-python"><pre># Definition of the suite test.
suite test
edit ECF_INCLUDE "$HOME/course" # replace '$HOME' with the path to your home directory
edit ECF_HOME "$HOME/course"
family f1
edit SLEEP 20
task t1
task t2
endfamily
endsuite</pre>
</div>
</div>
<div class="section" id="python">
<h2>Python<a class="headerlink" href="#python" title="Permalink to this headline">¶</a></h2>
<div class="highlight-python"><div class="highlight"><pre><span class="c">#!/usr/bin/env python2.7</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">ecflow</span>
<span class="k">def</span> <span class="nf">create_family_f1</span><span class="p">():</span>
<span class="n">f1</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Family</span><span class="p">(</span><span class="s">"f1"</span><span class="p">)</span>
<span class="n">f1</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"SLEEP"</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
<span class="n">f1</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="s">"t1"</span><span class="p">)</span>
<span class="n">f1</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="s">"t2"</span><span class="p">)</span>
<span class="k">return</span> <span class="n">f1</span>
<span class="k">print</span> <span class="s">"Creating suite definition"</span>
<span class="n">defs</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Defs</span><span class="p">()</span>
<span class="n">suite</span> <span class="o">=</span> <span class="n">defs</span><span class="o">.</span><span class="n">add_suite</span><span class="p">(</span><span class="s">"test"</span><span class="p">)</span>
<span class="n">suite</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"ECF_INCLUDE"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">"HOME"</span><span class="p">)</span> <span class="o">+</span> <span class="s">"/course"</span><span class="p">)</span>
<span class="n">suite</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"ECF_HOME"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">"HOME"</span><span class="p">)</span> <span class="o">+</span> <span class="s">"/course"</span><span class="p">)</span>
<span class="n">suite</span><span class="o">.</span><span class="n">add_family</span><span class="p">(</span> <span class="n">create_family_f1</span><span class="p">()</span> <span class="p">)</span>
<span class="k">print</span> <span class="n">defs</span>
<span class="k">print</span> <span class="s">"Checking job creation: .ecf -> .job0"</span>
<span class="k">print</span> <span class="n">defs</span><span class="o">.</span><span class="n">check_job_creation</span><span class="p">()</span>
<span class="k">print</span> <span class="s">"Saving definition to file 'test.def'"</span>
<span class="n">defs</span><span class="o">.</span><span class="n">save_as_defs</span><span class="p">(</span><span class="s">"test.def"</span><span class="p">)</span>
</pre></div>
</div>
</div>
<div class="section" id="quiz">
<h2>Quiz<a class="headerlink" href="#quiz" title="Permalink to this headline">¶</a></h2>
<p>Let us have a quiz. Consider the following suite:</p>
<div class="highlight-python"><pre>suite test
edit SLEEP 100
family f1
edit SLEEP 80
task t1
task t2
edit SLEEP 9
family g1
edit SLEEP 89
task x1
edit SLEEP 10
task x2
endfamily
endfamily
family f2
task t1
task t2
edit SLEEP 77
family g2
task x1
edit SLEEP 12
task x2
endfamily
endfamily
endsuite</pre>
</div>
<p>Here is the value for SLEEP for the above suite. Make sure you understand this.</p>
<blockquote>
<div><table border="1" class="docutils">
<colgroup>
<col width="70%" />
<col width="30%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head"><a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-node"><em class="xref std std-term">node</em></a></th>
<th class="head">SLEEP</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>/test/f1/t1</td>
<td>80</td>
</tr>
<tr class="row-odd"><td>/test/f1/t2</td>
<td>9</td>
</tr>
<tr class="row-even"><td>/test/f1/g1/x1</td>
<td>10</td>
</tr>
<tr class="row-odd"><td>/test/f1/g1/x2</td>
<td>89</td>
</tr>
<tr class="row-even"><td>/test/f2/t1</td>
<td>100</td>
</tr>
<tr class="row-odd"><td>/test/f2/t2</td>
<td>77</td>
</tr>
<tr class="row-even"><td>/test/f2/g2/x1</td>
<td>12</td>
</tr>
<tr class="row-odd"><td>/test/f2/g2/x2</td>
<td>100</td>
</tr>
</tbody>
</table>
</div></blockquote>
</div>
</div>
|