1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>pymatgen — pymatgen 2020.7.3 documentation</title>
<link rel="stylesheet" href="../_static/basic.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-33990148-1']);
_gaq.push(['_trackPageview']);
</script>
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">pymatgen 2020.7.3 documentation</a> »</li>
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Module code</a> »</li>
<li class="nav-item nav-item-this"><a href="">pymatgen</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<h1>Source code for pymatgen</h1><div class="highlight"><pre>
<span></span><span class="c1"># coding: utf-8</span>
<span class="c1"># Copyright (c) Pymatgen Development Team.</span>
<span class="c1"># Distributed under the terms of the MIT License.</span>
<span class="sd">"""</span>
<span class="sd">Pymatgen (Python Materials Genomics) is a robust, open-source Python library</span>
<span class="sd">for materials analysis. This is the root package.</span>
<span class="sd">"""</span>
<span class="c1"># Useful aliases for commonly used objects and modules.</span>
<span class="c1"># Allows from pymatgen import <class> for quick usage.</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">warnings</span>
<span class="kn">import</span> <span class="nn">ruamel.yaml</span> <span class="k">as</span> <span class="nn">yaml</span>
<span class="kn">from</span> <span class="nn">fnmatch</span> <span class="kn">import</span> <span class="n">fnmatch</span>
<span class="n">__author__</span> <span class="o">=</span> <span class="s2">"Pymatgen Development Team"</span>
<span class="n">__email__</span> <span class="o">=</span> <span class="s2">"pymatgen@googlegroups.com"</span>
<span class="n">__maintainer__</span> <span class="o">=</span> <span class="s2">"Shyue Ping Ong"</span>
<span class="n">__maintainer_email__</span> <span class="o">=</span> <span class="s2">"shyuep@gmail.com"</span>
<span class="n">__version__</span> <span class="o">=</span> <span class="s2">"2020.7.3"</span>
<span class="n">SETTINGS_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">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="s2">"~"</span><span class="p">),</span> <span class="s2">".pmgrc.yaml"</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_load_pmg_settings</span><span class="p">():</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">SETTINGS_FILE</span><span class="p">,</span> <span class="s2">"rt"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="c1"># If there are any errors, default to using environment variables</span>
<span class="c1"># if present.</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">k</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"PMG_"</span><span class="p">):</span>
<span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
<span class="k">elif</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"VASP_PSP_DIR"</span><span class="p">,</span> <span class="s2">"MAPI_KEY"</span><span class="p">,</span> <span class="s2">"DEFAULT_FUNCTIONAL"</span><span class="p">]:</span>
<span class="n">d</span><span class="p">[</span><span class="s2">"PMG_"</span> <span class="o">+</span> <span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">d</span> <span class="ow">or</span> <span class="p">{}</span>
<span class="k">return</span> <span class="nb">dict</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="n">SETTINGS</span> <span class="o">=</span> <span class="n">_load_pmg_settings</span><span class="p">()</span>
<span class="kn">from</span> <span class="nn">.core.periodic_table</span> <span class="kn">import</span> <span class="n">Element</span><span class="p">,</span> <span class="n">Specie</span><span class="p">,</span> <span class="n">DummySpecie</span>
<span class="kn">from</span> <span class="nn">.core.composition</span> <span class="kn">import</span> <span class="n">Composition</span>
<span class="kn">from</span> <span class="nn">.core.structure</span> <span class="kn">import</span> <span class="n">Structure</span><span class="p">,</span> <span class="n">IStructure</span><span class="p">,</span> <span class="n">Molecule</span><span class="p">,</span> <span class="n">IMolecule</span>
<span class="kn">from</span> <span class="nn">.core.lattice</span> <span class="kn">import</span> <span class="n">Lattice</span>
<span class="kn">from</span> <span class="nn">.core.sites</span> <span class="kn">import</span> <span class="n">Site</span><span class="p">,</span> <span class="n">PeriodicSite</span>
<span class="kn">from</span> <span class="nn">.core.operations</span> <span class="kn">import</span> <span class="n">SymmOp</span>
<span class="kn">from</span> <span class="nn">.core.units</span> <span class="kn">import</span> <span class="n">Unit</span><span class="p">,</span> <span class="n">FloatWithUnit</span><span class="p">,</span> <span class="n">ArrayWithUnit</span>
<span class="kn">from</span> <span class="nn">.electronic_structure.core</span> <span class="kn">import</span> <span class="n">Spin</span><span class="p">,</span> <span class="n">Orbital</span>
<span class="kn">from</span> <span class="nn">.ext.matproj</span> <span class="kn">import</span> <span class="n">MPRester</span>
<span class="kn">from</span> <span class="nn">monty.json</span> <span class="kn">import</span> <span class="n">MontyEncoder</span><span class="p">,</span> <span class="n">MontyDecoder</span><span class="p">,</span> <span class="n">MSONable</span>
<div class="viewcode-block" id="get_structure_from_mp"><a class="viewcode-back" href="../pymatgen.html#pymatgen.get_structure_from_mp">[docs]</a><span class="k">def</span> <span class="nf">get_structure_from_mp</span><span class="p">(</span><span class="n">formula</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> Convenience method to get a crystal from the Materials Project database via</span>
<span class="sd"> the API. Requires PMG_MAPI_KEY to be set.</span>
<span class="sd"> Args:</span>
<span class="sd"> formula (str): A formula</span>
<span class="sd"> Returns:</span>
<span class="sd"> (Structure) The lowest energy structure in Materials Project with that</span>
<span class="sd"> formula.</span>
<span class="sd"> """</span>
<span class="n">m</span> <span class="o">=</span> <span class="n">MPRester</span><span class="p">()</span>
<span class="n">entries</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">get_entries</span><span class="p">(</span><span class="n">formula</span><span class="p">,</span> <span class="n">inc_structure</span><span class="o">=</span><span class="s2">"final"</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">entries</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"No structure with formula </span><span class="si">%s</span><span class="s2"> in Materials Project!"</span> <span class="o">%</span>
<span class="n">formula</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">entries</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"</span><span class="si">%d</span><span class="s2"> structures with formula </span><span class="si">%s</span><span class="s2"> found in Materials "</span>
<span class="s2">"Project. The lowest energy structure will be returned."</span> <span class="o">%</span>
<span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">entries</span><span class="p">),</span> <span class="n">formula</span><span class="p">))</span>
<span class="k">return</span> <span class="nb">min</span><span class="p">(</span><span class="n">entries</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">e</span><span class="o">.</span><span class="n">energy_per_atom</span><span class="p">)</span><span class="o">.</span><span class="n">structure</span></div>
<div class="viewcode-block" id="loadfn"><a class="viewcode-back" href="../pymatgen.html#pymatgen.loadfn">[docs]</a><span class="k">def</span> <span class="nf">loadfn</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> Convenience method to perform quick loading of data from a filename. The</span>
<span class="sd"> type of object returned depends the file type.</span>
<span class="sd"> Args:</span>
<span class="sd"> fname (string): A filename.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Note that fname is matched using unix-style, i.e., fnmatch.</span>
<span class="sd"> (Structure) if *POSCAR*/*CONTCAR*/*.cif</span>
<span class="sd"> (Vasprun) *vasprun*</span>
<span class="sd"> (obj) if *json* (passthrough to monty.serialization.loadfn)</span>
<span class="sd"> """</span>
<span class="k">if</span> <span class="p">(</span><span class="n">fnmatch</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"*POSCAR*"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">fnmatch</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"*CONTCAR*"</span><span class="p">)</span> <span class="ow">or</span>
<span class="s2">".cif"</span> <span class="ow">in</span> <span class="n">fname</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span> <span class="ow">or</span> <span class="n">fnmatch</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"*.vasp"</span><span class="p">):</span>
<span class="k">return</span> <span class="n">Structure</span><span class="o">.</span><span class="n">from_file</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">fnmatch</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"*vasprun*"</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">pymatgen.io.vasp</span> <span class="kn">import</span> <span class="n">Vasprun</span>
<span class="k">return</span> <span class="n">Vasprun</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">fnmatch</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"*.json*"</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">monty.serialization</span> <span class="kn">import</span> <span class="n">loadfn</span>
<span class="k">return</span> <span class="n">loadfn</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span></div>
</pre></div>
<div class="clearer"></div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">pymatgen 2020.7.3 documentation</a> »</li>
<li class="nav-item nav-item-1"><a href="index.html" >Module code</a> »</li>
<li class="nav-item nav-item-this"><a href="">pymatgen</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
© Copyright 2011, Pymatgen Development Team.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.1.2.
</div>
<div class="footer">This page uses <a href="http://analytics.google.com/">
Google Analytics</a> to collect statistics. You can disable it by blocking
the JavaScript coming from www.google-analytics.com.
<script type="text/javascript">
(function() {
var ga = document.createElement('script');
ga.src = ('https:' == document.location.protocol ?
'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
ga.setAttribute('async', 'true');
document.documentElement.firstChild.appendChild(ga);
})();
</script>
</div>
</body>
</html>
|