source: sasview/_modules/sas/perspectives/invariant/invariant_state.html @ a462c6a

gh-pages
Last change on this file since a462c6a was a462c6a, checked in by ajj, 9 years ago

Rebuild to fix index and modules docs

  • Property mode set to 100644
File size: 139.4 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>sas.perspectives.invariant.invariant_state &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../../../index.html" />
28    <link rel="up" title="sas.perspectives.invariant" href="../invariant.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../../../index.html" >Module code</a> &raquo;</li>
42          <li><a href="../invariant.html" accesskey="U">sas.perspectives.invariant</a> &raquo;</li> 
43      </ul>
44    </div> 
45
46    <div class="document">
47      <div class="documentwrapper">
48        <div class="bodywrapper">
49          <div class="body">
50           
51  <h1>Source code for sas.perspectives.invariant.invariant_state</h1><div class="highlight"><pre>
52<span class="sd">&quot;&quot;&quot;</span>
53<span class="sd">&quot;&quot;&quot;</span>
54
55<span class="c">#import time</span>
56<span class="kn">import</span> <span class="nn">os</span>
57<span class="kn">import</span> <span class="nn">sys</span>
58<span class="kn">import</span> <span class="nn">logging</span>
59<span class="kn">import</span> <span class="nn">copy</span>
60<span class="kn">import</span> <span class="nn">sas.dataloader</span>
61<span class="c">#from xml.dom.minidom import parse</span>
62<span class="kn">from</span> <span class="nn">lxml</span> <span class="kn">import</span> <span class="n">etree</span>
63<span class="kn">from</span> <span class="nn">sas.dataloader.readers.cansas_reader</span> <span class="kn">import</span> <span class="n">Reader</span> <span class="k">as</span> <span class="n">CansasReader</span>
64<span class="kn">from</span> <span class="nn">sas.dataloader.readers.cansas_reader</span> <span class="kn">import</span> <span class="n">get_content</span>
65<span class="kn">from</span> <span class="nn">sas.guiframe.utils</span> <span class="kn">import</span> <span class="n">format_number</span>
66<span class="kn">from</span> <span class="nn">sas.guiframe.gui_style</span> <span class="kn">import</span> <span class="n">GUIFRAME_ID</span>
67<span class="kn">from</span> <span class="nn">sas.guiframe.dataFitting</span> <span class="kn">import</span> <span class="n">Data1D</span>
68
69<span class="n">INVNODE_NAME</span> <span class="o">=</span> <span class="s">&#39;invariant&#39;</span>
70<span class="n">CANSAS_NS</span> <span class="o">=</span> <span class="s">&quot;cansas1d/1.0&quot;</span>
71
72<span class="c"># default state</span>
73<span class="nb">list</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;file&#39;</span><span class="p">:</span> <span class="s">&#39;None&#39;</span><span class="p">,</span>
74        <span class="s">&#39;compute_num&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
75        <span class="s">&#39;state_num&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
76        <span class="s">&#39;is_time_machine&#39;</span><span class="p">:</span><span class="bp">False</span><span class="p">,</span>
77        <span class="s">&#39;background_tcl&#39;</span><span class="p">:</span><span class="mf">0.0</span><span class="p">,</span>
78        <span class="s">&#39;scale_tcl&#39;</span><span class="p">:</span><span class="mf">1.0</span><span class="p">,</span>
79        <span class="s">&#39;contrast_tcl&#39;</span><span class="p">:</span><span class="mf">1.0</span><span class="p">,</span>
80        <span class="s">&#39;porod_constant_tcl&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
81        <span class="s">&#39;npts_low_tcl&#39;</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span>
82        <span class="s">&#39;npts_high_tcl&#39;</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span>
83        <span class="s">&#39;power_high_tcl&#39;</span><span class="p">:</span><span class="mf">4.0</span><span class="p">,</span>
84        <span class="s">&#39;power_low_tcl&#39;</span><span class="p">:</span> <span class="mf">4.0</span><span class="p">,</span>
85        <span class="s">&#39;enable_high_cbox&#39;</span><span class="p">:</span><span class="bp">False</span><span class="p">,</span>
86        <span class="s">&#39;enable_low_cbox&#39;</span><span class="p">:</span><span class="bp">False</span><span class="p">,</span>
87        <span class="s">&#39;guinier&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
88        <span class="s">&#39;power_law_high&#39;</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
89        <span class="s">&#39;power_law_low&#39;</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
90        <span class="s">&#39;fit_enable_high&#39;</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
91        <span class="s">&#39;fit_enable_low&#39;</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
92        <span class="s">&#39;fix_enable_high&#39;</span><span class="p">:</span><span class="bp">True</span><span class="p">,</span>
93        <span class="s">&#39;fix_enable_low&#39;</span><span class="p">:</span><span class="bp">True</span><span class="p">,</span>
94        <span class="s">&#39;volume_tcl&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
95        <span class="s">&#39;volume_err_tcl&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
96        <span class="s">&#39;surface_tcl&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
97        <span class="s">&#39;surface_err_tcl&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">}</span>
98<span class="c"># list of states: This list will be filled as panel </span>
99<span class="c"># init and the number of states increases</span>
100<span class="n">state_list</span> <span class="o">=</span> <span class="p">{}</span>
101<span class="n">bookmark_list</span> <span class="o">=</span> <span class="p">{}</span>
102<span class="c"># list of input parameters (will be filled up on panel init) used by __str__ </span>
103<span class="n">input_list</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;background_tcl&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
104        <span class="s">&#39;scale_tcl&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
105        <span class="s">&#39;contrast_tcl&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
106        <span class="s">&#39;porod_constant_tcl&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
107        <span class="s">&#39;npts_low_tcl&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
108        <span class="s">&#39;npts_high_tcl&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
109        <span class="s">&#39;power_high_tcl&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
110        <span class="s">&#39;power_low_tcl&#39;</span><span class="p">:</span> <span class="mi">0</span><span class="p">}</span> 
111<span class="c"># list of output parameters (order sensitive) used by __str__    </span>
112<span class="n">output_list</span> <span class="o">=</span> <span class="p">[[</span><span class="s">&quot;qstar_low&quot;</span><span class="p">,</span>      <span class="s">&quot;Q* from low Q extrapolation [1/(cm*A)]&quot;</span><span class="p">],</span>
113               <span class="p">[</span><span class="s">&quot;qstar_low_err&quot;</span><span class="p">,</span>             <span class="s">&quot;dQ* from low Q extrapolation&quot;</span><span class="p">],</span>
114               <span class="p">[</span><span class="s">&quot;qstar_low_percent&quot;</span><span class="p">,</span>  <span class="s">&quot;Q* percent from low Q extrapolation&quot;</span><span class="p">],</span>
115               <span class="p">[</span><span class="s">&quot;qstar&quot;</span><span class="p">,</span>              <span class="s">&quot;Q* from data [1/(cm*A)]&quot;</span><span class="p">],</span>
116               <span class="p">[</span><span class="s">&quot;qstar_err&quot;</span><span class="p">,</span>                                <span class="s">&quot;dQ* from data&quot;</span><span class="p">],</span>
117               <span class="p">[</span><span class="s">&quot;qstar_percent&quot;</span><span class="p">,</span>                     <span class="s">&quot;Q* percent from data&quot;</span><span class="p">],</span>
118               <span class="p">[</span><span class="s">&quot;qstar_high&quot;</span><span class="p">,</span>    <span class="s">&quot;Q* from high Q extrapolation [1/(cm*A)]&quot;</span><span class="p">],</span>
119               <span class="p">[</span><span class="s">&quot;qstar_high_err&quot;</span><span class="p">,</span>           <span class="s">&quot;dQ* from high Q extrapolation&quot;</span><span class="p">],</span>
120               <span class="p">[</span><span class="s">&quot;qstar_high_percent&quot;</span><span class="p">,</span> <span class="s">&quot;Q* percent from low Q extrapolation&quot;</span><span class="p">],</span>
121               <span class="p">[</span><span class="s">&quot;qstar_total&quot;</span><span class="p">,</span>         <span class="s">&quot;total Q* [1/(cm*A)]&quot;</span><span class="p">],</span>
122               <span class="p">[</span><span class="s">&quot;qstar_total_err&quot;</span><span class="p">,</span>                              <span class="s">&quot;total dQ*&quot;</span><span class="p">],</span>
123               <span class="p">[</span><span class="s">&quot;volume&quot;</span><span class="p">,</span>                                 <span class="s">&quot;volume fraction&quot;</span><span class="p">],</span>
124               <span class="p">[</span><span class="s">&quot;volume_err&quot;</span><span class="p">,</span>                       <span class="s">&quot;volume fraction error&quot;</span><span class="p">],</span>
125               <span class="p">[</span><span class="s">&quot;surface&quot;</span><span class="p">,</span>                               <span class="s">&quot;specific surface&quot;</span><span class="p">],</span>
126               <span class="p">[</span><span class="s">&quot;surface_err&quot;</span><span class="p">,</span>                     <span class="s">&quot;specific surface error&quot;</span><span class="p">]]</span>
127
128   
129
130<div class="viewcode-block" id="InvariantState"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.InvariantState">[docs]</a><span class="k">class</span> <span class="nc">InvariantState</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
131    <span class="sd">&quot;&quot;&quot;</span>
132<span class="sd">    Class to hold the state information of the InversionControl panel.</span>
133<span class="sd">    &quot;&quot;&quot;</span>
134    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
135        <span class="sd">&quot;&quot;&quot;</span>
136<span class="sd">        Default values</span>
137<span class="sd">        &quot;&quot;&quot;</span>
138        <span class="c"># Input </span>
139        <span class="bp">self</span><span class="o">.</span><span class="n">file</span>  <span class="o">=</span> <span class="bp">None</span>
140        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="p">[],</span> <span class="n">y</span><span class="o">=</span><span class="p">[],</span> <span class="n">dx</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">dy</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
141        <span class="bp">self</span><span class="o">.</span><span class="n">theory_lowQ</span> <span class="o">=</span>  <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="p">[],</span> <span class="n">y</span><span class="o">=</span><span class="p">[],</span> <span class="n">dy</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
142        <span class="bp">self</span><span class="o">.</span><span class="n">theory_lowQ</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
143        <span class="bp">self</span><span class="o">.</span><span class="n">theory_highQ</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="p">[],</span> <span class="n">y</span><span class="o">=</span><span class="p">[],</span> <span class="n">dy</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
144        <span class="bp">self</span><span class="o">.</span><span class="n">theory_highQ</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
145        <span class="c">#self.is_time_machine = False</span>
146        <span class="bp">self</span><span class="o">.</span><span class="n">saved_state</span> <span class="o">=</span> <span class="nb">list</span>
147        <span class="bp">self</span><span class="o">.</span><span class="n">state_list</span> <span class="o">=</span> <span class="n">state_list</span>
148        <span class="bp">self</span><span class="o">.</span><span class="n">bookmark_list</span> <span class="o">=</span> <span class="n">bookmark_list</span>
149        <span class="bp">self</span><span class="o">.</span><span class="n">input_list</span> <span class="o">=</span> <span class="n">input_list</span>
150        <span class="bp">self</span><span class="o">.</span><span class="n">output_list</span> <span class="o">=</span> <span class="n">output_list</span>
151       
152        <span class="bp">self</span><span class="o">.</span><span class="n">compute_num</span> <span class="o">=</span> <span class="mi">0</span>
153        <span class="bp">self</span><span class="o">.</span><span class="n">state_num</span> <span class="o">=</span> <span class="mi">0</span>
154        <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;00:00:00&#39;</span><span class="p">,</span> <span class="s">&#39;00/00/0000&#39;</span><span class="p">)</span>
155        <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="bp">None</span>
156        <span class="c">#plot image</span>
157        <span class="bp">self</span><span class="o">.</span><span class="n">wximbmp</span> <span class="o">=</span> <span class="bp">None</span>
158        <span class="c"># report_html strings</span>
159        <span class="kn">import</span> <span class="nn">sas.perspectives.invariant</span> <span class="kn">as</span> <span class="nn">invariant</span>
160        <span class="n">path</span> <span class="o">=</span> <span class="n">invariant</span><span class="o">.</span><span class="n">get_data_path</span><span class="p">(</span><span class="n">media</span><span class="o">=</span><span class="s">&#39;media&#39;</span><span class="p">)</span>
161        <span class="n">path_report_html</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="s">&quot;report_template.html&quot;</span><span class="p">)</span>
162        <span class="n">html_template</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path_report_html</span><span class="p">,</span><span class="s">&quot;r&quot;</span><span class="p">)</span>
163        <span class="bp">self</span><span class="o">.</span><span class="n">template_str</span> <span class="o">=</span> <span class="n">html_template</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
164        <span class="bp">self</span><span class="o">.</span><span class="n">report_str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">template_str</span>
165        <span class="c">#self.report_str_save = None</span>
166        <span class="n">html_template</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
167       
168    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
169        <span class="sd">&quot;&quot;&quot;</span>
170<span class="sd">        Pretty print</span>
171<span class="sd">            </span>
172<span class="sd">        : return: string representing the state</span>
173<span class="sd">        &quot;&quot;&quot;</span>
174        <span class="c"># Input string</span>
175        <span class="n">compute_num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">saved_state</span><span class="p">[</span><span class="s">&#39;compute_num&#39;</span><span class="p">]</span>
176        <span class="n">compute_state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">state_list</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">compute_num</span><span class="p">)]</span>
177        <span class="n">my_time</span><span class="p">,</span> <span class="n">date</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span>
178        <span class="n">file_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span>
179
180        <span class="n">state_num</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">saved_state</span><span class="p">[</span><span class="s">&#39;state_num&#39;</span><span class="p">])</span>
181        <span class="n">state</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">[Invariant computation for </span><span class="si">%s</span><span class="s">: &quot;</span> <span class="o">%</span> <span class="n">file_name</span>
182        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;performed at </span><span class="si">%s</span><span class="s"> on </span><span class="si">%s</span><span class="s">] </span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">my_time</span><span class="p">,</span> <span class="n">date</span><span class="p">)</span>
183        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;State No.: </span><span class="si">%d</span><span class="s"> </span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">state_num</span>
184        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">=== Inputs ===</span><span class="se">\n</span><span class="s">&quot;</span>
185       
186        <span class="c"># text ctl general inputs ( excluding extrapolation text ctl)</span>
187        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_list</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span> 
188            <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
189                <span class="k">continue</span>
190            <span class="n">key_split</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;_&#39;</span><span class="p">)</span> 
191            <span class="n">max_ind</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">key_split</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span>
192            <span class="k">if</span> <span class="n">key_split</span><span class="p">[</span><span class="n">max_ind</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;tcl&#39;</span><span class="p">:</span> 
193                <span class="n">name</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
194                <span class="k">if</span> <span class="n">key_split</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;low&#39;</span> <span class="ow">or</span> <span class="n">key_split</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;high&#39;</span><span class="p">:</span>
195                    <span class="k">continue</span>
196                <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">max_ind</span><span class="p">):</span>
197                    <span class="n">name</span> <span class="o">+=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">key_split</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span>
198                <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">:   </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">),</span> <span class="n">value</span><span class="p">)</span>
199               
200        <span class="c"># other input parameters       </span>
201        <span class="n">extra_lo</span> <span class="o">=</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;enable_low_cbox&#39;</span><span class="p">]</span>
202        <span class="k">if</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;enable_low_cbox&#39;</span><span class="p">]:</span>
203            <span class="k">if</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;guinier&#39;</span><span class="p">]:</span>
204                <span class="n">extra_lo</span> <span class="o">=</span> <span class="s">&#39;Guinier&#39;</span>
205            <span class="k">else</span><span class="p">:</span>
206                <span class="n">extra_lo</span> <span class="o">=</span> <span class="s">&#39;Power law&#39;</span>
207        <span class="n">extra_hi</span> <span class="o">=</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;enable_high_cbox&#39;</span><span class="p">]</span>
208        <span class="k">if</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;enable_high_cbox&#39;</span><span class="p">]:</span>
209            <span class="n">extra_hi</span> <span class="o">=</span> <span class="s">&#39;Power law&#39;</span>
210        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">Extrapolation:  High=</span><span class="si">%s</span><span class="s">; Low=</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">extra_hi</span><span class="p">,</span> <span class="n">extra_lo</span><span class="p">)</span>   
211        <span class="n">low_off</span> <span class="o">=</span> <span class="bp">False</span>
212        <span class="n">high_off</span> <span class="o">=</span> <span class="bp">False</span>
213        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_list</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span> 
214            <span class="n">key_split</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;_&#39;</span><span class="p">)</span> 
215            <span class="n">max_ind</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">key_split</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>   
216            <span class="k">if</span> <span class="n">key_split</span><span class="p">[</span><span class="n">max_ind</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;tcl&#39;</span><span class="p">:</span> 
217                <span class="n">name</span> <span class="o">=</span> <span class="s">&quot;&quot;</span> 
218                <span class="c"># check each buttons whether or not ON or OFF</span>
219                <span class="k">if</span> <span class="n">key_split</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;low&#39;</span> <span class="ow">or</span> <span class="n">key_split</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;high&#39;</span><span class="p">:</span>
220                    <span class="k">if</span> <span class="ow">not</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;enable_low_cbox&#39;</span><span class="p">]</span> <span class="ow">and</span> \
221                        <span class="n">key_split</span><span class="p">[</span><span class="n">max_ind</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;low&#39;</span><span class="p">:</span>
222                        <span class="n">low_off</span> <span class="o">=</span> <span class="bp">True</span>
223                        <span class="k">continue</span>             
224                    <span class="k">elif</span> <span class="ow">not</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;enable_high_cbox&#39;</span><span class="p">]</span> <span class="ow">and</span> \
225                        <span class="n">key_split</span><span class="p">[</span><span class="n">max_ind</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;high&#39;</span><span class="p">:</span>
226                        <span class="n">high_off</span> <span class="o">=</span> <span class="bp">True</span>
227                        <span class="k">continue</span>
228                    <span class="k">elif</span> <span class="n">extra_lo</span> <span class="o">==</span> <span class="s">&#39;Guinier&#39;</span> <span class="ow">and</span> <span class="n">key_split</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;power&#39;</span> <span class="ow">and</span> \
229                        <span class="n">key_split</span><span class="p">[</span><span class="n">max_ind</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;low&#39;</span><span class="p">:</span>
230                        <span class="k">continue</span>
231                    <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">max_ind</span><span class="p">):</span>
232                        <span class="n">name</span> <span class="o">+=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">key_split</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span>
233                    <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)</span>
234                    <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&quot;power low&quot;</span> <span class="p">:</span>
235                        <span class="k">if</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;fix_enable_low&#39;</span><span class="p">]:</span>
236                            <span class="n">name</span> <span class="o">+=</span> <span class="s">&#39; (Fixed)&#39;</span>
237                        <span class="k">else</span><span class="p">:</span>
238                            <span class="n">name</span> <span class="o">+=</span> <span class="s">&#39; (Fitted)&#39;</span>
239                    <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&quot;power high&quot;</span> <span class="p">:</span>
240                        <span class="k">if</span> <span class="n">compute_state</span><span class="p">[</span><span class="s">&#39;fix_enable_high&#39;</span><span class="p">]:</span>
241                            <span class="n">name</span> <span class="o">+=</span> <span class="s">&#39; (Fixed)&#39;</span>
242                        <span class="k">else</span><span class="p">:</span>
243                            <span class="n">name</span> <span class="o">+=</span> <span class="s">&#39; (Fitted)&#39;</span>
244                    <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">:   </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
245        <span class="c"># Outputs</span>
246        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">=== Outputs ===&quot;</span>
247        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">output_list</span><span class="p">:</span>
248            <span class="n">item_split</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;_&#39;</span><span class="p">)</span> 
249            <span class="c"># Exclude the extrapolation that turned off</span>
250            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">item_split</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
251                <span class="k">if</span> <span class="n">low_off</span> <span class="ow">and</span> <span class="n">item_split</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;low&#39;</span><span class="p">:</span>
252                    <span class="k">continue</span>
253                <span class="k">if</span> <span class="n">high_off</span> <span class="ow">and</span> <span class="n">item_split</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;high&#39;</span><span class="p">:</span>
254                    <span class="k">continue</span>
255            <span class="n">max_ind</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">item_split</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
256            <span class="n">value</span> <span class="o">=</span> <span class="bp">None</span>
257            <span class="k">try</span><span class="p">:</span>
258                <span class="c"># Q* outputs</span>
259                <span class="k">exec</span> <span class="s">&quot;value = self.container.</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
260            <span class="k">except</span><span class="p">:</span>
261                <span class="c"># other outputs than Q*</span>
262                <span class="n">name</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">&quot;_tcl&quot;</span>
263                <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">saved_state</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
264                    <span class="k">exec</span> <span class="s">&quot;value = self.saved_state[&#39;</span><span class="si">%s</span><span class="s">&#39;]&quot;</span> <span class="o">%</span> <span class="n">name</span>
265               
266            <span class="c"># Exclude the outputs w/&#39;&#39;    </span>
267            <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
268                <span class="k">continue</span>   
269            <span class="c"># Error outputs</span>
270            <span class="k">if</span> <span class="n">item_split</span><span class="p">[</span><span class="n">max_ind</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;err&#39;</span><span class="p">:</span>
271                <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;+- </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">format_number</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
272            <span class="c"># Percentage outputs</span>
273            <span class="k">elif</span> <span class="n">item_split</span><span class="p">[</span><span class="n">max_ind</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;percent&#39;</span><span class="p">:</span>
274                <span class="k">try</span><span class="p">:</span>
275                    <span class="n">value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span>
276                <span class="k">except</span><span class="p">:</span>
277                    <span class="k">pass</span>
278                <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;(</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">format_number</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="s">&#39;%&#39;</span><span class="p">)</span>
279            <span class="c"># Outputs</span>
280            <span class="k">else</span><span class="p">:</span>
281                <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="si">%s</span><span class="s">:   </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> 
282                                        <span class="n">format_number</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
283        <span class="c"># Include warning msg</span>
284        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
285            <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n\n</span><span class="s">Note:</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">warning_msg</span>
286        <span class="k">return</span> <span class="n">state</span>
287
288<div class="viewcode-block" id="InvariantState.clone_state"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.InvariantState.clone_state">[docs]</a>    <span class="k">def</span> <span class="nf">clone_state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
289        <span class="sd">&quot;&quot;&quot;</span>
290<span class="sd">        deepcopy the state</span>
291<span class="sd">        &quot;&quot;&quot;</span>
292        <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">saved_state</span><span class="p">)</span>
293</div>
294<div class="viewcode-block" id="InvariantState.toXML"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.InvariantState.toXML">[docs]</a>    <span class="k">def</span> <span class="nf">toXML</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">file</span><span class="o">=</span><span class="s">&quot;inv_state.inv&quot;</span><span class="p">,</span> <span class="n">doc</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">entry_node</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
295        <span class="sd">&quot;&quot;&quot;</span>
296<span class="sd">        Writes the state of the InversionControl panel to file, as XML.</span>
297<span class="sd">        </span>
298<span class="sd">        Compatible with standalone writing, or appending to an</span>
299<span class="sd">        already existing XML document. In that case, the XML document</span>
300<span class="sd">        is required. An optional entry node in the XML document </span>
301<span class="sd">        may also be given.</span>
302<span class="sd">        </span>
303<span class="sd">        : param file: file to write to</span>
304<span class="sd">        : param doc: XML document object [optional]</span>
305<span class="sd">        : param entry_node: XML node within the XML document at which we will append the data [optional]</span>
306<span class="sd">        &quot;&quot;&quot;</span>
307        <span class="c"># TODO: Get this to work</span>
308        <span class="kn">from</span> <span class="nn">xml.dom.minidom</span> <span class="kn">import</span> <span class="n">getDOMImplementation</span>
309        <span class="kn">import</span> <span class="nn">time</span>
310        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
311        <span class="c"># Check whether we have to write a standalone XML file</span>
312        <span class="k">if</span> <span class="n">doc</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
313            <span class="n">impl</span> <span class="o">=</span> <span class="n">getDOMImplementation</span><span class="p">()</span>
314       
315            <span class="n">doc_type</span> <span class="o">=</span> <span class="n">impl</span><span class="o">.</span><span class="n">createDocumentType</span><span class="p">(</span><span class="n">INVNODE_NAME</span><span class="p">,</span> <span class="s">&quot;1.0&quot;</span><span class="p">,</span> <span class="s">&quot;1.0&quot;</span><span class="p">)</span>     
316       
317            <span class="n">newdoc</span> <span class="o">=</span> <span class="n">impl</span><span class="o">.</span><span class="n">createDocument</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">INVNODE_NAME</span><span class="p">,</span> <span class="n">doc_type</span><span class="p">)</span>
318            <span class="n">top_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">documentElement</span>
319        <span class="k">else</span><span class="p">:</span>
320            <span class="c"># We are appending to an existing document</span>
321            <span class="n">newdoc</span> <span class="o">=</span> <span class="n">doc</span>
322            <span class="n">top_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="n">INVNODE_NAME</span><span class="p">)</span>
323            <span class="k">if</span> <span class="n">entry_node</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
324                <span class="n">newdoc</span><span class="o">.</span><span class="n">documentElement</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">top_element</span><span class="p">)</span>
325            <span class="k">else</span><span class="p">:</span>
326                <span class="n">entry_node</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">top_element</span><span class="p">)</span>
327               
328        <span class="n">attr</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createAttribute</span><span class="p">(</span><span class="s">&quot;version&quot;</span><span class="p">)</span>
329        <span class="n">attr</span><span class="o">.</span><span class="n">nodeValue</span> <span class="o">=</span> <span class="s">&#39;1.0&#39;</span>
330        <span class="n">top_element</span><span class="o">.</span><span class="n">setAttributeNode</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
331       
332        <span class="c"># File name</span>
333        <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;filename&quot;</span><span class="p">)</span>
334        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="o">!=</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="o">!=</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
335            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="p">)))</span>
336        <span class="k">else</span><span class="p">:</span>
337            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="nb">file</span><span class="p">)))</span>
338        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
339       
340        <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;timestamp&quot;</span><span class="p">)</span>
341        <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">ctime</span><span class="p">(</span><span class="n">timestamp</span><span class="p">)))</span>
342        <span class="n">attr</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createAttribute</span><span class="p">(</span><span class="s">&quot;epoch&quot;</span><span class="p">)</span>
343        <span class="n">attr</span><span class="o">.</span><span class="n">nodeValue</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">timestamp</span><span class="p">)</span>
344        <span class="n">element</span><span class="o">.</span><span class="n">setAttributeNode</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
345        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
346       
347        <span class="c"># Current state</span>
348        <span class="n">state</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;state&quot;</span><span class="p">)</span>
349        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
350       
351        <span class="k">for</span> <span class="n">name</span><span class="p">,</span><span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">saved_state</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
352            <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
353            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
354            <span class="n">state</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
355             
356        <span class="c"># State history list</span>
357        <span class="n">history</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;history&quot;</span><span class="p">)</span>
358        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">history</span><span class="p">)</span>
359       
360        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">state_list</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
361            <span class="n">history_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&#39;state_&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
362            <span class="k">for</span> <span class="n">state_name</span><span class="p">,</span><span class="n">state_value</span> <span class="ow">in</span> <span class="n">value</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
363                <span class="n">state_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">state_name</span><span class="p">))</span>
364                <span class="n">child</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">state_value</span><span class="p">))</span>
365                <span class="n">state_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
366                <span class="n">history_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">state_element</span><span class="p">)</span>
367            <span class="c">#history_element.appendChild(state_list_element)</span>
368            <span class="n">history</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">history_element</span><span class="p">)</span>
369
370        <span class="c"># Bookmarks  bookmark_list[self.bookmark_num] = [\</span>
371        <span class="c">#my_time,date,state,comp_state]</span>
372        <span class="n">bookmark</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;bookmark&quot;</span><span class="p">)</span>
373        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">bookmark</span><span class="p">)</span>
374        <span class="n">item_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;time&#39;</span><span class="p">,</span><span class="s">&#39;date&#39;</span><span class="p">,</span><span class="s">&#39;state&#39;</span><span class="p">,</span><span class="s">&#39;comp_state&#39;</span><span class="p">]</span>
375        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value_list</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bookmark_list</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
376            <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&#39;mark_&#39;</span><span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
377            <span class="n">_</span><span class="p">,</span><span class="n">date</span><span class="p">,</span><span class="n">state</span><span class="p">,</span><span class="n">comp_state</span> <span class="o">=</span> <span class="n">value_list</span>
378            <span class="n">time_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&#39;time&#39;</span><span class="p">)</span>
379            <span class="n">time_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])))</span>
380            <span class="n">date_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&#39;date&#39;</span><span class="p">)</span>
381            <span class="n">date_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value_list</span><span class="p">[</span><span class="mi">1</span><span class="p">])))</span>
382            <span class="n">state_list_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&#39;state&#39;</span><span class="p">)</span>
383            <span class="n">comp_state_list_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&#39;comp_state&#39;</span><span class="p">)</span>
384            <span class="k">for</span> <span class="n">state_name</span><span class="p">,</span> <span class="n">state_value</span> <span class="ow">in</span> <span class="n">value_list</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
385                <span class="n">state_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">state_name</span><span class="p">))</span>
386                <span class="n">child</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">state_value</span><span class="p">))</span>
387                <span class="n">state_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
388                <span class="n">state_list_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">state_element</span><span class="p">)</span>
389            <span class="k">for</span> <span class="n">comp_name</span><span class="p">,</span> <span class="n">comp_value</span> <span class="ow">in</span> <span class="n">value_list</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
390                <span class="n">comp_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">comp_name</span><span class="p">))</span>
391                <span class="n">comp_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">comp_value</span><span class="p">)))</span>
392                <span class="n">comp_state_list_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">comp_element</span><span class="p">)</span>
393            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">time_element</span><span class="p">)</span>
394            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">date_element</span><span class="p">)</span>
395            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">state_list_element</span><span class="p">)</span>
396            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">comp_state_list_element</span><span class="p">)</span>
397            <span class="n">bookmark</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
398
399        <span class="c"># Save the file</span>
400        <span class="k">if</span> <span class="n">doc</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
401            <span class="n">fd</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&#39;test000&#39;</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
402            <span class="n">fd</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">toprettyxml</span><span class="p">())</span>
403            <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
404            <span class="k">return</span> <span class="bp">None</span>
405        <span class="k">else</span><span class="p">:</span>
406            <span class="k">return</span> <span class="n">newdoc</span>
407        </div>
408<div class="viewcode-block" id="InvariantState.fromXML"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.InvariantState.fromXML">[docs]</a>    <span class="k">def</span> <span class="nf">fromXML</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">file</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">node</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
409        <span class="sd">&quot;&quot;&quot;</span>
410<span class="sd">        Load invariant states from a file</span>
411<span class="sd">            </span>
412<span class="sd">        : param file: .inv file</span>
413<span class="sd">        : param node: node of a XML document to read from       </span>
414<span class="sd">        &quot;&quot;&quot;</span>
415        <span class="k">if</span> <span class="nb">file</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
416            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;InvariantSate no longer supports non-CanSAS&quot;</span>
417            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; format for invariant files&quot;</span>
418            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
419       
420        <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span>\
421            <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&#39;1.0&#39;</span><span class="p">:</span>
422
423            <span class="c"># Get file name</span>
424            <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:filename&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
425            <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
426                <span class="n">file_name</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
427
428            <span class="c"># Get time stamp</span>
429            <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:timestamp&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
430            <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">entry</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;epoch&#39;</span><span class="p">):</span>
431                <span class="k">try</span><span class="p">:</span>
432                    <span class="n">timestamp</span> <span class="o">=</span> <span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;epoch&#39;</span><span class="p">))</span>
433                <span class="k">except</span><span class="p">:</span>
434                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;InvariantSate.fromXML: Could not read&quot;</span>
435                    <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; timestamp</span><span class="se">\n</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span>
436                    <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
437           
438            <span class="c"># Parse bookmarks</span>
439            <span class="n">entry_bookmark</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:bookmark&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
440
441            <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">entry_bookmark</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
442                <span class="n">temp_state</span> <span class="o">=</span> <span class="p">{}</span>
443                <span class="n">temp_bookmark</span> <span class="o">=</span> <span class="p">{}</span>
444                <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:mark_</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">ind</span><span class="p">,</span> <span class="n">entry_bookmark</span><span class="p">)</span> 
445                               
446                <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
447                    <span class="n">my_time</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:time&#39;</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
448                    <span class="n">val_time</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">my_time</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
449                    <span class="n">date</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:date&#39;</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
450                    <span class="n">val_date</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
451                    <span class="n">state_entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:state&#39;</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
452                    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">:</span>
453
454                        <span class="n">input_field</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">item</span><span class="p">,</span> <span class="n">state_entry</span><span class="p">)</span>
455                        <span class="n">val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">input_field</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
456                        <span class="k">if</span> <span class="n">input_field</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
457                            <span class="k">try</span><span class="p">:</span>
458                                <span class="k">exec</span> <span class="s">&quot;temp_state[&#39;</span><span class="si">%s</span><span class="s">&#39;] = </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>     
459                            <span class="k">except</span><span class="p">:</span>
460                                <span class="k">exec</span> <span class="s">&quot;temp_state[&#39;</span><span class="si">%s</span><span class="s">&#39;] = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
461                    <span class="n">comp_entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:comp_state&#39;</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
462                   
463                    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">:</span>
464                        <span class="n">input_field</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">item</span><span class="p">,</span> <span class="n">comp_entry</span><span class="p">)</span>
465                        <span class="n">val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">input_field</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
466                        <span class="k">if</span> <span class="n">input_field</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
467                            <span class="k">try</span><span class="p">:</span>
468                                <span class="k">exec</span> <span class="s">&quot;temp_bookmark[&#39;</span><span class="si">%s</span><span class="s">&#39;] = </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>     
469                            <span class="k">except</span><span class="p">:</span>
470                                <span class="k">exec</span> <span class="s">&quot;temp_bookmark[&#39;</span><span class="si">%s</span><span class="s">&#39;] = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
471                    <span class="k">try</span><span class="p">:</span>
472                        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;self.bookmark_list[</span><span class="si">%s</span><span class="s">] = [val_time,&quot;</span>
473                        <span class="n">cmd</span> <span class="o">+=</span> <span class="s">&quot;val_date,temp_state,temp_bookmark]&quot;</span>
474                        <span class="k">exec</span> <span class="n">cmd</span> <span class="o">%</span> <span class="n">ind</span>
475                    <span class="k">except</span><span class="p">:</span>
476                        <span class="k">raise</span> <span class="s">&quot;missing components of bookmarks...&quot;</span>
477            <span class="c"># Parse histories</span>
478            <span class="n">entry_history</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:history&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
479
480            <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">entry_history</span><span class="p">)):</span>
481                <span class="n">temp_state</span> <span class="o">=</span> <span class="p">{}</span>
482                <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:state_</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">ind</span><span class="p">,</span> <span class="n">entry_history</span><span class="p">)</span> 
483
484                <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
485                    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">:</span>
486                        <span class="n">input_field</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">item</span><span class="p">,</span> <span class="n">entry</span> <span class="p">)</span>
487                        <span class="n">val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">input_field</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
488
489                        <span class="k">if</span> <span class="n">input_field</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
490                            <span class="k">try</span><span class="p">:</span>
491                                <span class="k">exec</span> <span class="s">&quot;temp_state[&#39;</span><span class="si">%s</span><span class="s">&#39;] = </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>         
492                            <span class="k">except</span><span class="p">:</span>
493                                <span class="k">exec</span> <span class="s">&quot;temp_state[&#39;</span><span class="si">%s</span><span class="s">&#39;] = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
494                            <span class="k">finally</span><span class="p">:</span>
495                                <span class="k">exec</span> <span class="s">&quot;self.state_list[&#39;</span><span class="si">%s</span><span class="s">&#39;] = temp_state&quot;</span> <span class="o">%</span> <span class="n">ind</span> 
496            <span class="c"># Parse current state (ie, saved_state)</span>
497            <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:state&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>           
498            <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
499                <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">:</span>
500                    <span class="n">input_field</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">item</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
501                    <span class="n">val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">input_field</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
502                    <span class="k">if</span> <span class="n">input_field</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
503                        <span class="bp">self</span><span class="o">.</span><span class="n">set_saved_state</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">item</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">val</span><span class="p">)</span>
504            <span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="o">=</span> <span class="n">file_name</span>
505            </div>
506<div class="viewcode-block" id="InvariantState.set_report_string"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.InvariantState.set_report_string">[docs]</a>    <span class="k">def</span> <span class="nf">set_report_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
507        <span class="sd">&quot;&quot;&quot;</span>
508<span class="sd">        Get the values (strings) from __str__ for report </span>
509<span class="sd">        &quot;&quot;&quot;</span>
510        <span class="n">strings</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__str__</span><span class="p">()</span>
511   
512        <span class="c"># default string values</span>
513        <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">19</span><span class="p">):</span>
514            <span class="k">exec</span> <span class="s">&quot;s_</span><span class="si">%s</span><span class="s"> = &#39;NA&#39;&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>
515        <span class="n">lines</span> <span class="o">=</span> <span class="n">strings</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
516        <span class="c"># get all string values from __str__()</span>
517        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)):</span>
518            <span class="k">if</span> <span class="n">line</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
519                <span class="n">s_1</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
520            <span class="k">elif</span> <span class="n">line</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
521                <span class="n">s_2</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
522            <span class="k">else</span><span class="p">:</span>
523                <span class="n">item</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="n">line</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;:&#39;</span><span class="p">)</span>
524                <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
525                <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;scale&quot;</span><span class="p">:</span>
526                    <span class="n">s_3</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
527                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;porod constant&quot;</span><span class="p">:</span>
528                    <span class="n">s_4</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
529                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;background&quot;</span><span class="p">:</span>
530                    <span class="n">s_5</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
531                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;contrast&quot;</span><span class="p">:</span>
532                    <span class="n">s_6</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
533                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;Extrapolation&quot;</span><span class="p">:</span>
534                    <span class="n">extra</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)</span>
535                    <span class="n">bool_0</span> <span class="o">=</span> <span class="n">extra</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
536                    <span class="n">bool_1</span> <span class="o">=</span> <span class="n">extra</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
537                    <span class="n">s_8</span> <span class="o">=</span> <span class="s">&quot; &quot;</span> <span class="o">+</span> <span class="n">bool_0</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">&quot;Q region = &quot;</span> <span class="o">+</span> <span class="n">bool_0</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
538                    <span class="n">s_7</span> <span class="o">=</span> <span class="s">&quot; &quot;</span> <span class="o">+</span> <span class="n">bool_1</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">&quot;Q region = &quot;</span> <span class="o">+</span> <span class="n">bool_1</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
539                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;npts low&quot;</span><span class="p">:</span>
540                    <span class="n">s_9</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
541                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;npts high&quot;</span><span class="p">:</span>
542                    <span class="n">s_10</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
543                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;volume fraction&quot;</span><span class="p">:</span>
544                    <span class="n">val</span><span class="o">=</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
545                    <span class="n">error</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
546                    <span class="n">s_17</span> <span class="o">=</span> <span class="n">val</span> <span class="o">+</span> <span class="s">&quot; &amp;plusmn; &quot;</span> <span class="o">+</span> <span class="n">error</span>
547                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;specific surface&quot;</span><span class="p">:</span>
548                    <span class="n">val</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
549                    <span class="n">error</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
550                    <span class="n">s_18</span> <span class="o">=</span> <span class="n">val</span> <span class="o">+</span> <span class="s">&quot; &amp;plusmn; &quot;</span> <span class="o">+</span> <span class="n">error</span>
551                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;(&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;power low&quot;</span><span class="p">:</span>
552                    <span class="n">s_11</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="s">&quot; =&quot;</span><span class="o">+</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
553                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;(&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;power high&quot;</span><span class="p">:</span>
554                    <span class="n">s_12</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="s">&quot; =&quot;</span><span class="o">+</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
555                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;[&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;Q* from low Q extrapolation&quot;</span><span class="p">:</span>
556                    <span class="c">#looks messy but this way the symbols +_ and % work on html</span>
557                    <span class="n">val</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
558                    <span class="n">error</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
559                    <span class="n">err</span> <span class="o">=</span> <span class="n">error</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;%&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
560                    <span class="n">percent</span> <span class="o">=</span> <span class="n">error</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;%&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
561                    <span class="n">s_13</span> <span class="o">=</span> <span class="n">val</span> <span class="o">+</span> <span class="s">&quot; &amp;plusmn; &quot;</span> <span class="o">+</span> <span class="n">err</span> <span class="o">+</span> <span class="s">&quot;&amp;#37&quot;</span> <span class="o">+</span> <span class="n">percent</span>
562                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;[&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;Q* from data&quot;</span><span class="p">:</span>
563                    <span class="n">val</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
564                    <span class="n">error</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
565                    <span class="n">err</span> <span class="o">=</span> <span class="n">error</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;%&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
566                    <span class="n">percent</span> <span class="o">=</span> <span class="n">error</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;%&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
567                    <span class="n">s_14</span> <span class="o">=</span> <span class="n">val</span> <span class="o">+</span> <span class="s">&quot; &amp;plusmn; &quot;</span> <span class="o">+</span> <span class="n">err</span> <span class="o">+</span> <span class="s">&quot;&amp;#37&quot;</span> <span class="o">+</span> <span class="n">percent</span>
568                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;[&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;Q* from high Q extrapolation&quot;</span><span class="p">:</span>
569                    <span class="n">val</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
570                    <span class="n">error</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
571                    <span class="n">err</span> <span class="o">=</span> <span class="n">error</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;%&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
572                    <span class="n">percent</span> <span class="o">=</span> <span class="n">error</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;%&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
573                    <span class="n">s_15</span> <span class="o">=</span> <span class="n">val</span> <span class="o">+</span> <span class="s">&quot; &amp;plusmn; &quot;</span> <span class="o">+</span> <span class="n">err</span> <span class="o">+</span> <span class="s">&quot;&amp;#37&quot;</span> <span class="o">+</span> <span class="n">percent</span>
574                <span class="k">elif</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;[&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;total Q*&quot;</span><span class="p">:</span>
575                    <span class="n">val</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
576                    <span class="n">error</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+-&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
577                    <span class="n">s_16</span> <span class="o">=</span> <span class="n">val</span> <span class="o">+</span> <span class="s">&quot; &amp;plusmn; &quot;</span> <span class="o">+</span> <span class="n">error</span>
578                <span class="k">else</span><span class="p">:</span>
579                    <span class="k">continue</span>
580
581        <span class="n">s_1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_html_format</span><span class="p">(</span><span class="n">s_1</span><span class="p">)</span>
582        <span class="n">file_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_html_format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="p">)</span>
583
584        <span class="c"># make plot image</span>
585        <span class="bp">self</span><span class="o">.</span><span class="n">set_plot_state</span><span class="p">(</span><span class="n">extra_high</span><span class="o">=</span><span class="n">bool_0</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">extra_low</span><span class="o">=</span><span class="n">bool_1</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
586        <span class="c"># get ready for report with setting all the html strings</span>
587        <span class="bp">self</span><span class="o">.</span><span class="n">report_str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">template_str</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span><span class="n">s_1</span><span class="p">,</span> <span class="n">s_2</span><span class="p">,</span>
588                                        <span class="n">s_3</span><span class="p">,</span> <span class="n">s_4</span><span class="p">,</span> <span class="n">s_5</span><span class="p">,</span> <span class="n">s_6</span><span class="p">,</span> <span class="n">s_7</span><span class="p">,</span> <span class="n">s_8</span><span class="p">,</span>
589                                    <span class="n">s_9</span><span class="p">,</span> <span class="n">s_10</span><span class="p">,</span> <span class="n">s_11</span><span class="p">,</span> <span class="n">s_12</span><span class="p">,</span> <span class="n">s_13</span><span class="p">,</span> <span class="n">s_14</span><span class="p">,</span> <span class="n">s_15</span><span class="p">,</span>
590                                        <span class="n">s_16</span><span class="p">,</span> <span class="n">s_17</span><span class="p">,</span> <span class="n">s_18</span><span class="p">,</span> <span class="n">file_name</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">)</span>
591</div>
592    <span class="k">def</span> <span class="nf">_check_html_format</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
593        <span class="sd">&quot;&quot;&quot;</span>
594<span class="sd">        Check string &#39;%&#39; for html format</span>
595<span class="sd">        &quot;&quot;&quot;</span>
596        <span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&#39;%&#39;</span><span class="p">):</span>
597            <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;%&#39;</span><span class="p">,</span> <span class="s">&#39;&amp;#37&#39;</span><span class="p">)</span>
598       
599        <span class="k">return</span> <span class="n">name</span>
600       
601<div class="viewcode-block" id="InvariantState.set_saved_state"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.InvariantState.set_saved_state">[docs]</a>    <span class="k">def</span> <span class="nf">set_saved_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
602        <span class="sd">&quot;&quot;&quot;</span>
603<span class="sd">        Set the state list </span>
604<span class="sd">                    </span>
605<span class="sd">        : param name: name of the state component</span>
606<span class="sd">        : param value: value of the state component</span>
607<span class="sd">        &quot;&quot;&quot;</span>
608        <span class="n">rb_list</span> <span class="o">=</span> <span class="p">[[</span><span class="s">&#39;power_law_low&#39;</span><span class="p">,</span><span class="s">&#39;guinier&#39;</span><span class="p">],</span>
609                   <span class="p">[</span><span class="s">&#39;fit_enable_low&#39;</span><span class="p">,</span><span class="s">&#39;fix_enable_low&#39;</span><span class="p">],</span>
610                   <span class="p">[</span><span class="s">&#39;fit_enable_high&#39;</span><span class="p">,</span><span class="s">&#39;fix_enable_high&#39;</span><span class="p">]]</span>
611
612        <span class="k">try</span><span class="p">:</span>
613            <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">value</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
614                <span class="k">exec</span> <span class="s">&quot;self.</span><span class="si">%s</span><span class="s"> = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
615                <span class="k">exec</span> <span class="s">&quot;self.saved_state[&#39;</span><span class="si">%s</span><span class="s">&#39;] = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
616            <span class="k">else</span><span class="p">:</span>
617                <span class="k">exec</span> <span class="s">&#39;self.</span><span class="si">%s</span><span class="s"> = </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
618                <span class="k">exec</span> <span class="s">&quot;self.saved_state[&#39;</span><span class="si">%s</span><span class="s">&#39;] = </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
619            <span class="c"># set the count part of radio button clicked </span>
620            <span class="c"># False for the saved_state</span>
621            <span class="k">for</span> <span class="n">title</span><span class="p">,</span> <span class="n">content</span> <span class="ow">in</span> <span class="n">rb_list</span><span class="p">:</span>
622                <span class="k">if</span> <span class="n">name</span> <span class="o">==</span>  <span class="n">title</span><span class="p">:</span>
623                    <span class="n">name</span> <span class="o">=</span> <span class="n">content</span> 
624                    <span class="n">value</span> <span class="o">=</span> <span class="bp">False</span>     
625                <span class="k">elif</span> <span class="n">name</span> <span class="o">==</span> <span class="n">content</span><span class="p">:</span>
626                    <span class="n">name</span> <span class="o">=</span> <span class="n">title</span>
627                    <span class="n">value</span> <span class="o">=</span> <span class="bp">False</span> 
628            <span class="k">exec</span> <span class="s">&quot;self.saved_state[&#39;</span><span class="si">%s</span><span class="s">&#39;] = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>     
629            <span class="bp">self</span><span class="o">.</span><span class="n">state_num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">saved_state</span><span class="p">[</span><span class="s">&#39;state_num&#39;</span><span class="p">]</span>
630        <span class="k">except</span><span class="p">:</span>           
631            <span class="k">pass</span>
632</div>
633<div class="viewcode-block" id="InvariantState.set_plot_state"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.InvariantState.set_plot_state">[docs]</a>    <span class="k">def</span> <span class="nf">set_plot_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">extra_high</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">extra_low</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
634        <span class="sd">&quot;&quot;&quot;</span>
635<span class="sd">        Build image state that wx.html understand</span>
636<span class="sd">        by plotting, putting it into wx.FileSystem image object</span>
637<span class="sd">        </span>
638<span class="sd">        : extrap_high,extra_low: low/high extrapolations</span>
639<span class="sd">        are possible extra-plots</span>
640<span class="sd">        &quot;&quot;&quot;</span>
641        <span class="c"># some imports</span>
642        <span class="kn">import</span> <span class="nn">wx</span>
643        <span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
644        <span class="kn">from</span> <span class="nn">matplotlib.backends.backend_agg</span> <span class="kn">import</span> <span class="n">FigureCanvasAgg</span>
645
646        <span class="c">#we use simple plot, not plotpanel</span>
647        <span class="c">#make matlab figure</span>
648        <span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
649        <span class="n">fig</span><span class="o">.</span><span class="n">set_facecolor</span><span class="p">(</span><span class="s">&#39;w&#39;</span><span class="p">)</span>
650        <span class="n">graph</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">)</span>
651
652        <span class="c">#data plot</span>
653        <span class="n">graph</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">yerr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">dy</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s">&#39;o&#39;</span><span class="p">)</span>
654        <span class="c">#low Q extrapolation fit plot</span>
655        <span class="k">if</span> <span class="ow">not</span> <span class="n">extra_low</span> <span class="o">==</span> <span class="s">&#39;False&#39;</span><span class="p">:</span>
656            <span class="n">graph</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theory_lowQ</span><span class="o">.</span><span class="n">x</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">theory_lowQ</span><span class="o">.</span><span class="n">y</span><span class="p">)</span>
657        <span class="c">#high Q extrapolation fit plot</span>
658        <span class="k">if</span> <span class="ow">not</span> <span class="n">extra_high</span> <span class="o">==</span> <span class="s">&#39;False&#39;</span><span class="p">:</span>
659            <span class="n">graph</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theory_highQ</span><span class="o">.</span><span class="n">x</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">theory_highQ</span><span class="o">.</span><span class="n">y</span><span class="p">)</span>
660        <span class="n">graph</span><span class="o">.</span><span class="n">set_xscale</span><span class="p">(</span><span class="s">&quot;log&quot;</span><span class="p">,</span> <span class="n">nonposx</span><span class="o">=</span><span class="s">&#39;clip&#39;</span><span class="p">)</span>
661        <span class="n">graph</span><span class="o">.</span><span class="n">set_yscale</span><span class="p">(</span><span class="s">&quot;log&quot;</span><span class="p">,</span> <span class="n">nonposy</span><span class="o">=</span><span class="s">&#39;clip&#39;</span><span class="p">)</span>
662        <span class="n">graph</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s">&#39;$</span><span class="se">\\</span><span class="s">rm{Q}(</span><span class="se">\\</span><span class="s">AA^{-1})$&#39;</span><span class="p">,</span> <span class="n">fontsize</span> <span class="o">=</span> <span class="mi">12</span><span class="p">)</span>
663        <span class="n">graph</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s">&#39;$</span><span class="se">\\</span><span class="s">rm{Intensity}(cm^{-1})$&#39;</span><span class="p">,</span> <span class="n">fontsize</span> <span class="o">=</span> <span class="mi">12</span><span class="p">)</span>
664        <span class="n">canvas</span> <span class="o">=</span> <span class="n">FigureCanvasAgg</span><span class="p">(</span><span class="n">fig</span><span class="p">)</span>
665        <span class="c">#actually make image</span>
666        <span class="n">canvas</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
667       
668        <span class="c">#make python.Image object </span>
669        <span class="c">#size</span>
670        <span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="n">canvas</span><span class="o">.</span><span class="n">get_width_height</span><span class="p">()</span>
671        <span class="c">#convert to wx.Image</span>
672        <span class="n">wximg</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">EmptyImage</span><span class="p">(</span><span class="n">w</span><span class="p">,</span><span class="n">h</span><span class="p">)</span>
673        <span class="c">#wxim.SetData(img.convert(&#39;RGB&#39;).tostring() ) </span>
674        <span class="n">wximg</span><span class="o">.</span><span class="n">SetData</span><span class="p">(</span><span class="n">canvas</span><span class="o">.</span><span class="n">tostring_rgb</span><span class="p">())</span> 
675        <span class="c">#get the dynamic image for the htmlwindow</span>
676        <span class="n">wximgbmp</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BitmapFromImage</span><span class="p">(</span><span class="n">wximg</span><span class="p">)</span>
677        <span class="c">#store the image in wx.FileSystem Object </span>
678        <span class="n">wx</span><span class="o">.</span><span class="n">FileSystem</span><span class="o">.</span><span class="n">AddHandler</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">MemoryFSHandler</span><span class="p">())</span>
679        <span class="c"># use wx.MemoryFSHandler</span>
680        <span class="bp">self</span><span class="o">.</span><span class="n">imgRAM</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">MemoryFSHandler</span><span class="p">()</span>
681        <span class="c">#AddFile, image can be retrieved with &#39;memory:filename&#39;</span>
682        <span class="bp">self</span><span class="o">.</span><span class="n">imgRAM</span><span class="o">.</span><span class="n">AddFile</span><span class="p">(</span><span class="s">&#39;img_inv.png&#39;</span><span class="p">,</span> <span class="n">wximgbmp</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">BITMAP_TYPE_PNG</span><span class="p">)</span>
683       
684        <span class="bp">self</span><span class="o">.</span><span class="n">wximgbmp</span> <span class="o">=</span> <span class="s">&#39;memory:img_inv.png&#39;</span>
685        <span class="bp">self</span><span class="o">.</span><span class="n">image</span> <span class="o">=</span> <span class="n">fig</span>
686</div></div>
687<div class="viewcode-block" id="Reader"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.Reader">[docs]</a><span class="k">class</span> <span class="nc">Reader</span><span class="p">(</span><span class="n">CansasReader</span><span class="p">):</span>
688    <span class="sd">&quot;&quot;&quot;</span>
689<span class="sd">    Class to load a .inv invariant file</span>
690<span class="sd">    &quot;&quot;&quot;</span>
691    <span class="c">## File type</span>
692    <span class="n">type_name</span> <span class="o">=</span> <span class="s">&quot;Invariant&quot;</span>
693   
694    <span class="c">## Wildcards</span>
695    <span class="nb">type</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Invariant file (*.inv)|*.inv&quot;</span><span class="p">,</span>
696            <span class="s">&quot;SASView file (*.svs)|*.svs&quot;</span><span class="p">]</span>
697    <span class="c">## List of allowed extensions</span>
698    <span class="n">ext</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;.inv&#39;</span><span class="p">,</span> <span class="s">&#39;.INV&#39;</span><span class="p">,</span> <span class="s">&#39;.svs&#39;</span><span class="p">,</span> <span class="s">&#39;SVS&#39;</span><span class="p">]</span> 
699   
700    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">call_back</span><span class="p">,</span> <span class="n">cansas</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
701        <span class="sd">&quot;&quot;&quot;</span>
702<span class="sd">        Initialize the call-back method to be called</span>
703<span class="sd">        after we load a file</span>
704<span class="sd">        </span>
705<span class="sd">        : param call_back: call-back method</span>
706<span class="sd">        : param cansas:  True = files will be written/read in CanSAS format</span>
707<span class="sd">                        False = write CanSAS format  </span>
708<span class="sd">        &quot;&quot;&quot;</span>
709        <span class="c">## Call back method to be executed after a file is read</span>
710        <span class="bp">self</span><span class="o">.</span><span class="n">call_back</span> <span class="o">=</span> <span class="n">call_back</span>
711        <span class="c">## CanSAS format flag</span>
712        <span class="bp">self</span><span class="o">.</span><span class="n">cansas</span> <span class="o">=</span> <span class="n">cansas</span>
713        <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="bp">None</span>
714
715<div class="viewcode-block" id="Reader.read"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.Reader.read">[docs]</a>    <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
716        <span class="sd">&quot;&quot;&quot; </span>
717<span class="sd">        Load a new invariant state from file</span>
718<span class="sd">        </span>
719<span class="sd">        : param path: file path</span>
720<span class="sd">        : return: None</span>
721<span class="sd">        &quot;&quot;&quot;</span>
722        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cansas</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
723            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_cansas</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
724        <span class="k">else</span><span class="p">:</span>
725            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_standalone</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
726        </div>
727    <span class="k">def</span> <span class="nf">_read_standalone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
728        <span class="sd">&quot;&quot;&quot; </span>
729<span class="sd">        Load a new invariant state from file.</span>
730<span class="sd">        The invariant node is assumed to be the top element.</span>
731<span class="sd">        </span>
732<span class="sd">        : param path: file path</span>
733<span class="sd">        : return: None</span>
734<span class="sd">        &quot;&quot;&quot;</span>
735        <span class="c"># Read the new state from file</span>
736        <span class="n">state</span> <span class="o">=</span> <span class="n">InvariantState</span><span class="p">()</span>
737
738        <span class="n">state</span><span class="o">.</span><span class="n">fromXML</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="n">path</span><span class="p">)</span>
739       
740        <span class="c"># Call back to post the new state</span>
741        <span class="bp">self</span><span class="o">.</span><span class="n">call_back</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
742        <span class="k">return</span> <span class="bp">None</span>
743   
744    <span class="k">def</span> <span class="nf">_parse_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">entry</span><span class="p">):</span>
745        <span class="sd">&quot;&quot;&quot;</span>
746<span class="sd">        Read an invariant result from an XML node</span>
747<span class="sd">        </span>
748<span class="sd">        : param entry: XML node to read from </span>
749<span class="sd">        : return: InvariantState object</span>
750<span class="sd">        &quot;&quot;&quot;</span>
751        <span class="n">state</span> <span class="o">=</span> <span class="bp">None</span>
752        <span class="c"># Locate the invariant node</span>
753        <span class="k">try</span><span class="p">:</span>
754            <span class="n">nodes</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s">&#39;ns:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">INVNODE_NAME</span><span class="p">,</span>
755                                <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s">&#39;ns&#39;</span><span class="p">:</span> <span class="n">CANSAS_NS</span><span class="p">})</span>
756            <span class="c"># Create an empty state</span>
757            <span class="k">if</span> <span class="n">nodes</span> <span class="o">!=</span> <span class="p">[]:</span>
758                <span class="n">state</span> <span class="o">=</span> <span class="n">InvariantState</span><span class="p">()</span>
759                <span class="n">state</span><span class="o">.</span><span class="n">fromXML</span><span class="p">(</span><span class="n">node</span><span class="o">=</span><span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
760        <span class="k">except</span><span class="p">:</span>
761            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;XML document does not contain invariant&quot;</span>
762            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; information.</span><span class="se">\n</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span>
763            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> 
764        <span class="k">return</span> <span class="n">state</span>
765   
766    <span class="k">def</span> <span class="nf">_read_cansas</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
767        <span class="sd">&quot;&quot;&quot; </span>
768<span class="sd">        Load data and invariant information from a CanSAS XML file.</span>
769<span class="sd">        </span>
770<span class="sd">        : param path: file path</span>
771<span class="sd">        : return: Data1D object if a single SASentry was found, </span>
772<span class="sd">                    or a list of Data1D objects if multiple entries were found,</span>
773<span class="sd">                    or None of nothing was found</span>
774<span class="sd">        : raise RuntimeError: when the file can&#39;t be opened</span>
775<span class="sd">        : raise ValueError: when the length of the data vectors are inconsistent</span>
776<span class="sd">        &quot;&quot;&quot;</span>
777        <span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
778        <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
779            <span class="n">basename</span>  <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
780            <span class="n">root</span><span class="p">,</span> <span class="n">extension</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">basename</span><span class="p">)</span>
781           
782            <span class="k">if</span>  <span class="n">extension</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ext</span> <span class="ow">or</span> \
783                <span class="n">extension</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;.xml&#39;</span><span class="p">:</span>
784                <span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">parser</span><span class="o">=</span><span class="n">etree</span><span class="o">.</span><span class="n">ETCompatXMLParser</span><span class="p">())</span>
785       
786                <span class="c"># Check the format version number</span>
787                <span class="c"># Specifying the namespace will take care of </span>
788                <span class="c"># the file format version </span>
789                <span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
790               
791                <span class="n">entry_list</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s">&#39;/ns:SASroot/ns:SASentry&#39;</span><span class="p">,</span>
792                                        <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s">&#39;ns&#39;</span><span class="p">:</span> <span class="n">CANSAS_NS</span><span class="p">})</span>
793               
794                <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">entry_list</span><span class="p">:</span>
795                   
796                    <span class="n">sas_entry</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_entry</span><span class="p">(</span><span class="n">entry</span><span class="p">)</span>
797                    <span class="n">invstate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_state</span><span class="p">(</span><span class="n">entry</span><span class="p">)</span>
798                   
799                    <span class="c">#invstate could be None when .svs file is loaded</span>
800                    <span class="c">#in this case, skip appending to output</span>
801                    <span class="k">if</span> <span class="n">invstate</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
802                        <span class="n">sas_entry</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;invstate&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">invstate</span>
803                        <span class="n">sas_entry</span><span class="o">.</span><span class="n">filename</span> <span class="o">=</span> <span class="n">invstate</span><span class="o">.</span><span class="n">file</span>
804                        <span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sas_entry</span><span class="p">)</span>
805        <span class="k">else</span><span class="p">:</span>
806            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> is not a file&quot;</span> <span class="o">%</span> <span class="n">path</span>
807
808        <span class="c"># Return output consistent with the loader&#39;s api</span>
809        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
810            <span class="k">return</span> <span class="bp">None</span>
811        <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
812            <span class="c"># Call back to post the new state</span>
813            <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="n">output</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;invstate&#39;</span><span class="p">]</span>
814            <span class="bp">self</span><span class="o">.</span><span class="n">call_back</span><span class="p">(</span><span class="n">state</span><span class="o">=</span><span class="n">output</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;invstate&#39;</span><span class="p">],</span>
815                          <span class="n">datainfo</span> <span class="o">=</span> <span class="n">output</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
816            <span class="k">return</span> <span class="n">output</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
817        <span class="k">else</span><span class="p">:</span>
818            <span class="k">return</span> <span class="n">output</span>               
819   
820<div class="viewcode-block" id="Reader.get_state"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.Reader.get_state">[docs]</a>    <span class="k">def</span> <span class="nf">get_state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
821        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span>
822    </div>
823<div class="viewcode-block" id="Reader.write"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.Reader.write">[docs]</a>    <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">datainfo</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">invstate</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
824        <span class="sd">&quot;&quot;&quot;</span>
825<span class="sd">        Write the content of a Data1D as a CanSAS XML file</span>
826<span class="sd">        </span>
827<span class="sd">        : param filename: name of the file to write</span>
828<span class="sd">        : param datainfo: Data1D object</span>
829<span class="sd">        : param invstate: InvariantState object</span>
830<span class="sd">        &quot;&quot;&quot;</span>
831        <span class="c"># Sanity check</span>
832        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cansas</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
833            <span class="n">doc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">write_toXML</span><span class="p">(</span><span class="n">datainfo</span><span class="p">,</span><span class="n">invstate</span><span class="p">)</span>
834            <span class="c"># Write the XML document</span>
835            <span class="n">fd</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
836            <span class="n">fd</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">toprettyxml</span><span class="p">())</span>
837            <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
838        <span class="k">else</span><span class="p">:</span>
839            <span class="n">invstate</span><span class="o">.</span><span class="n">toXML</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="n">filename</span><span class="p">)</span>
840        </div>
841<div class="viewcode-block" id="Reader.write_toXML"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.invariant.html#sas.perspectives.invariant.invariant_state.Reader.write_toXML">[docs]</a>    <span class="k">def</span> <span class="nf">write_toXML</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">datainfo</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
842        <span class="sd">&quot;&quot;&quot;</span>
843<span class="sd">        Write toXML, a helper for write()</span>
844<span class="sd">        </span>
845<span class="sd">        : return: xml doc</span>
846<span class="sd">        &quot;&quot;&quot;</span>
847        <span class="k">if</span> <span class="n">datainfo</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
848            <span class="n">datainfo</span> <span class="o">=</span> <span class="n">sas</span><span class="o">.</span><span class="n">dataloader</span><span class="o">.</span><span class="n">data_info</span><span class="o">.</span><span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="p">[],</span> <span class="n">y</span><span class="o">=</span><span class="p">[])</span>   
849        <span class="k">elif</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">datainfo</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="n">sas</span><span class="o">.</span><span class="n">dataloader</span><span class="o">.</span><span class="n">data_info</span><span class="o">.</span><span class="n">Data1D</span><span class="p">):</span>
850            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;The cansas writer expects a Data1D&quot;</span>
851            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; instance: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">datainfo</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">)</span>
852            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
853        <span class="c">#make sure title and data run is filled up.</span>
854        <span class="k">if</span> <span class="n">datainfo</span><span class="o">.</span><span class="n">title</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">datainfo</span><span class="o">.</span><span class="n">title</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
855            <span class="n">datainfo</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">datainfo</span><span class="o">.</span><span class="n">name</span>
856        <span class="k">if</span> <span class="n">datainfo</span><span class="o">.</span><span class="n">run_name</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">datainfo</span><span class="o">.</span><span class="n">run_name</span> <span class="o">==</span> <span class="p">{}:</span> 
857            <span class="n">datainfo</span><span class="o">.</span><span class="n">run</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">datainfo</span><span class="o">.</span><span class="n">name</span><span class="p">)]</span>
858            <span class="n">datainfo</span><span class="o">.</span><span class="n">run_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">datainfo</span><span class="o">.</span><span class="n">name</span>
859        <span class="c"># Create basic XML document</span>
860        <span class="n">doc</span><span class="p">,</span> <span class="n">sasentry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_xml_doc</span><span class="p">(</span><span class="n">datainfo</span><span class="p">)</span>
861        <span class="c"># Add the invariant information to the XML document</span>
862        <span class="k">if</span> <span class="n">state</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
863            <span class="n">doc</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">toXML</span><span class="p">(</span><span class="n">datainfo</span><span class="o">.</span><span class="n">name</span><span class="p">,</span><span class="n">doc</span><span class="o">=</span><span class="n">doc</span><span class="p">,</span> <span class="n">entry_node</span><span class="o">=</span><span class="n">sasentry</span><span class="p">)</span>
864        <span class="k">return</span> <span class="n">doc</span>
865</pre></div></div></div>
866
867          </div>
868        </div>
869      </div>
870      <div class="sphinxsidebar">
871        <div class="sphinxsidebarwrapper">
872<div id="searchbox" style="display: none">
873  <h3>Quick search</h3>
874    <form class="search" action="../../../../search.html" method="get">
875      <input type="text" name="q" />
876      <input type="submit" value="Go" />
877      <input type="hidden" name="check_keywords" value="yes" />
878      <input type="hidden" name="area" value="default" />
879    </form>
880    <p class="searchtip" style="font-size: 90%">
881    Enter search terms or a module, class or function name.
882    </p>
883</div>
884<script type="text/javascript">$('#searchbox').show(0);</script>
885        </div>
886      </div>
887      <div class="clearer"></div>
888    </div>
889    <div class="related">
890      <h3>Navigation</h3>
891      <ul>
892        <li class="right" style="margin-right: 10px">
893          <a href="../../../../genindex.html" title="General Index"
894             >index</a></li>
895        <li class="right" >
896          <a href="../../../../py-modindex.html" title="Python Module Index"
897             >modules</a> |</li>
898        <li><a href="../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
899          <li><a href="../../../index.html" >Module code</a> &raquo;</li>
900          <li><a href="../invariant.html" >sas.perspectives.invariant</a> &raquo;</li> 
901      </ul>
902    </div>
903    <div class="footer">
904        &copy; Copyright 2013, The SasView Project.
905      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
906    </div>
907  </body>
908</html>
Note: See TracBrowser for help on using the repository browser.