pyemaps 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. pyemaps/COPYING +798 -0
  2. pyemaps/CifFile/CifFile_module.py +3117 -0
  3. pyemaps/CifFile/StarFile.py +2496 -0
  4. pyemaps/CifFile/TypeContentsParser.py +82 -0
  5. pyemaps/CifFile/YappsStarParser_1_0.py +289 -0
  6. pyemaps/CifFile/YappsStarParser_1_1.py +288 -0
  7. pyemaps/CifFile/YappsStarParser_2_0.py +369 -0
  8. pyemaps/CifFile/YappsStarParser_STAR2.py +382 -0
  9. pyemaps/CifFile/__init__.py +7 -0
  10. pyemaps/CifFile/drel/__init__.py +1 -0
  11. pyemaps/CifFile/drel/drel_ast_yacc.py +582 -0
  12. pyemaps/CifFile/drel/drel_lex.py +228 -0
  13. pyemaps/CifFile/drel/drel_runtime.py +126 -0
  14. pyemaps/CifFile/drel/parsetab.py +185 -0
  15. pyemaps/CifFile/drel/py_from_ast.py +628 -0
  16. pyemaps/CifFile/parsetab.py +185 -0
  17. pyemaps/CifFile/yapps3_compiled_rt.py +390 -0
  18. pyemaps/README.md +201 -0
  19. pyemaps/__config__.py +91 -0
  20. pyemaps/__init__.py +233 -0
  21. pyemaps/__main__.py +219 -0
  22. pyemaps/__version__.py +1 -0
  23. pyemaps/cdata/Aluminium.xtl +4 -0
  24. pyemaps/cdata/AluminiumOxide.xtl +5 -0
  25. pyemaps/cdata/Aluminium_FCC.xtl +4 -0
  26. pyemaps/cdata/BariumTitanate_180k.xtl +6 -0
  27. pyemaps/cdata/BariumTitanate_270k.xtl +7 -0
  28. pyemaps/cdata/BariumTitanate_Tetra.xtl +7 -0
  29. pyemaps/cdata/BiMnO3.xtl +27 -0
  30. pyemaps/cdata/Boron_Tetra.xtl +8 -0
  31. pyemaps/cdata/CadmiumSelenide_Hex.xtl +5 -0
  32. pyemaps/cdata/CadmiumSulfide_Cubic.xtl +5 -0
  33. pyemaps/cdata/CadmiumSulfide_Hex.xtl +5 -0
  34. pyemaps/cdata/Chromium_BCC.xtl +4 -0
  35. pyemaps/cdata/CoSb3_Skutterudite.xtl +5 -0
  36. pyemaps/cdata/CopperOxide.xtl +5 -0
  37. pyemaps/cdata/Copper_FCC.xtl +4 -0
  38. pyemaps/cdata/Cu2O_Cuprite.xtl +5 -0
  39. pyemaps/cdata/Diamond.xtl +4 -0
  40. pyemaps/cdata/ErbiumPyrogermanate.xtl +9 -0
  41. pyemaps/cdata/FePd_Tetra.xtl +5 -0
  42. pyemaps/cdata/FeS2_Pyrite.xtl +15 -0
  43. pyemaps/cdata/GalliumAntimonide.xtl +5 -0
  44. pyemaps/cdata/GalliumArsenide.xtl +5 -0
  45. pyemaps/cdata/GalliumNitride.xtl +5 -0
  46. pyemaps/cdata/Germanium.xtl +4 -0
  47. pyemaps/cdata/Gold_FCC.xtl +4 -0
  48. pyemaps/cdata/IndiumArsenide.xtl +5 -0
  49. pyemaps/cdata/LaMnO3.xtl +7 -0
  50. pyemaps/cdata/LeadZirconateTitanate.xtl +8 -0
  51. pyemaps/cdata/Li2MnO3.xtl +13 -0
  52. pyemaps/cdata/NaFeO2.xtl +6 -0
  53. pyemaps/cdata/Nb3Sn.xtl +5 -0
  54. pyemaps/cdata/Pentacene.xtl +39 -0
  55. pyemaps/cdata/Silicon.xtl +4 -0
  56. pyemaps/cdata/StrontiumTitanate.xtl +6 -0
  57. pyemaps/cdata/TelluriumDioxide.xtl +5 -0
  58. pyemaps/cdata/TinDioxide_RT.xtl +5 -0
  59. pyemaps/cdata/TitaniumDioxide_Anatase.xtl +5 -0
  60. pyemaps/cdata/TitaniumDioxide_Rutile.xtl +5 -0
  61. pyemaps/cdata/TungstenDiselenide.xtl +5 -0
  62. pyemaps/cdata/VanadiumDioxide_RT.xtl +6 -0
  63. pyemaps/cdata/ZincOxide.xtl +5 -0
  64. pyemaps/cdata/Zinc_HCP.xtl +4 -0
  65. pyemaps/cdata/ZirconiumNitride.xtl +5 -0
  66. pyemaps/cdata/limno2.xtl +6 -0
  67. pyemaps/crystals.py +1415 -0
  68. pyemaps/ddiffs.py +147 -0
  69. pyemaps/diffract/__init__.py +70 -0
  70. pyemaps/diffract/bloch_dec.py +779 -0
  71. pyemaps/diffract/csf_dec.py +242 -0
  72. pyemaps/diffract/dif_dec.py +519 -0
  73. pyemaps/diffract/dpgen_dec.py +175 -0
  74. pyemaps/diffract/mxtal_dec.py +201 -0
  75. pyemaps/diffract/powder_dec.py +137 -0
  76. pyemaps/diffract/stereo_dec.py +111 -0
  77. pyemaps/display.py +791 -0
  78. pyemaps/emcontrols.py +1017 -0
  79. pyemaps/errors.py +266 -0
  80. pyemaps/fileutils.py +1001 -0
  81. pyemaps/kdiffs.py +1221 -0
  82. pyemaps/license.txt +42 -0
  83. pyemaps/samples/adf.py +137 -0
  84. pyemaps/samples/al.img +0 -0
  85. pyemaps/samples/al_dpgen.py +57 -0
  86. pyemaps/samples/al_ediom.py +94 -0
  87. pyemaps/samples/convert_image.py +88 -0
  88. pyemaps/samples/dm_diff.py +225 -0
  89. pyemaps/samples/mask.im3 +0 -0
  90. pyemaps/samples/powder.py +51 -0
  91. pyemaps/samples/raw.img +0 -0
  92. pyemaps/samples/si_bloch.py +120 -0
  93. pyemaps/samples/si_constructor.py +51 -0
  94. pyemaps/samples/si_csf.py +59 -0
  95. pyemaps/samples/si_dif.py +134 -0
  96. pyemaps/samples/si_lacbed.py +59 -0
  97. pyemaps/samples/si_pyemaps.py +80 -0
  98. pyemaps/samples/si_scm.py +156 -0
  99. pyemaps/samples/si_stereo.py +116 -0
  100. pyemaps/scattering/__init__.py +26 -0
  101. pyemaps/scattering/sct_dec.py +31 -0
  102. pyemaps/spg/__init__.py +25 -0
  103. pyemaps/spg/spg_dec.py +60 -0
  104. pyemaps/stackimg.py +1031 -0
  105. pyemaps/xtal.py +222 -0
  106. pyemaps-2.0.0.dist-info/METADATA +231 -0
  107. pyemaps-2.0.0.dist-info/RECORD +112 -0
  108. pyemaps-2.0.0.dist-info/WHEEL +5 -0
  109. pyemaps-2.0.0.dist-info/entry_points.txt +2 -0
  110. pyemaps-2.0.0.dist-info/licenses/COPYING +798 -0
  111. pyemaps-2.0.0.dist-info/licenses/license.txt +42 -0
  112. pyemaps-2.0.0.dist-info/top_level.txt +1 -0
