source: sphinxdocs/build/html/_modules/GSASIIpath.html @ 1998

Last change on this file since 1998 was 1998, checked in by toby, 7 years ago

rebuild docs

  • Property svn:mime-type set to text/html
File size: 85.9 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>GSASIIpath &mdash; GSAS-II 0.2.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:     '0.2.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="GSAS-II 0.2.0 documentation" href="../index.html" />
28    <link rel="up" title="Module code" href="index.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">GSAS-II 0.2.0 documentation</a> &raquo;</li>
41          <li><a href="index.html" accesskey="U">Module code</a> &raquo;</li> 
42      </ul>
43    </div> 
44
45    <div class="document">
46      <div class="documentwrapper">
47        <div class="bodywrapper">
48          <div class="body">
49           
50  <h1>Source code for GSASIIpath</h1><div class="highlight"><pre>
51<span class="c"># -*- coding: utf-8 -*-</span>
52<span class="sd">&#39;&#39;&#39;</span>
53<span class="sd">*GSASIIpath: locations &amp; updates*</span>
54<span class="sd">---------------------------------</span>
55
56<span class="sd">Routines for dealing with file locations, etc.</span>
57
58<span class="sd">Determines the location of the compiled (.pyd or .so) libraries.</span>
59
60<span class="sd">Interfaces with subversion (svn): </span>
61<span class="sd">Determine the subversion release number by determining the highest version number</span>
62<span class="sd">where :func:`SetVersionNumber` is called (best done in every GSASII file).</span>
63<span class="sd">Other routines will update GSASII from the subversion server if svn can be</span>
64<span class="sd">found.</span>
65
66<span class="sd">Accesses configuration options, as defined in config.py</span>
67<span class="sd">&#39;&#39;&#39;</span>
68
69<span class="kn">import</span> <span class="nn">os</span>
70<span class="kn">import</span> <span class="nn">sys</span>
71<span class="kn">import</span> <span class="nn">platform</span>
72<span class="c"># see if a directory for local modifications is defined. If so, stick that in the path</span>
73<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&#39;~/.G2local/&#39;</span><span class="p">)):</span>
74    <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&#39;~/.G2local/&#39;</span><span class="p">))</span>
75    <span class="kn">import</span> <span class="nn">glob</span>
76    <span class="n">fl</span> <span class="o">=</span> <span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&#39;~/.G2local/GSASII*.py*&#39;</span><span class="p">))</span>
77    <span class="n">files</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
78    <span class="n">prev</span> <span class="o">=</span> <span class="bp">None</span>
79    <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">fl</span><span class="p">):</span> <span class="c"># make a list of files, dropping .pyc files where a .py exists</span>
80        <span class="n">f</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">split</span><span class="p">(</span><span class="n">f</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
81        <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">f</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">prev</span><span class="p">:</span> <span class="k">continue</span>
82        <span class="n">prev</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">f</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
83        <span class="k">if</span> <span class="n">files</span><span class="p">:</span> <span class="n">files</span> <span class="o">+=</span> <span class="s">&quot;, &quot;</span>
84        <span class="n">files</span> <span class="o">+=</span> <span class="n">f</span>
85    <span class="k">if</span> <span class="n">files</span><span class="p">:</span>
86        <span class="k">print</span><span class="p">(</span><span class="s">&quot;*&quot;</span><span class="o">*</span><span class="mi">75</span><span class="p">)</span>
87        <span class="k">print</span><span class="p">(</span><span class="s">&quot;Warning: the following source files are locally overridden in &quot;</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">expanduser</span><span class="p">(</span><span class="s">&#39;~/.G2local/&#39;</span><span class="p">))</span>
88        <span class="k">print</span><span class="p">(</span><span class="s">&quot;  &quot;</span><span class="o">+</span><span class="n">files</span><span class="p">)</span>
89        <span class="k">print</span><span class="p">(</span><span class="s">&quot;*&quot;</span><span class="o">*</span><span class="mi">75</span><span class="p">)</span>
90           
91
92<span class="c"># determine a binary path for the pyd files based on the host OS and the python version,  </span>
93<span class="c"># path is relative to location of the script that is called as well as this file</span>
94<span class="c"># this must be imported before anything that imports any .pyd/.so file for GSASII</span>
95<span class="n">bindir</span> <span class="o">=</span> <span class="bp">None</span>
96<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="s">&quot;win32&quot;</span><span class="p">:</span>
97    <span class="k">if</span> <span class="n">platform</span><span class="o">.</span><span class="n">architecture</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;64bit&#39;</span><span class="p">:</span>
98        <span class="n">bindir</span> <span class="o">=</span> <span class="s">&#39;binwin64-</span><span class="si">%d</span><span class="s">.</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
99    <span class="k">else</span><span class="p">:</span>
100        <span class="n">bindir</span> <span class="o">=</span> <span class="s">&#39;binwin</span><span class="si">%d</span><span class="s">.</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
101<span class="k">elif</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s">&quot;darwin&quot;</span><span class="p">:</span>
102    <span class="kn">import</span> <span class="nn">platform</span>
103    <span class="k">if</span> <span class="n">platform</span><span class="o">.</span><span class="n">architecture</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;64bit&#39;</span><span class="p">:</span>
104        <span class="n">bindir</span> <span class="o">=</span> <span class="s">&#39;binmac64-</span><span class="si">%d</span><span class="s">.</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
105    <span class="k">else</span><span class="p">:</span>
106        <span class="n">bindir</span> <span class="o">=</span> <span class="s">&#39;binmac</span><span class="si">%d</span><span class="s">.</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
107    <span class="k">if</span> <span class="n">platform</span><span class="o">.</span><span class="n">mac_ver</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;10.5.&#39;</span><span class="p">):</span>
108        <span class="n">bindir</span> <span class="o">+=</span> <span class="s">&#39;_10.5&#39;</span>
109<span class="k">elif</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s">&quot;linux2&quot;</span><span class="p">:</span>
110    <span class="k">if</span> <span class="n">platform</span><span class="o">.</span><span class="n">architecture</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;64bit&#39;</span><span class="p">:</span>
111        <span class="n">bindir</span> <span class="o">=</span> <span class="s">&#39;binlinux64-</span><span class="si">%d</span><span class="s">.</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
112    <span class="k">else</span><span class="p">:</span>
113        <span class="n">bindir</span> <span class="o">=</span> <span class="s">&#39;binlinux</span><span class="si">%d</span><span class="s">.</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
114<span class="k">for</span> <span class="n">loc</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">]):</span>
115    <span class="k">if</span> <span class="n">bindir</span><span class="p">:</span>
116        <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</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">loc</span><span class="p">,</span><span class="n">bindir</span><span class="p">))</span> <span class="ow">and</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">loc</span><span class="p">,</span><span class="n">bindir</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">:</span> 
117            <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</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">loc</span><span class="p">,</span><span class="n">bindir</span><span class="p">))</span>
118        <span class="c"># is there a bin directory? (created by a local compile), if so put</span>
119        <span class="c"># that at the top of the path</span>
120    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</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">loc</span><span class="p">,</span><span class="s">&#39;bin&#39;</span><span class="p">))</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</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">loc</span><span class="p">,</span><span class="s">&#39;bin&#39;</span><span class="p">)):</span>
121        <span class="n">bindir</span> <span class="o">=</span> <span class="s">&#39;bin&#39;</span>
122        <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span><span class="s">&#39;bin&#39;</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">:</span> 
123            <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</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">loc</span><span class="p">,</span><span class="n">bindir</span><span class="p">))</span>
124<span class="k">print</span> <span class="s">&#39;GSAS-II binary directory: &#39;</span><span class="p">,</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">loc</span><span class="p">,</span><span class="n">bindir</span><span class="p">)</span>
125<span class="k">if</span> <span class="n">bindir</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
126    <span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span><span class="s">&quot;**** ERROR GSAS-II binary libraries not found, GSAS-II fails ****&quot;</span>
127<span class="c"># add the data import and export directory to the search path</span>
128<span class="n">path2GSAS2</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">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span> <span class="c"># location of this file; save before any changes in pwd</span>
129<span class="n">newpath</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">path2GSAS2</span><span class="p">,</span><span class="s">&#39;imports&#39;</span><span class="p">)</span>
130<span class="k">if</span> <span class="n">newpath</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">:</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newpath</span><span class="p">)</span>
131<span class="n">newpath</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">path2GSAS2</span><span class="p">,</span><span class="s">&#39;exports&#39;</span><span class="p">)</span>
132<span class="k">if</span> <span class="n">newpath</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">:</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newpath</span><span class="p">)</span>
133
134<span class="c"># setup read of config.py, if present</span>
135<span class="k">try</span><span class="p">:</span>
136    <span class="kn">import</span> <span class="nn">config</span>
137    <span class="n">configDict</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">__dict__</span>
138    <span class="kn">import</span> <span class="nn">inspect</span>
139    <span class="n">vals</span> <span class="o">=</span> <span class="p">[</span><span class="bp">True</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getmembers</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> <span class="k">if</span> <span class="s">&#39;__&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
140    <span class="k">print</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">vals</span><span class="p">))</span><span class="o">+</span><span class="s">&#39; values read from config file &#39;</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">abspath</span><span class="p">(</span><span class="n">config</span><span class="o">.</span><span class="n">__file__</span><span class="p">)</span>
141<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
142    <span class="n">configDict</span> <span class="o">=</span> <span class="p">{}</span>
143   
144<div class="viewcode-block" id="GetConfigValue"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.GetConfigValue">[docs]</a><span class="k">def</span> <span class="nf">GetConfigValue</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">default</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
145    <span class="sd">&#39;&#39;&#39;Return the configuration file value for key or a default value if not present</span>
146<span class="sd">    </span>
147<span class="sd">    :param str key: a value to be found in the configuration (config.py) file</span>
148<span class="sd">    :param default: a value to be supplied is none is in the config file or</span>
149<span class="sd">      the config file is not found. Defaults to None</span>
150<span class="sd">    :returns: the value found or the default.</span>
151<span class="sd">    &#39;&#39;&#39;</span>
152    <span class="k">return</span> <span class="n">configDict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">default</span><span class="p">)</span>
153</div>
154<div class="viewcode-block" id="SetConfigValue"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.SetConfigValue">[docs]</a><span class="k">def</span> <span class="nf">SetConfigValue</span><span class="p">(</span><span class="n">parmdict</span><span class="p">):</span>
155    <span class="sd">&#39;&#39;&#39;Set configuration variables from a dictionary where elements are lists</span>
156<span class="sd">    First item in list is the default value and second is the value to use.</span>
157<span class="sd">    &#39;&#39;&#39;</span>
158    <span class="k">global</span> <span class="n">configDict</span>
159    <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="n">parmdict</span><span class="p">:</span>
160        <span class="k">if</span> <span class="n">var</span> <span class="ow">in</span> <span class="n">configDict</span><span class="p">:</span>
161            <span class="k">del</span> <span class="n">configDict</span><span class="p">[</span><span class="n">var</span><span class="p">]</span>
162        <span class="k">if</span> <span class="n">parmdict</span><span class="p">[</span><span class="n">var</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">continue</span>
163        <span class="k">if</span> <span class="n">parmdict</span><span class="p">[</span><span class="n">var</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span> <span class="k">continue</span>
164        <span class="k">if</span> <span class="n">parmdict</span><span class="p">[</span><span class="n">var</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">parmdict</span><span class="p">[</span><span class="n">var</span><span class="p">][</span><span class="mi">1</span><span class="p">]:</span> <span class="k">continue</span>
165        <span class="n">configDict</span><span class="p">[</span><span class="n">var</span><span class="p">]</span> <span class="o">=</span> <span class="n">parmdict</span><span class="p">[</span><span class="n">var</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
166
167<span class="c"># routines for looking a version numbers in files</span></div>
168<span class="n">version</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
169<div class="viewcode-block" id="SetVersionNumber"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.SetVersionNumber">[docs]</a><span class="k">def</span> <span class="nf">SetVersionNumber</span><span class="p">(</span><span class="n">RevString</span><span class="p">):</span>
170    <span class="sd">&#39;&#39;&#39;Set the subversion version number</span>
171
172<span class="sd">    :param str RevString: something like &quot;$Revision: 1971 $&quot;</span>
173<span class="sd">      that is set by subversion when the file is retrieved from subversion.</span>
174
175<span class="sd">    Place ``GSASIIpath.SetVersionNumber(&quot;$Revision: 1971 $&quot;)`` in every python</span>
176<span class="sd">    file.</span>
177<span class="sd">    &#39;&#39;&#39;</span>
178    <span class="k">try</span><span class="p">:</span>
179        <span class="n">RevVersion</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">RevString</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">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">])</span>
180        <span class="k">global</span> <span class="n">version</span>
181        <span class="n">version</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">version</span><span class="p">,</span><span class="n">RevVersion</span><span class="p">)</span>
182    <span class="k">except</span><span class="p">:</span>
183        <span class="k">pass</span>
184        </div>
185<div class="viewcode-block" id="GetVersionNumber"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.GetVersionNumber">[docs]</a><span class="k">def</span> <span class="nf">GetVersionNumber</span><span class="p">():</span>
186    <span class="sd">&#39;&#39;&#39;Return the maximum version number seen in :func:`SetVersionNumber`</span>
187<span class="sd">    &#39;&#39;&#39;</span>
188    <span class="k">return</span> <span class="n">version</span>
189</div>
190<div class="viewcode-block" id="LoadConfigFile"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.LoadConfigFile">[docs]</a><span class="k">def</span> <span class="nf">LoadConfigFile</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
191    <span class="sd">&#39;&#39;&#39;Read a GSAS-II configuration file.</span>
192<span class="sd">    Comments (starting with &quot;%&quot;) are removed, as are empty lines</span>
193<span class="sd">    </span>
194<span class="sd">    :param str filename: base file name (such as &#39;file.dat&#39;). Files with this name</span>
195<span class="sd">      are located from the path and the contents of each are concatenated.</span>
196<span class="sd">    :returns: a list containing each non-empty (after removal of comments) line</span>
197<span class="sd">      found in every matching config file.</span>
198<span class="sd">    &#39;&#39;&#39;</span>
199    <span class="n">info</span> <span class="o">=</span> <span class="p">[]</span>
200    <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">:</span>
201        <span class="n">fil</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="n">filename</span><span class="p">)</span>
202        <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">fil</span><span class="p">):</span> <span class="k">continue</span>
203        <span class="k">try</span><span class="p">:</span>
204            <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
205            <span class="n">fp</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fil</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
206            <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">fp</span><span class="p">:</span>
207                <span class="n">expr</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">&#39;#&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
208                <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
209                    <span class="n">info</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span>
210                    <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
211            <span class="k">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">+</span><span class="s">&#39; lines read from config file &#39;</span><span class="o">+</span><span class="n">fil</span><span class="p">)</span>
212        <span class="k">finally</span><span class="p">:</span>
213            <span class="n">fp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
214    <span class="k">return</span> <span class="n">info</span>
215
216
217<span class="c"># routines to interface with subversion</span></div>
218<div class="viewcode-block" id="whichsvn"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.whichsvn">[docs]</a><span class="k">def</span> <span class="nf">whichsvn</span><span class="p">():</span>
219    <span class="sd">&#39;&#39;&#39;Returns a path to the subversion exe file, if any is found.</span>
220<span class="sd">    Searches the current path as well as subdirectory &quot;svn&quot; and</span>
221<span class="sd">    &quot;svn/bin&quot; in the location of the GSASII source files.</span>
222
223<span class="sd">    :returns: None if svn is not found or an absolute path to the subversion</span>
224<span class="sd">      executable file.</span>
225<span class="sd">    &#39;&#39;&#39;</span>
226    <span class="k">def</span> <span class="nf">is_exe</span><span class="p">(</span><span class="n">fpath</span><span class="p">):</span>
227        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">fpath</span><span class="p">)</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">fpath</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">X_OK</span><span class="p">)</span>
228    <span class="n">svnprog</span> <span class="o">=</span> <span class="s">&#39;svn&#39;</span>
229    <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="s">&quot;win32&quot;</span><span class="p">:</span> <span class="n">svnprog</span> <span class="o">+=</span> <span class="s">&#39;.exe&#39;</span>
230    <span class="n">pathlist</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">&quot;PATH&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">pathsep</span><span class="p">)</span>
231    <span class="n">pathlist</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</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">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span><span class="s">&#39;svn&#39;</span><span class="p">))</span>
232    <span class="n">pathlist</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">1</span><span class="p">,</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">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span><span class="s">&#39;svn&#39;</span><span class="p">,</span><span class="s">&#39;bin&#39;</span><span class="p">))</span>
233    <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">pathlist</span><span class="p">:</span>
234        <span class="n">exe_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">svnprog</span><span class="p">)</span>
235        <span class="k">if</span> <span class="n">is_exe</span><span class="p">(</span><span class="n">exe_file</span><span class="p">):</span>
236            <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">exe_file</span><span class="p">)</span>
237</div>
238<div class="viewcode-block" id="svnVersion"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnVersion">[docs]</a><span class="k">def</span> <span class="nf">svnVersion</span><span class="p">():</span>
239    <span class="sd">&#39;&#39;&#39;Get the version number of the current subversion executable</span>
240
241<span class="sd">    :returns: a string with a version number such as &quot;1.6.6&quot; or None if</span>
242<span class="sd">      subversion is not found.</span>
243
244<span class="sd">    &#39;&#39;&#39;</span>
245    <span class="kn">import</span> <span class="nn">subprocess</span>
246    <span class="n">svn</span> <span class="o">=</span> <span class="n">whichsvn</span><span class="p">()</span>
247    <span class="k">if</span> <span class="ow">not</span> <span class="n">svn</span><span class="p">:</span> <span class="k">return</span>
248
249    <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;--version&#39;</span><span class="p">,</span><span class="s">&#39;--quiet&#39;</span><span class="p">]</span>
250    <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span>
251                         <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
252    <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
253    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
254        <span class="k">print</span> <span class="s">&#39;subversion error!</span><span class="se">\n</span><span class="s">out=&#39;</span><span class="p">,</span><span class="n">out</span>
255        <span class="k">print</span> <span class="s">&#39;err=&#39;</span><span class="p">,</span><span class="n">err</span>
256        <span class="k">return</span> <span class="bp">None</span>
257    <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
258</div>
259<div class="viewcode-block" id="svnVersionNumber"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnVersionNumber">[docs]</a><span class="k">def</span> <span class="nf">svnVersionNumber</span><span class="p">():</span>
260    <span class="sd">&#39;&#39;&#39;Get the version number of the current subversion executable</span>
261
262<span class="sd">    :returns: a fractional version number such as 1.6 or None if</span>
263<span class="sd">      subversion is not found.</span>
264
265<span class="sd">    &#39;&#39;&#39;</span>
266    <span class="n">ver</span> <span class="o">=</span> <span class="n">svnVersion</span><span class="p">()</span>
267    <span class="k">if</span> <span class="ow">not</span> <span class="n">ver</span><span class="p">:</span> <span class="k">return</span> 
268    <span class="n">M</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="n">svnVersion</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
269    <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">M</span><span class="p">)</span><span class="o">+</span><span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="o">/</span><span class="mf">10.</span>
270</div>
271<div class="viewcode-block" id="svnGetLog"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnGetLog">[docs]</a><span class="k">def</span> <span class="nf">svnGetLog</span><span class="p">(</span><span class="n">fpath</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">split</span><span class="p">(</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span><span class="n">version</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
272    <span class="sd">&#39;&#39;&#39;Get the revision log information for a specific version of the specified package</span>
273
274<span class="sd">    :param str fpath: path to repository dictionary, defaults to directory where</span>
275<span class="sd">       the current file is located.</span>
276<span class="sd">    :param int version: the version number to be looked up or None (default)</span>
277<span class="sd">       for the latest version.</span>
278
279<span class="sd">    :returns: a dictionary with keys (one hopes) &#39;author&#39;, &#39;date&#39;, &#39;msg&#39;, and &#39;revision&#39;</span>
280
281<span class="sd">    &#39;&#39;&#39;</span>
282    <span class="kn">import</span> <span class="nn">subprocess</span>
283    <span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="kn">as</span> <span class="nn">ET</span>
284    <span class="n">svn</span> <span class="o">=</span> <span class="n">whichsvn</span><span class="p">()</span>
285    <span class="k">if</span> <span class="ow">not</span> <span class="n">svn</span><span class="p">:</span> <span class="k">return</span>
286    <span class="k">if</span> <span class="n">version</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
287        <span class="n">vstr</span> <span class="o">=</span> <span class="s">&#39;-r&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
288    <span class="k">else</span><span class="p">:</span>
289        <span class="n">vstr</span> <span class="o">=</span> <span class="s">&#39;-rHEAD&#39;</span>
290
291    <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;log&#39;</span><span class="p">,</span><span class="n">fpath</span><span class="p">,</span><span class="s">&#39;--xml&#39;</span><span class="p">,</span><span class="n">vstr</span><span class="p">]</span>
292    <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span>
293                         <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
294    <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
295    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
296        <span class="k">print</span> <span class="s">&#39;out=&#39;</span><span class="p">,</span><span class="n">out</span>
297        <span class="k">print</span> <span class="s">&#39;err=&#39;</span><span class="p">,</span><span class="n">err</span>
298        <span class="k">return</span> <span class="bp">None</span>
299    <span class="n">x</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
300    <span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
301    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s">&#39;logentry&#39;</span><span class="p">):</span>
302        <span class="n">d</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;revision&#39;</span><span class="p">:</span><span class="n">i</span><span class="o">.</span><span class="n">attrib</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;revision&#39;</span><span class="p">,</span><span class="s">&#39;?&#39;</span><span class="p">)}</span>
303        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="p">:</span>
304            <span class="n">d</span><span class="p">[</span><span class="n">j</span><span class="o">.</span><span class="n">tag</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span><span class="o">.</span><span class="n">text</span>
305        <span class="k">break</span> <span class="c"># only need the first</span>
306    <span class="k">return</span> <span class="n">d</span>
307</div>
308<div class="viewcode-block" id="svnGetRev"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnGetRev">[docs]</a><span class="k">def</span> <span class="nf">svnGetRev</span><span class="p">(</span><span class="n">fpath</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">split</span><span class="p">(</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span><span class="n">local</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
309    <span class="sd">&#39;&#39;&#39;Obtain the version number for the either the last update of the local version</span>
310<span class="sd">    or contacts the subversion server to get the latest update version (# of Head).</span>
311
312<span class="sd">    :param str fpath: path to repository dictionary, defaults to directory where</span>
313<span class="sd">       the current file is located</span>
314<span class="sd">    :param bool local: determines the type of version number, where</span>
315<span class="sd">       True (default): returns the latest installed update </span>
316<span class="sd">       False: returns the version number of Head on the server</span>
317
318<span class="sd">    :Returns: the version number as an str or </span>
319<span class="sd">       None if there is a subversion error (likely because the path is</span>
320<span class="sd">       not a repository or svn is not found)</span>
321<span class="sd">    &#39;&#39;&#39;</span>
322
323    <span class="kn">import</span> <span class="nn">subprocess</span>
324    <span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="kn">as</span> <span class="nn">ET</span>
325    <span class="n">svn</span> <span class="o">=</span> <span class="n">whichsvn</span><span class="p">()</span>
326    <span class="k">if</span> <span class="ow">not</span> <span class="n">svn</span><span class="p">:</span> <span class="k">return</span>
327    <span class="k">if</span> <span class="n">local</span><span class="p">:</span>
328        <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;info&#39;</span><span class="p">,</span><span class="n">fpath</span><span class="p">,</span><span class="s">&#39;--xml&#39;</span><span class="p">]</span>
329    <span class="k">else</span><span class="p">:</span>
330        <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;info&#39;</span><span class="p">,</span><span class="n">fpath</span><span class="p">,</span><span class="s">&#39;--xml&#39;</span><span class="p">,</span><span class="s">&#39;-rHEAD&#39;</span><span class="p">]</span>
331    <span class="k">if</span> <span class="n">svnVersionNumber</span><span class="p">()</span> <span class="o">&gt;=</span> <span class="mf">1.6</span><span class="p">:</span>
332        <span class="n">cmd</span> <span class="o">+=</span> <span class="p">[</span><span class="s">&#39;--non-interactive&#39;</span><span class="p">,</span> <span class="s">&#39;--trust-server-cert&#39;</span><span class="p">]</span>
333    <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
334    <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
335    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
336        <span class="k">print</span> <span class="s">&#39;svn failed</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="n">out</span>
337        <span class="k">print</span> <span class="s">&#39;err=&#39;</span><span class="p">,</span><span class="n">err</span>
338        <span class="k">return</span> <span class="bp">None</span>
339    <span class="n">x</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
340    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s">&#39;entry&#39;</span><span class="p">):</span>
341        <span class="n">rev</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">attrib</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;revision&#39;</span><span class="p">)</span>
342        <span class="k">if</span> <span class="n">rev</span><span class="p">:</span> <span class="k">return</span> <span class="n">rev</span>
343</div>
344<div class="viewcode-block" id="svnFindLocalChanges"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnFindLocalChanges">[docs]</a><span class="k">def</span> <span class="nf">svnFindLocalChanges</span><span class="p">(</span><span class="n">fpath</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">split</span><span class="p">(</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">]):</span>
345    <span class="sd">&#39;&#39;&#39;Returns a list of files that were changed locally. If no files are changed,</span>
346<span class="sd">       the list has length 0</span>
347
348<span class="sd">    :param fpath: path to repository dictionary, defaults to directory where</span>
349<span class="sd">       the current file is located</span>
350
351<span class="sd">    :returns: None if there is a subversion error (likely because the path is</span>
352<span class="sd">       not a repository or svn is not found)</span>
353
354<span class="sd">    &#39;&#39;&#39;</span>
355    <span class="kn">import</span> <span class="nn">subprocess</span>
356    <span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="kn">as</span> <span class="nn">ET</span>
357    <span class="n">svn</span> <span class="o">=</span> <span class="n">whichsvn</span><span class="p">()</span>
358    <span class="k">if</span> <span class="ow">not</span> <span class="n">svn</span><span class="p">:</span> <span class="k">return</span>
359    <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;status&#39;</span><span class="p">,</span><span class="n">fpath</span><span class="p">,</span><span class="s">&#39;--xml&#39;</span><span class="p">]</span>
360    <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span>
361                         <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
362    <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
363    <span class="k">if</span> <span class="n">err</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span>
364    <span class="n">x</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
365    <span class="n">changed</span> <span class="o">=</span> <span class="p">[]</span>
366    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s">&#39;entry&#39;</span><span class="p">):</span>
367        <span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;wc-status&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">attrib</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;item&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&#39;modified&#39;</span><span class="p">:</span> 
368            <span class="n">changed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">attrib</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;path&#39;</span><span class="p">))</span>
369    <span class="k">return</span> <span class="n">changed</span>
370</div>
371<div class="viewcode-block" id="svnUpdateDir"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnUpdateDir">[docs]</a><span class="k">def</span> <span class="nf">svnUpdateDir</span><span class="p">(</span><span class="n">fpath</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">split</span><span class="p">(</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span><span class="n">version</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
372    <span class="sd">&#39;&#39;&#39;This performs an update of the files in a local directory from a server. </span>
373
374<span class="sd">    :param str fpath: path to repository dictionary, defaults to directory where</span>
375<span class="sd">       the current file is located</span>
376<span class="sd">    :param version: the number of the version to be loaded. Used only</span>
377<span class="sd">       cast as a string, but should be an integer or something that corresponds to a</span>
378<span class="sd">       string representation of an integer value when cast. A value of None (default)</span>
379<span class="sd">       causes the latest version on the server to be used.</span>
380<span class="sd">    &#39;&#39;&#39;</span>
381    <span class="kn">import</span> <span class="nn">subprocess</span>
382    <span class="n">svn</span> <span class="o">=</span> <span class="n">whichsvn</span><span class="p">()</span>
383    <span class="k">if</span> <span class="ow">not</span> <span class="n">svn</span><span class="p">:</span> <span class="k">return</span>
384    <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
385        <span class="n">verstr</span> <span class="o">=</span> <span class="s">&#39;-r&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
386    <span class="k">else</span><span class="p">:</span>
387        <span class="n">verstr</span> <span class="o">=</span> <span class="s">&#39;-rHEAD&#39;</span>
388    <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;update&#39;</span><span class="p">,</span><span class="n">fpath</span><span class="p">,</span><span class="n">verstr</span><span class="p">,</span>
389           <span class="s">&#39;--non-interactive&#39;</span><span class="p">,</span>
390           <span class="s">&#39;--accept&#39;</span><span class="p">,</span><span class="s">&#39;theirs-conflict&#39;</span><span class="p">,</span><span class="s">&#39;--force&#39;</span><span class="p">]</span>
391    <span class="k">if</span> <span class="n">svnVersionNumber</span><span class="p">()</span> <span class="o">&gt;=</span> <span class="mf">1.6</span><span class="p">:</span>
392        <span class="n">cmd</span> <span class="o">+=</span> <span class="p">[</span><span class="s">&#39;--trust-server-cert&#39;</span><span class="p">]</span>
393    <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span><span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
394    <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
395    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
396        <span class="k">print</span><span class="p">(</span><span class="mi">60</span><span class="o">*</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
397        <span class="k">print</span> <span class="p">(</span><span class="s">&quot;****** An error was noted, see below *********&quot;</span><span class="p">)</span>
398        <span class="k">print</span><span class="p">(</span><span class="mi">60</span><span class="o">*</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
399        <span class="k">print</span> <span class="n">err</span>
400        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
401</div>
402<div class="viewcode-block" id="svnUpgrade"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnUpgrade">[docs]</a><span class="k">def</span> <span class="nf">svnUpgrade</span><span class="p">(</span><span class="n">fpath</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">split</span><span class="p">(</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">]):</span>
403    <span class="sd">&#39;&#39;&#39;This reformats subversion files, which may be needed if an upgrade of subversion is</span>
404<span class="sd">    done. </span>
405
406<span class="sd">    :param str fpath: path to repository dictionary, defaults to directory where</span>
407<span class="sd">       the current file is located</span>
408<span class="sd">    &#39;&#39;&#39;</span>
409    <span class="kn">import</span> <span class="nn">subprocess</span>
410    <span class="n">svn</span> <span class="o">=</span> <span class="n">whichsvn</span><span class="p">()</span>
411    <span class="k">if</span> <span class="ow">not</span> <span class="n">svn</span><span class="p">:</span> <span class="k">return</span>
412    <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;upgrade&#39;</span><span class="p">,</span><span class="n">fpath</span><span class="p">,</span><span class="s">&#39;--non-interactive&#39;</span><span class="p">]</span>
413    <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span><span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
414    <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
415    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
416        <span class="k">print</span><span class="p">(</span><span class="s">&quot;svn upgrade did not happen (this is probably OK). Messages:&quot;</span><span class="p">)</span>
417        <span class="k">print</span> <span class="n">err</span>
418            </div>
419<div class="viewcode-block" id="svnUpdateProcess"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnUpdateProcess">[docs]</a><span class="k">def</span> <span class="nf">svnUpdateProcess</span><span class="p">(</span><span class="n">version</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">projectfile</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
420    <span class="sd">&#39;&#39;&#39;perform an update of GSAS-II in a separate python process&#39;&#39;&#39;</span>
421    <span class="kn">import</span> <span class="nn">subprocess</span>
422    <span class="k">if</span> <span class="ow">not</span> <span class="n">projectfile</span><span class="p">:</span>
423        <span class="n">projectfile</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
424    <span class="k">else</span><span class="p">:</span>
425        <span class="n">projectfile</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">realpath</span><span class="p">(</span><span class="n">projectfile</span><span class="p">)</span>
426        <span class="k">print</span> <span class="s">&#39;restart using&#39;</span><span class="p">,</span><span class="n">projectfile</span>
427    <span class="k">if</span> <span class="ow">not</span> <span class="n">version</span><span class="p">:</span>
428        <span class="n">version</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
429    <span class="k">else</span><span class="p">:</span>
430        <span class="n">version</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
431    <span class="c"># start the upgrade in a separate interpreter (avoids loading .pyd files)</span>
432    <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span><span class="n">__file__</span><span class="p">,</span><span class="n">projectfile</span><span class="p">,</span><span class="n">version</span><span class="p">])</span>
433    <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
434</div>
435<div class="viewcode-block" id="svnSwitchDir"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnSwitchDir">[docs]</a><span class="k">def</span> <span class="nf">svnSwitchDir</span><span class="p">(</span><span class="n">rpath</span><span class="p">,</span><span class="n">filename</span><span class="p">,</span><span class="n">baseURL</span><span class="p">,</span><span class="n">loadpath</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
436    <span class="sd">&#39;&#39;&#39;This performs a switch command to move files between subversion trees.</span>
437
438<span class="sd">    This is currently used for moving tutorial web pages and demo files</span>
439<span class="sd">    into the GSAS-II source tree. Note that if the files were previously downloaded</span>
440<span class="sd">    the switch command will update the files to the newest version. </span>
441<span class="sd">    </span>
442<span class="sd">    :param str rpath: path to locate files, relative to the GSAS-II</span>
443<span class="sd">      installation path (defaults to path2GSAS2)</span>
444<span class="sd">    :param str URL: the repository URL</span>
445<span class="sd">    :param str loadpath: the prefix for the path, if specified. Defaults to path2GSAS2</span>
446<span class="sd">    &#39;&#39;&#39;</span>
447    <span class="kn">import</span> <span class="nn">subprocess</span>
448    <span class="n">svn</span> <span class="o">=</span> <span class="n">whichsvn</span><span class="p">()</span>
449    <span class="k">if</span> <span class="ow">not</span> <span class="n">svn</span><span class="p">:</span> <span class="k">return</span>
450    <span class="n">URL</span> <span class="o">=</span> <span class="n">baseURL</span><span class="p">[:]</span>
451    <span class="k">if</span> <span class="n">baseURL</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>
452        <span class="n">URL</span> <span class="o">=</span> <span class="n">baseURL</span> <span class="o">+</span> <span class="s">&#39;/&#39;</span> <span class="o">+</span> <span class="n">filename</span>
453    <span class="k">else</span><span class="p">:</span>
454        <span class="n">URL</span> <span class="o">=</span> <span class="n">baseURL</span> <span class="o">+</span> <span class="n">filename</span>
455    <span class="k">if</span> <span class="n">loadpath</span><span class="p">:</span>
456        <span class="n">fpath</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">loadpath</span><span class="p">,</span><span class="n">rpath</span><span class="p">,</span><span class="n">filename</span><span class="p">)</span>
457    <span class="k">else</span><span class="p">:</span>
458        <span class="n">fpath</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">path2GSAS2</span><span class="p">,</span><span class="n">rpath</span><span class="p">,</span><span class="n">filename</span><span class="p">)</span>
459    <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;switch&#39;</span><span class="p">,</span><span class="n">URL</span><span class="p">,</span><span class="n">fpath</span><span class="p">,</span>
460           <span class="s">&#39;--non-interactive&#39;</span><span class="p">,</span><span class="s">&#39;--trust-server-cert&#39;</span><span class="p">,</span>
461           <span class="s">&#39;--accept&#39;</span><span class="p">,</span><span class="s">&#39;theirs-conflict&#39;</span><span class="p">,</span><span class="s">&#39;--force&#39;</span><span class="p">]</span>
462    <span class="k">if</span> <span class="n">svnVersionNumber</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mf">1.6</span><span class="p">:</span> <span class="n">cmd</span> <span class="o">+=</span> <span class="p">[</span><span class="s">&#39;--ignore-ancestry&#39;</span><span class="p">]</span>
463    <span class="k">print</span><span class="p">(</span><span class="s">&quot;Loading files from &quot;</span><span class="o">+</span><span class="n">URL</span><span class="o">+</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">  to &#39;</span><span class="o">+</span><span class="n">fpath</span><span class="p">)</span>
464    <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span><span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
465    <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
466    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
467        <span class="k">print</span><span class="p">(</span><span class="mi">60</span><span class="o">*</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
468        <span class="k">print</span> <span class="p">(</span><span class="s">&quot;****** An error was noted, see below *********&quot;</span><span class="p">)</span>
469        <span class="k">print</span><span class="p">(</span><span class="mi">60</span><span class="o">*</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
470        <span class="k">print</span> <span class="s">&#39;out=&#39;</span><span class="p">,</span><span class="n">out</span>
471        <span class="k">print</span> <span class="s">&#39;err=&#39;</span><span class="p">,</span><span class="n">err</span>
472        <span class="k">return</span> <span class="bp">False</span>
473    <span class="k">return</span> <span class="bp">True</span>
474</div>
475<div class="viewcode-block" id="svnInstallDir"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.svnInstallDir">[docs]</a><span class="k">def</span> <span class="nf">svnInstallDir</span><span class="p">(</span><span class="n">URL</span><span class="p">,</span><span class="n">loadpath</span><span class="p">):</span>
476    <span class="sd">&#39;&#39;&#39;Load a subversion tree into a specified directory</span>
477
478<span class="sd">    :param str rpath: path to locate files, relative to the GSAS-II</span>
479<span class="sd">      installation path (defaults to path2GSAS2)</span>
480<span class="sd">    :param str URL: the repository URL</span>
481<span class="sd">    &#39;&#39;&#39;</span>
482    <span class="kn">import</span> <span class="nn">subprocess</span>
483    <span class="n">svn</span> <span class="o">=</span> <span class="n">whichsvn</span><span class="p">()</span>
484    <span class="k">if</span> <span class="ow">not</span> <span class="n">svn</span><span class="p">:</span> <span class="k">return</span>
485    <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">svn</span><span class="p">,</span><span class="s">&#39;co&#39;</span><span class="p">,</span><span class="n">URL</span><span class="p">,</span><span class="n">loadpath</span><span class="p">,</span><span class="s">&#39;--non-interactive&#39;</span><span class="p">]</span>
486    <span class="k">if</span> <span class="n">svnVersionNumber</span><span class="p">()</span> <span class="o">&gt;=</span> <span class="mf">1.6</span><span class="p">:</span> <span class="n">cmd</span> <span class="o">+=</span> <span class="p">[</span><span class="s">&#39;--trust-server-cert&#39;</span><span class="p">]</span>
487    <span class="k">print</span><span class="p">(</span><span class="s">&quot;Loading files from &quot;</span><span class="o">+</span><span class="n">URL</span><span class="p">)</span>
488    <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span><span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
489    <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
490    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
491        <span class="k">print</span><span class="p">(</span><span class="mi">60</span><span class="o">*</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
492        <span class="k">print</span> <span class="p">(</span><span class="s">&quot;****** An error was noted, see below *********&quot;</span><span class="p">)</span>
493        <span class="k">print</span><span class="p">(</span><span class="mi">60</span><span class="o">*</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
494        <span class="k">print</span> <span class="n">err</span>
495        <span class="k">return</span> <span class="bp">False</span>
496    <span class="k">return</span> <span class="bp">True</span>
497            </div>
498<div class="viewcode-block" id="IPyBreak_base"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.IPyBreak_base">[docs]</a><span class="k">def</span> <span class="nf">IPyBreak_base</span><span class="p">():</span>
499    <span class="sd">&#39;&#39;&#39;A routine that invokes an IPython session at the calling location</span>
500<span class="sd">    This routine is only used when debug=True is set in config.py</span>
501<span class="sd">    &#39;&#39;&#39;</span>
502    <span class="n">savehook</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">excepthook</span> <span class="c"># save the exception hook</span>
503    <span class="k">try</span><span class="p">:</span> 
504        <span class="kn">from</span> <span class="nn">IPython.terminal.embed</span> <span class="kn">import</span> <span class="n">InteractiveShellEmbed</span>
505    <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
506        <span class="k">try</span><span class="p">:</span>
507            <span class="c"># try the IPython 0.12 approach</span>
508            <span class="kn">from</span> <span class="nn">IPython.frontend.terminal.embed</span> <span class="kn">import</span> <span class="n">InteractiveShellEmbed</span>
509        <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
510            <span class="k">print</span> <span class="s">&#39;IPython InteractiveShellEmbed not found&#39;</span>
511            <span class="k">return</span>
512    <span class="kn">import</span> <span class="nn">inspect</span>
513    <span class="n">ipshell</span> <span class="o">=</span> <span class="n">InteractiveShellEmbed</span><span class="p">()</span>
514
515    <span class="n">frame</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">()</span><span class="o">.</span><span class="n">f_back</span>
516    <span class="n">msg</span>   <span class="o">=</span> <span class="s">&#39;Entering IPython console inside {0.f_code.co_filename} at line {0.f_lineno}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
517    <span class="n">ipshell</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span><span class="n">stack_depth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span> <span class="c"># Go up one level, to see the calling routine</span>
518    <span class="n">sys</span><span class="o">.</span><span class="n">excepthook</span> <span class="o">=</span> <span class="n">savehook</span> <span class="c"># reset IPython&#39;s change to the exception hook</span>
519</div>
520<div class="viewcode-block" id="exceptHook"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.exceptHook">[docs]</a><span class="k">def</span> <span class="nf">exceptHook</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
521    <span class="sd">&#39;&#39;&#39;A routine to be called when an exception occurs. It prints the traceback</span>
522<span class="sd">    with fancy formatting and then calls an IPython shell with the environment</span>
523<span class="sd">    of the exception location.</span>
524<span class="sd">    </span>
525<span class="sd">    This routine is only used when debug=True is set in config.py    </span>
526<span class="sd">    &#39;&#39;&#39;</span>
527    <span class="kn">from</span> <span class="nn">IPython.core</span> <span class="kn">import</span> <span class="n">ultratb</span>
528    <span class="k">if</span> <span class="s">&#39;win&#39;</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span><span class="p">:</span>
529        <span class="n">ultratb</span><span class="o">.</span><span class="n">FormattedTB</span><span class="p">(</span><span class="n">call_pdb</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span><span class="n">color_scheme</span><span class="o">=</span><span class="s">&#39;NoColor&#39;</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
530    <span class="k">else</span><span class="p">:</span>
531        <span class="n">ultratb</span><span class="o">.</span><span class="n">FormattedTB</span><span class="p">(</span><span class="n">call_pdb</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span><span class="n">color_scheme</span><span class="o">=</span><span class="s">&#39;LightBG&#39;</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
532    <span class="k">try</span><span class="p">:</span> 
533        <span class="kn">from</span> <span class="nn">IPython.terminal.embed</span> <span class="kn">import</span> <span class="n">InteractiveShellEmbed</span>
534    <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
535        <span class="k">try</span><span class="p">:</span>
536            <span class="c"># try the IPython 0.12 approach</span>
537            <span class="kn">from</span> <span class="nn">IPython.frontend.terminal.embed</span> <span class="kn">import</span> <span class="n">InteractiveShellEmbed</span>
538        <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
539            <span class="k">print</span> <span class="s">&#39;IPython InteractiveShellEmbed not found&#39;</span>
540            <span class="k">return</span>
541    <span class="kn">import</span> <span class="nn">inspect</span>
542    <span class="n">frame</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getinnerframes</span><span class="p">(</span><span class="n">args</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>
543    <span class="n">msg</span>   <span class="o">=</span> <span class="s">&#39;Entering IPython console at {0.f_code.co_filename} at line {0.f_lineno}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
544    <span class="n">savehook</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">excepthook</span> <span class="c"># save the exception hook</span>
545    <span class="n">InteractiveShellEmbed</span><span class="p">(</span><span class="n">banner1</span><span class="o">=</span><span class="n">msg</span><span class="p">)(</span><span class="n">local_ns</span><span class="o">=</span><span class="n">frame</span><span class="o">.</span><span class="n">f_locals</span><span class="p">,</span><span class="n">global_ns</span><span class="o">=</span><span class="n">frame</span><span class="o">.</span><span class="n">f_globals</span><span class="p">)</span>
546    <span class="n">sys</span><span class="o">.</span><span class="n">excepthook</span> <span class="o">=</span> <span class="n">savehook</span> <span class="c"># reset IPython&#39;s change to the exception hook</span>
547</div>
548<div class="viewcode-block" id="DoNothing"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.DoNothing">[docs]</a><span class="k">def</span> <span class="nf">DoNothing</span><span class="p">():</span>
549    <span class="sd">&#39;&#39;&#39;A routine that does nothing. This is called in place of IPyBreak and pdbBreak</span>
550<span class="sd">    except when the debug option is set True in config.py</span>
551<span class="sd">    &#39;&#39;&#39;</span>
552    <span class="k">pass</span> 
553</div>
554<span class="n">IPyBreak</span> <span class="o">=</span> <span class="n">DoNothing</span>
555<span class="n">pdbBreak</span> <span class="o">=</span> <span class="n">DoNothing</span>
556<div class="viewcode-block" id="InvokeDebugOpts"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIpath.InvokeDebugOpts">[docs]</a><span class="k">def</span> <span class="nf">InvokeDebugOpts</span><span class="p">():</span>
557    <span class="s">&#39;Called in GSASII.py to set up debug options&#39;</span>
558    <span class="k">if</span> <span class="n">GetConfigValue</span><span class="p">(</span><span class="s">&#39;debug&#39;</span><span class="p">):</span>
559        <span class="k">print</span> <span class="s">&#39;Debug on: IPython: Exceptions and G2path.IPyBreak(); pdb: G2path.pdbBreak()&#39;</span>
560        <span class="n">sys</span><span class="o">.</span><span class="n">excepthook</span> <span class="o">=</span> <span class="n">exceptHook</span>
561        <span class="kn">import</span> <span class="nn">pdb</span>
562        <span class="k">global</span> <span class="n">pdbBreak</span>
563        <span class="n">pdbBreak</span> <span class="o">=</span> <span class="n">pdb</span><span class="o">.</span><span class="n">set_trace</span>
564        <span class="k">global</span> <span class="n">IPyBreak</span>
565        <span class="n">IPyBreak</span> <span class="o">=</span> <span class="n">IPyBreak_base</span>
566    </div>
567<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;__main__&#39;</span><span class="p">:</span>
568    <span class="sd">&#39;&#39;&#39;What follows is called to update (or downdate) GSAS-II in a separate process. </span>
569<span class="sd">    &#39;&#39;&#39;</span>
570    <span class="kn">import</span> <span class="nn">subprocess</span>
571    <span class="kn">import</span> <span class="nn">time</span>
572    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c"># delay to give the main process a chance to exit</span>
573    <span class="c"># perform an update and restart GSAS-II</span>
574    <span class="n">project</span><span class="p">,</span><span class="n">version</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span>
575    <span class="n">loc</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">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">)</span>
576    <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
577        <span class="k">print</span><span class="p">(</span><span class="s">&quot;Regress to version &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">version</span><span class="p">))</span>
578        <span class="n">svnUpdateDir</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span><span class="n">version</span><span class="o">=</span><span class="n">version</span><span class="p">)</span>
579    <span class="k">else</span><span class="p">:</span>
580        <span class="k">print</span><span class="p">(</span><span class="s">&quot;Update to current version&quot;</span><span class="p">)</span>
581        <span class="n">svnUpdateDir</span><span class="p">(</span><span class="n">loc</span><span class="p">)</span>
582    <span class="k">if</span> <span class="n">project</span><span class="p">:</span>
583        <span class="k">print</span><span class="p">(</span><span class="s">&quot;Restart GSAS-II with project file &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">project</span><span class="p">))</span>
584        <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</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">loc</span><span class="p">,</span><span class="s">&#39;GSASII.py&#39;</span><span class="p">),</span><span class="n">project</span><span class="p">])</span>
585    <span class="k">else</span><span class="p">:</span>
586        <span class="k">print</span><span class="p">(</span><span class="s">&quot;Restart GSAS-II without a project file &quot;</span><span class="p">)</span>
587        <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</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">loc</span><span class="p">,</span><span class="s">&#39;GSASII.py&#39;</span><span class="p">)])</span>
588    <span class="k">print</span> <span class="s">&#39;exiting update process&#39;</span>
589    <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
590   
591</pre></div>
592
593          </div>
594        </div>
595      </div>
596      <div class="sphinxsidebar">
597        <div class="sphinxsidebarwrapper">
598            <p class="logo"><a href="../index.html">
599              <img class="logo" src="../_static/G2_html_logo.png" alt="Logo"/>
600            </a></p>
601<div id="searchbox" style="display: none">
602  <h3>Quick search</h3>
603    <form class="search" action="../search.html" method="get">
604      <input type="text" name="q" />
605      <input type="submit" value="Go" />
606      <input type="hidden" name="check_keywords" value="yes" />
607      <input type="hidden" name="area" value="default" />
608    </form>
609    <p class="searchtip" style="font-size: 90%">
610    Enter search terms or a module, class or function name.
611    </p>
612</div>
613<script type="text/javascript">$('#searchbox').show(0);</script>
614        </div>
615      </div>
616      <div class="clearer"></div>
617    </div>
618    <div class="related">
619      <h3>Navigation</h3>
620      <ul>
621        <li class="right" style="margin-right: 10px">
622          <a href="../genindex.html" title="General Index"
623             >index</a></li>
624        <li class="right" >
625          <a href="../py-modindex.html" title="Python Module Index"
626             >modules</a> |</li>
627        <li><a href="../index.html">GSAS-II 0.2.0 documentation</a> &raquo;</li>
628          <li><a href="index.html" >Module code</a> &raquo;</li> 
629      </ul>
630    </div>
631    <div class="footer">
632        &copy; Copyright 2013, Von Dreele and Toby for Argonne National Laboratory.
633      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.2.
634    </div>
635  </body>
636</html>
Note: See TracBrowser for help on using the repository browser.