Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
HTML


<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="highlight-python"><pre># Definition of the suite test.

suite test

   edit ECF_INCLUDE "$HOME/course"

   edit ECF_HOME    "$HOME/course"

   family f1

      edit SLEEP 20

      task t1

      task t2

   endfamily

endsuite</pre>

</div>

<p>Or in python:</p>

<div class="highlight-python"><div class="highlight"><pre><span class="c">#!/usr/bin/env python2.5</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">&quot;f1&quot;</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">&quot;SLEEP&quot;</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">&quot;t1&quot;</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">&quot;t2&quot;</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">f1</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="s">&quot;test.def&quot;</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">&quot;test&quot;</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">&quot;ECF_INCLUDE&quot;</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">&quot;HOME&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;/course&quot;</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">&quot;ECF_HOME   &quot;</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">&quot;HOME&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;/course&quot;</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>

</pre></div>

</div>

<div class="line-block">

<div class="line">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 level of the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite"><em class="xref std std-term">suite</em></a>,</div>

<div class="line">achieving the same results. 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>

<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>What is the value of the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a> SLEEP for:</p>

<blockquote>

<div><table border="1" class="docutils">

<colgroup>

<col width="70%" />

<col width="30%" />

</colgroup>

<thead valign="bottom">

<tr><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><td>test/f1/t1</td>

<td>?</td>

</tr>

<tr><td>/test/f1/t2</td>

<td>?</td>

</tr>

<tr><td>/test/f1/g1/x1</td>

<td>?</td>

</tr>

<tr><td>/test/f1/g1/x2</td>

<td>?</td>

</tr>

<tr><td>/test/f2/t1</td>

<td>?</td>

</tr>

<tr><td>/test/f2/t2</td>

<td>?</td>

</tr>

<tr><td>/test/f2/g2/x1</td>

<td>?</td>

</tr>

<tr><td>/test/f2/g2/x2</td>

<td>?</td>

</tr>

</tbody>

</table>

</div></blockquote>

</div>