source: sasview/_modules/sas/perspectives/calculator/model_editor.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: 208.6 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.calculator.model_editor &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.calculator" href="../calculator.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="../calculator.html" accesskey="U">sas.perspectives.calculator</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.calculator.model_editor</h1><div class="highlight"><pre>
52<span class="c">################################################################################</span>
53<span class="c">#This software was developed by the University of Tennessee as part of the</span>
54<span class="c">#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)</span>
55<span class="c">#project funded by the US National Science Foundation. </span>
56<span class="c">#</span>
57<span class="c">#See the license text in license.txt</span>
58<span class="c">#</span>
59<span class="c">#copyright 2009, University of Tennessee</span>
60<span class="c">################################################################################</span>
61<span class="kn">import</span> <span class="nn">wx</span>
62<span class="kn">import</span> <span class="nn">sys</span>
63<span class="kn">import</span> <span class="nn">os</span>
64<span class="kn">import</span> <span class="nn">math</span>
65<span class="kn">from</span> <span class="nn">wx.py.editwindow</span> <span class="kn">import</span> <span class="n">EditWindow</span>
66
67<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;win32&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
68    <span class="n">FONT_VARIANT</span> <span class="o">=</span> <span class="mi">0</span>
69    <span class="n">PNL_WIDTH</span> <span class="o">=</span> <span class="mi">450</span>
70    <span class="n">PNL_HITE</span> <span class="o">=</span> <span class="mi">320</span>
71<span class="k">else</span><span class="p">:</span>
72    <span class="n">FONT_VARIANT</span> <span class="o">=</span> <span class="mi">1</span>
73    <span class="n">PNL_WIDTH</span> <span class="o">=</span> <span class="mi">590</span>
74    <span class="n">PNL_HITE</span> <span class="o">=</span> <span class="mi">350</span>
75<span class="n">M_NAME</span> <span class="o">=</span> <span class="s">&#39;Model&#39;</span>
76<span class="n">EDITOR_WIDTH</span> <span class="o">=</span> <span class="mi">800</span>
77<span class="n">EDITOR_HEIGTH</span> <span class="o">=</span> <span class="mi">735</span>
78<span class="n">PANEL_WIDTH</span> <span class="o">=</span> <span class="mi">500</span>
79<span class="n">_BOX_WIDTH</span> <span class="o">=</span> <span class="mi">55</span>
80
81   
82<span class="k">def</span> <span class="nf">_compileFile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
83    <span class="sd">&quot;&quot;&quot;</span>
84<span class="sd">    Compile the file in the path</span>
85<span class="sd">    &quot;&quot;&quot;</span>
86    <span class="k">try</span><span class="p">:</span>
87        <span class="kn">import</span> <span class="nn">py_compile</span>
88        <span class="n">py_compile</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">doraise</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
89        <span class="k">return</span> <span class="s">&#39;&#39;</span>
90    <span class="k">except</span><span class="p">:</span>
91        <span class="n">_</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
92        <span class="k">return</span> <span class="n">value</span>
93   
94<span class="k">def</span> <span class="nf">_deleteFile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
95    <span class="sd">&quot;&quot;&quot;</span>
96<span class="sd">    Delete file in the path</span>
97<span class="sd">    &quot;&quot;&quot;</span>
98    <span class="k">try</span><span class="p">:</span>
99        <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
100    <span class="k">except</span><span class="p">:</span>
101        <span class="k">raise</span>
102
103 
104<div class="viewcode-block" id="TextDialog"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog">[docs]</a><span class="k">class</span> <span class="nc">TextDialog</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">Dialog</span><span class="p">):</span>
105    <span class="sd">&quot;&quot;&quot;</span>
106<span class="sd">    Dialog for easy custom sum models  </span>
107<span class="sd">    &quot;&quot;&quot;</span>
108    <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">parent</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> 
109                 <span class="n">model_list</span><span class="o">=</span><span class="p">[],</span> <span class="n">plugin_dir</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
110        <span class="sd">&quot;&quot;&quot;</span>
111<span class="sd">        Dialog window popup when selecting &#39;Easy Custom Sum/Multiply&#39; </span>
112<span class="sd">        on the menu</span>
113<span class="sd">        &quot;&quot;&quot;</span>
114        <span class="n">wx</span><span class="o">.</span><span class="n">Dialog</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="n">parent</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="nb">id</span><span class="p">,</span> 
115                           <span class="n">title</span><span class="o">=</span><span class="n">title</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">PNL_WIDTH</span><span class="p">,</span> <span class="n">PNL_HITE</span><span class="p">))</span>
116        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">base</span>
117        <span class="c">#Font</span>
118        <span class="bp">self</span><span class="o">.</span><span class="n">SetWindowVariant</span><span class="p">(</span><span class="n">variant</span><span class="o">=</span><span class="n">FONT_VARIANT</span><span class="p">)</span>
119        <span class="c"># default</span>
120        <span class="bp">self</span><span class="o">.</span><span class="n">font</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">SystemSettings_GetFont</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">SYS_SYSTEM_FONT</span><span class="p">)</span>
121        <span class="bp">self</span><span class="o">.</span><span class="n">font</span><span class="o">.</span><span class="n">SetPointSize</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
122        <span class="bp">self</span><span class="o">.</span><span class="n">overwrite_name</span> <span class="o">=</span> <span class="bp">False</span>
123        <span class="bp">self</span><span class="o">.</span><span class="n">plugin_dir</span> <span class="o">=</span> <span class="n">plugin_dir</span>
124        <span class="bp">self</span><span class="o">.</span><span class="n">model_list</span> <span class="o">=</span> <span class="n">model_list</span>
125        <span class="bp">self</span><span class="o">.</span><span class="n">model1_string</span> <span class="o">=</span> <span class="s">&quot;SphereModel&quot;</span>
126        <span class="bp">self</span><span class="o">.</span><span class="n">model2_string</span> <span class="o">=</span> <span class="s">&quot;CylinderModel&quot;</span>
127        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">&#39;Sum&#39;</span> <span class="o">+</span> <span class="n">M_NAME</span>
128        <span class="bp">self</span><span class="o">.</span><span class="n">factor</span> <span class="o">=</span> <span class="s">&#39;scale_factor&#39;</span>
129        <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
130        <span class="bp">self</span><span class="o">.</span><span class="n">operator</span> <span class="o">=</span> <span class="s">&#39;+&#39;</span>
131        <span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span> <span class="o">=</span> <span class="bp">None</span>
132        <span class="bp">self</span><span class="o">.</span><span class="n">explanation</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
133        <span class="bp">self</span><span class="o">.</span><span class="n">explanationctr</span> <span class="o">=</span> <span class="bp">None</span>
134        <span class="bp">self</span><span class="o">.</span><span class="n">sizer</span> <span class="o">=</span> <span class="bp">None</span>
135        <span class="bp">self</span><span class="o">.</span><span class="n">name_sizer</span> <span class="o">=</span> <span class="bp">None</span>
136        <span class="bp">self</span><span class="o">.</span><span class="n">name_hsizer</span> <span class="o">=</span> <span class="bp">None</span>
137        <span class="bp">self</span><span class="o">.</span><span class="n">desc_sizer</span> <span class="o">=</span> <span class="bp">None</span>
138        <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span> <span class="o">=</span> <span class="bp">None</span>
139        <span class="bp">self</span><span class="o">.</span><span class="n">model1</span> <span class="o">=</span> <span class="bp">None</span>
140        <span class="bp">self</span><span class="o">.</span><span class="n">model2</span> <span class="o">=</span> <span class="bp">None</span>
141        <span class="bp">self</span><span class="o">.</span><span class="n">static_line_1</span> <span class="o">=</span> <span class="bp">None</span>
142        <span class="bp">self</span><span class="o">.</span><span class="n">okButton</span> <span class="o">=</span> <span class="bp">None</span>
143        <span class="bp">self</span><span class="o">.</span><span class="n">closeButton</span> <span class="o">=</span> <span class="bp">None</span>
144        <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span> <span class="o">=</span> <span class="bp">None</span>
145        <span class="bp">self</span><span class="o">.</span><span class="n">msg_sizer</span> <span class="o">=</span> <span class="bp">None</span>
146        <span class="bp">self</span><span class="o">.</span><span class="n">fname</span> <span class="o">=</span> <span class="bp">None</span>
147        <span class="bp">self</span><span class="o">.</span><span class="n">cm_list</span> <span class="o">=</span> <span class="bp">None</span>
148        <span class="bp">self</span><span class="o">.</span><span class="n">is_p1_custom</span> <span class="o">=</span> <span class="bp">False</span>
149        <span class="bp">self</span><span class="o">.</span><span class="n">is_p2_custom</span> <span class="o">=</span> <span class="bp">False</span>
150        <span class="bp">self</span><span class="o">.</span><span class="n">_build_sizer</span><span class="p">()</span>
151        <span class="bp">self</span><span class="o">.</span><span class="n">model1_name</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">model1</span><span class="o">.</span><span class="n">GetValue</span><span class="p">())</span>
152        <span class="bp">self</span><span class="o">.</span><span class="n">model2_name</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">model2</span><span class="o">.</span><span class="n">GetValue</span><span class="p">())</span>
153        <span class="bp">self</span><span class="o">.</span><span class="n">good_name</span> <span class="o">=</span> <span class="bp">True</span>
154        <span class="bp">self</span><span class="o">.</span><span class="n">fill_oprator_combox</span><span class="p">()</span>
155       
156    <span class="k">def</span> <span class="nf">_layout_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
157        <span class="sd">&quot;&quot;&quot;</span>
158<span class="sd">        Do the layout for file/function name related widgets</span>
159<span class="sd">        &quot;&quot;&quot;</span>
160        <span class="bp">self</span><span class="o">.</span><span class="n">name_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
161        <span class="bp">self</span><span class="o">.</span><span class="n">name_hsizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
162        <span class="c">#title name [string]</span>
163        <span class="n">name_txt</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;Function Name : &#39;</span><span class="p">)</span> 
164        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">TextCtrl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">PANEL_WIDTH</span><span class="o">*</span><span class="mi">3</span><span class="o">/</span><span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span> 
165        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_TEXT_ENTER</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_change_name</span><span class="p">)</span>
166        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
167        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetFont</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">font</span><span class="p">)</span>
168        <span class="n">hint_name</span> <span class="o">=</span> <span class="s">&quot;Unique Sum/Multiply Model Function Name.&quot;</span>
169        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="n">hint_name</span><span class="p">)</span>
170        <span class="bp">self</span><span class="o">.</span><span class="n">name_hsizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="n">name_txt</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
171                            <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> 
172                             <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">RIGHT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">BOTTOM</span><span class="p">,</span> <span class="mi">10</span><span class="p">)])</span>
173        <span class="bp">self</span><span class="o">.</span><span class="n">name_sizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="bp">self</span><span class="o">.</span><span class="n">name_hsizer</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> 
174                                        <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span> <span class="mi">10</span><span class="p">)])</span>
175       
176       
177    <span class="k">def</span> <span class="nf">_layout_description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
178        <span class="sd">&quot;&quot;&quot;</span>
179<span class="sd">        Do the layout for description related widgets</span>
180<span class="sd">        &quot;&quot;&quot;</span>
181        <span class="bp">self</span><span class="o">.</span><span class="n">desc_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
182        <span class="c">#title name [string]</span>
183        <span class="n">desc_txt</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;Description (optional) : &#39;</span><span class="p">)</span> 
184        <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">TextCtrl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">PANEL_WIDTH</span><span class="o">*</span><span class="mi">3</span><span class="o">/</span><span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span> 
185        <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
186        <span class="c">#self.name_tcl.SetFont(self.font)</span>
187        <span class="n">hint_desc</span> <span class="o">=</span> <span class="s">&quot;Write a short description of this model function.&quot;</span>
188        <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="n">hint_desc</span><span class="p">)</span>
189        <span class="bp">self</span><span class="o">.</span><span class="n">desc_sizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="n">desc_txt</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
190                                <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> 
191                                <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">RIGHT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">BOTTOM</span><span class="p">,</span> <span class="mi">10</span><span class="p">)])</span>     
192 
193    <span class="k">def</span> <span class="nf">_build_sizer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
194        <span class="sd">&quot;&quot;&quot;</span>
195<span class="sd">        Build gui</span>
196<span class="sd">        &quot;&quot;&quot;</span>
197        <span class="n">box_width</span> <span class="o">=</span> <span class="mi">195</span> <span class="c"># combobox width</span>
198        <span class="n">vbox</span>  <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
199        <span class="bp">self</span><span class="o">.</span><span class="n">sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">GridBagSizer</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
200        <span class="bp">self</span><span class="o">.</span><span class="n">_layout_name</span><span class="p">()</span>
201        <span class="bp">self</span><span class="o">.</span><span class="n">_layout_description</span><span class="p">()</span>
202       
203       
204        <span class="n">sum_description</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticBox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;Select&#39;</span><span class="p">,</span> 
205                                       <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">PNL_WIDTH</span><span class="o">-</span><span class="mi">30</span><span class="p">,</span> <span class="mi">70</span><span class="p">))</span>
206        <span class="n">sum_box</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticBoxSizer</span><span class="p">(</span><span class="n">sum_description</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
207        <span class="n">model1_box</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
208        <span class="n">model2_box</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
209        <span class="n">model_vbox</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
210        <span class="bp">self</span><span class="o">.</span><span class="n">model1</span> <span class="o">=</span>  <span class="n">wx</span><span class="o">.</span><span class="n">ComboBox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">CB_READONLY</span><span class="p">)</span>
211        <span class="n">wx</span><span class="o">.</span><span class="n">EVT_COMBOBOX</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_model1</span><span class="p">)</span>
212        <span class="bp">self</span><span class="o">.</span><span class="n">model1</span><span class="o">.</span><span class="n">SetMinSize</span><span class="p">((</span><span class="n">box_width</span><span class="o">*</span><span class="mi">5</span><span class="o">/</span><span class="mi">6</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span>
213        <span class="bp">self</span><span class="o">.</span><span class="n">model1</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="s">&quot;model1&quot;</span><span class="p">)</span>
214       
215        <span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">ComboBox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> 
216                                         <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">CB_READONLY</span><span class="p">)</span>
217        <span class="n">wx</span><span class="o">.</span><span class="n">EVT_COMBOBOX</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_select_operator</span><span class="p">)</span>
218        <span class="n">operation_tip</span> <span class="o">=</span> <span class="s">&quot;Add: +, Multiply: * &quot;</span>
219        <span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="n">operation_tip</span><span class="p">)</span>
220       
221        <span class="bp">self</span><span class="o">.</span><span class="n">model2</span> <span class="o">=</span>  <span class="n">wx</span><span class="o">.</span><span class="n">ComboBox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">CB_READONLY</span><span class="p">)</span>
222        <span class="n">wx</span><span class="o">.</span><span class="n">EVT_COMBOBOX</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model2</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_model2</span><span class="p">)</span>
223        <span class="bp">self</span><span class="o">.</span><span class="n">model2</span><span class="o">.</span><span class="n">SetMinSize</span><span class="p">((</span><span class="n">box_width</span><span class="o">*</span><span class="mi">5</span><span class="o">/</span><span class="mi">6</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span>
224        <span class="bp">self</span><span class="o">.</span><span class="n">model2</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="s">&quot;model2&quot;</span><span class="p">)</span>
225        <span class="bp">self</span><span class="o">.</span><span class="n">_set_model_list</span><span class="p">()</span>
226       
227         <span class="c"># Buttons on the bottom</span>
228        <span class="bp">self</span><span class="o">.</span><span class="n">static_line_1</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticLine</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
229        <span class="bp">self</span><span class="o">.</span><span class="n">okButton</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_OK</span><span class="p">,</span> <span class="s">&#39;Apply&#39;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">box_width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="mi">25</span><span class="p">))</span>
230        <span class="bp">self</span><span class="o">.</span><span class="n">okButton</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_BUTTON</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_name</span><span class="p">)</span>
231        <span class="bp">self</span><span class="o">.</span><span class="n">closeButton</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_CANCEL</span><span class="p">,</span> <span class="s">&#39;Close&#39;</span><span class="p">,</span> 
232                                     <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">box_width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="mi">25</span><span class="p">))</span>
233        <span class="c"># Intro</span>
234        <span class="bp">self</span><span class="o">.</span><span class="n">explanation</span>  <span class="o">=</span> <span class="s">&quot;  custom model = </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="bp">self</span><span class="o">.</span><span class="n">factor</span><span class="p">,</span> <span class="s">&#39;*&#39;</span><span class="p">)</span>
235        <span class="bp">self</span><span class="o">.</span><span class="n">explanation</span>  <span class="o">+=</span> <span class="s">&quot;(model1 </span><span class="si">%s</span><span class="s"> model2)</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">operator</span>
236        <span class="c">#explanation  += &quot;  Note: This will overwrite the previous sum model.\n&quot;</span>
237        <span class="n">model_string</span> <span class="o">=</span> <span class="s">&quot; Model</span><span class="si">%s</span><span class="s"> (p</span><span class="si">%s</span><span class="s">):&quot;</span>
238        <span class="c"># msg</span>
239        <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span><span class="p">)</span>
240        <span class="bp">self</span><span class="o">.</span><span class="n">msg_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
241        <span class="bp">self</span><span class="o">.</span><span class="n">msg_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
242        <span class="n">vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name_hsizer</span><span class="p">)</span>
243        <span class="n">vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">desc_sizer</span><span class="p">)</span>
244        <span class="n">vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sizer</span><span class="p">)</span>
245        <span class="n">ix</span> <span class="o">=</span> <span class="mi">0</span>
246        <span class="n">iy</span> <span class="o">=</span> <span class="mi">1</span>
247        <span class="bp">self</span><span class="o">.</span><span class="n">explanationctr</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">explanation</span><span class="p">)</span>
248        <span class="bp">self</span><span class="o">.</span><span class="n">sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">explanationctr</span> <span class="p">,</span> <span class="p">(</span><span class="n">iy</span><span class="p">,</span> <span class="n">ix</span><span class="p">),</span>
249                 <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
250        <span class="n">model1_box</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">model_string</span><span class="o">%</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)),</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
251        <span class="n">model1_box</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="n">box_width</span><span class="o">-</span><span class="mi">15</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
252        <span class="n">model1_box</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">model_string</span><span class="o">%</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)),</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
253        <span class="n">model2_box</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
254        <span class="n">model2_box</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">15</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
255        <span class="n">model2_box</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
256        <span class="n">model2_box</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">15</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
257        <span class="n">model2_box</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model2</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
258        <span class="n">model_vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">model1_box</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
259        <span class="n">model_vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">model2_box</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
260        <span class="n">sum_box</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">model_vbox</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
261        <span class="n">iy</span> <span class="o">+=</span> <span class="mi">1</span>
262        <span class="n">ix</span> <span class="o">=</span> <span class="mi">0</span>
263        <span class="bp">self</span><span class="o">.</span><span class="n">sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sum_box</span><span class="p">,</span> <span class="p">(</span><span class="n">iy</span><span class="p">,</span> <span class="n">ix</span><span class="p">),</span>
264                  <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
265        <span class="n">vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
266        <span class="n">vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">static_line_1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
267        <span class="n">vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg_sizer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
268                 <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">RIGHT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">BOTTOM</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
269        <span class="n">sizer_button</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
270        <span class="n">sizer_button</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">20</span><span class="p">,</span> <span class="mi">20</span><span class="p">),</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
271        <span class="n">sizer_button</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">okButton</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
272                         <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">RIGHT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
273        <span class="n">sizer_button</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">closeButton</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span>
274                          <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">RIGHT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>       
275        <span class="n">vbox</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sizer_button</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">BOTTOM</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
276         
277        <span class="bp">self</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="n">vbox</span><span class="p">)</span>
278        <span class="bp">self</span><span class="o">.</span><span class="n">Centre</span><span class="p">()</span>
279       
280<div class="viewcode-block" id="TextDialog.on_change_name"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.on_change_name">[docs]</a>    <span class="k">def</span> <span class="nf">on_change_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
281        <span class="sd">&quot;&quot;&quot;</span>
282<span class="sd">        Change name</span>
283<span class="sd">        &quot;&quot;&quot;</span>
284        <span class="k">if</span> <span class="n">event</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
285            <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
286        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s">&#39;white&#39;</span><span class="p">)</span>
287        <span class="bp">self</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
288    </div>
289<div class="viewcode-block" id="TextDialog.check_name"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.check_name">[docs]</a>    <span class="k">def</span> <span class="nf">check_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
290        <span class="sd">&quot;&quot;&quot;</span>
291<span class="sd">        Check name if exist already</span>
292<span class="sd">        &quot;&quot;&quot;</span>
293        <span class="n">mname</span> <span class="o">=</span> <span class="n">M_NAME</span>
294        <span class="bp">self</span><span class="o">.</span><span class="n">on_change_name</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
295        <span class="n">list_fnames</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">plugin_dir</span><span class="p">)</span>
296        <span class="c"># fake existing regular model name list</span>
297        <span class="n">m_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">model</span> <span class="o">+</span> <span class="s">&quot;.py&quot;</span> <span class="k">for</span> <span class="n">model</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_list</span><span class="p">]</span>
298        <span class="n">list_fnames</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">m_list</span><span class="p">)</span>
299        <span class="c"># function/file name</span>
300        <span class="n">title</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</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>
301        <span class="k">if</span> <span class="n">title</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
302            <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">operator</span>
303            <span class="k">if</span> <span class="n">text</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&#39;+&#39;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
304                <span class="n">mname</span> <span class="o">=</span> <span class="s">&#39;Sum&#39;</span>
305            <span class="k">else</span><span class="p">:</span>
306                <span class="n">mname</span> <span class="o">=</span> <span class="s">&#39;Multi&#39;</span>
307            <span class="n">mname</span> <span class="o">+=</span> <span class="n">M_NAME</span>
308            <span class="n">title</span> <span class="o">=</span> <span class="n">mname</span>
309        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">title</span>
310        <span class="n">t_fname</span> <span class="o">=</span> <span class="n">title</span> <span class="o">+</span> <span class="s">&#39;.py&#39;</span>
311        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite_name</span><span class="p">:</span>
312            <span class="k">if</span> <span class="n">t_fname</span> <span class="ow">in</span> <span class="n">list_fnames</span> <span class="ow">and</span> <span class="n">title</span> <span class="o">!=</span> <span class="n">mname</span><span class="p">:</span>
313                <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s">&#39;pink&#39;</span><span class="p">)</span>
314                <span class="bp">self</span><span class="o">.</span><span class="n">good_name</span> <span class="o">=</span> <span class="bp">False</span>
315                <span class="n">info</span> <span class="o">=</span> <span class="s">&#39;Error&#39;</span>
316                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Name exists already.&quot;</span>
317                <span class="n">wx</span><span class="o">.</span><span class="n">MessageBox</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">info</span><span class="p">)</span> 
318                <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span> <span class="o">=</span> <span class="n">msg</span>
319                <span class="n">color</span> <span class="o">=</span> <span class="s">&#39;red&#39;</span>
320                <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
321                <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span><span class="o">.</span><span class="n">SetForegroundColour</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
322                <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">good_name</span>
323        <span class="bp">self</span><span class="o">.</span><span class="n">fname</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="bp">self</span><span class="o">.</span><span class="n">plugin_dir</span><span class="p">,</span> <span class="n">t_fname</span><span class="p">)</span>
324        <span class="n">s_title</span> <span class="o">=</span> <span class="n">title</span>
325        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">title</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">20</span><span class="p">:</span>
326            <span class="n">s_title</span> <span class="o">=</span> <span class="n">title</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">19</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;...&#39;</span>
327        <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span> <span class="o">=</span> <span class="s">&quot;Model function (</span><span class="si">%s</span><span class="s">) has been set! </span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">s_title</span><span class="p">)</span>
328        <span class="bp">self</span><span class="o">.</span><span class="n">good_name</span> <span class="o">=</span> <span class="bp">True</span>
329        <span class="bp">self</span><span class="o">.</span><span class="n">on_apply</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fname</span><span class="p">)</span>
330        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">good_name</span>
331    </div>
332<div class="viewcode-block" id="TextDialog.on_apply"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.on_apply">[docs]</a>    <span class="k">def</span> <span class="nf">on_apply</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
333        <span class="sd">&quot;&quot;&quot;</span>
334<span class="sd">        On Apply</span>
335<span class="sd">        &quot;&quot;&quot;</span>
336        <span class="k">try</span><span class="p">:</span>
337            <span class="n">label</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getText</span><span class="p">()</span>
338            <span class="n">fname</span> <span class="o">=</span> <span class="n">path</span>
339            <span class="n">name1</span> <span class="o">=</span> <span class="n">label</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
340            <span class="n">name2</span> <span class="o">=</span> <span class="n">label</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
341            <span class="bp">self</span><span class="o">.</span><span class="n">write_string</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">name1</span><span class="p">,</span> <span class="n">name2</span><span class="p">)</span>
342            <span class="bp">self</span><span class="o">.</span><span class="n">compile_file</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
343            <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_custom_combo</span><span class="p">()</span>
344            <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span>
345            <span class="n">info</span> <span class="o">=</span> <span class="s">&#39;Info&#39;</span>
346            <span class="n">color</span> <span class="o">=</span> <span class="s">&#39;blue&#39;</span>
347        <span class="k">except</span><span class="p">:</span>
348            <span class="n">msg</span><span class="o">=</span> <span class="s">&quot;Easy Custom Sum/Multipy: Error occurred...&quot;</span>
349            <span class="n">info</span> <span class="o">=</span> <span class="s">&#39;Error&#39;</span>
350            <span class="n">color</span> <span class="o">=</span> <span class="s">&#39;red&#39;</span>
351        <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
352        <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span><span class="o">.</span><span class="n">SetForegroundColour</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
353        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
354            <span class="kn">from</span> <span class="nn">sas.guiframe.events</span> <span class="kn">import</span> <span class="n">StatusEvent</span> 
355            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span> <span class="o">=</span> <span class="n">msg</span><span class="p">,</span> 
356                                                      <span class="n">info</span><span class="o">=</span><span class="n">info</span><span class="p">))</span>
357        <span class="k">else</span><span class="p">:</span>
358            <span class="k">raise</span>
359                  </div>
360    <span class="k">def</span> <span class="nf">_set_model_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
361        <span class="sd">&quot;&quot;&quot;</span>
362<span class="sd">        Set the list of models</span>
363<span class="sd">        &quot;&quot;&quot;</span>
364        <span class="c"># list of model names</span>
365        <span class="n">cm_list</span> <span class="o">=</span> <span class="p">[]</span>
366        <span class="c"># models</span>
367        <span class="nb">list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_list</span>
368        <span class="c"># custom models</span>
369        <span class="n">al_list</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">plugin_dir</span><span class="p">)</span>
370        <span class="k">for</span> <span class="n">c_name</span> <span class="ow">in</span> <span class="n">al_list</span><span class="p">:</span>
371            <span class="k">if</span> <span class="n">c_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;py&#39;</span> <span class="ow">and</span> \
372                    <span class="n">c_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;__init__&#39;</span><span class="p">:</span>
373                <span class="n">name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
374                <span class="n">cm_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
375                <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">:</span>
376                    <span class="nb">list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
377        <span class="bp">self</span><span class="o">.</span><span class="n">cm_list</span> <span class="o">=</span> <span class="n">cm_list</span>
378        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
379            <span class="nb">list</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
380        <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">)):</span>
381            <span class="bp">self</span><span class="o">.</span><span class="n">model1</span><span class="o">.</span><span class="n">Append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="nb">list</span><span class="p">[</span><span class="n">idx</span><span class="p">]),</span> <span class="n">idx</span><span class="p">)</span> 
382            <span class="bp">self</span><span class="o">.</span><span class="n">model2</span><span class="o">.</span><span class="n">Append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="nb">list</span><span class="p">[</span><span class="n">idx</span><span class="p">]),</span> <span class="n">idx</span><span class="p">)</span>
383        <span class="bp">self</span><span class="o">.</span><span class="n">model1</span><span class="o">.</span><span class="n">SetStringSelection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model1_string</span><span class="p">)</span>
384        <span class="bp">self</span><span class="o">.</span><span class="n">model2</span><span class="o">.</span><span class="n">SetStringSelection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model2_string</span><span class="p">)</span>
385   
386<div class="viewcode-block" id="TextDialog.update_cm_list"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.update_cm_list">[docs]</a>    <span class="k">def</span> <span class="nf">update_cm_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
387        <span class="sd">&quot;&quot;&quot;</span>
388<span class="sd">        Update custom model list</span>
389<span class="sd">        &quot;&quot;&quot;</span>
390        <span class="n">cm_list</span> <span class="o">=</span> <span class="p">[]</span>
391        <span class="n">al_list</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">plugin_dir</span><span class="p">)</span>
392        <span class="k">for</span> <span class="n">c_name</span> <span class="ow">in</span> <span class="n">al_list</span><span class="p">:</span>
393            <span class="k">if</span> <span class="n">c_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;py&#39;</span> <span class="ow">and</span> \
394                    <span class="n">c_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;__init__&#39;</span><span class="p">:</span>
395                <span class="n">name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
396                <span class="n">cm_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
397        <span class="bp">self</span><span class="o">.</span><span class="n">cm_list</span> <span class="o">=</span> <span class="n">cm_list</span> 
398              </div>
399<div class="viewcode-block" id="TextDialog.on_model1"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.on_model1">[docs]</a>    <span class="k">def</span> <span class="nf">on_model1</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
400        <span class="sd">&quot;&quot;&quot;</span>
401<span class="sd">        Set model1</span>
402<span class="sd">        &quot;&quot;&quot;</span>
403        <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
404        <span class="bp">self</span><span class="o">.</span><span class="n">update_cm_list</span><span class="p">()</span>
405        <span class="bp">self</span><span class="o">.</span><span class="n">model1_name</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">model1</span><span class="o">.</span><span class="n">GetValue</span><span class="p">())</span>
406        <span class="bp">self</span><span class="o">.</span><span class="n">model1_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model1_name</span>
407        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">model1_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cm_list</span><span class="p">:</span>
408            <span class="bp">self</span><span class="o">.</span><span class="n">is_p1_custom</span> <span class="o">=</span> <span class="bp">True</span>
409        <span class="k">else</span><span class="p">:</span>
410            <span class="bp">self</span><span class="o">.</span><span class="n">is_p1_custom</span> <span class="o">=</span> <span class="bp">False</span>
411            </div>
412<div class="viewcode-block" id="TextDialog.on_model2"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.on_model2">[docs]</a>    <span class="k">def</span> <span class="nf">on_model2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
413        <span class="sd">&quot;&quot;&quot;</span>
414<span class="sd">        Set model2</span>
415<span class="sd">        &quot;&quot;&quot;</span>
416        <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
417        <span class="bp">self</span><span class="o">.</span><span class="n">update_cm_list</span><span class="p">()</span>
418        <span class="bp">self</span><span class="o">.</span><span class="n">model2_name</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">model2</span><span class="o">.</span><span class="n">GetValue</span><span class="p">())</span>
419        <span class="bp">self</span><span class="o">.</span><span class="n">model2_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model2_name</span>
420        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">model2_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cm_list</span><span class="p">:</span>
421            <span class="bp">self</span><span class="o">.</span><span class="n">is_p2_custom</span> <span class="o">=</span> <span class="bp">True</span>
422        <span class="k">else</span><span class="p">:</span>
423            <span class="bp">self</span><span class="o">.</span><span class="n">is_p2_custom</span> <span class="o">=</span> <span class="bp">False</span>
424        </div>
425<div class="viewcode-block" id="TextDialog.on_select_operator"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.on_select_operator">[docs]</a>    <span class="k">def</span> <span class="nf">on_select_operator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
426        <span class="sd">&quot;&quot;&quot;</span>
427<span class="sd">        On Select an Operator</span>
428<span class="sd">        &quot;&quot;&quot;</span>
429        <span class="c"># For Mac</span>
430        <span class="k">if</span> <span class="n">event</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
431            <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
432        <span class="n">name</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>   
433        <span class="n">item</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">GetEventObject</span><span class="p">()</span>
434        <span class="n">text</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</span>
435        <span class="k">if</span> <span class="n">text</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&#39;*&#39;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
436            <span class="n">name</span> <span class="o">=</span> <span class="s">&#39;Multi&#39;</span>
437            <span class="n">factor</span> <span class="o">=</span> <span class="s">&#39;BackGround&#39;</span>
438            <span class="n">f_oper</span> <span class="o">=</span> <span class="s">&#39;+&#39;</span>
439        <span class="k">else</span><span class="p">:</span>
440            <span class="n">name</span> <span class="o">=</span> <span class="s">&#39;Sum&#39;</span>
441            <span class="n">factor</span> <span class="o">=</span> <span class="s">&#39;scale_factor&#39;</span>
442            <span class="n">f_oper</span> <span class="o">=</span> <span class="s">&#39;*&#39;</span>
443
444        <span class="bp">self</span><span class="o">.</span><span class="n">factor</span> <span class="o">=</span> <span class="n">factor</span>
445        <span class="bp">self</span><span class="o">.</span><span class="n">operator</span> <span class="o">=</span> <span class="n">text</span>
446        <span class="bp">self</span><span class="o">.</span><span class="n">explanation</span> <span class="o">=</span> <span class="s">&quot;  Custom Model = </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> (model1 </span><span class="si">%s</span><span class="s"> model2)</span><span class="se">\n</span><span class="s">&quot;</span><span class="o">%</span> \
447                    <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">factor</span><span class="p">,</span> <span class="n">f_oper</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">operator</span><span class="p">)</span>
448        <span class="bp">self</span><span class="o">.</span><span class="n">explanationctr</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">explanation</span><span class="p">)</span>
449        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> <span class="o">+</span> <span class="n">M_NAME</span> 
450        <span class="bp">self</span><span class="o">.</span><span class="n">sizer</span><span class="o">.</span><span class="n">Layout</span><span class="p">()</span>
451             </div>
452<div class="viewcode-block" id="TextDialog.fill_oprator_combox"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.fill_oprator_combox">[docs]</a>    <span class="k">def</span> <span class="nf">fill_oprator_combox</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
453        <span class="sd">&quot;&quot;&quot;</span>
454<span class="sd">        fill the current combobox with the operator</span>
455<span class="sd">        &quot;&quot;&quot;</span>   
456        <span class="n">operator_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39; +&#39;</span><span class="p">,</span> <span class="s">&#39; *&#39;</span><span class="p">]</span>
457        <span class="k">for</span> <span class="n">oper</span> <span class="ow">in</span> <span class="n">operator_list</span><span class="p">:</span>
458            <span class="n">pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span><span class="o">.</span><span class="n">Append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">oper</span><span class="p">))</span>
459            <span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span><span class="o">.</span><span class="n">SetClientData</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">oper</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span>
460        <span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
461            </div>
462<div class="viewcode-block" id="TextDialog.getText"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.getText">[docs]</a>    <span class="k">def</span> <span class="nf">getText</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
463        <span class="sd">&quot;&quot;&quot;</span>
464<span class="sd">        Returns model name string as list</span>
465<span class="sd">        &quot;&quot;&quot;</span>
466        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">model1_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model2_name</span><span class="p">]</span>
467    </div>
468<div class="viewcode-block" id="TextDialog.write_string"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.write_string">[docs]</a>    <span class="k">def</span> <span class="nf">write_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fname</span><span class="p">,</span> <span class="n">name1</span><span class="p">,</span> <span class="n">name2</span><span class="p">):</span>
469        <span class="sd">&quot;&quot;&quot;</span>
470<span class="sd">        Write and Save file</span>
471<span class="sd">        &quot;&quot;&quot;</span>
472        <span class="bp">self</span><span class="o">.</span><span class="n">fname</span> <span class="o">=</span> <span class="n">fname</span> 
473        <span class="n">description</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</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>
474        <span class="k">if</span> <span class="n">description</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
475            <span class="n">description</span> <span class="o">=</span> <span class="n">name1</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">operator</span> <span class="o">+</span> <span class="n">name2</span>
476        <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</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>
477        <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">operator_cbox</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</span>
478        <span class="k">if</span> <span class="n">text</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&#39;+&#39;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
479            <span class="n">factor</span> <span class="o">=</span> <span class="s">&#39;scale_factor&#39;</span>
480            <span class="n">f_oper</span> <span class="o">=</span> <span class="s">&#39;*&#39;</span>
481            <span class="n">default_val</span> <span class="o">=</span> <span class="s">&#39;1.0&#39;</span>
482        <span class="k">else</span><span class="p">:</span>
483            <span class="n">factor</span> <span class="o">=</span> <span class="s">&#39;BackGround&#39;</span>
484            <span class="n">f_oper</span> <span class="o">=</span> <span class="s">&#39;+&#39;</span>
485            <span class="n">default_val</span> <span class="o">=</span> <span class="s">&#39;0.0&#39;</span>
486        <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fname</span>
487        <span class="k">try</span><span class="p">:</span>
488            <span class="n">out_f</span> <span class="o">=</span>  <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="s">&#39;w&#39;</span><span class="p">)</span>
489        <span class="k">except</span> <span class="p">:</span>
490            <span class="k">raise</span>
491        <span class="n">lines</span> <span class="o">=</span> <span class="n">SUM_TEMPLATE</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>
492        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
493            <span class="k">try</span><span class="p">:</span>
494                <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;scale_factor&quot;</span><span class="p">):</span>
495                    <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;scale_factor&#39;</span><span class="p">,</span> <span class="n">factor</span><span class="p">)</span>
496                    <span class="c">#print &quot;scale_factor&quot;, line</span>
497                <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;= </span><span class="si">%s</span><span class="s">&quot;</span><span class="p">):</span>
498                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">%</span> <span class="p">(</span><span class="n">default_val</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
499                <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;import Model as P1&quot;</span><span class="p">):</span>
500                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_p1_custom</span><span class="p">:</span>
501                        <span class="n">line</span> <span class="o">=</span> <span class="n">line</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;&#39;</span><span class="p">)</span>
502                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">%</span> <span class="n">name1</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
503                    <span class="k">else</span><span class="p">:</span>
504                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
505                <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;import </span><span class="si">%s</span><span class="s"> as P1&quot;</span><span class="p">):</span>
506                    <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_p1_custom</span><span class="p">:</span>
507                        <span class="n">line</span> <span class="o">=</span> <span class="n">line</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;&#39;</span><span class="p">)</span>
508                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">%</span> <span class="p">(</span><span class="n">name1</span><span class="p">,</span> <span class="n">name1</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
509                    <span class="k">else</span><span class="p">:</span>
510                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
511                <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;import Model as P2&quot;</span><span class="p">):</span>
512                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_p2_custom</span><span class="p">:</span>
513                        <span class="n">line</span> <span class="o">=</span> <span class="n">line</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;&#39;</span><span class="p">)</span>
514                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">%</span> <span class="n">name2</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
515                    <span class="k">else</span><span class="p">:</span>
516                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
517                <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;import </span><span class="si">%s</span><span class="s"> as P2&quot;</span><span class="p">):</span>
518                    <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_p2_custom</span><span class="p">:</span>
519                        <span class="n">line</span> <span class="o">=</span> <span class="n">line</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;&#39;</span><span class="p">)</span>
520                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">%</span> <span class="p">(</span><span class="n">name2</span><span class="p">,</span> <span class="n">name2</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
521                    <span class="k">else</span><span class="p">:</span>
522                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
523                <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;self.description = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span><span class="p">):</span>
524                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">%</span> <span class="n">description</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
525                <span class="c">#elif line.count(&quot;run&quot;) and line.count(&quot;%s&quot;):</span>
526                <span class="c">#    out_f.write(line % self.operator + &quot;\n&quot;)</span>
527                <span class="c">#elif line.count(&quot;evalDistribution&quot;) and line.count(&quot;%s&quot;):</span>
528                <span class="c">#    out_f.write(line % self.operator + &quot;\n&quot;)</span>
529                <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;return&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
530                    <span class="c">#print &quot;line return&quot;, line</span>
531                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">%</span> <span class="p">(</span><span class="n">f_oper</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">operator</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
532                <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;out2&quot;</span><span class="p">)</span><span class="ow">and</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">):</span>
533                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">operator</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
534                <span class="k">else</span><span class="p">:</span>
535                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
536            <span class="k">except</span><span class="p">:</span>
537                <span class="k">raise</span>
538        <span class="n">out_f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
539        <span class="c">#else:</span>
540        <span class="c">#    msg = &quot;Name exists already.&quot;</span>
541        </div>
542<div class="viewcode-block" id="TextDialog.compile_file"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.compile_file">[docs]</a>    <span class="k">def</span> <span class="nf">compile_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
543        <span class="sd">&quot;&quot;&quot;</span>
544<span class="sd">        Compile the file in the path</span>
545<span class="sd">        &quot;&quot;&quot;</span>
546        <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fname</span>
547        <span class="n">_compileFile</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
548        </div>
549<div class="viewcode-block" id="TextDialog.delete_file"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.TextDialog.delete_file">[docs]</a>    <span class="k">def</span> <span class="nf">delete_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
550        <span class="sd">&quot;&quot;&quot;</span>
551<span class="sd">        Delete file in the path</span>
552<span class="sd">        &quot;&quot;&quot;</span>
553        <span class="n">_deleteFile</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
554
555</div></div>
556<div class="viewcode-block" id="EditorPanel"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel">[docs]</a><span class="k">class</span> <span class="nc">EditorPanel</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">ScrolledWindow</span><span class="p">):</span>
557    <span class="sd">&quot;&quot;&quot;</span>
558<span class="sd">    Custom model function editor</span>
559<span class="sd">    &quot;&quot;&quot;</span>
560    <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">parent</span><span class="p">,</span> <span class="n">base</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
561        <span class="n">kwds</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">title</span>
562        <span class="n">kwds</span><span class="p">[</span><span class="s">&quot;size&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">EDITOR_WIDTH</span><span class="p">,</span> <span class="n">EDITOR_HEIGTH</span><span class="p">)</span>
563        <span class="n">kwds</span><span class="p">[</span><span class="s">&quot;style&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">FULL_REPAINT_ON_RESIZE</span>
564        <span class="n">wx</span><span class="o">.</span><span class="n">ScrolledWindow</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span>
565        <span class="c">#self.SetupScrolling()</span>
566        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span>
567        <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">=</span> <span class="n">base</span>
568        <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span>
569        <span class="bp">self</span><span class="o">.</span><span class="n">font</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">SystemSettings_GetFont</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">SYS_SYSTEM_FONT</span><span class="p">)</span>
570        <span class="bp">self</span><span class="o">.</span><span class="n">font</span><span class="o">.</span><span class="n">SetPointSize</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
571        <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="bp">None</span>
572        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">&#39;untitled&#39;</span>
573        <span class="bp">self</span><span class="o">.</span><span class="n">overwrite_name</span> <span class="o">=</span> <span class="bp">False</span>
574        <span class="bp">self</span><span class="o">.</span><span class="n">is_2d</span> <span class="o">=</span> <span class="bp">False</span>
575        <span class="bp">self</span><span class="o">.</span><span class="n">fname</span> <span class="o">=</span> <span class="bp">None</span>
576        <span class="bp">self</span><span class="o">.</span><span class="n">param_strings</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
577        <span class="bp">self</span><span class="o">.</span><span class="n">function_strings</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
578        <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
579        <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span> <span class="o">=</span> <span class="bp">None</span>
580        <span class="bp">self</span><span class="o">.</span><span class="n">msg_sizer</span> <span class="o">=</span> <span class="bp">None</span>
581        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
582        <span class="bp">self</span><span class="o">.</span><span class="n">_description</span> <span class="o">=</span> <span class="s">&quot;New Custom Model&quot;</span>
583        <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span> <span class="o">=</span> <span class="bp">None</span>
584        <span class="c">#self._default_save_location = os.getcwd()</span>
585        <span class="bp">self</span><span class="o">.</span><span class="n">_do_layout</span><span class="p">()</span>
586        <span class="c">#self.bt_apply.Disable()</span>
587
588             
589    <span class="k">def</span> <span class="nf">_define_structure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
590        <span class="sd">&quot;&quot;&quot;</span>
591<span class="sd">        define initial sizer </span>
592<span class="sd">        &quot;&quot;&quot;</span>
593        <span class="c">#w, h = self.parent.GetSize()</span>
594        <span class="bp">self</span><span class="o">.</span><span class="n">main_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
595        <span class="bp">self</span><span class="o">.</span><span class="n">name_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
596        <span class="bp">self</span><span class="o">.</span><span class="n">name_hsizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
597        <span class="bp">self</span><span class="o">.</span><span class="n">desc_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
598        <span class="bp">self</span><span class="o">.</span><span class="n">param_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
599        <span class="bp">self</span><span class="o">.</span><span class="n">function_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
600        <span class="bp">self</span><span class="o">.</span><span class="n">func_horizon_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
601        <span class="bp">self</span><span class="o">.</span><span class="n">button_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
602        <span class="bp">self</span><span class="o">.</span><span class="n">msg_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
603       
604    <span class="k">def</span> <span class="nf">_layout_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
605        <span class="sd">&quot;&quot;&quot;</span>
606<span class="sd">        Do the layout for file/function name related widgets</span>
607<span class="sd">        &quot;&quot;&quot;</span>
608        <span class="c">#title name [string]</span>
609        <span class="n">name_txt</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;Function Name : &#39;</span><span class="p">)</span> 
610        <span class="n">overwrite_cb</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">CheckBox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&quot;Overwrite?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
611        <span class="n">overwrite_cb</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
612        <span class="n">overwrite_cb</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="s">&quot;Overwrite it if already exists?&quot;</span><span class="p">)</span>
613        <span class="n">wx</span><span class="o">.</span><span class="n">EVT_CHECKBOX</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">overwrite_cb</span><span class="o">.</span><span class="n">GetId</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_over_cb</span><span class="p">)</span>
614        <span class="c">#overwrite_cb.Show(False)</span>
615        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">TextCtrl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">PANEL_WIDTH</span><span class="o">*</span><span class="mi">3</span><span class="o">/</span><span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span> 
616        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_TEXT_ENTER</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_change_name</span><span class="p">)</span>
617        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="s">&#39;MyFunction&#39;</span><span class="p">)</span>
618        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetFont</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">font</span><span class="p">)</span>
619        <span class="n">hint_name</span> <span class="o">=</span> <span class="s">&quot;Unique Model Function Name.&quot;</span>
620        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="n">hint_name</span><span class="p">)</span>
621        <span class="bp">self</span><span class="o">.</span><span class="n">name_hsizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
622                                       <span class="p">(</span><span class="n">overwrite_cb</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="mi">20</span><span class="p">)])</span>
623        <span class="bp">self</span><span class="o">.</span><span class="n">name_sizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="n">name_txt</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
624                                       <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name_hsizer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
625                                        <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">BOTTOM</span><span class="p">,</span> <span class="mi">10</span><span class="p">)])</span>
626       
627       
628    <span class="k">def</span> <span class="nf">_layout_description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
629        <span class="sd">&quot;&quot;&quot;</span>
630<span class="sd">        Do the layout for description related widgets</span>
631<span class="sd">        &quot;&quot;&quot;</span>
632        <span class="c">#title name [string]</span>
633        <span class="n">desc_txt</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;Description (optional) : &#39;</span><span class="p">)</span> 
634        <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">TextCtrl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">PANEL_WIDTH</span><span class="o">*</span><span class="mi">3</span><span class="o">/</span><span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span> 
635        <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
636        <span class="c">#self.name_tcl.SetFont(self.font)</span>
637        <span class="n">hint_desc</span> <span class="o">=</span> <span class="s">&quot;Write a short description of the model function.&quot;</span>
638        <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="n">hint_desc</span><span class="p">)</span>
639        <span class="bp">self</span><span class="o">.</span><span class="n">desc_sizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="n">desc_txt</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
640                                       <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
641                                        <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">BOTTOM</span><span class="p">,</span> <span class="mi">10</span><span class="p">)])</span>     
642    <span class="k">def</span> <span class="nf">_layout_param</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
643        <span class="sd">&quot;&quot;&quot;</span>
644<span class="sd">        Do the layout for parameter related widgets</span>
645<span class="sd">        &quot;&quot;&quot;</span>
646        <span class="n">param_txt</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;Fit Parameters (if any): &#39;</span><span class="p">)</span> 
647       
648        <span class="n">param_tip</span> <span class="o">=</span> <span class="s">&quot;#Set the parameters and initial values.</span><span class="se">\n</span><span class="s">&quot;</span>
649        <span class="n">param_tip</span> <span class="o">+=</span> <span class="s">&quot;#Example:</span><span class="se">\n</span><span class="s">&quot;</span>
650        <span class="n">param_tip</span> <span class="o">+=</span> <span class="s">&quot;A = 1</span><span class="se">\n</span><span class="s">B = 1&quot;</span>
651        <span class="c">#param_txt.SetToolTipString(param_tip)</span>
652        <span class="nb">id</span>  <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">NewId</span><span class="p">()</span> 
653        <span class="bp">self</span><span class="o">.</span><span class="n">param_tcl</span> <span class="o">=</span> <span class="n">EditWindow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">DefaultPosition</span><span class="p">,</span> 
654                            <span class="n">wx</span><span class="o">.</span><span class="n">DefaultSize</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">CLIP_CHILDREN</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">SUNKEN_BORDER</span><span class="p">)</span>
655        <span class="bp">self</span><span class="o">.</span><span class="n">param_tcl</span><span class="o">.</span><span class="n">setDisplayLineNumbers</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
656        <span class="bp">self</span><span class="o">.</span><span class="n">param_tcl</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="n">param_tip</span><span class="p">)</span>
657
658        <span class="bp">self</span><span class="o">.</span><span class="n">param_sizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="n">param_txt</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
659                        <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">param_tcl</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">10</span><span class="p">)])</span>
660               
661    <span class="k">def</span> <span class="nf">_layout_function</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
662        <span class="sd">&quot;&quot;&quot;</span>
663<span class="sd">        Do the layout for function related widgets</span>
664<span class="sd">        &quot;&quot;&quot;</span>
665        <span class="n">function_txt</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;Function(x) : &#39;</span><span class="p">)</span> 
666        <span class="n">hint_function</span> <span class="o">=</span> <span class="s">&quot;#Example:</span><span class="se">\n</span><span class="s">&quot;</span>
667        <span class="n">hint_function</span> <span class="o">+=</span> <span class="s">&quot;if x &lt;= 0:</span><span class="se">\n</span><span class="s">&quot;</span>
668        <span class="n">hint_function</span> <span class="o">+=</span> <span class="s">&quot;    y = A + B</span><span class="se">\n</span><span class="s">&quot;</span>
669        <span class="n">hint_function</span> <span class="o">+=</span> <span class="s">&quot;else:</span><span class="se">\n</span><span class="s">&quot;</span>
670        <span class="n">hint_function</span> <span class="o">+=</span> <span class="s">&quot;    y = A + B * cos(2 * pi * x)</span><span class="se">\n</span><span class="s">&quot;</span>
671        <span class="n">hint_function</span> <span class="o">+=</span> <span class="s">&quot;return y</span><span class="se">\n</span><span class="s">&quot;</span>
672        <span class="n">math_txt</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;*Useful math functions: &#39;</span><span class="p">)</span>
673        <span class="n">math_combo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fill_math_combo</span><span class="p">()</span>
674       
675        <span class="nb">id</span>  <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">NewId</span><span class="p">()</span> 
676        <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span> <span class="o">=</span> <span class="n">EditWindow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">DefaultPosition</span><span class="p">,</span> 
677                            <span class="n">wx</span><span class="o">.</span><span class="n">DefaultSize</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">CLIP_CHILDREN</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">SUNKEN_BORDER</span><span class="p">)</span>
678        <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span><span class="o">.</span><span class="n">setDisplayLineNumbers</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
679        <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="n">hint_function</span><span class="p">)</span>
680       
681        <span class="bp">self</span><span class="o">.</span><span class="n">func_horizon_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">function_txt</span><span class="p">)</span>
682        <span class="bp">self</span><span class="o">.</span><span class="n">func_horizon_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">math_txt</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="mi">250</span><span class="p">)</span>
683        <span class="bp">self</span><span class="o">.</span><span class="n">func_horizon_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">math_combo</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
684
685        <span class="bp">self</span><span class="o">.</span><span class="n">function_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">func_horizon_sizer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
686        <span class="bp">self</span><span class="o">.</span><span class="n">function_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
687       
688    <span class="k">def</span> <span class="nf">_layout_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
689        <span class="sd">&quot;&quot;&quot;</span>
690<span class="sd">        Layout msg</span>
691<span class="sd">        &quot;&quot;&quot;</span>
692        <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span><span class="p">,</span> 
693                                      <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">PANEL_WIDTH</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span>
694        <span class="bp">self</span><span class="o">.</span><span class="n">msg_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> 
695                   
696    <span class="k">def</span> <span class="nf">_layout_button</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> 
697        <span class="sd">&quot;&quot;&quot;</span>
698<span class="sd">        Do the layout for the button widgets</span>
699<span class="sd">        &quot;&quot;&quot;</span>         
700        <span class="bp">self</span><span class="o">.</span><span class="n">bt_apply</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&quot;Apply&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">_BOX_WIDTH</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span>
701        <span class="bp">self</span><span class="o">.</span><span class="n">bt_apply</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="s">&quot;Save changes into the imported data.&quot;</span><span class="p">)</span>
702        <span class="bp">self</span><span class="o">.</span><span class="n">bt_apply</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_BUTTON</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_click_apply</span><span class="p">)</span>
703       
704        <span class="bp">self</span><span class="o">.</span><span class="n">bt_close</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;Close&#39;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">_BOX_WIDTH</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">))</span>
705        <span class="bp">self</span><span class="o">.</span><span class="n">bt_close</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_BUTTON</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_close</span><span class="p">)</span>
706        <span class="bp">self</span><span class="o">.</span><span class="n">bt_close</span><span class="o">.</span><span class="n">SetToolTipString</span><span class="p">(</span><span class="s">&quot;Close this panel.&quot;</span><span class="p">)</span>
707       
708        <span class="bp">self</span><span class="o">.</span><span class="n">button_sizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="bp">self</span><span class="o">.</span><span class="n">bt_apply</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
709                                    <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="n">EDITOR_WIDTH</span> <span class="o">*</span> <span class="mf">0.8</span><span class="p">),</span>
710                                   <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bt_close</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
711                                    <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">BOTTOM</span><span class="p">,</span> <span class="mi">15</span><span class="p">)])</span>
712         
713    <span class="k">def</span> <span class="nf">_do_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
714        <span class="sd">&quot;&quot;&quot;</span>
715<span class="sd">        Draw the current panel</span>
716<span class="sd">        &quot;&quot;&quot;</span>
717        <span class="bp">self</span><span class="o">.</span><span class="n">_define_structure</span><span class="p">()</span>
718        <span class="bp">self</span><span class="o">.</span><span class="n">_layout_name</span><span class="p">()</span>
719        <span class="bp">self</span><span class="o">.</span><span class="n">_layout_description</span><span class="p">()</span>
720        <span class="bp">self</span><span class="o">.</span><span class="n">_layout_param</span><span class="p">()</span>
721        <span class="bp">self</span><span class="o">.</span><span class="n">_layout_function</span><span class="p">()</span>
722        <span class="bp">self</span><span class="o">.</span><span class="n">_layout_msg</span><span class="p">()</span>
723        <span class="bp">self</span><span class="o">.</span><span class="n">_layout_button</span><span class="p">()</span>
724        <span class="bp">self</span><span class="o">.</span><span class="n">main_sizer</span><span class="o">.</span><span class="n">AddMany</span><span class="p">([(</span><span class="bp">self</span><span class="o">.</span><span class="n">name_sizer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
725                                        <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
726                                 <span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">StaticLine</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> 
727                                       <span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
728                                 <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">desc_sizer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
729                                        <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
730                                 <span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">StaticLine</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> 
731                                       <span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
732                                <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">param_sizer</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span>
733                                         <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
734                                 <span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">StaticLine</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> 
735                                       <span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
736                                <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">function_sizer</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span>
737                                         <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
738                                 <span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">StaticLine</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> 
739                                       <span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
740                                 <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg_sizer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> 
741                                        <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
742                                <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">button_sizer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span>
743                                         <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">5</span><span class="p">)])</span>
744        <span class="bp">self</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">main_sizer</span><span class="p">)</span>
745        <span class="bp">self</span><span class="o">.</span><span class="n">SetAutoLayout</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
746
747    <span class="k">def</span> <span class="nf">_fill_math_combo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
748        <span class="sd">&quot;&quot;&quot;</span>
749<span class="sd">        Fill up the math combo box</span>
750<span class="sd">        &quot;&quot;&quot;</span>
751        <span class="bp">self</span><span class="o">.</span><span class="n">math_combo</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">ComboBox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> 
752                                      <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">CB_READONLY</span><span class="p">)</span> 
753        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">dir</span><span class="p">(</span><span class="n">math</span><span class="p">):</span>
754            <span class="k">if</span> <span class="n">item</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;_&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">:</span>
755                <span class="k">try</span><span class="p">:</span>
756                    <span class="k">exec</span> <span class="s">&quot;float(math.</span><span class="si">%s</span><span class="s">)&quot;</span><span class="o">%</span> <span class="n">item</span>
757                    <span class="bp">self</span><span class="o">.</span><span class="n">math_combo</span><span class="o">.</span><span class="n">Append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">))</span>
758                <span class="k">except</span><span class="p">:</span>
759                    <span class="bp">self</span><span class="o">.</span><span class="n">math_combo</span><span class="o">.</span><span class="n">Append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;()&quot;</span> <span class="p">)</span>
760        <span class="bp">self</span><span class="o">.</span><span class="n">math_combo</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_COMBOBOX</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_on_math_select</span><span class="p">)</span>
761        <span class="bp">self</span><span class="o">.</span><span class="n">math_combo</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
762        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">math_combo</span>
763       
764    <span class="k">def</span> <span class="nf">_on_math_select</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
765        <span class="sd">&quot;&quot;&quot;</span>
766<span class="sd">        On math selection on ComboBox</span>
767<span class="sd">        &quot;&quot;&quot;</span>
768        <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
769        <span class="n">label</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">math_combo</span><span class="o">.</span><span class="n">GetLabel</span><span class="p">()</span> 
770        <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span><span class="o">.</span><span class="n">SetFocus</span><span class="p">()</span>
771        <span class="c"># Put the text at the cursor position</span>
772        <span class="n">pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span><span class="o">.</span><span class="n">GetCurrentPos</span><span class="p">()</span>
773        <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span><span class="o">.</span><span class="n">InsertText</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="n">label</span><span class="p">)</span> 
774        <span class="c"># Put the cursor at appropriate postion</span>
775        <span class="n">length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">label</span><span class="p">)</span>
776        <span class="k">if</span> <span class="n">label</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;)&#39;</span><span class="p">:</span>
777            <span class="n">length</span> <span class="o">-=</span> <span class="mi">1</span>
778        <span class="n">f_pos</span> <span class="o">=</span> <span class="n">pos</span> <span class="o">+</span> <span class="n">length</span>
779        <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span><span class="o">.</span><span class="n">GotoPos</span><span class="p">(</span><span class="n">f_pos</span><span class="p">)</span>   
780
781<div class="viewcode-block" id="EditorPanel.get_notes"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.get_notes">[docs]</a>    <span class="k">def</span> <span class="nf">get_notes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
782        <span class="sd">&quot;&quot;&quot;</span>
783<span class="sd">        return notes</span>
784<span class="sd">        &quot;&quot;&quot;</span>
785        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span>
786                 </div>
787<div class="viewcode-block" id="EditorPanel.on_change_name"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.on_change_name">[docs]</a>    <span class="k">def</span> <span class="nf">on_change_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
788        <span class="sd">&quot;&quot;&quot;</span>
789<span class="sd">        Change name</span>
790<span class="sd">        &quot;&quot;&quot;</span>
791        <span class="k">if</span> <span class="n">event</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
792            <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
793        <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s">&#39;white&#39;</span><span class="p">)</span>
794        <span class="bp">self</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
795    </div>
796<div class="viewcode-block" id="EditorPanel.check_name"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.check_name">[docs]</a>    <span class="k">def</span> <span class="nf">check_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
797        <span class="sd">&quot;&quot;&quot;</span>
798<span class="sd">        Check name if exist already</span>
799<span class="sd">        &quot;&quot;&quot;</span>
800        <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
801        <span class="bp">self</span><span class="o">.</span><span class="n">on_change_name</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
802        <span class="n">plugin_dir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span>
803        <span class="n">list_fnames</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">plugin_dir</span><span class="p">)</span>
804        <span class="c"># function/file name</span>
805        <span class="n">title</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</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>
806        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">title</span>
807        <span class="n">t_fname</span> <span class="o">=</span> <span class="n">title</span> <span class="o">+</span> <span class="s">&#39;.py&#39;</span>
808        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite_name</span><span class="p">:</span>
809            <span class="k">if</span> <span class="n">t_fname</span> <span class="ow">in</span> <span class="n">list_fnames</span><span class="p">:</span>
810                <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s">&#39;pink&#39;</span><span class="p">)</span>
811                <span class="k">return</span> <span class="bp">False</span>
812        <span class="bp">self</span><span class="o">.</span><span class="n">fname</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">plugin_dir</span><span class="p">,</span> <span class="n">t_fname</span><span class="p">)</span>
813        <span class="n">s_title</span> <span class="o">=</span> <span class="n">title</span>
814        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">title</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">20</span><span class="p">:</span>
815            <span class="n">s_title</span> <span class="o">=</span> <span class="n">title</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">19</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;...&#39;</span>
816        <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span> <span class="o">+=</span> <span class="s">&quot;Model function name is set &quot;</span>
817        <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span> <span class="o">+=</span> <span class="s">&quot;to </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="nb">str</span><span class="p">(</span><span class="n">s_title</span><span class="p">)</span>
818        <span class="k">return</span> <span class="bp">True</span>
819    </div>
820<div class="viewcode-block" id="EditorPanel.on_over_cb"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.on_over_cb">[docs]</a>    <span class="k">def</span> <span class="nf">on_over_cb</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
821        <span class="sd">&quot;&quot;&quot;</span>
822<span class="sd">        Set overwrite name flag on cb event</span>
823<span class="sd">        &quot;&quot;&quot;</span>
824        <span class="k">if</span> <span class="n">event</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
825            <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
826        <span class="n">cb</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">GetEventObject</span><span class="p">()</span>
827        <span class="bp">self</span><span class="o">.</span><span class="n">overwrite_name</span> <span class="o">=</span> <span class="n">cb</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</span>
828        </div>
829<div class="viewcode-block" id="EditorPanel.on_click_apply"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.on_click_apply">[docs]</a>    <span class="k">def</span> <span class="nf">on_click_apply</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
830        <span class="sd">&quot;&quot;&quot;   </span>
831<span class="sd">        Changes are saved in data object imported to edit</span>
832<span class="sd">        &quot;&quot;&quot;</span>
833        <span class="c">#must post event here</span>
834        <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
835        <span class="n">info</span> <span class="o">=</span> <span class="s">&#39;Info&#39;</span>
836        <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
837        <span class="c"># Sort out the errors if occur</span>
838        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_name</span><span class="p">():</span>
839            <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name_tcl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</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>
840            <span class="n">description</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">desc_tcl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</span>
841            <span class="n">param_str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">param_tcl</span><span class="o">.</span><span class="n">GetText</span><span class="p">()</span>
842            <span class="n">func_str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_tcl</span><span class="o">.</span><span class="n">GetText</span><span class="p">()</span>
843            <span class="c"># No input for the model function</span>
844            <span class="k">if</span> <span class="n">func_str</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>     
845                <span class="k">if</span> <span class="n">func_str</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&#39;return&#39;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
846                    <span class="bp">self</span><span class="o">.</span><span class="n">write_file</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fname</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">param_str</span><span class="p">,</span> 
847                                                                    <span class="n">func_str</span><span class="p">)</span>
848                    <span class="n">tr_msg</span> <span class="o">=</span> <span class="n">_compileFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fname</span><span class="p">)</span>
849                    <span class="n">msg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">tr_msg</span><span class="o">.</span><span class="n">__str__</span><span class="p">())</span>
850                    <span class="c"># Compile error</span>
851                    <span class="k">if</span> <span class="n">msg</span><span class="p">:</span>
852                        <span class="n">msg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;  &quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
853                        <span class="n">msg</span> <span class="o">+=</span>  <span class="s">&quot;</span><span class="se">\n</span><span class="s">Compiling Failed&quot;</span>
854                <span class="k">else</span><span class="p">:</span>
855                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error: The func(x) must &#39;return&#39; a value at least.</span><span class="se">\n</span><span class="s">&quot;</span>
856                    <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;For example: </span><span class="se">\n\n</span><span class="s">return 2*x&quot;</span>
857            <span class="k">else</span><span class="p">:</span>
858                <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Error: Function is not defined.&#39;</span>
859        <span class="k">else</span><span class="p">:</span>
860            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Name exists already.&quot;</span>
861        <span class="c"># Prepare for the messagebox</span>
862        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">!=</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">msg</span><span class="p">:</span>
863            <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">update_custom_combo</span><span class="p">()</span>
864            <span class="n">Model</span>  <span class="o">=</span> <span class="bp">None</span>
865            <span class="k">exec</span> <span class="s">&quot;from </span><span class="si">%s</span><span class="s"> import Model&quot;</span><span class="o">%</span> <span class="n">name</span> 
866            <span class="k">try</span><span class="p">:</span>
867                <span class="n">Model</span><span class="p">()</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span> 
868            <span class="k">except</span><span class="p">:</span>
869                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error &quot;</span>
870                <span class="n">_</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
871                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;in </span><span class="si">%s</span><span class="s">:</span><span class="se">\n</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>
872        <span class="k">if</span> <span class="n">msg</span><span class="p">:</span>
873            <span class="n">info</span> <span class="o">=</span> <span class="s">&#39;Error&#39;</span>
874            <span class="n">color</span> <span class="o">=</span> <span class="s">&#39;red&#39;</span> 
875            <span class="k">try</span><span class="p">:</span>
876                <span class="c"># try to remove pyc file if exists</span>
877                <span class="n">_deleteFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fname</span><span class="p">)</span>
878                <span class="n">_deleteFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fname</span> <span class="o">+</span> <span class="s">&quot;c&quot;</span><span class="p">)</span>
879            <span class="k">except</span><span class="p">:</span>
880                <span class="k">pass</span>
881        <span class="k">else</span><span class="p">:</span>
882            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Successful! &quot;</span>
883            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;  &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span>
884            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; Please look for it in the Customized Models.&quot;</span>
885            <span class="n">info</span> <span class="o">=</span> <span class="s">&#39;Info&#39;</span>
886            <span class="n">color</span> <span class="o">=</span> <span class="s">&#39;blue&#39;</span>
887        <span class="c"># Not to display long error msg</span>
888        <span class="k">if</span> <span class="n">info</span> <span class="o">==</span> <span class="s">&#39;Error&#39;</span><span class="p">:</span>
889            <span class="n">mss</span> <span class="o">=</span> <span class="n">info</span>
890        <span class="k">else</span><span class="p">:</span>
891            <span class="n">mss</span> <span class="o">=</span> <span class="n">msg</span>
892        <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="n">mss</span><span class="p">)</span>
893        <span class="bp">self</span><span class="o">.</span><span class="n">_msg_box</span><span class="o">.</span><span class="n">SetForegroundColour</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
894        <span class="c"># Send msg to the top window  </span>
895        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
896                <span class="kn">from</span> <span class="nn">sas.guiframe.events</span> <span class="kn">import</span> <span class="n">StatusEvent</span> 
897                <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span> <span class="o">=</span> <span class="n">msg</span><span class="p">,</span> 
898                                                      <span class="n">info</span><span class="o">=</span><span class="n">info</span><span class="p">))</span>
899        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span> <span class="o">=</span> <span class="n">msg</span>
900
901                </div>
902<div class="viewcode-block" id="EditorPanel.write_file"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.write_file">[docs]</a>    <span class="k">def</span> <span class="nf">write_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fname</span><span class="p">,</span> <span class="n">desc_str</span><span class="p">,</span> <span class="n">param_str</span><span class="p">,</span> <span class="n">func_str</span><span class="p">):</span> 
903        <span class="sd">&quot;&quot;&quot;</span>
904<span class="sd">        Write content in file</span>
905<span class="sd">        </span>
906<span class="sd">        :param fname: full file path</span>
907<span class="sd">        :param desc_str: content of the description strings</span>
908<span class="sd">        :param param_str: content of params; Strings  </span>
909<span class="sd">        :param func_str: content of func; Strings</span>
910<span class="sd">        &quot;&quot;&quot;</span> 
911        <span class="k">try</span><span class="p">:</span>
912            <span class="n">out_f</span> <span class="o">=</span>  <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span><span class="s">&#39;w&#39;</span><span class="p">)</span>
913        <span class="k">except</span> <span class="p">:</span>
914            <span class="k">raise</span>
915        <span class="c"># Prepare the content of the function</span>
916        <span class="n">lines</span> <span class="o">=</span> <span class="n">CUSTOM_TEMPLATE</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>
917
918        <span class="n">has_scipy</span> <span class="o">=</span> <span class="n">func_str</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;scipy.&quot;</span><span class="p">)</span>
919        <span class="bp">self</span><span class="o">.</span><span class="n">is_2d</span> <span class="o">=</span> <span class="n">func_str</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;#self.ndim = 2&quot;</span><span class="p">)</span>
920        <span class="n">line_2d</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
921        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_2d</span><span class="p">:</span>
922            <span class="n">line_2d</span> <span class="o">=</span> <span class="n">CUSTOM_2D_TEMP</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>
923        <span class="n">line_test</span> <span class="o">=</span> <span class="n">TEST_TEMPLATE</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>
924        <span class="n">local_params</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
925        <span class="n">spaces</span> <span class="o">=</span> <span class="s">&#39;        &#39;</span><span class="c">#8spaces</span>
926        <span class="c"># write function here</span>
927        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
928            <span class="c"># The location where to put the strings is </span>
929            <span class="c"># hard-coded in the template as shown below.</span>
930            <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;#self.params here&quot;</span><span class="p">):</span>
931                <span class="k">for</span> <span class="n">param_line</span> <span class="ow">in</span> <span class="n">param_str</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>
932                    <span class="n">p_line</span> <span class="o">=</span> <span class="n">param_line</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>
933                    <span class="k">if</span> <span class="n">p_line</span><span class="p">:</span>
934                        <span class="n">p0_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_param_helper</span><span class="p">(</span><span class="n">p_line</span><span class="p">)</span>
935                        <span class="n">local_params</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_function_helper</span><span class="p">(</span><span class="n">p_line</span><span class="p">)</span>
936                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">p0_line</span><span class="p">)</span>
937            <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;#local params here&quot;</span><span class="p">):</span>
938                <span class="k">if</span> <span class="n">local_params</span><span class="p">:</span>
939                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">local_params</span><span class="p">)</span>
940            <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;self.description = &quot;</span><span class="p">):</span>
941                <span class="n">des0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\\</span><span class="s">n&quot;</span>
942                <span class="n">desc</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">desc_str</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="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\&quot;</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">))</span>
943                <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="o">%</span> <span class="p">(</span><span class="n">des0</span> <span class="o">+</span> <span class="n">desc</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
944            <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;def function(self, x=0.0</span><span class="si">%s</span><span class="s">):&quot;</span><span class="p">):</span>
945                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_2d</span><span class="p">:</span>
946                    <span class="n">y_str</span> <span class="o">=</span> <span class="s">&#39;, y=0.0&#39;</span>
947                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="o">%</span> <span class="n">y_str</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
948                <span class="k">else</span><span class="p">:</span>
949                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="o">%</span> <span class="s">&#39;&#39;</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
950            <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;#function here&quot;</span><span class="p">):</span>
951                <span class="k">for</span> <span class="n">func_line</span> <span class="ow">in</span> <span class="n">func_str</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>
952                    <span class="n">f_line</span> <span class="o">=</span> <span class="n">func_line</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
953                    <span class="k">if</span> <span class="n">f_line</span><span class="p">:</span>
954                        <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">spaces</span> <span class="o">+</span> <span class="n">f_line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
955                <span class="k">if</span> <span class="ow">not</span> <span class="n">func_str</span><span class="p">:</span>
956                    <span class="n">dep_var</span> <span class="o">=</span> <span class="s">&#39;y&#39;</span>
957                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_2d</span><span class="p">:</span>
958                        <span class="n">dep_var</span> <span class="o">=</span> <span class="s">&#39;z&#39;</span>
959                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">spaces</span> <span class="o">+</span> <span class="s">&#39;return </span><span class="si">%s</span><span class="s">&#39;</span><span class="o">%</span> <span class="n">dep_var</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
960            <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;#import scipy?&quot;</span><span class="p">):</span>
961                <span class="k">if</span> <span class="n">has_scipy</span><span class="p">:</span>
962                    <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;import scipy&quot;</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
963            <span class="c">#elif line.count(&quot;name = &quot;):</span>
964            <span class="c">#    out_f.write(line % self.name + &quot;\n&quot;)</span>
965            <span class="k">elif</span> <span class="n">line</span><span class="p">:</span>
966                <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
967        <span class="c"># run string for 2d</span>
968        <span class="k">if</span> <span class="n">line_2d</span><span class="p">:</span>
969            <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">line_2d</span><span class="p">:</span>
970                <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
971        <span class="c"># Test strins</span>
972        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">line_test</span><span class="p">:</span>
973            <span class="n">out_f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
974   
975        <span class="n">out_f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> 
976    </div>
977<div class="viewcode-block" id="EditorPanel.set_param_helper"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.set_param_helper">[docs]</a>    <span class="k">def</span> <span class="nf">set_param_helper</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>   
978        <span class="sd">&quot;&quot;&quot;</span>
979<span class="sd">        Get string in line to define the params dictionary</span>
980<span class="sd">        </span>
981<span class="sd">        :param line: one line of string got from the param_str</span>
982<span class="sd">        &quot;&quot;&quot;</span>
983        <span class="n">flag</span> <span class="o">=</span> <span class="bp">True</span>
984        <span class="n">params_str</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
985        <span class="n">spaces</span> <span class="o">=</span> <span class="s">&#39;        &#39;</span><span class="c">#8spaces</span>
986        <span class="n">items</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)</span>
987        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
988            <span class="n">name</span> <span class="o">=</span> <span class="n">item</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">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
989            <span class="k">try</span><span class="p">:</span>
990                <span class="n">value</span> <span class="o">=</span> <span class="n">item</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">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
991                <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
992            <span class="k">except</span><span class="p">:</span>
993                <span class="n">value</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="c"># default</span>
994            <span class="n">params_str</span> <span class="o">+=</span> <span class="n">spaces</span> <span class="o">+</span> <span class="s">&quot;self.params[&#39;</span><span class="si">%s</span><span class="s">&#39;] = </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>
995           
996        <span class="k">return</span> <span class="n">params_str</span>
997</div>
998<div class="viewcode-block" id="EditorPanel.set_function_helper"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.set_function_helper">[docs]</a>    <span class="k">def</span> <span class="nf">set_function_helper</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>   
999        <span class="sd">&quot;&quot;&quot;</span>
1000<span class="sd">        Get string in line to define the local params</span>
1001<span class="sd">        </span>
1002<span class="sd">        :param line: one line of string got from the param_str</span>
1003<span class="sd">        &quot;&quot;&quot;</span>
1004        <span class="n">flag</span> <span class="o">=</span> <span class="bp">True</span>
1005        <span class="n">params_str</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
1006        <span class="n">spaces</span> <span class="o">=</span> <span class="s">&#39;        &#39;</span><span class="c">#8spaces</span>
1007        <span class="n">items</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)</span>
1008        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
1009            <span class="n">name</span> <span class="o">=</span> <span class="n">item</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">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
1010            <span class="n">params_str</span> <span class="o">+=</span> <span class="n">spaces</span> <span class="o">+</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> = self.params[&#39;</span><span class="si">%s</span><span class="s">&#39;]</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">name</span><span class="p">)</span>
1011        <span class="k">return</span> <span class="n">params_str</span>
1012    </div>
1013<div class="viewcode-block" id="EditorPanel.get_warning"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.get_warning">[docs]</a>    <span class="k">def</span> <span class="nf">get_warning</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1014        <span class="sd">&quot;&quot;&quot;</span>
1015<span class="sd">        Get the warning msg </span>
1016<span class="sd">        &quot;&quot;&quot;</span>
1017        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">warning</span>
1018        </div>
1019<div class="viewcode-block" id="EditorPanel.on_close"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorPanel.on_close">[docs]</a>    <span class="k">def</span> <span class="nf">on_close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
1020        <span class="sd">&quot;&quot;&quot;</span>
1021<span class="sd">        leave data as it is and close</span>
1022<span class="sd">        &quot;&quot;&quot;</span>
1023        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">Show</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span><span class="c">#Close()</span>
1024        <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
1025        </div></div>
1026<div class="viewcode-block" id="EditorWindow"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorWindow">[docs]</a><span class="k">class</span> <span class="nc">EditorWindow</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">Frame</span><span class="p">):</span>
1027    <span class="sd">&quot;&quot;&quot;</span>
1028<span class="sd">    Editor Window</span>
1029<span class="sd">    &quot;&quot;&quot;</span>
1030    <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">parent</span><span class="p">,</span> <span class="n">base</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> 
1031                 <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="n">EDITOR_WIDTH</span><span class="p">,</span> <span class="n">EDITOR_HEIGTH</span><span class="p">),</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
1032        <span class="sd">&quot;&quot;&quot;</span>
1033<span class="sd">        Init</span>
1034<span class="sd">        &quot;&quot;&quot;</span>
1035        <span class="n">kwds</span><span class="p">[</span><span class="s">&quot;title&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">title</span>
1036        <span class="n">kwds</span><span class="p">[</span><span class="s">&quot;size&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span>
1037        <span class="n">wx</span><span class="o">.</span><span class="n">Frame</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span>
1038        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span>
1039        <span class="bp">self</span><span class="o">.</span><span class="n">panel</span> <span class="o">=</span> <span class="n">EditorPanel</span><span class="p">(</span><span class="n">parent</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="n">parent</span><span class="p">,</span> 
1040                                 <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="n">title</span><span class="p">)</span>
1041        <span class="bp">self</span><span class="o">.</span><span class="n">Show</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
1042        <span class="n">wx</span><span class="o">.</span><span class="n">EVT_CLOSE</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">OnClose</span><span class="p">)</span>
1043   
1044<div class="viewcode-block" id="EditorWindow.OnClose"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.calculator.html#sas.perspectives.calculator.model_editor.EditorWindow.OnClose">[docs]</a>    <span class="k">def</span> <span class="nf">OnClose</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> 
1045        <span class="sd">&quot;&quot;&quot;</span>
1046<span class="sd">        On close event</span>
1047<span class="sd">        &quot;&quot;&quot;</span>
1048        <span class="bp">self</span><span class="o">.</span><span class="n">Show</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
1049        <span class="c">#if self.parent != None:</span>
1050        <span class="c">#    self.parent.new_model_frame = None</span>
1051        <span class="c">#self.Destroy()  </span>
1052
1053<span class="c">## Templates for custom models</span></div></div>
1054<span class="n">CUSTOM_TEMPLATE</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
1055<span class="s">from sas.models.pluginmodel import Model1DPlugin</span>
1056<span class="s">from math import *</span>
1057<span class="s">import os</span>
1058<span class="s">import sys</span>
1059<span class="s">import numpy</span>
1060<span class="s">#import scipy?</span>
1061<span class="s">class Model(Model1DPlugin):</span>
1062<span class="s">    name = &quot;&quot;                             </span>
1063<span class="s">    def __init__(self):</span>
1064<span class="s">        Model1DPlugin.__init__(self, name=self.name)  </span>
1065<span class="s">        #set name same as file name </span>
1066<span class="s">        self.name = self.get_fname()                                                   </span>
1067<span class="s">        #self.params here</span>
1068<span class="s">        self.description = &quot;</span><span class="si">%s</span><span class="s">&quot;</span>
1069<span class="s">        self.set_details()</span>
1070<span class="s">    def function(self, x=0.0</span><span class="si">%s</span><span class="s">):</span>
1071<span class="s">        #local params here</span>
1072<span class="s">        #function here</span>
1073<span class="s">&quot;&quot;&quot;</span>
1074<span class="n">CUSTOM_2D_TEMP</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
1075<span class="s">    def run(self, x=0.0, y=0.0):</span>
1076<span class="s">        if x.__class__.__name__ == &#39;list&#39;:</span>
1077<span class="s">            x_val = x[0]</span>
1078<span class="s">            y_val = y[0]*0.0</span>
1079<span class="s">            return self.function(x_val, y_val)</span>
1080<span class="s">        elif x.__class__.__name__ == &#39;tuple&#39;:</span>
1081<span class="s">            msg = &quot;Tuples are not allowed as input to BaseComponent models&quot;</span>
1082<span class="s">            raise ValueError, msg</span>
1083<span class="s">        else:</span>
1084<span class="s">            return self.function(x, 0.0)</span>
1085<span class="s">    def runXY(self, x=0.0, y=0.0):</span>
1086<span class="s">        if x.__class__.__name__ == &#39;list&#39;:</span>
1087<span class="s">            return self.function(x, y)</span>
1088<span class="s">        elif x.__class__.__name__ == &#39;tuple&#39;:</span>
1089<span class="s">            msg = &quot;Tuples are not allowed as input to BaseComponent models&quot;</span>
1090<span class="s">            raise ValueError, msg</span>
1091<span class="s">        else:</span>
1092<span class="s">            return self.function(x, y)</span>
1093<span class="s">    def evalDistribution(self, qdist):</span>
1094<span class="s">        if qdist.__class__.__name__ == &#39;list&#39;:</span>
1095<span class="s">            msg = &quot;evalDistribution expects a list of 2 ndarrays&quot;</span>
1096<span class="s">            if len(qdist)!=2:</span>
1097<span class="s">                raise RuntimeError, msg</span>
1098<span class="s">            if qdist[0].__class__.__name__ != &#39;ndarray&#39;:</span>
1099<span class="s">                raise RuntimeError, msg</span>
1100<span class="s">            if qdist[1].__class__.__name__ != &#39;ndarray&#39;:</span>
1101<span class="s">                raise RuntimeError, msg</span>
1102<span class="s">            v_model = numpy.vectorize(self.runXY, otypes=[float])</span>
1103<span class="s">            iq_array = v_model(qdist[0], qdist[1])</span>
1104<span class="s">            return iq_array</span>
1105<span class="s">        elif qdist.__class__.__name__ == &#39;ndarray&#39;:</span>
1106<span class="s">            v_model = numpy.vectorize(self.runXY, otypes=[float])</span>
1107<span class="s">            iq_array = v_model(qdist)</span>
1108<span class="s">            return iq_array</span>
1109<span class="s">&quot;&quot;&quot;</span>
1110<span class="n">TEST_TEMPLATE</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
1111<span class="s">    def get_fname(self):</span>
1112<span class="s">        path = sys._getframe().f_code.co_filename</span>
1113<span class="s">        basename  = os.path.basename(path)</span>
1114<span class="s">        name, _ = os.path.splitext(basename)</span>
1115<span class="s">        return name</span>
1116<span class="s">######################################################################</span>
1117<span class="s">## THIS IS FOR TEST. DO NOT MODIFY THE FOLLOWING LINES!!!!!!!!!!!!!!!!       </span>
1118<span class="s">if __name__ == &quot;__main__&quot;: </span>
1119<span class="s">    m= Model() </span>
1120<span class="s">    out1 = m.runXY(0.0)</span>
1121<span class="s">    out2 = m.runXY(0.01)</span>
1122<span class="s">    isfine1 = numpy.isfinite(out1)</span>
1123<span class="s">    isfine2 = numpy.isfinite(out2)</span>
1124<span class="s">    print &quot;Testing the value at Q = 0.0:&quot;</span>
1125<span class="s">    print out1, &quot; : finite? &quot;, isfine1</span>
1126<span class="s">    print &quot;Testing the value at Q = 0.01:&quot;</span>
1127<span class="s">    print out2, &quot; : finite? &quot;, isfine2</span>
1128<span class="s">    if isfine1 and isfine2:</span>
1129<span class="s">        print &quot;===&gt; Simple Test: Passed!&quot;</span>
1130<span class="s">    else:</span>
1131<span class="s">        print &quot;===&gt; Simple Test: Failed!&quot;</span>
1132<span class="s">&quot;&quot;&quot;</span>
1133<span class="n">SUM_TEMPLATE</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
1134<span class="s"># A sample of an experimental model function for Sum/Multiply(Pmodel1,Pmodel2)</span>
1135<span class="s">import copy</span>
1136<span class="s">from sas.models.pluginmodel import Model1DPlugin</span>
1137<span class="s"># User can change the name of the model (only with single functional model)</span>
1138<span class="s">#P1_model: </span>
1139<span class="s">#from sas.models.</span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s"> as P1</span>
1140<span class="s">#from </span><span class="si">%s</span><span class="s"> import Model as P1 </span>
1141
1142<span class="s">#P2_model: </span>
1143<span class="s">#from sas.models.</span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s"> as P2</span>
1144<span class="s">#from </span><span class="si">%s</span><span class="s"> import Model as P2 </span>
1145<span class="s">import os</span>
1146<span class="s">import sys</span>
1147
1148<span class="s">class Model(Model1DPlugin):</span>
1149<span class="s">    name = &quot;&quot;</span>
1150<span class="s">    def __init__(self):</span>
1151<span class="s">        Model1DPlugin.__init__(self, name=&#39;&#39;)</span>
1152<span class="s">        p_model1 = P1()</span>
1153<span class="s">        p_model2 = P2()</span>
1154<span class="s">        ## Setting  model name model description</span>
1155<span class="s">        self.description = &#39;</span><span class="si">%s</span><span class="s">&#39;</span>
1156<span class="s">        self.name = self.get_fname()</span>
1157<span class="s">        if self.name.rstrip().lstrip() == &#39;&#39;:</span>
1158<span class="s">            self.name = self._get_name(p_model1.name, p_model2.name)</span>
1159<span class="s">        if self.description.rstrip().lstrip() == &#39;&#39;:</span>
1160<span class="s">            self.description = p_model1.name</span>
1161<span class="s">            self.description += p_model2.name</span>
1162<span class="s">            self.fill_description(p_model1, p_model2)</span>
1163
1164<span class="s">        ## Define parameters</span>
1165<span class="s">        self.params = {}</span>
1166
1167<span class="s">        ## Parameter details [units, min, max]</span>
1168<span class="s">        self.details = {}</span>
1169<span class="s">        ## Magnetic Panrameters</span>
1170<span class="s">        self.magnetic_params = []</span>
1171<span class="s">        # non-fittable parameters</span>
1172<span class="s">        self.non_fittable = p_model1.non_fittable  </span>
1173<span class="s">        self.non_fittable += p_model2.non_fittable  </span>
1174<span class="s">            </span>
1175<span class="s">        ##models </span>
1176<span class="s">        self.p_model1= p_model1</span>
1177<span class="s">        self.p_model2= p_model2</span>
1178<span class="s">        </span>
1179<span class="s">       </span>
1180<span class="s">        ## dispersion</span>
1181<span class="s">        self._set_dispersion()</span>
1182<span class="s">        ## Define parameters</span>
1183<span class="s">        self._set_params()</span>
1184<span class="s">        ## New parameter:scaling_factor</span>
1185<span class="s">        self.params[&#39;scale_factor&#39;] = </span><span class="si">%s</span><span class="s"></span>
1186<span class="s">        </span>
1187<span class="s">        ## Parameter details [units, min, max]</span>
1188<span class="s">        self._set_details()</span>
1189<span class="s">        self.details[&#39;scale_factor&#39;] = [&#39;&#39;, None, None]</span>
1190
1191<span class="s">        </span>
1192<span class="s">        #list of parameter that can be fitted</span>
1193<span class="s">        self._set_fixed_params()  </span>
1194<span class="s">        ## parameters with orientation</span>
1195<span class="s">        for item in self.p_model1.orientation_params:</span>
1196<span class="s">            new_item = &quot;p1_&quot; + item</span>
1197<span class="s">            if not new_item in self.orientation_params:</span>
1198<span class="s">                self.orientation_params.append(new_item)</span>
1199<span class="s">            </span>
1200<span class="s">        for item in self.p_model2.orientation_params:</span>
1201<span class="s">            new_item = &quot;p2_&quot; + item</span>
1202<span class="s">            if not new_item in self.orientation_params:</span>
1203<span class="s">                self.orientation_params.append(new_item)</span>
1204<span class="s">        ## magnetic params</span>
1205<span class="s">        for item in self.p_model1.magnetic_params:</span>
1206<span class="s">            new_item = &quot;p1_&quot; + item</span>
1207<span class="s">            if not new_item in self.magnetic_params:</span>
1208<span class="s">                self.magnetic_params.append(new_item)</span>
1209<span class="s">            </span>
1210<span class="s">        for item in self.p_model2.magnetic_params:</span>
1211<span class="s">            new_item = &quot;p2_&quot; + item</span>
1212<span class="s">            if not new_item in self.magnetic_params:</span>
1213<span class="s">                self.magnetic_params.append(new_item)</span>
1214<span class="s">        # get multiplicity if model provide it, else 1.</span>
1215<span class="s">        try:</span>
1216<span class="s">            multiplicity1 = p_model1.multiplicity</span>
1217<span class="s">            try:</span>
1218<span class="s">                multiplicity2 = p_model2.multiplicity</span>
1219<span class="s">            except:</span>
1220<span class="s">                multiplicity2 = 1</span>
1221<span class="s">        except:</span>
1222<span class="s">            multiplicity1 = 1</span>
1223<span class="s">            multiplicity2 = 1</span>
1224<span class="s">        ## functional multiplicity of the model</span>
1225<span class="s">        self.multiplicity1 = multiplicity1  </span>
1226<span class="s">        self.multiplicity2 = multiplicity2    </span>
1227<span class="s">        self.multiplicity_info = []   </span>
1228<span class="s">        </span>
1229<span class="s">    def _clone(self, obj):</span>
1230<span class="s">        obj.params     = copy.deepcopy(self.params)</span>
1231<span class="s">        obj.description     = copy.deepcopy(self.description)</span>
1232<span class="s">        obj.details    = copy.deepcopy(self.details)</span>
1233<span class="s">        obj.dispersion = copy.deepcopy(self.dispersion)</span>
1234<span class="s">        obj.p_model1  = self.p_model1.clone()</span>
1235<span class="s">        obj.p_model2  = self.p_model2.clone()</span>
1236<span class="s">        #obj = copy.deepcopy(self)</span>
1237<span class="s">        return obj</span>
1238<span class="s">    </span>
1239<span class="s">    def _get_name(self, name1, name2):</span>
1240<span class="s">        p1_name = self._get_upper_name(name1)</span>
1241<span class="s">        if not p1_name:</span>
1242<span class="s">            p1_name = name1</span>
1243<span class="s">        name = p1_name</span>
1244<span class="s">        name += &quot;_and_&quot;</span>
1245<span class="s">        p2_name = self._get_upper_name(name2)</span>
1246<span class="s">        if not p2_name:</span>
1247<span class="s">            p2_name = name2</span>
1248<span class="s">        name += p2_name</span>
1249<span class="s">        return name</span>
1250<span class="s">    </span>
1251<span class="s">    def _get_upper_name(self, name=None):</span>
1252<span class="s">        if name == None:</span>
1253<span class="s">            return &quot;&quot;</span>
1254<span class="s">        upper_name = &quot;&quot;</span>
1255<span class="s">        str_name = str(name)</span>
1256<span class="s">        for index in range(len(str_name)):</span>
1257<span class="s">            if str_name[index].isupper():</span>
1258<span class="s">                upper_name += str_name[index]</span>
1259<span class="s">        return upper_name</span>
1260<span class="s">        </span>
1261<span class="s">    def _set_dispersion(self):</span>
1262<span class="s">        ##set dispersion only from p_model </span>
1263<span class="s">        for name , value in self.p_model1.dispersion.iteritems():</span>
1264<span class="s">            #if name.lower() not in self.p_model1.orientation_params:</span>
1265<span class="s">            new_name = &quot;p1_&quot; + name</span>
1266<span class="s">            self.dispersion[new_name]= value </span>
1267<span class="s">        for name , value in self.p_model2.dispersion.iteritems():</span>
1268<span class="s">            #if name.lower() not in self.p_model2.orientation_params:</span>
1269<span class="s">            new_name = &quot;p2_&quot; + name</span>
1270<span class="s">            self.dispersion[new_name]= value </span>
1271<span class="s">            </span>
1272<span class="s">    def function(self, x=0.0): </span>
1273<span class="s">        return 0</span>
1274<span class="s">                               </span>
1275<span class="s">    def getProfile(self):</span>
1276<span class="s">        try:</span>
1277<span class="s">            x,y = self.p_model1.getProfile()</span>
1278<span class="s">        except:</span>
1279<span class="s">            x = None</span>
1280<span class="s">            y = None</span>
1281<span class="s">            </span>
1282<span class="s">        return x, y</span>
1283<span class="s">    </span>
1284<span class="s">    def _set_params(self):</span>
1285<span class="s">        for name , value in self.p_model1.params.iteritems():</span>
1286<span class="s">            # No 2D-supported</span>
1287<span class="s">            #if name not in self.p_model1.orientation_params:</span>
1288<span class="s">            new_name = &quot;p1_&quot; + name</span>
1289<span class="s">            self.params[new_name]= value</span>
1290<span class="s">            </span>
1291<span class="s">        for name , value in self.p_model2.params.iteritems():</span>
1292<span class="s">            # No 2D-supported</span>
1293<span class="s">            #if name not in self.p_model2.orientation_params:</span>
1294<span class="s">            new_name = &quot;p2_&quot; + name</span>
1295<span class="s">            self.params[new_name]= value</span>
1296<span class="s">                </span>
1297<span class="s">        # Set &quot;scale&quot; as initializing</span>
1298<span class="s">        self._set_scale_factor()</span>
1299<span class="s">      </span>
1300<span class="s">            </span>
1301<span class="s">    def _set_details(self):</span>
1302<span class="s">        for name ,detail in self.p_model1.details.iteritems():</span>
1303<span class="s">            new_name = &quot;p1_&quot; + name</span>
1304<span class="s">            #if new_name not in self.orientation_params:</span>
1305<span class="s">            self.details[new_name]= detail</span>
1306<span class="s">            </span>
1307<span class="s">        for name ,detail in self.p_model2.details.iteritems():</span>
1308<span class="s">            new_name = &quot;p2_&quot; + name</span>
1309<span class="s">            #if new_name not in self.orientation_params:</span>
1310<span class="s">            self.details[new_name]= detail</span>
1311<span class="s">    </span>
1312<span class="s">    def _set_scale_factor(self):</span>
1313<span class="s">        pass</span>
1314<span class="s">        </span>
1315<span class="s">                </span>
1316<span class="s">    def setParam(self, name, value):</span>
1317<span class="s">        # set param to this (p1, p2) model</span>
1318<span class="s">        self._setParamHelper(name, value)</span>
1319<span class="s">        </span>
1320<span class="s">        ## setParam to p model </span>
1321<span class="s">        model_pre = &#39;&#39;</span>
1322<span class="s">        new_name = &#39;&#39;</span>
1323<span class="s">        name_split = name.split(&#39;_&#39;, 1)</span>
1324<span class="s">        if len(name_split) == 2:</span>
1325<span class="s">            model_pre = name.split(&#39;_&#39;, 1)[0]</span>
1326<span class="s">            new_name = name.split(&#39;_&#39;, 1)[1]</span>
1327<span class="s">        if model_pre == &quot;p1&quot;:</span>
1328<span class="s">            if new_name in self.p_model1.getParamList():</span>
1329<span class="s">                self.p_model1.setParam(new_name, value)</span>
1330<span class="s">        elif model_pre == &quot;p2&quot;:</span>
1331<span class="s">             if new_name in self.p_model2.getParamList():</span>
1332<span class="s">                self.p_model2.setParam(new_name, value)</span>
1333<span class="s">        elif name == &#39;scale_factor&#39;:</span>
1334<span class="s">            self.params[&#39;scale_factor&#39;] = value</span>
1335<span class="s">        else:</span>
1336<span class="s">            raise ValueError, &quot;Model does not contain parameter </span><span class="si">%s</span><span class="s">&quot; % name</span>
1337<span class="s">            </span>
1338<span class="s">    def getParam(self, name):</span>
1339<span class="s">        # Look for dispersion parameters</span>
1340<span class="s">        toks = name.split(&#39;.&#39;)</span>
1341<span class="s">        if len(toks)==2:</span>
1342<span class="s">            for item in self.dispersion.keys():</span>
1343<span class="s">                # 2D not supported</span>
1344<span class="s">                if item.lower()==toks[0].lower():</span>
1345<span class="s">                    for par in self.dispersion[item]:</span>
1346<span class="s">                        if par.lower() == toks[1].lower():</span>
1347<span class="s">                            return self.dispersion[item][par]</span>
1348<span class="s">        else:</span>
1349<span class="s">            # Look for standard parameter</span>
1350<span class="s">            for item in self.params.keys():</span>
1351<span class="s">                if item.lower()==name.lower():</span>
1352<span class="s">                    return self.params[item]</span>
1353<span class="s">        return  </span>
1354<span class="s">        #raise ValueError, &quot;Model does not contain parameter </span><span class="si">%s</span><span class="s">&quot; % name</span>
1355<span class="s">       </span>
1356<span class="s">    def _setParamHelper(self, name, value):</span>
1357<span class="s">        # Look for dispersion parameters</span>
1358<span class="s">        toks = name.split(&#39;.&#39;)</span>
1359<span class="s">        if len(toks)== 2:</span>
1360<span class="s">            for item in self.dispersion.keys():</span>
1361<span class="s">                if item.lower()== toks[0].lower():</span>
1362<span class="s">                    for par in self.dispersion[item]:</span>
1363<span class="s">                        if par.lower() == toks[1].lower():</span>
1364<span class="s">                            self.dispersion[item][par] = value</span>
1365<span class="s">                            return</span>
1366<span class="s">        else:</span>
1367<span class="s">            # Look for standard parameter</span>
1368<span class="s">            for item in self.params.keys():</span>
1369<span class="s">                if item.lower()== name.lower():</span>
1370<span class="s">                    self.params[item] = value</span>
1371<span class="s">                    return</span>
1372<span class="s">            </span>
1373<span class="s">        raise ValueError, &quot;Model does not contain parameter </span><span class="si">%s</span><span class="s">&quot; % name</span>
1374<span class="s">             </span>
1375<span class="s">   </span>
1376<span class="s">    def _set_fixed_params(self):</span>
1377<span class="s">        for item in self.p_model1.fixed:</span>
1378<span class="s">            new_item = &quot;p1&quot; + item</span>
1379<span class="s">            self.fixed.append(new_item)</span>
1380<span class="s">        for item in self.p_model2.fixed:</span>
1381<span class="s">            new_item = &quot;p2&quot; + item</span>
1382<span class="s">            self.fixed.append(new_item)</span>
1383
1384<span class="s">        self.fixed.sort()</span>
1385<span class="s">                </span>
1386<span class="s">                    </span>
1387<span class="s">    def run(self, x = 0.0):</span>
1388<span class="s">        self._set_scale_factor()</span>
1389<span class="s">        return self.params[&#39;scale_factor&#39;] </span><span class="si">%s</span><span class="s"> </span><span class="se">\</span>
1390<span class="s">(self.p_model1.run(x) </span><span class="si">%s</span><span class="s"> self.p_model2.run(x))</span>
1391<span class="s">    </span>
1392<span class="s">    def runXY(self, x = 0.0):</span>
1393<span class="s">        self._set_scale_factor()</span>
1394<span class="s">        return self.params[&#39;scale_factor&#39;] </span><span class="si">%s</span><span class="s"> </span><span class="se">\</span>
1395<span class="s">(self.p_model1.runXY(x) </span><span class="si">%s</span><span class="s"> self.p_model2.runXY(x))</span>
1396<span class="s">    </span>
1397<span class="s">    ## Now (May27,10) directly uses the model eval function </span>
1398<span class="s">    ## instead of the for-loop in Base Component.</span>
1399<span class="s">    def evalDistribution(self, x = []):</span>
1400<span class="s">        self._set_scale_factor()</span>
1401<span class="s">        return self.params[&#39;scale_factor&#39;] </span><span class="si">%s</span><span class="s"> </span><span class="se">\</span>
1402<span class="s">(self.p_model1.evalDistribution(x) </span><span class="si">%s</span><span class="s"> </span><span class="se">\</span>
1403<span class="s">self.p_model2.evalDistribution(x))</span>
1404
1405<span class="s">    def set_dispersion(self, parameter, dispersion):</span>
1406<span class="s">        value= None</span>
1407<span class="s">        new_pre = parameter.split(&quot;_&quot;, 1)[0]</span>
1408<span class="s">        new_parameter = parameter.split(&quot;_&quot;, 1)[1]</span>
1409<span class="s">        try:</span>
1410<span class="s">            if new_pre == &#39;p1&#39; and </span><span class="se">\</span>
1411<span class="s">new_parameter in self.p_model1.dispersion.keys():</span>
1412<span class="s">                value= self.p_model1.set_dispersion(new_parameter, dispersion)</span>
1413<span class="s">            if new_pre == &#39;p2&#39; and </span><span class="se">\</span>
1414<span class="s">new_parameter in self.p_model2.dispersion.keys():</span>
1415<span class="s">                value= self.p_model2.set_dispersion(new_parameter, dispersion)</span>
1416<span class="s">            self._set_dispersion()</span>
1417<span class="s">            return value</span>
1418<span class="s">        except:</span>
1419<span class="s">            raise </span>
1420
1421<span class="s">    def fill_description(self, p_model1, p_model2):</span>
1422<span class="s">        description = &quot;&quot;</span>
1423<span class="s">        description += &quot;This model gives the summation or multiplication of&quot;</span>
1424<span class="s">        description += &quot;</span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s">. &quot;% ( p_model1.name, p_model2.name )</span>
1425<span class="s">        self.description += description</span>
1426<span class="s">          </span>
1427<span class="s">    def get_fname(self):</span>
1428<span class="s">        path = sys._getframe().f_code.co_filename</span>
1429<span class="s">        basename  = os.path.basename(path)</span>
1430<span class="s">        name, _ = os.path.splitext(basename)</span>
1431<span class="s">        return name     </span>
1432<span class="s">           </span>
1433<span class="s">if __name__ == &quot;__main__&quot;: </span>
1434<span class="s">    m1= Model() </span>
1435<span class="s">    #m1.setParam(&quot;p1_scale&quot;, 25)  </span>
1436<span class="s">    #m1.setParam(&quot;p1_length&quot;, 1000)</span>
1437<span class="s">    #m1.setParam(&quot;p2_scale&quot;, 100) </span>
1438<span class="s">    #m1.setParam(&quot;p2_rg&quot;, 100) </span>
1439<span class="s">    out1 = m1.runXY(0.01)</span>
1440
1441<span class="s">    m2= Model()</span>
1442<span class="s">    #m2.p_model1.setParam(&quot;scale&quot;, 25) </span>
1443<span class="s">    #m2.p_model1.setParam(&quot;length&quot;, 1000) </span>
1444<span class="s">    #m2.p_model2.setParam(&quot;scale&quot;, 100)</span>
1445<span class="s">    #m2.p_model2.setParam(&quot;rg&quot;, 100)</span>
1446<span class="s">    out2 = m2.p_model1.runXY(0.01) </span><span class="si">%s</span><span class="s"> m2.p_model2.runXY(0.01)</span><span class="se">\n</span><span class="s"></span>
1447<span class="s">    print &quot;My name is </span><span class="si">%s</span><span class="s">.&quot;% m1.name</span>
1448<span class="s">    print out1, &quot; = &quot;, out2</span>
1449<span class="s">    if out1 == out2:</span>
1450<span class="s">        print &quot;===&gt; Simple Test: Passed!&quot;</span>
1451<span class="s">    else:</span>
1452<span class="s">        print &quot;===&gt; Simple Test: Failed!&quot;</span>
1453<span class="s">&quot;&quot;&quot;</span>
1454     
1455<span class="c">#if __name__ == &quot;__main__&quot;: </span>
1456<span class="c">#    app = wx.PySimpleApp()</span>
1457<span class="c">#    frame = TextDialog(id=1, model_list=[&quot;SphereModel&quot;, &quot;CylinderModel&quot;])   </span>
1458<span class="c">#    frame.Show(True)</span>
1459<span class="c">#    app.MainLoop()             </span>
1460
1461<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span>
1462    <span class="kn">from</span> <span class="nn">sas.perspectives.fitting</span> <span class="kn">import</span> <span class="n">models</span>
1463    <span class="n">dir_path</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">find_plugins_dir</span><span class="p">()</span>
1464    <span class="n">app</span>  <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">App</span><span class="p">()</span>
1465    <span class="n">window</span> <span class="o">=</span> <span class="n">EditorWindow</span><span class="p">(</span><span class="n">parent</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">dir_path</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">&quot;Editor&quot;</span><span class="p">)</span>
1466    <span class="n">app</span><span class="o">.</span><span class="n">MainLoop</span><span class="p">()</span>         
1467</pre></div>
1468
1469          </div>
1470        </div>
1471      </div>
1472      <div class="sphinxsidebar">
1473        <div class="sphinxsidebarwrapper">
1474<div id="searchbox" style="display: none">
1475  <h3>Quick search</h3>
1476    <form class="search" action="../../../../search.html" method="get">
1477      <input type="text" name="q" />
1478      <input type="submit" value="Go" />
1479      <input type="hidden" name="check_keywords" value="yes" />
1480      <input type="hidden" name="area" value="default" />
1481    </form>
1482    <p class="searchtip" style="font-size: 90%">
1483    Enter search terms or a module, class or function name.
1484    </p>
1485</div>
1486<script type="text/javascript">$('#searchbox').show(0);</script>
1487        </div>
1488      </div>
1489      <div class="clearer"></div>
1490    </div>
1491    <div class="related">
1492      <h3>Navigation</h3>
1493      <ul>
1494        <li class="right" style="margin-right: 10px">
1495          <a href="../../../../genindex.html" title="General Index"
1496             >index</a></li>
1497        <li class="right" >
1498          <a href="../../../../py-modindex.html" title="Python Module Index"
1499             >modules</a> |</li>
1500        <li><a href="../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
1501          <li><a href="../../../index.html" >Module code</a> &raquo;</li>
1502          <li><a href="../calculator.html" >sas.perspectives.calculator</a> &raquo;</li> 
1503      </ul>
1504    </div>
1505    <div class="footer">
1506        &copy; Copyright 2013, The SasView Project.
1507      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
1508    </div>
1509  </body>
1510</html>
Note: See TracBrowser for help on using the repository browser.