pyemaps/xtal.py ADDED
@@ -0,0 +1,222 @@
1
+ '''
2
+
3
+ .. This file is part of pyEMAPS
4
+
5
+ .. ----
6
+
7
+ .. pyEMAPS is free software. You can redistribute it and/or modify
8
+ .. it under the terms of the GNU General Public License as published
9
+ .. by the Free Software Foundation, either version 3 of the License,
10
+ .. or (at your option) any later version..
11
+
12
+ .. pyEMAPS is distributed in the hope that it will be useful,
13
+ .. but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ .. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ .. GNU General Public License for more details.
16
+
17
+ .. You should have received a copy of the GNU General Public License
18
+ .. along with pyEMAPS. If not, see `<https://www.gnu.org/licenses/>`_.
19
+
20
+ .. Contact supprort@emlabsoftware.com for any questions and comments.
21
+
22
+ .. ----
23
+
24
+ .. Author: EMLab Solutions, Inc.
25
+ .. Date: Feb. 17, 2025
26
+
27
+ '''
28
+
29
+ from . import MxtalError
30
+ import numpy as np
31
+
32
+ class ACoord:
33
+
34
+ '''
35
+
36
+ Coordinates of an atom with its symbol and 3-d real number coordinates in a crystal structure.
37
+
38
+ '''
39
+ def __init__(self, symb = "", coord=[0.0, 0.0, 0.0]):
40
+
41
+ setattr(self, 'symb', symb)
42
+ setattr(self, 'coord', coord)
43
+
44
+ @property
45
+ def symb(self):
46
+
47
+ '''
48
+
49
+ atom symbol
50
+
51
+ '''
52
+ return self._symb
53
+
54
+ @property
55
+ def coord(self):
56
+
57
+ '''
58
+
59
+ Atom coordinate in 3-d floating numbers
60
+
61
+ '''
62
+ return self._coord
63
+
64
+ @symb.setter
65
+ def symb(self, s):
66
+ if s is None or not isinstance(s, str):
67
+ raise MxtalError("Atomic symbol must be a string")
68
+ self._symb=s
69
+
70
+ @coord.setter
71
+ def coord(self, v):
72
+
73
+ if v is None or not isinstance(v, (list, np.ndarray)) or len(v) != 3 or not all(isinstance(x, (int, float)) for x in v):
74
+ raise MxtalError("Atomic coordinates must be an array of three float or integer numerals")
75
+ self._coord=v
76
+
77
+ def __eq__(self, other):
78
+ import numpy as np
79
+ if not isinstance(other, ACoord):
80
+ print(f'Comparing object must of type ACoord')
81
+ return False
82
+
83
+ if self._symb != other.symb:
84
+ return False
85
+
86
+ if not np.allclose(self._coord, other.coord, atol=1.0e-6):
87
+ return False
88
+
89
+ return True
90
+
91
+ def __repr__(self):
92
+ s, x, y, z = self._symb, self._coord[0], self._coord[1], self._coord[2]
93
+ sx = '{0:<#014.10f}'. format(x)
94
+ sy = '{0:<#014.10f}'. format(y)
95
+ sz = '{0:<#014.10f}'. format(z)
96
+ return str(f'{s:<10}\t{sx} {sy} {sz}')
97
+
98
+ def __str__(self):
99
+ return self.__repr__()
100
+
101
+ class Xtal:
102
+
103
+ '''
104
+ Crystal structure class cnostructed by the output from
105
+ `generateMxtal <pyemaps.crystals.html#pyemaps.crystals.Crystal.generateMxtal>`_ method of any crystal object, which consists of a cell
106
+ constant and a list of atomic coordinates.
107
+
108
+ '''
109
+ def __init__(self):
110
+
111
+ setattr(self, 'cell', [0.0,0.0,0.0,90.0,90.0,90.0])
112
+ setattr(self, 'acoordList', [])
113
+
114
+ @property
115
+ def cell(self):
116
+ return self._cell
117
+
118
+ @property
119
+ def acoordList(self):
120
+ return self._acoordList
121
+
122
+ @cell.setter
123
+ def cell(self, c):
124
+ if c is None or not isinstance(c, (list, np.ndarray)) or len(c) != 6 or not all(isinstance(x, (int, float)) for x in c):
125
+ raise MxtalError('Invalid cell constants, it much be an array of six floats')
126
+
127
+ self._cell = c
128
+
129
+ @acoordList.setter
130
+ def acoordList(self, al):
131
+ if not isinstance(al, list):
132
+ raise MxtalError('invalid input atomic structure coordinates, it must be a list')
133
+
134
+ for a in al:
135
+ if not isinstance(a, ACoord):
136
+ raise MxtalError('invalid data found in atomic structure list')
137
+
138
+ self._acoordList = al
139
+
140
+ def add(self, symb, c):
141
+ '''
142
+
143
+ Append an atomc coordinate to existing list
144
+
145
+ '''
146
+ ac = ACoord(symb, c)
147
+ self._acoordList.append(ac)
148
+
149
+ def __getitem__(self, key):
150
+
151
+ '''
152
+
153
+ Array like method for retrieving atomic coordinates
154
+
155
+ '''
156
+
157
+ return self._acoordList[key]
158
+
159
+ def __eq__(self, other):
160
+ '''
161
+
162
+ Overloading == operator for the atomic coordinates class
163
+
164
+ '''
165
+ import copy
166
+ if not isinstance(other, Xtal):
167
+ print("Comparing object of of invalid type")
168
+ return False
169
+
170
+ nxtal1 = len(self._acoordList)
171
+ nxtal2 = len(other.acoordList)
172
+
173
+ if nxtal1 != nxtal2:
174
+ return False
175
+
176
+ if not np.allclose(self._cell, other.cell, atol=1.0e-6):
177
+ return False
178
+
179
+ clist = copy.deepcopy(self._acoordList)
180
+ for ac in other.acoordList:
181
+ if not ac in clist:
182
+ return False
183
+ clist.remove(ac)
184
+
185
+ return True
186
+
187
+ def __repr__(self):
188
+ '''
189
+ Present atomic stucture data in .xyz format in standard output.
190
+ Refer to `XYZ format <https://wiki.jmol.org/index.php/File_formats/Formats/XYZ>`_
191
+ for its definition and usage.
192
+
193
+ .. note:: An example of Silicon atomic structure by pyemaps:
194
+
195
+ .. code-block:: console
196
+
197
+ 216
198
+ 50.0 50.0 50.0 90.0 90.0 90.0
199
+ SI 0.6788375000 0.6788375000 0.6788375000
200
+ SI 3.3941875000 3.3941875000 0.6788375000
201
+ SI 4.7518625000 2.0365125000 2.0365125000
202
+ SI 2.0365125000 4.7518625000 2.0365125000
203
+ SI 3.3941875000 0.6788375000 3.3941875000
204
+ ...
205
+
206
+ '''
207
+
208
+ slines = []
209
+ nxyz = len(self._acoordList)
210
+ slines.append(str(nxyz))
211
+
212
+ c0, c1, c2, c3, c4, c5 = self._cell
213
+ slines.append(str(f'\t {c0} {c1} {c2} {c3} {c4} {c5}'))
214
+
215
+ for ac in self._acoordList:
216
+ slines.append(str(ac))
217
+
218
+ ret = '\n'.join(slines)
219
+ return ret
220
+
221
+ def __str__(self):
222
+ return self.__repr__()
@@ -0,0 +1,231 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyemaps
3
+ Version: 2.0.0
4
+ Summary: A Python Package for Transmission Electron Diffraction Simulations and Crystallographic Computing
5
+ Home-page: https://www.emlabsolutions.com
6
+ Author: EMLab Solutions, Inc.
7
+ Author-email: support@emlabsoftware.com
8
+ License: Free for base features. License activation required for extended 4dstem features
9
+ Keywords: Transmission,Electron,Diffraction,Simulation,Crystallography,Python
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
14
+ Classifier: Programming Language :: Python :: 3.15
15
+ Classifier: Operating System :: Microsoft :: Windows
16
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
+ Classifier: Intended Audience :: Science/Research
18
+ Requires-Python: >=3.12
19
+ Description-Content-Type: text/markdown
20
+ License-File: license.txt
21
+ License-File: COPYING
22
+ Requires-Dist: emaps>=2.0.0
23
+ Requires-Dist: numpy>=2.0
24
+ Requires-Dist: matplotlib>=3.8.4
25
+ Dynamic: description
26
+ Dynamic: description-content-type
27
+ Dynamic: license-file
28
+ Dynamic: requires-dist
29
+ Dynamic: summary
30
+
31
+ <!-- # Open Source __pyEMAPS__ Development Guidelines -->
32
+
33
+ 1. <a id="contents"></a>[What's in pyEMAPS](#overview)
34
+ 2. <a id="contents"></a>[Build pyEMAPS](#build)
35
+ 3. <a id="contents"></a>[Installation](#installation)
36
+ 4. <a id="contents"></a>[Testing](#test)
37
+ 5. <a id="contents"></a>[Development Guidelines](#process)
38
+ 5. <a id="contents"></a>[pyEMAPS Contributor License Agreement](#CLA)
39
+ 5. <a id="contents"></a>[Code of Conduct](#COC)
40
+
41
+ ## What's in pyEMAPS [`↩`](#contents) <a id="overview"></a>
42
+ **pyEMAPS** package is a collection of python modules and libraries designed
43
+ for transmission electron diffraction simulations and crystallographic calculations
44
+ for all crystal systems. The simulation is based on the theories of kinematical and
45
+ dynamical electron diffraction, as described by Spence and Zuo in the book of Electron Microdiffraction (Plenum, New York, 1992).
46
+
47
+ The base version is free for personal and commercial use, while additional licensed features in 4DSTEM are available for enhanced functionality.
48
+
49
+ ### Features:
50
+ Free base features:
51
+ - Crystallography
52
+ - Crystal constructor
53
+ - Loading from a built-in crystal library
54
+ - CIF import
55
+ - Crystallographic transformations
56
+ - Real and reciprocal vector calculations
57
+ - Stereodiagram plotting
58
+ - Crystal Structure Factors Calculations
59
+
60
+ - Electron diffraction pattern, dynamical
61
+ - Convergent beam electron diffraction
62
+ - Electron scattering Matrix
63
+ - Electron dispersion
64
+
65
+ - Electron diffraction pattern, kinematical
66
+ - Selected area diffraction
67
+ - Kikuchi and high order Laue zone line geometry
68
+ - Convergent beam electron diffraction
69
+ - Electron powder diffraction simulations
70
+
71
+ **Extended features** (requires license):
72
+ - Electron diffraction patterns database builder and explore
73
+ - Electron diffraction pattern indexing
74
+ - Annular bright and dark field
75
+ - Masked images
76
+
77
+ Check our full [pyemaps documentation](https://emlab-solutions.github.io/pyemaps) for details of __pyEMAPS__ python classes designs and their interfaces.
78
+
79
+ We are looking for experts in electron microscope and crystallography, and/or python enthusiasts to join pyEMAPS project as contributors, please contact us at support@emlabsoftware.com if you are interested.
80
+
81
+ We greatly appreciate your contributions to pyEMAPS and look forward to making it a tool for the communty to accelaerate microscopy and crystallography education and research. If you benefit from __pyEMAPS__ in your microscopy and crystallography research and education, go to [PayPal](https://www.paypal.com/paypalme/pyemaps22) to donate. Your generous donations keep us in the business of providing software tools to the education and research communities.
82
+
83
+ See instructions below for contributor:
84
+
85
+ ## Build pyEMAPS [`↩`](#content) <a id="build"></a>
86
+
87
+ Requirements and recommendations:
88
+ * __Python__: Version 3.12, 3.13, 3.14 or 3.15
89
+ * __Operating Systems__: Windows
90
+ * __VSCode__: code editing (recommended, for contributors only)
91
+
92
+ Building __pyEMAPS__ itself needs no compiler, because it is pure Python. Its compiled backend, __emaps__, supports Windows with Python 3.12 to 3.15, so __pyEMAPS__ does too. pyEMAPS 1.1.x remains available for Python 3.7. We are also looking for contributors to extend it to other platforms.
93
+
94
+ Like many python development, a virtual python environment is recommended to isolate your pyEMAPS development environment from your other python development projects.
95
+
96
+ Below are steps to establish __pyEMAPS__ build environment with python 3.12 as an example:
97
+
98
+ * Download the Python 3.12 Windows installer (64-bit) from [python.org](https://www.python.org/downloads/windows/).
99
+ * Run the installer, choose the following in installer GUI:
100
+
101
+ * Select Customize Installation
102
+ * Check and select pip
103
+ * Install for all users/specific users
104
+ * Create a virtual environment called "pyemaps_build" for the build
105
+ * Create a dev directory:
106
+ ```
107
+ mkdir pyemaps-dev
108
+ ```
109
+ (or choose your own directory name)
110
+ * Create pyemaps_build virtual environemnt:
111
+ ```
112
+ py -3.12 -m venv pyemaps_build
113
+ ```
114
+ * Activate pyemaps_build vitual environment:
115
+ ```
116
+ .\pyemaps_build\Scripts\activate
117
+ ```
118
+ * Update pip:
119
+ ```
120
+ python -m pip install pip --upgrade
121
+ ```
122
+ * Install other python packages required for building pyemaps, using pip:
123
+ ```
124
+ pip install setuptools wheel build
125
+ ```
126
+ * Build directory structure:
127
+
128
+ <pre>
129
+ 📦pyemaps
130
+ ┣━ 📂.git <----Source repository configurations
131
+ ┣━ 📂build <----Intermediate build folder
132
+ ┣━ 📂dist <----Build package files
133
+ ┣━ 📂cdata <----Built-in crystal data in proprietory format
134
+ ┣━ 📂CifFile <----CIF crystal data reader
135
+ ┣━ 📂diffract <----Diffraction modules python interfaces
136
+ ┣━ 📂docs <----Documentation using Sphinx. Document your changes!
137
+ ┣━ 📂samples <----Sample code. Offical sample code for guiding pyemaps usages
138
+ ┣━ 📂scattering <----Scattering data module
139
+ ┣━ 📂spg <----Space group data module
140
+ ┗━ 📂test <----Test cases including sanity, unit and stree tests. Keep adding them!
141
+ </pre>
142
+ where _docs_ for creation of documents requires Sphinx python package:
143
+ - Sphinx for documentation can be installed:
144
+ ```
145
+ pip install Sphinx=5.3.0
146
+ ```
147
+
148
+ * Build pyEMAPS package, run:
149
+ ```
150
+ python build_pyemaps -t -v 1.0.0
151
+ ```
152
+ Here the option "-t" indicates build is for local testing purposes.
153
+ You can replace the version number '1.0.0' with the one you desire.
154
+
155
+ When the option _-v_ is not specified. The build script will figure out the version
156
+ from pypi.org repository.
157
+
158
+ Note: there will be two additional diretcories:
159
+ - _build_. folder holding intermediate build files.
160
+ - _dist_. folder for final package that includes .whl and .tgz. The former is the package file and the latter is the current source code used to build the pacage in compressed format.
161
+
162
+ ## Installation [`↩`](#contents) <a id="installation"></a>
163
+
164
+ * Install the new pyEMAPS package:
165
+ ```
166
+ pip install .\dist\pyemaps-1.0.0-py3-none-any.whl
167
+ ```
168
+ This will install new pyEMAPS just built in current python virtual environment
169
+ along with all of its dependent packages.
170
+
171
+ If you have a previous _pyemaps_ with versiual or larger than current package version.
172
+ In that case, you need to uninstall previous version before installing the new package:
173
+ ```
174
+ pip uninstall pyemaps
175
+ ```
176
+
177
+ ## Testing [`↩`](#contents) <a id="test"></a>
178
+
179
+ Current pyEMAPS development comes with a set of basic testing suites, including
180
+ * sanity checks
181
+ * unit tests
182
+ * stress tests.
183
+
184
+ To run these test suites, call:
185
+ ```
186
+ .\test\sanity\sanity.bat
187
+ ```
188
+ We are looking for your tests contributions to make the development to keep high quality standards for _pyEMAPS_.
189
+
190
+ ## Development Guidelines [`↩`](#contents) <a id="process"></a>
191
+
192
+ As any open source development project, we strongly recommend contributors to adhere to the following guidelines:
193
+
194
+ * __Issues creation__. Before making changes for bug fix or feature implementation, create an issue in the pyEMAPS' repository. Your concise description of the issue(s) serves well not only in laying good foundations for your design and implementations, but also in communicating to your fellow contributors.
195
+
196
+ * __Development Branch__. Create your own branch from 'main' where you work on your changes. The main branch is kept as production base.
197
+
198
+ * __Backwards Compatibilities Tests__. Existing test suites designed for testing most of the features are to ensure that no existing implementations are unintentionally broken after new changes are introduced.
199
+
200
+ * __New Tests Additions__. Writing new test cases for the new implementations are strongly encouraged.
201
+
202
+ * __Pull Requests__. Before merging your changes into production branch "main", a pull request is required. The request should also accompany a list of code reviewers from the contributors.
203
+
204
+ * __Code Review__. We took code review seriously, whether you are reviewing code or your code is being reviewed. This process provides important step of making sound implementations and preventing new bugs.
205
+
206
+ * __Documentation__. You are the author of the new implementations, so please take the pride by documenting them!
207
+ We use sphinx tool for documentation generation. To install sphinx, run:
208
+ ```
209
+ pip install -U sphinx
210
+ ```
211
+ in your python build virtual environment (pyemaps_build in our example).
212
+
213
+ Most of the documentations files are in "docs" directory. After making documentation changes to record your changes, compile them with sphinx:
214
+ ```
215
+ sphinx-build -b html source .
216
+ ```
217
+ The changes resulted from the above can be previewed by opening index.html with avaliable browser.
218
+
219
+ ## pyEMAPS Contributor License Agreement [`↩`](#contents) <a id="CLA"></a>
220
+
221
+ Please read and agree to our [Contributor License Agreement](CONTRIBUTING.md) before contributing to this project.
222
+
223
+ ## Code of Conduct [`↩`](#contents) <a id="COC"></a>
224
+
225
+ pyEMAPS is committed to providing a welcoming and inclusive environment for all contributors. We follow the [Contributor Covenant](https://www.contributor-covenant.org/version/2/0/code_of_conduct/) as our code of conduct. Please make sure to review it before contributing.
226
+
227
+ **[Read the Contributor Covenant](https://www.contributor-covenant.org/version/2/0/code_of_conduct/)**
228
+
229
+ Any instances of unacceptable behavior can be reported to support@emlabsoftware.com.
230
+
231
+
@@ -0,0 +1,112 @@
1
+ pyemaps/COPYING,sha256=0A1CTDrKtVWe8nhgrrVbJMCJ-ExiCg-2WEL78aTYQSQ,41861
2
+ pyemaps/README.md,sha256=VN3grsW7qjChoUAzMmh99POOFhZ-TdlGTTCnU5QHsqw,9753
3
+ pyemaps/__config__.py,sha256=sCp0QgIVpz1Snh-1YJ8EyNbogn_XaM-QJR6BscIa9OE,3052
4
+ pyemaps/__init__.py,sha256=RWQoRSUu8SbAQyaz4I26CqS5LkETGG_AMIjo39B_rc0,7816
5
+ pyemaps/__main__.py,sha256=Mgi5fjbdaIofhx8JBPixDOlB3KLnfOynSti2PCzs3U0,7831
6
+ pyemaps/__version__.py,sha256=jfMYUkKiruYd9cM9tY-_mLygW0fRj75GOhW2tEhKhOI,21
7
+ pyemaps/crystals.py,sha256=lEMBiVMljTnUThtYfIekxfr5sKplD9SpwOn3WQcO7Rg,41838
8
+ pyemaps/ddiffs.py,sha256=wHY0oK0LCmdXL9ku5wGjTY5qjqKDKG_GRIVpuA4FhFk,4032
9
+ pyemaps/display.py,sha256=2TE36S8AOK3SBBK-vQ9WxfCH70KDQHJObuV-NT-gOeE,24427
10
+ pyemaps/emcontrols.py,sha256=mIXHDeRBs_GeCxG4MSsoEPvo5FJVmpL0P5IOHk7hco0,30341
11
+ pyemaps/errors.py,sha256=JNGcK9lOnEE_hVlXJNtBuMgpuhAGRzNYh6ac5HgCxRA,7612
12
+ pyemaps/fileutils.py,sha256=Tgva1lERKX711o4uDK69Upy8cEViJGmySICYzgQE4V4,31257
13
+ pyemaps/kdiffs.py,sha256=CzJs-cxbiJWqN_xtH4nmM_eeLPyhW4qPYqYpoYZ7fqU,31712
14
+ pyemaps/license.txt,sha256=YYKprrVCwBrah9DoC7ol8AnoKVLXktugABr94uXjgro,1804
15
+ pyemaps/stackimg.py,sha256=anDlpakiD-97MSKYmxrySTs0kq50d3VcRzsA__20FLI,39997
16
+ pyemaps/xtal.py,sha256=2ThWMRNW4dYvFkoVaXAo9yIUephsqRbN2IOBB6nKXK8,6295
17
+ pyemaps/CifFile/CifFile_module.py,sha256=86BC7OjEN-mDD5RfwwHa1xSQqCRjd3i4EPb7QgUWUI8,155840
18
+ pyemaps/CifFile/StarFile.py,sha256=simyw7WUp2-86cxYDRz7Oe9gOuI3CcxODu8rOKljtDE,120121
19
+ pyemaps/CifFile/TypeContentsParser.py,sha256=S9QnBcMZqvC2WH5vLkjDUIxIOWU51ruE-VHyz9NCSWo,2987
20
+ pyemaps/CifFile/YappsStarParser_1_0.py,sha256=IudARp9KIdzXRN51VsM-Vu4gzsOS7RF67iUTKJRfHTE,14527
21
+ pyemaps/CifFile/YappsStarParser_1_1.py,sha256=-zeXa8j-rBIR8tTyM3DL8swwW4rw9tAWwdvJVKvOHp4,14534
22
+ pyemaps/CifFile/YappsStarParser_2_0.py,sha256=YIp7R53-8sV5Y5m09HqM-BACq8cllg7eh8IjsQAoP7c,21855
23
+ pyemaps/CifFile/YappsStarParser_STAR2.py,sha256=yh23gMI6YxA4e2hmgnI6mquem9OqX8u_xAiShU5g7yc,22703
24
+ pyemaps/CifFile/__init__.py,sha256=6mM5VQO7pucK6ujyzN9nO8Rudvt3qD6ktI54ajFAZ_I,454
25
+ pyemaps/CifFile/parsetab.py,sha256=yRDCaICAezAqCHdR7D3G9OIobHzittWOwSjmT_fbRHA,82720
26
+ pyemaps/CifFile/yapps3_compiled_rt.py,sha256=lM1oQh2snwia7RIGi8ctFx6FD7iSwpvCQUYKmz2SHfw,14428
27
+ pyemaps/CifFile/drel/__init__.py,sha256=Fr9oA6sGXl0DfVEewppr72fr-Aaljcxw6hnA25VCjfE,14
28
+ pyemaps/CifFile/drel/drel_ast_yacc.py,sha256=y2B2OsdyoZ4zgDoFdpC15yP7OT6qiYd8fkiS3tJHHCY,17461
29
+ pyemaps/CifFile/drel/drel_lex.py,sha256=1aHIbUUw5OIUWvKmFCJ_sDIHtS3WjDvZBRiKK_rSoDo,4873
30
+ pyemaps/CifFile/drel/drel_runtime.py,sha256=CJwVz34AePK6waT04b6nqsrSuRYMq_x0eCcMn3Vlwf8,4509
31
+ pyemaps/CifFile/drel/parsetab.py,sha256=ztHT1R8q1MOJsUUBI8X1jYCTyOFxTPHyrYJD-_bEy8s,81784
32
+ pyemaps/CifFile/drel/py_from_ast.py,sha256=58TdMin-WEOR2Sg0FNjDJuNhl0oV5Z-lETDBiVyyLA8,30356
33
+ pyemaps/cdata/Aluminium.xtl,sha256=m1gczaPPazaCa6c9pSo6BvIV8MTIIDKXsxDkE-7MVEw,143
34
+ pyemaps/cdata/AluminiumOxide.xtl,sha256=Iz5dGWY3UTgpAc1levHqV96aW_AZKieqWbOAzVDXzd0,273
35
+ pyemaps/cdata/Aluminium_FCC.xtl,sha256=CRRz9l2nIrg_4dqXAPNc6nlMtbiXicWKPwaZZJCeWaU,147
36
+ pyemaps/cdata/BariumTitanate_180k.xtl,sha256=Gbb2HddtpNq0xMTNEzuZuvkGugbftuOdhHRfdb5K21Y,364
37
+ pyemaps/cdata/BariumTitanate_270k.xtl,sha256=d0zHBgaS5ZMfFfZ2zWvrnXeMPnovnuJRdellQ7iwEHQ,450
38
+ pyemaps/cdata/BariumTitanate_Tetra.xtl,sha256=SGPD0ns00N1CFkHW-NTEQTyQmstphq8RBkULUySwdGw,452
39
+ pyemaps/cdata/BiMnO3.xtl,sha256=uyeTyhXpoWj0Dhy1AnkNP_s18OKjNhJe9hz7dQi-GTw,2221
40
+ pyemaps/cdata/Boron_Tetra.xtl,sha256=8RSiz2zpjuSWa3jyEJFxGhPAfTSqadfiF4r7fQ1zu9U,528
41
+ pyemaps/cdata/CadmiumSelenide_Hex.xtl,sha256=35kayht-_QVac_oFsYyZj4dlI0N0I0mDBr60HRv-4Zo,278
42
+ pyemaps/cdata/CadmiumSulfide_Cubic.xtl,sha256=9NHrMaze-TMaVOOm7BBy4LdgHLiAp-djfI4FLoXr9aU,197
43
+ pyemaps/cdata/CadmiumSulfide_Hex.xtl,sha256=gT9s-qs20buwW7mt-Gb17pcbh7r8xSIgrnuF6dtP9og,276
44
+ pyemaps/cdata/Chromium_BCC.xtl,sha256=U3GagZwOhJoSVdnaUtmdgT7aSIzQPvtq1nGXjnOVFRU,146
45
+ pyemaps/cdata/CoSb3_Skutterudite.xtl,sha256=bZ5RdwN2Rk-NJwvav3uNy6fUIABpB8zY6anLUH4rn_Q,276
46
+ pyemaps/cdata/CopperOxide.xtl,sha256=XqdGRdEZxB146okfUfQ4GiXVTm4Ept4i6_2P_Ernj8k,269
47
+ pyemaps/cdata/Copper_FCC.xtl,sha256=Z6GvzLNuYPefGsJs1jo_7I-W_-8OiZSrUAc6og7BbEA,144
48
+ pyemaps/cdata/Cu2O_Cuprite.xtl,sha256=jNV87n3nnztg8sqYYCwEEZIcmzKob3UZz5evomur3A8,272
49
+ pyemaps/cdata/Diamond.xtl,sha256=6Yrq8rKJFvhcMqh-nUUmrgV91OWEIrsGyuA93cUmicw,131
50
+ pyemaps/cdata/ErbiumPyrogermanate.xtl,sha256=lvfhkq9dSl73FtGsaE7s5Yo8Gnf5DoqZExGamMuca58,626
51
+ pyemaps/cdata/FePd_Tetra.xtl,sha256=d9-2UmGNcuM-5mwK58buVny52Zani8y5GKHRasbpeMI,198
52
+ pyemaps/cdata/FeS2_Pyrite.xtl,sha256=hCREpceWz6TBNKz-4B4DAfVG_NJc7uzeKpYZjErvzP8,672
53
+ pyemaps/cdata/GalliumAntimonide.xtl,sha256=C5h0dunBL488TG1sU2HTQ-zvtxYMZsNF0nknmk722Tg,205
54
+ pyemaps/cdata/GalliumArsenide.xtl,sha256=jKT_f9PX6NovZlIGJLDza13DT1dbCS1U-WhnM8GAYA0,201
55
+ pyemaps/cdata/GalliumNitride.xtl,sha256=pVeSqC9omkX7_HMZd6h58g7VAPPgzlcq3kpQK-PyCv0,240
56
+ pyemaps/cdata/Germanium.xtl,sha256=2hD8vUeGiqPlNbaNntBJ3gqG4zawX3Nersemi6CZQT8,132
57
+ pyemaps/cdata/Gold_FCC.xtl,sha256=YPu8z3UQYn8CUXUDIsJ3mfOtK8HwpW1QN9g6v0PfzWM,142
58
+ pyemaps/cdata/IndiumArsenide.xtl,sha256=zE5Z7JMi9j47JbZ_Etr0AyBQ9WXbdej2UFIgPiHYc3Q,202
59
+ pyemaps/cdata/LaMnO3.xtl,sha256=-ZlWsEBFZZCBkB2dJHMLqOnyp9lRS5xIdWekN0GrnZE,271
60
+ pyemaps/cdata/LeadZirconateTitanate.xtl,sha256=muLHpHkgoDq-WYfWpqNP50LSbhk1PCkXtndMGbK1SaQ,594
61
+ pyemaps/cdata/Li2MnO3.xtl,sha256=F97FOuPtmVq7kw4X3cbzsd2qVwwSQxOeCwGf16EojPo,965
62
+ pyemaps/cdata/NaFeO2.xtl,sha256=m_-yNHxkrsV4A8tbvCJ5q8xZKeVNUxKcFq7IB1RKzFk,239
63
+ pyemaps/cdata/Nb3Sn.xtl,sha256=My4R1m1nhN1GzGoQTJmDk4P6vA84vSiyfgihfRcmu4c,165
64
+ pyemaps/cdata/Pentacene.xtl,sha256=fzntNGBPrmJgkmnFrp6d3XSIItam6leXkMwUkAEovzo,3751
65
+ pyemaps/cdata/Silicon.xtl,sha256=HPkWm2BLk6WDaEL-tm-Nw1i0DSgo4xzyZxG46IFLQKM,113
66
+ pyemaps/cdata/StrontiumTitanate.xtl,sha256=sVgWsu1qnhEdu28xEqj8dVlRLx-GyDW9nYWEfUuyRW8,362
67
+ pyemaps/cdata/TelluriumDioxide.xtl,sha256=vhkPp9JmQK-blwIvxTG5lpc3yRTuPGSIIdzdKbIzoiU,277
68
+ pyemaps/cdata/TinDioxide_RT.xtl,sha256=plAF9j8kWDDNdfmoapXaupdk_ZhrRR6Ry-PzR10G3B0,272
69
+ pyemaps/cdata/TitaniumDioxide_Anatase.xtl,sha256=gic9_dVUnZe6WlRsOajNvHlZSrZcljJfXmKVuOktWE8,280
70
+ pyemaps/cdata/TitaniumDioxide_Rutile.xtl,sha256=bBTM6Sn7dEfxtDogdExHxvMgpAzzFKgS_dPowiW4a7k,281
71
+ pyemaps/cdata/TungstenDiselenide.xtl,sha256=K2oWoHHCdvAQhbBMirAACJ6gMiPglonN0s6VoJYvYVw,277
72
+ pyemaps/cdata/VanadiumDioxide_RT.xtl,sha256=unv2MqKJjkU9PRudxBoMSSqJJ-DACF-_7AAl9YhAJdM,366
73
+ pyemaps/cdata/ZincOxide.xtl,sha256=CBTfl2P5MUjecEz4z9O5RLCjyf072c7hSwDoaixgZD4,160
74
+ pyemaps/cdata/Zinc_HCP.xtl,sha256=VOLy82aCzuse9g0GFP11Q8RzhXEY2hA_cN7_Z3K4ADM,144
75
+ pyemaps/cdata/ZirconiumNitride.xtl,sha256=9q6RDQNdVz3e4jWgl1I0Q8x7WJx3eGSfE3yiesDYcVE,203
76
+ pyemaps/cdata/limno2.xtl,sha256=Q9BaeRelDAnJPtirB5QUfFd-F7RjwocgNPKqfGEak44,353
77
+ pyemaps/diffract/__init__.py,sha256=E0kr3vRTu7tW2I4pbhkGnBQmdb8IKlHLujnopxSmWgU,1576
78
+ pyemaps/diffract/bloch_dec.py,sha256=w5jYzAPns0dzLCqUwKxuMKVUaQAdTDxMOuGpUGG_UPQ,30007
79
+ pyemaps/diffract/csf_dec.py,sha256=cK6YsEHAy_mb4Fg9MpZLmhLQGC5Pgk4qYT6wj4qDF_k,8646
80
+ pyemaps/diffract/dif_dec.py,sha256=dI3bmPV4VuHKswq3V4SGFyCB2748uiu42Wi80NEnZs8,16746
81
+ pyemaps/diffract/dpgen_dec.py,sha256=EvGYo0px0Y8y6sfOvhshZ6v3YfjrCkbqdz92_S20Wok,5906
82
+ pyemaps/diffract/mxtal_dec.py,sha256=lopc16LMhsKXdySCLIWiumyWRUL_kI0McIdcI02hPdY,6633
83
+ pyemaps/diffract/powder_dec.py,sha256=VAwOSG6VhC2vSsAaKk6b-vO3Y61jSdhpPbLAl9gISTI,4319
84
+ pyemaps/diffract/stereo_dec.py,sha256=GjT9Pntg1sWKVGKcnl7AjEnQqTP6rAO-v8z2DIiE9HA,3315
85
+ pyemaps/samples/adf.py,sha256=V6v-bZ1NEBmXfhg9SThA6uxIe8g6VzfQyQT4jOlt2Mo,4255
86
+ pyemaps/samples/al.img,sha256=eCCXB9KS42lavWUNLcnevkTzCeUQSBHsSzH30fXS2Po,160008
87
+ pyemaps/samples/al_dpgen.py,sha256=QmWu61iCe4aNnoBAujAugM1j50PmGGJfVKwTH5fmiqk,1865
88
+ pyemaps/samples/al_ediom.py,sha256=l0MzKQYt2h7YOmBzKZNYiLlaHuGyDGspxmMCHqWFd80,3065
89
+ pyemaps/samples/convert_image.py,sha256=IHRlyRkHjt-G01ERMO1TB4pB0wDHzkfp9k7UPMlfKfY,2809
90
+ pyemaps/samples/dm_diff.py,sha256=dHrsIwDPUsWfPRk9JHoPAYyVjqisJTy-kDA_nLLKrmE,7439
91
+ pyemaps/samples/mask.im3,sha256=1dsaWpahqHTuZEV59Bnw80qC0I2f-kDBh5Tcztv0LMY,1048584
92
+ pyemaps/samples/powder.py,sha256=jpK017Dp6c-EW47k47ceHPc1IWP2VJL0QxjbKLIVS74,1420
93
+ pyemaps/samples/raw.img,sha256=j7U-3UBrMGR0byi-PAeGT3-tS9HyAx7eSEjOOzSscCk,262144
94
+ pyemaps/samples/si_bloch.py,sha256=nQ6oJXQN1LiRjGTnE26OQKe5z4f-HvcTBAfBWk9Khu4,3643
95
+ pyemaps/samples/si_constructor.py,sha256=gZ6812QkbJoDc-2pt1b0Q6FdImEd769F1h4EbHfqm7M,1820
96
+ pyemaps/samples/si_csf.py,sha256=VFLFvy7ffmWO2sn5ozA0tkr8stuAGCA2wNbJFA8A3kI,1899
97
+ pyemaps/samples/si_dif.py,sha256=wUqC6YiUhUKIkJ4xI0wxM3P3uLAdymqaVrAw9LLcj-E,3965
98
+ pyemaps/samples/si_lacbed.py,sha256=BSp5JI5NILoJTJ4uhvAsIq_rUVmtdxTBe-XBLA0Qerg,1736
99
+ pyemaps/samples/si_pyemaps.py,sha256=X8O-q4ag5FiVwAuSfAYbW28bE43pfF2gR6Gj3nkT-h0,2682
100
+ pyemaps/samples/si_scm.py,sha256=oYh-euIXKyPBfON64oGiL20xXBj54UEVxwNmhk3WcnM,5630
101
+ pyemaps/samples/si_stereo.py,sha256=0bYFtT09P8gcbmO6QkcMARTF8Px2R6zS1pyc6P9LhsM,3281
102
+ pyemaps/scattering/__init__.py,sha256=TbXzjIg8-ggecUuU1c2u69EZzv-WZoLZj7tqcDmRIDc,853
103
+ pyemaps/scattering/sct_dec.py,sha256=_eiT2_yzXog4OyXXmrMppB24f1cHWt0y0NKgI1FOJOQ,1061
104
+ pyemaps/spg/__init__.py,sha256=fVc9igzXkttawnLTrPSt6Fu8a18tgtNS4r-3ZHhp4pM,819
105
+ pyemaps/spg/spg_dec.py,sha256=2OUDDongOFDR8xsMNNryl6EUOSLgnm9qHmgEieJBv9I,1668
106
+ pyemaps-2.0.0.dist-info/licenses/COPYING,sha256=0A1CTDrKtVWe8nhgrrVbJMCJ-ExiCg-2WEL78aTYQSQ,41861
107
+ pyemaps-2.0.0.dist-info/licenses/license.txt,sha256=YYKprrVCwBrah9DoC7ol8AnoKVLXktugABr94uXjgro,1804
108
+ pyemaps-2.0.0.dist-info/METADATA,sha256=h9m7Pzr1L4wzRN8mEiCDSNlcDejWALfe4hhGso17ZGU,11175
109
+ pyemaps-2.0.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
110
+ pyemaps-2.0.0.dist-info/entry_points.txt,sha256=KwsEvya8srRie9Kdcr8DF1FoJe_UG3IgV7o1eqnueYc,50
111
+ pyemaps-2.0.0.dist-info/top_level.txt,sha256=OCgTONflA99cv3p6jo5inYzT9Dta_HX8qVRPRmctpj0,8
112
+ pyemaps-2.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.2.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ pyemaps = pyemaps.__main__:main