SMACT 2.7__tar.gz → 3.0__tar.gz

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 (73) hide show
  1. {smact-2.7/SMACT.egg-info → smact-3.0}/PKG-INFO +140 -82
  2. {smact-2.7 → smact-3.0}/README.md +67 -69
  3. {smact-2.7 → smact-3.0/SMACT.egg-info}/PKG-INFO +140 -82
  4. {smact-2.7 → smact-3.0}/SMACT.egg-info/SOURCES.txt +8 -3
  5. smact-3.0/SMACT.egg-info/requires.txt +71 -0
  6. smact-3.0/pyproject.toml +322 -0
  7. {smact-2.7 → smact-3.0}/setup.py +15 -12
  8. {smact-2.7 → smact-3.0}/smact/__init__.py +109 -103
  9. {smact-2.7 → smact-3.0}/smact/builder.py +21 -8
  10. {smact-2.7 → smact-3.0}/smact/data/Covalent_radii.csv +1 -1
  11. {smact-2.7 → smact-3.0}/smact/data/SSE.csv +1 -1
  12. {smact-2.7 → smact-3.0}/smact/data/SSE_2015.csv +1 -1
  13. {smact-2.7 → smact-3.0}/smact/data/SSE_Pauling.csv +1 -1
  14. smact-3.0/smact/data/oxidation_state_probability_table.json +1322 -0
  15. {smact-2.7 → smact-3.0}/smact/data/oxidation_states.txt +4 -0
  16. {smact-2.7 → smact-3.0}/smact/data/oxidation_states_SP.txt +4 -0
  17. {smact-2.7 → smact-3.0}/smact/data/oxidation_states_icsd.txt +4 -0
  18. smact-3.0/smact/data/oxidation_states_icsd24_common.txt +107 -0
  19. smact-3.0/smact/data/oxidation_states_icsd24_counts.json +1856 -0
  20. smact-3.0/smact/data/oxidation_states_icsd24_filtered.txt +107 -0
  21. smact-3.0/smact/data/oxidation_states_icsd24_raw.txt +107 -0
  22. {smact-2.7 → smact-3.0}/smact/data/oxidation_states_pmg.txt +4 -0
  23. {smact-2.7 → smact-3.0}/smact/data/oxidation_states_wiki.txt +4 -0
  24. {smact-2.7 → smact-3.0}/smact/data/solid_properties.txt +1 -1
  25. smact-3.0/smact/data/species_rep/skipspecies_20221028_319ion_dim200_cosine_similarity.json +101763 -0
  26. {smact-2.7 → smact-3.0}/smact/data_loader.py +130 -128
  27. {smact-2.7 → smact-3.0}/smact/distorter.py +27 -13
  28. {smact-2.7 → smact-3.0}/smact/dopant_prediction/__init__.py +2 -0
  29. {smact-2.7 → smact-3.0}/smact/dopant_prediction/doper.py +60 -63
  30. {smact-2.7 → smact-3.0}/smact/lattice.py +12 -5
  31. {smact-2.7 → smact-3.0}/smact/lattice_parameters.py +73 -25
  32. {smact-2.7 → smact-3.0}/smact/mainpage.py +1 -1
  33. {smact-2.7 → smact-3.0}/smact/oxidation_states.py +40 -53
  34. {smact-2.7 → smact-3.0}/smact/properties.py +34 -35
  35. {smact-2.7 → smact-3.0}/smact/screening.py +146 -146
  36. {smact-2.7 → smact-3.0}/smact/structure_prediction/__init__.py +2 -0
  37. {smact-2.7 → smact-3.0}/smact/structure_prediction/database.py +77 -48
  38. {smact-2.7 → smact-3.0}/smact/structure_prediction/mutation.py +71 -63
  39. {smact-2.7 → smact-3.0}/smact/structure_prediction/prediction.py +89 -107
  40. {smact-2.7 → smact-3.0}/smact/structure_prediction/probability_models.py +22 -12
  41. {smact-2.7 → smact-3.0}/smact/structure_prediction/structure.py +164 -115
  42. smact-3.0/smact/structure_prediction/utilities.py +105 -0
  43. {smact-2.7 → smact-3.0}/smact/tests/test_core.py +55 -102
  44. {smact-2.7 → smact-3.0}/smact/tests/test_doper.py +13 -19
  45. {smact-2.7 → smact-3.0}/smact/tests/test_structure.py +64 -104
  46. smact-3.0/smact/tests/test_utils.py +200 -0
  47. smact-3.0/smact/utils/band_gap_simple.py +39 -0
  48. {smact-2.7 → smact-3.0}/smact/utils/composition.py +8 -12
  49. smact-3.0/smact/utils/oxidation.py +157 -0
  50. smact-2.7/SMACT.egg-info/requires.txt +0 -8
  51. smact-2.7/pyproject.toml +0 -11
  52. smact-2.7/smact/data/oxidation_state_probability_table.json +0 -1
  53. smact-2.7/smact/data/oxidationstates.data +0 -135
  54. smact-2.7/smact/data/species_rep/skipspecies_20221028_319ion_dim200_cosine_similarity.json +0 -1
  55. smact-2.7/smact/structure_prediction/utilities.py +0 -94
  56. smact-2.7/smact/tests/test_utils.py +0 -76
  57. {smact-2.7 → smact-3.0}/LICENSE +0 -0
  58. {smact-2.7 → smact-3.0}/MANIFEST.in +0 -0
  59. {smact-2.7 → smact-3.0}/SMACT.egg-info/dependency_links.txt +0 -0
  60. {smact-2.7 → smact-3.0}/SMACT.egg-info/not-zip-safe +0 -0
  61. {smact-2.7 → smact-3.0}/SMACT.egg-info/top_level.txt +0 -0
  62. {smact-2.7 → smact-3.0}/setup.cfg +0 -0
  63. {smact-2.7 → smact-3.0}/smact/data/element_data.txt +0 -0
  64. {smact-2.7 → smact-3.0}/smact/data/element_valence_modified.csv +0 -0
  65. /smact-2.7/smact/data/HHIs.txt → /smact-3.0/smact/data/hhi.txt +0 -0
  66. {smact-2.7 → smact-3.0}/smact/data/ionic_radii.csv +0 -0
  67. {smact-2.7 → smact-3.0}/smact/data/magpie.csv +0 -0
  68. {smact-2.7 → smact-3.0}/smact/data/ordered_periodic.txt +0 -0
  69. {smact-2.7 → smact-3.0}/smact/data/shannon_radii.csv +0 -0
  70. {smact-2.7 → smact-3.0}/smact/data/shannon_radii_ML_extended.csv +0 -0
  71. {smact-2.7 → smact-3.0}/smact/data/solid_properties.xlsx +0 -0
  72. {smact-2.7 → smact-3.0}/smact/tests/__init__.py +0 -0
  73. {smact-2.7 → smact-3.0}/smact/utils/__init__.py +0 -0
@@ -1,37 +1,97 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: SMACT
3
- Version: 2.7
3
+ Version: 3.0
4
4
  Summary: Semiconducting Materials by Analogy and Chemical Theory
5
5
  Home-page: https://github.com/WMD-group/SMACT
6
6
  Author: The SMACT Developers
7
- Author-email: a.walsh@imperial.ac.uk
7
+ Author-email: The SMACT Developers <a.walsh@imperial.ac.uk>
8
8
  Maintainer: Anthony O. Onwuli
9
- Maintainer-email: anthony.onwuli16@imperial.ac.uk
9
+ Maintainer-email: "Anthony O. Onwuli" <anthony.onwuli16@imperial.ac.uk>
10
10
  License: MIT
11
+ Project-URL: Homepage, https://github.com/WMD-group/SMACT
12
+ Project-URL: Documentation, https://smact.readthedocs.io/en/latest/
13
+ Project-URL: Repository, https://github.com/WMD-group/SMACT
14
+ Project-URL: Issues, https://github.com/WMD-group/SMACT/issues
15
+ Project-URL: Pypi, https://pypi.org/project/SMACT/
16
+ Keywords: python,machine-learning,computational-chemistry,materials-science,materials-informatics,materials-screening,materials-design,materials
17
+ Classifier: Development Status :: 5 - Production/Stable
18
+ Classifier: Intended Audience :: Science/Research
19
+ Classifier: License :: OSI Approved :: MIT License
20
+ Classifier: Operating System :: OS Independent
11
21
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.9
13
22
  Classifier: Programming Language :: Python :: 3.10
14
23
  Classifier: Programming Language :: Python :: 3.11
15
24
  Classifier: Programming Language :: Python :: 3.12
16
- Classifier: Development Status :: 5 - Production/Stable
17
- Classifier: Intended Audience :: Science/Research
18
- Classifier: Operating System :: OS Independent
19
- Classifier: License :: OSI Approved :: MIT License
20
25
  Classifier: Topic :: Scientific/Engineering
21
26
  Classifier: Topic :: Scientific/Engineering :: Chemistry
22
- Requires-Python: >=3.9
27
+ Requires-Python: >=3.10
23
28
  Description-Content-Type: text/markdown
24
29
  License-File: LICENSE
25
- Requires-Dist: scipy
26
- Requires-Dist: numpy<2
27
- Requires-Dist: spglib
28
- Requires-Dist: pymatgen<2024.8.8,>=2024.2.20
29
30
  Requires-Dist: ase
31
+ Requires-Dist: numpy<3
30
32
  Requires-Dist: pandas
31
33
  Requires-Dist: pathos
34
+ Requires-Dist: pymatgen>=2024.2.20
35
+ Requires-Dist: scipy
36
+ Requires-Dist: spglib
32
37
  Requires-Dist: typing-extensions
33
-
34
- [![DOI](http://joss.theoj.org/papers/10.21105/joss.01361/status.svg)](https://doi.org/10.21105/joss.01361)
38
+ Provides-Extra: dev
39
+ Requires-Dist: pytest; extra == "dev"
40
+ Requires-Dist: ruff; extra == "dev"
41
+ Requires-Dist: pyright; extra == "dev"
42
+ Requires-Dist: codespell; extra == "dev"
43
+ Requires-Dist: pytest-cov; extra == "dev"
44
+ Requires-Dist: blacken-docs; extra == "dev"
45
+ Requires-Dist: nbstripout; extra == "dev"
46
+ Provides-Extra: docs
47
+ Requires-Dist: sphinx==8.1.3; extra == "docs"
48
+ Requires-Dist: sphinx_rtd_theme==3.0.2; extra == "docs"
49
+ Requires-Dist: readthedocs-sphinx-search==0.3.2; extra == "docs"
50
+ Requires-Dist: sphinx-book-theme==1.1.3; extra == "docs"
51
+ Requires-Dist: myst-nb==1.1.2; extra == "docs"
52
+ Provides-Extra: mp
53
+ Requires-Dist: mp-api; extra == "mp"
54
+ Provides-Extra: crystal-space
55
+ Requires-Dist: mp-api; extra == "crystal-space"
56
+ Requires-Dist: ElementEmbeddings; extra == "crystal-space"
57
+ Requires-Dist: umap-learn==0.5.3; extra == "crystal-space"
58
+ Requires-Dist: kaleido; extra == "crystal-space"
59
+ Requires-Dist: pydantic<2.10.0; extra == "crystal-space"
60
+ Provides-Extra: featurisers
61
+ Requires-Dist: matminer; extra == "featurisers"
62
+ Requires-Dist: ElementEmbeddings; extra == "featurisers"
63
+ Provides-Extra: visualisation
64
+ Requires-Dist: seaborn; extra == "visualisation"
65
+ Requires-Dist: pymatviz; extra == "visualisation"
66
+ Requires-Dist: dash; extra == "visualisation"
67
+ Provides-Extra: optional
68
+ Requires-Dist: pydantic>=2.9.2; extra == "optional"
69
+ Requires-Dist: mp-api>=0.42.2; extra == "optional"
70
+ Requires-Dist: pymatviz>=0.14; extra == "optional"
71
+ Requires-Dist: seaborn>=0.13.2; extra == "optional"
72
+ Requires-Dist: pymatgen>=2024.2.20; extra == "optional"
73
+ Requires-Dist: matminer>=0.9.2; extra == "optional"
74
+ Requires-Dist: umap-learn>=0.5.3; extra == "optional"
75
+ Requires-Dist: kaleido>=0.2.1; extra == "optional"
76
+ Requires-Dist: ase>=3.22.0; extra == "optional"
77
+ Requires-Dist: numpy; extra == "optional"
78
+ Requires-Dist: ElementEmbeddings>=0.4; extra == "optional"
79
+ Requires-Dist: dash>=2.18.2; extra == "optional"
80
+ Provides-Extra: strict
81
+ Requires-Dist: pydantic==2.9.2; extra == "strict"
82
+ Requires-Dist: mp-api==0.42.2; extra == "strict"
83
+ Requires-Dist: pymatviz==0.14; extra == "strict"
84
+ Requires-Dist: seaborn==0.13.2; extra == "strict"
85
+ Requires-Dist: pymatgen==2024.11.13; extra == "strict"
86
+ Requires-Dist: matminer==0.9.2; extra == "strict"
87
+ Requires-Dist: umap-learn==0.5.3; extra == "strict"
88
+ Requires-Dist: kaleido==0.2.1; extra == "strict"
89
+ Requires-Dist: ase==3.23.0; extra == "strict"
90
+ Requires-Dist: numpy; extra == "strict"
91
+ Requires-Dist: ElementEmbeddings==0.6.1; extra == "strict"
92
+ Requires-Dist: dash==2.18.2; extra == "strict"
93
+
94
+ [![DOI](https://joss.theoj.org/papers/10.21105/joss.01361/status.svg)](https://doi.org/10.21105/joss.01361)
35
95
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5553202.svg)](https://doi.org/10.5281/zenodo.5553202)
36
96
  [![Documentation Status](https://readthedocs.org/projects/smact/badge/?version=latest)](http://smact.readthedocs.org/en/latest/?badge=latest)
37
97
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
@@ -45,96 +105,99 @@ Requires-Dist: typing-extensions
45
105
  [![codecov](https://codecov.io/gh/WMD-group/SMACT/branch/master/graph/badge.svg?token=UtgVxjoYNP)](https://codecov.io/gh/WMD-group/SMACT)
46
106
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact)
47
107
 
48
- SMACT
49
- =====
108
+ # SMACT
50
109
 
51
110
  **Semiconducting Materials from Analogy and Chemical Theory** (SMACT) is a collection of rapid screening and informatics tools that uses data about chemical elements.
52
111
 
53
- - **Documentation:** https://smact.readthedocs.io/en/latest/
54
- - **Examples:** https://github.com/WMD-group/SMACT/tree/master/examples
112
+ - **Documentation:** <https://smact.readthedocs.io/en/latest/>
113
+ - **Examples:** <https://smact.readthedocs.io/en/latest/examples.html>
55
114
 
56
- ![](SMACT.png)
115
+ ![A blue interface with the text "SMACT v3" at the top. Below that, there is a label "Materials Search" followed by two radio buttons: "Hi-fi" and "Lo-fi". The "Lo-fi" button is currently selected](SMACT.png)
57
116
 
58
- *If you torture the data enough, nature will always confess* - Roland Coase (from 'How should economists choose?')
117
+ _If you torture the data enough, nature will always confess_ - Roland Coase (from 'How should economists choose?')
59
118
 
60
- Statement of need
61
- --------
62
- There is a strong demand for functional materials across a wide range of technologies. The motivation can include cost reduction, performance enhancement, or to enable a new application. We have developed low-cost procedures for screening hypothetical materials. This framework can be used for simple calculations on your own computer. SMACT follows a top-down approach where a set of element combinations is generated and then screened using rapid chemical filters. It can be used as part of a multi-technique workflow or to feed machine learning models for materials.
119
+ ## Statement of need
63
120
 
64
- ![](smact_simple.gif)
121
+ There is a strong demand for functional materials across a wide range of technologies. The motivation can include cost reduction, performance enhancement, or to enable a new application. We have developed low-cost procedures for screening hypothetical materials. This framework can be used for simple calculations on your own computer. SMACT follows a top-down approach where a set of element combinations is generated and then screened using rapid chemical filters. It can be used as part of a multi-technique workflow or to feed artificial intelligence models for materials.
122
+
123
+ ![A gif depicting using the SMACT code. The first lines of code show how SMACT can be used to access properties of Iron (Fe) by create an Fe Element object and then accessing the oxidation states, pauling electronegativity. The next line after these shows the use of the smact_filter function for the Fe-Cu-O chemical system followed by the lists of possible compositions. ](smact_simple.gif)
124
+
125
+ ## Getting started
65
126
 
66
- Getting started
67
- -----
68
127
  Features are accessed through Python scripts, importing classes and functions as needed.
69
- The best place to start is looking at [the docs](https://smact.readthedocs.io/en/latest/), which highlight some simple examples of how these classes and functions can be used.
70
- Extended examples are available in [our examples folder](https://github.com/WMD-group/SMACT/tree/master/examples).
128
+ The best place to start is looking at [the docs](https://smact.readthedocs.io/en/latest/), which highlight some simple examples of how these classes and functions can be usede
129
+ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest/examples.html) and [tutorials](https://smact.readthedocs.io/en/latest/tutorials.html) folders.
130
+
131
+ ## Code features
71
132
 
72
- Code features
73
- --------
74
- - At the core of SMACT are [Element](https://smact.readthedocs.io/en/latest/smact.html#smact.Element) and [Species](https://smact.readthedocs.io/en/latest/smact.html#smact.Species) (element in a given oxidation state) classes that have various properties associated with them.
133
+ - At the core of SMACT are [Element](https://smact.readthedocs.io/en/latest/smact.html#smact.Element) and [Species](https://smact.readthedocs.io/en/latest/smact.html#smact.Species) (element in a given oxidation state) classes that have various properties associated with them.
75
134
 
76
135
  - Oxidation states that are accessible to each element are included in their properties.
77
136
 
78
- - Element compositions can be screened through based on the heuristic filters of charge neutrality and electronegativity order. This is handled using the [screening module](https://smact.readthedocs.io/en/latest/smact.screening.html) and [this publication](https://www.cell.com/chem/fulltext/S2451-9294(16)30155-3) describes the underlying theory. An example procedure is [outlined in the docs](https://smact.readthedocs.io/en/latest/examples.html#neutral-combinations) and more examples can be found in the [counting examples subfolder](https://github.com/WMD-group/SMACT/tree/master/examples/Counting).
137
+ - Element compositions can be screened through based on the heuristic filters of charge neutrality and electronegativity order. This is handled using the [screening module](https://smact.readthedocs.io/en/latest/smact.screening.html) and [this publication](<https://www.cell.com/chem/fulltext/S2451-9294(16)30155-3>) describes the underlying theory. An example procedure is [outlined in the docs](https://smact.readthedocs.io/en/latest/examples/filter.html).
79
138
 
80
- - Further filters can be applied to generated lists of compositions in order to screen for particular properties. These properties are either intrinsic properties of elements or are calculated for compositions using the [properties module](https://smact.readthedocs.io/en/latest/smact.properties.html). For example:
81
- - A use case is shown in [this publication](https://pubs.rsc.org/en/content/articlehtml/2018/sc/c7sc03961a), in which 160,000 chemical compositions are screened based on optical band gap calculated using the [solid-state energy scale](https://www.sciencedirect.com/science/article/pii/S0022459615300888).
139
+ - Further filters can be applied to generated lists of compositions in order to screen for particular properties. These properties are either intrinsic properties of elements or are calculated for compositions using the [properties module](https://smact.readthedocs.io/en/latest/smact.properties.html). For example:
140
+
141
+ - An application is shown in [this publication](https://pubs.rsc.org/en/content/articlehtml/2018/sc/c7sc03961a), in which 160,000 chemical compositions are screened based on optical band gap calculated using the [solid-state energy scale](https://www.sciencedirect.com/science/article/pii/S0022459615300888).
82
142
  - The [oxidation_states module](https://smact.readthedocs.io/en/latest/smact.oxidation_states.html) can be used to filter out compositions containing metals in unlikely oxidation states according to [a data-driven model](https://pubs.rsc.org/en/content/articlelanding/2018/fd/c8fd00032h#!divAbstract).
83
143
 
84
- - Compositions can also be filtered based on sustainability via the abundance of elements in the Earth's crust or via the [HHI scale](https://pubs.acs.org/doi/10.1021/cm400893e).
144
+ - Compositions can also be filtered based on sustainability via the abundance of elements in the Earth's crust or via the [HHI scale](https://pubs.acs.org/doi/10.1021/cm400893e).
85
145
 
86
- - Compositions can be converted for use in Pymatgen or for representation to machine learning algorithms ([see "next steps" in this example](https://github.com/WMD-group/SMACT/blob/master/examples/Counting/Generate_compositions_lists.ipynb)) and the related [ElementEmbeddings](https://github.com/WMD-group/ElementEmbeddings) package.
146
+ - Compositions can be converted for use in Pymatgen or for representation to machine learning algorithms ([see this example](https://smact.readthedocs.io/en/latest/tutorials/smact_generation_of_solar_oxides.html)) and the related [ElementEmbeddings](https://github.com/WMD-group/ElementEmbeddings) package.
87
147
 
88
- - The code also has tools for manipulating common crystal lattice types:
148
+ - The code also has tools for manipulating common crystal lattice types:
89
149
  - Certain structure types can be built using the [builder module](https://smact.readthedocs.io/en/latest/smact.builder.html)
90
150
  - Lattice parameters can be estimated using ionic radii of the elements for various common crystal structure types using the [lattice_parameters module](https://smact.readthedocs.io/en/latest/smact.lattice_parameters.html).
91
151
  - The [lattice module](https://smact.readthedocs.io/en/latest/smact.lattice.html) and [distorter module](https://smact.readthedocs.io/en/latest/smact.distorter.html) rely on the [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase/) and can be used to generate unique atomic substitutions on a given crystal structure.
92
- - The [structure prediction](https://smact.readthedocs.io/en/latest/smact.structure_prediction.html) module can be used to predict the structure of hypothetical compositions using species similarity measures.
152
+ - The [structure prediction](https://smact.readthedocs.io/en/latest/smact.structure_prediction.html) module can be used to predict the structure of hypothetical compositions using species similarity measures.
93
153
  - The [dopant prediction](https://smact.readthedocs.io/en/latest/smact.dopant_prediction.html) module can be used to facilitate high-throughput predictions of p-type and n-type dopants of multicomponent solids.
94
154
 
95
- List of modules
96
- -------
97
- * **smact** library containing:
98
- * **\_\_init\_\_.py** Contains the core `Element` and `Species` classes.
99
- * **data_loader.py** Handles the loading of external data used to initialise the core `smact.Element` and `smact.Species` classes.
100
- * **screening.py** Used for generating and applying filters to compositional search spaces.
101
- * **properties.py** A collection of tools for estimating useful properties based on composition.
102
- * **lattice.py** Given the sites, multiplicities and possible oxidation states
155
+ ## List of modules
156
+
157
+ - **smact** library containing:
158
+ - **\_\_init\_\_.py** Contains the core `Element` and `Species` classes.
159
+ - **data_loader.py** Handles the loading of external data used to initialise the core `smact.Element` and `smact.Species` classes.
160
+ - **screening.py** Used for generating and applying filters to compositional search spaces.
161
+ - **properties.py** A collection of tools for estimating useful properties based on composition.
162
+ - **lattice.py** Given the sites, multiplicities and possible oxidation states
103
163
  at those sites, this reads from the database and generates all possible
104
164
  stoichiometries.
105
- * **builder.py** Builds some common lattice structures, given the chemical
165
+ - **builder.py** Builds some common lattice structures, given the chemical
106
166
  composition.
107
- * **lattice_parameters.py** Estimation of lattice parameters for various lattice types using covalent/ionic radii.
108
- * **distorter.py** A collection of functions for enumerating and then
167
+ - **lattice_parameters.py** Estimation of lattice parameters for various lattice types using covalent/ionic radii.
168
+ - **distorter.py** A collection of functions for enumerating and then
109
169
  substituting on inequivalent sites of a sub-lattice.
110
- * **oxidation_states.py**: Used for predicting the likelihood of species coexisting in a compound based on a statistical model.
111
- * **structure_prediction**: A submodule which contains a collection of tools for facilitating crystal structure predictions via ionic substitutions
112
- * **dopant_prediction**: A submodule which contains a collections of tools for predicting dopants.
170
+ - **oxidation_states.py**: Used for predicting the likelihood of species coexisting in a compound based on a statistical model.
171
+ - **structure_prediction**: A submodule which contains a collection of tools for facilitating crystal structure predictions via ionic substitutions
172
+ - **dopant_prediction**: A submodule which contains a collections of tools for predicting dopants.
173
+ - **utils.py** A collection of utility functions used throughout the codebase.
174
+
175
+ ## Requirements
113
176
 
114
- Requirements
115
- ------------
116
- The main language is Python 3 and has been tested using Python 3.9+.
177
+ The main language is Python 3 and has been tested using Python 3.10+.
117
178
  Basic requirements are Numpy and Scipy.
118
- The [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase) (ASE), [spglib](http://atztogo.github.io/spglib), and [pymatgen](https://pymatgen.org) are also required for many components.
179
+ The [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase) (ASE), [spglib](http://atztogo.github.io/spglib), and [pymatgen](https://pymatgen.org) are also required for many components.
180
+
181
+ ## Installation
119
182
 
120
- Installation
121
- ------------
122
183
  The latest stable release can be installed via pip which will automatically set up other Python packages as required:
123
184
 
124
- pip install smact
185
+ pip install smact
186
+
187
+ Optional dependencies can also be installed. These enable full replication of the examples and tutorials
188
+
189
+ pip install "smact[optional]"
125
190
 
126
191
  SMACT is also available via conda through the conda-forge channel on Anaconda Cloud:
127
192
 
128
- ```
129
- conda install -c conda-forge smact
130
- ```
193
+ conda install -c conda-forge smact
131
194
 
132
195
  Alternatively, the very latest version can be installed using:
133
196
 
134
197
  pip install git+https://github.com/WMD-group/SMACT.git
135
198
 
136
199
  For developer installation SMACT can be installed from a copy of the source
137
- repository (https://github.com/wmd-group/smact); this will be preferred if using experimental code branches.
200
+ repository (<https://github.com/wmd-group/smact>); this will be preferred if using experimental code branches.
138
201
 
139
202
  To clone the project from GitHub and make a local installation:
140
203
 
@@ -145,19 +208,18 @@ To clone the project from GitHub and make a local installation:
145
208
  With -e pip will create links to the source folder so that that changes
146
209
  to the code will be immediately reflected on the PATH.
147
210
 
148
-
149
- License and attribution
150
- -----------------------
211
+ ## License and attribution
151
212
 
152
213
  Python code and original data tables are licensed under the MIT License.
153
214
 
154
- Development notes
155
- -----------------
215
+ ## Development notes
156
216
 
157
217
  ### Bugs, features and questions
158
- Please use the [Issue Tracker](https://github.com/WMD-group/smact/issues) to report bugs or request features in the first instance. While we hope that most questions can be answered by searching [the docs](https://smact.readthedocs.io/en/latest/), we welcome new questions on the issue tracker, especially if they help us improve the docs! For other queries about any aspect of the code, please contact either Aron Walsh on behalf of The SMACT Developers (author) or Anthony Onwuli (maintainer) by e-mail: a.walsh@imperial.ac.uk or anthony.onwuli16@imperial.ac.uk respectively.
218
+
219
+ Please use the [Issue Tracker](https://github.com/WMD-group/smact/issues) to report bugs or request features in the first instance. While we hope that most questions can be answered by searching [the docs](https://smact.readthedocs.io/en/latest/), we welcome new questions on the issue tracker, especially if they helps us improve the docs! For other queries about any aspect of the code, please contact Anthony Onwuli (maintainer) by [e-mail](mailto:anthony.onwuli16@imperial.ac.uk).
159
220
 
160
221
  ### Code contributions
222
+
161
223
  We are always looking for ways to make SMACT better and more useful to the wider community; contributions are welcome. Please use the ["Fork and Pull"](https://guides.github.com/activities/forking/) workflow to make contributions and stick as closely as possible to the following:
162
224
 
163
225
  - Code style should comply with [PEP8](http://www.python.org/dev/peps/pep-0008) where possible. [Google's house style](https://google.github.io/styleguide/pyguide.html) is also helpful, including a good model for docstrings.
@@ -166,27 +228,23 @@ We are always looking for ways to make SMACT better and more useful to the wider
166
228
  - Look at the [contributing guide](CONTRIBUTING.md) for more information.
167
229
 
168
230
  ### Tests
169
- Testing modules should be pass/fail and wrapped into **tests/test_core.py** or another **tests/test_something.py** file added, if appropriate.
170
- Run the tests using `python -m pytest -v`.
171
- (The final `-v` is optional and adds more detail to the output.)
172
231
 
173
- We also use integrated testing on GitHub via [GitHub Actions](hhttps://github.com/features/actions).
232
+ We use integrated testing on GitHub via [GitHub Actions](https://github.com/features/actions). Testing modules should be pass/fail and wrapped into **tests/test_core.py** or another **tests/test_something.py** file added, if appropriate.
233
+ Run the tests using `python -m pytest -v`.(The final `-v` is optional and adds more detail to the output.)
174
234
 
175
- References
176
- ----------
235
+ ## References
177
236
 
178
237
  [H. Park et al.,
179
- "Mapping inorganic crystal chemical space" *Faraday Discuss.* (2024)](https://pubs.rsc.org/en/content/articlelanding/2024/fd/d4fd00063c)
238
+ "Mapping inorganic crystal chemical space" _Faraday Discuss._ (2024)](https://pubs.rsc.org/en/content/articlelanding/2024/fd/d4fd00063c)
180
239
 
181
240
  [D. W. Davies et al.,
182
- "SMACT: Semiconducting Materials by Analogy and Chemical Theory" *JOSS* **4**, 1361 (2019)](https://joss.theoj.org/papers/7efd2f2ad60d25bdccee3fbd3fc11448)
241
+ "SMACT: Semiconducting Materials by Analogy and Chemical Theory" _JOSS_ **4**, 1361 (2019)](https://joss.theoj.org/papers/7efd2f2ad60d25bdccee3fbd3fc11448)
183
242
 
184
243
  [D. W. Davies et al.,
185
- "Materials discovery by chemical analogy: role of oxidation states in structure prediction" *Faraday Discuss.* **211**, 553 (2018)](https://pubs.rsc.org/en/Content/ArticleLanding/2018/FD/C8FD00032H)
244
+ "Materials discovery by chemical analogy: role of oxidation states in structure prediction" _Faraday Discuss._ **211**, 553 (2018)](https://pubs.rsc.org/en/Content/ArticleLanding/2018/FD/C8FD00032H)
186
245
 
187
246
  [D. W. Davies et al.,
188
- "Computational screening of all stoichiometric inorganic materials" *Chem* **1**, 617 (2016)](http://www.cell.com/chem/abstract/S2451-9294(16)30155-3)
247
+ "Computational screening of all stoichiometric inorganic materials" _Chem_ **1**, 617 (2016)](<http://www.cell.com/chem/abstract/S2451-9294(16)30155-3>)
189
248
 
190
- [B. R. Pamplin, "A systematic method of deriving new semiconducting
191
- compounds by structural analogy", *J. Phys. Chem. Solids*
249
+ [B. R. Pamplin, "A systematic method of deriving new semiconducting compounds by structural analogy", _J. Phys. Chem. Solids_
192
250
  **25**, 675 (1964)](http://www.sciencedirect.com/science/article/pii/0022369764901763)
@@ -1,4 +1,4 @@
1
- [![DOI](http://joss.theoj.org/papers/10.21105/joss.01361/status.svg)](https://doi.org/10.21105/joss.01361)
1
+ [![DOI](https://joss.theoj.org/papers/10.21105/joss.01361/status.svg)](https://doi.org/10.21105/joss.01361)
2
2
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5553202.svg)](https://doi.org/10.5281/zenodo.5553202)
3
3
  [![Documentation Status](https://readthedocs.org/projects/smact/badge/?version=latest)](http://smact.readthedocs.org/en/latest/?badge=latest)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
@@ -12,96 +12,99 @@
12
12
  [![codecov](https://codecov.io/gh/WMD-group/SMACT/branch/master/graph/badge.svg?token=UtgVxjoYNP)](https://codecov.io/gh/WMD-group/SMACT)
13
13
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact)
14
14
 
15
- SMACT
16
- =====
15
+ # SMACT
17
16
 
18
17
  **Semiconducting Materials from Analogy and Chemical Theory** (SMACT) is a collection of rapid screening and informatics tools that uses data about chemical elements.
19
18
 
20
- - **Documentation:** https://smact.readthedocs.io/en/latest/
21
- - **Examples:** https://github.com/WMD-group/SMACT/tree/master/examples
19
+ - **Documentation:** <https://smact.readthedocs.io/en/latest/>
20
+ - **Examples:** <https://smact.readthedocs.io/en/latest/examples.html>
22
21
 
23
- ![](SMACT.png)
22
+ ![A blue interface with the text "SMACT v3" at the top. Below that, there is a label "Materials Search" followed by two radio buttons: "Hi-fi" and "Lo-fi". The "Lo-fi" button is currently selected](SMACT.png)
24
23
 
25
- *If you torture the data enough, nature will always confess* - Roland Coase (from 'How should economists choose?')
24
+ _If you torture the data enough, nature will always confess_ - Roland Coase (from 'How should economists choose?')
26
25
 
27
- Statement of need
28
- --------
29
- There is a strong demand for functional materials across a wide range of technologies. The motivation can include cost reduction, performance enhancement, or to enable a new application. We have developed low-cost procedures for screening hypothetical materials. This framework can be used for simple calculations on your own computer. SMACT follows a top-down approach where a set of element combinations is generated and then screened using rapid chemical filters. It can be used as part of a multi-technique workflow or to feed machine learning models for materials.
26
+ ## Statement of need
30
27
 
31
- ![](smact_simple.gif)
28
+ There is a strong demand for functional materials across a wide range of technologies. The motivation can include cost reduction, performance enhancement, or to enable a new application. We have developed low-cost procedures for screening hypothetical materials. This framework can be used for simple calculations on your own computer. SMACT follows a top-down approach where a set of element combinations is generated and then screened using rapid chemical filters. It can be used as part of a multi-technique workflow or to feed artificial intelligence models for materials.
29
+
30
+ ![A gif depicting using the SMACT code. The first lines of code show how SMACT can be used to access properties of Iron (Fe) by create an Fe Element object and then accessing the oxidation states, pauling electronegativity. The next line after these shows the use of the smact_filter function for the Fe-Cu-O chemical system followed by the lists of possible compositions. ](smact_simple.gif)
31
+
32
+ ## Getting started
32
33
 
33
- Getting started
34
- -----
35
34
  Features are accessed through Python scripts, importing classes and functions as needed.
36
- The best place to start is looking at [the docs](https://smact.readthedocs.io/en/latest/), which highlight some simple examples of how these classes and functions can be used.
37
- Extended examples are available in [our examples folder](https://github.com/WMD-group/SMACT/tree/master/examples).
35
+ The best place to start is looking at [the docs](https://smact.readthedocs.io/en/latest/), which highlight some simple examples of how these classes and functions can be usede
36
+ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest/examples.html) and [tutorials](https://smact.readthedocs.io/en/latest/tutorials.html) folders.
37
+
38
+ ## Code features
38
39
 
39
- Code features
40
- --------
41
- - At the core of SMACT are [Element](https://smact.readthedocs.io/en/latest/smact.html#smact.Element) and [Species](https://smact.readthedocs.io/en/latest/smact.html#smact.Species) (element in a given oxidation state) classes that have various properties associated with them.
40
+ - At the core of SMACT are [Element](https://smact.readthedocs.io/en/latest/smact.html#smact.Element) and [Species](https://smact.readthedocs.io/en/latest/smact.html#smact.Species) (element in a given oxidation state) classes that have various properties associated with them.
42
41
 
43
42
  - Oxidation states that are accessible to each element are included in their properties.
44
43
 
45
- - Element compositions can be screened through based on the heuristic filters of charge neutrality and electronegativity order. This is handled using the [screening module](https://smact.readthedocs.io/en/latest/smact.screening.html) and [this publication](https://www.cell.com/chem/fulltext/S2451-9294(16)30155-3) describes the underlying theory. An example procedure is [outlined in the docs](https://smact.readthedocs.io/en/latest/examples.html#neutral-combinations) and more examples can be found in the [counting examples subfolder](https://github.com/WMD-group/SMACT/tree/master/examples/Counting).
44
+ - Element compositions can be screened through based on the heuristic filters of charge neutrality and electronegativity order. This is handled using the [screening module](https://smact.readthedocs.io/en/latest/smact.screening.html) and [this publication](<https://www.cell.com/chem/fulltext/S2451-9294(16)30155-3>) describes the underlying theory. An example procedure is [outlined in the docs](https://smact.readthedocs.io/en/latest/examples/filter.html).
46
45
 
47
- - Further filters can be applied to generated lists of compositions in order to screen for particular properties. These properties are either intrinsic properties of elements or are calculated for compositions using the [properties module](https://smact.readthedocs.io/en/latest/smact.properties.html). For example:
48
- - A use case is shown in [this publication](https://pubs.rsc.org/en/content/articlehtml/2018/sc/c7sc03961a), in which 160,000 chemical compositions are screened based on optical band gap calculated using the [solid-state energy scale](https://www.sciencedirect.com/science/article/pii/S0022459615300888).
46
+ - Further filters can be applied to generated lists of compositions in order to screen for particular properties. These properties are either intrinsic properties of elements or are calculated for compositions using the [properties module](https://smact.readthedocs.io/en/latest/smact.properties.html). For example:
47
+
48
+ - An application is shown in [this publication](https://pubs.rsc.org/en/content/articlehtml/2018/sc/c7sc03961a), in which 160,000 chemical compositions are screened based on optical band gap calculated using the [solid-state energy scale](https://www.sciencedirect.com/science/article/pii/S0022459615300888).
49
49
  - The [oxidation_states module](https://smact.readthedocs.io/en/latest/smact.oxidation_states.html) can be used to filter out compositions containing metals in unlikely oxidation states according to [a data-driven model](https://pubs.rsc.org/en/content/articlelanding/2018/fd/c8fd00032h#!divAbstract).
50
50
 
51
- - Compositions can also be filtered based on sustainability via the abundance of elements in the Earth's crust or via the [HHI scale](https://pubs.acs.org/doi/10.1021/cm400893e).
51
+ - Compositions can also be filtered based on sustainability via the abundance of elements in the Earth's crust or via the [HHI scale](https://pubs.acs.org/doi/10.1021/cm400893e).
52
52
 
53
- - Compositions can be converted for use in Pymatgen or for representation to machine learning algorithms ([see "next steps" in this example](https://github.com/WMD-group/SMACT/blob/master/examples/Counting/Generate_compositions_lists.ipynb)) and the related [ElementEmbeddings](https://github.com/WMD-group/ElementEmbeddings) package.
53
+ - Compositions can be converted for use in Pymatgen or for representation to machine learning algorithms ([see this example](https://smact.readthedocs.io/en/latest/tutorials/smact_generation_of_solar_oxides.html)) and the related [ElementEmbeddings](https://github.com/WMD-group/ElementEmbeddings) package.
54
54
 
55
- - The code also has tools for manipulating common crystal lattice types:
55
+ - The code also has tools for manipulating common crystal lattice types:
56
56
  - Certain structure types can be built using the [builder module](https://smact.readthedocs.io/en/latest/smact.builder.html)
57
57
  - Lattice parameters can be estimated using ionic radii of the elements for various common crystal structure types using the [lattice_parameters module](https://smact.readthedocs.io/en/latest/smact.lattice_parameters.html).
58
58
  - The [lattice module](https://smact.readthedocs.io/en/latest/smact.lattice.html) and [distorter module](https://smact.readthedocs.io/en/latest/smact.distorter.html) rely on the [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase/) and can be used to generate unique atomic substitutions on a given crystal structure.
59
- - The [structure prediction](https://smact.readthedocs.io/en/latest/smact.structure_prediction.html) module can be used to predict the structure of hypothetical compositions using species similarity measures.
59
+ - The [structure prediction](https://smact.readthedocs.io/en/latest/smact.structure_prediction.html) module can be used to predict the structure of hypothetical compositions using species similarity measures.
60
60
  - The [dopant prediction](https://smact.readthedocs.io/en/latest/smact.dopant_prediction.html) module can be used to facilitate high-throughput predictions of p-type and n-type dopants of multicomponent solids.
61
61
 
62
- List of modules
63
- -------
64
- * **smact** library containing:
65
- * **\_\_init\_\_.py** Contains the core `Element` and `Species` classes.
66
- * **data_loader.py** Handles the loading of external data used to initialise the core `smact.Element` and `smact.Species` classes.
67
- * **screening.py** Used for generating and applying filters to compositional search spaces.
68
- * **properties.py** A collection of tools for estimating useful properties based on composition.
69
- * **lattice.py** Given the sites, multiplicities and possible oxidation states
62
+ ## List of modules
63
+
64
+ - **smact** library containing:
65
+ - **\_\_init\_\_.py** Contains the core `Element` and `Species` classes.
66
+ - **data_loader.py** Handles the loading of external data used to initialise the core `smact.Element` and `smact.Species` classes.
67
+ - **screening.py** Used for generating and applying filters to compositional search spaces.
68
+ - **properties.py** A collection of tools for estimating useful properties based on composition.
69
+ - **lattice.py** Given the sites, multiplicities and possible oxidation states
70
70
  at those sites, this reads from the database and generates all possible
71
71
  stoichiometries.
72
- * **builder.py** Builds some common lattice structures, given the chemical
72
+ - **builder.py** Builds some common lattice structures, given the chemical
73
73
  composition.
74
- * **lattice_parameters.py** Estimation of lattice parameters for various lattice types using covalent/ionic radii.
75
- * **distorter.py** A collection of functions for enumerating and then
74
+ - **lattice_parameters.py** Estimation of lattice parameters for various lattice types using covalent/ionic radii.
75
+ - **distorter.py** A collection of functions for enumerating and then
76
76
  substituting on inequivalent sites of a sub-lattice.
77
- * **oxidation_states.py**: Used for predicting the likelihood of species coexisting in a compound based on a statistical model.
78
- * **structure_prediction**: A submodule which contains a collection of tools for facilitating crystal structure predictions via ionic substitutions
79
- * **dopant_prediction**: A submodule which contains a collections of tools for predicting dopants.
77
+ - **oxidation_states.py**: Used for predicting the likelihood of species coexisting in a compound based on a statistical model.
78
+ - **structure_prediction**: A submodule which contains a collection of tools for facilitating crystal structure predictions via ionic substitutions
79
+ - **dopant_prediction**: A submodule which contains a collections of tools for predicting dopants.
80
+ - **utils.py** A collection of utility functions used throughout the codebase.
81
+
82
+ ## Requirements
80
83
 
81
- Requirements
82
- ------------
83
- The main language is Python 3 and has been tested using Python 3.9+.
84
+ The main language is Python 3 and has been tested using Python 3.10+.
84
85
  Basic requirements are Numpy and Scipy.
85
- The [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase) (ASE), [spglib](http://atztogo.github.io/spglib), and [pymatgen](https://pymatgen.org) are also required for many components.
86
+ The [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase) (ASE), [spglib](http://atztogo.github.io/spglib), and [pymatgen](https://pymatgen.org) are also required for many components.
87
+
88
+ ## Installation
86
89
 
87
- Installation
88
- ------------
89
90
  The latest stable release can be installed via pip which will automatically set up other Python packages as required:
90
91
 
91
- pip install smact
92
+ pip install smact
93
+
94
+ Optional dependencies can also be installed. These enable full replication of the examples and tutorials
95
+
96
+ pip install "smact[optional]"
92
97
 
93
98
  SMACT is also available via conda through the conda-forge channel on Anaconda Cloud:
94
99
 
95
- ```
96
- conda install -c conda-forge smact
97
- ```
100
+ conda install -c conda-forge smact
98
101
 
99
102
  Alternatively, the very latest version can be installed using:
100
103
 
101
104
  pip install git+https://github.com/WMD-group/SMACT.git
102
105
 
103
106
  For developer installation SMACT can be installed from a copy of the source
104
- repository (https://github.com/wmd-group/smact); this will be preferred if using experimental code branches.
107
+ repository (<https://github.com/wmd-group/smact>); this will be preferred if using experimental code branches.
105
108
 
106
109
  To clone the project from GitHub and make a local installation:
107
110
 
@@ -112,19 +115,18 @@ To clone the project from GitHub and make a local installation:
112
115
  With -e pip will create links to the source folder so that that changes
113
116
  to the code will be immediately reflected on the PATH.
114
117
 
115
-
116
- License and attribution
117
- -----------------------
118
+ ## License and attribution
118
119
 
119
120
  Python code and original data tables are licensed under the MIT License.
120
121
 
121
- Development notes
122
- -----------------
122
+ ## Development notes
123
123
 
124
124
  ### Bugs, features and questions
125
- Please use the [Issue Tracker](https://github.com/WMD-group/smact/issues) to report bugs or request features in the first instance. While we hope that most questions can be answered by searching [the docs](https://smact.readthedocs.io/en/latest/), we welcome new questions on the issue tracker, especially if they help us improve the docs! For other queries about any aspect of the code, please contact either Aron Walsh on behalf of The SMACT Developers (author) or Anthony Onwuli (maintainer) by e-mail: a.walsh@imperial.ac.uk or anthony.onwuli16@imperial.ac.uk respectively.
125
+
126
+ Please use the [Issue Tracker](https://github.com/WMD-group/smact/issues) to report bugs or request features in the first instance. While we hope that most questions can be answered by searching [the docs](https://smact.readthedocs.io/en/latest/), we welcome new questions on the issue tracker, especially if they helps us improve the docs! For other queries about any aspect of the code, please contact Anthony Onwuli (maintainer) by [e-mail](mailto:anthony.onwuli16@imperial.ac.uk).
126
127
 
127
128
  ### Code contributions
129
+
128
130
  We are always looking for ways to make SMACT better and more useful to the wider community; contributions are welcome. Please use the ["Fork and Pull"](https://guides.github.com/activities/forking/) workflow to make contributions and stick as closely as possible to the following:
129
131
 
130
132
  - Code style should comply with [PEP8](http://www.python.org/dev/peps/pep-0008) where possible. [Google's house style](https://google.github.io/styleguide/pyguide.html) is also helpful, including a good model for docstrings.
@@ -133,27 +135,23 @@ We are always looking for ways to make SMACT better and more useful to the wider
133
135
  - Look at the [contributing guide](CONTRIBUTING.md) for more information.
134
136
 
135
137
  ### Tests
136
- Testing modules should be pass/fail and wrapped into **tests/test_core.py** or another **tests/test_something.py** file added, if appropriate.
137
- Run the tests using `python -m pytest -v`.
138
- (The final `-v` is optional and adds more detail to the output.)
139
138
 
140
- We also use integrated testing on GitHub via [GitHub Actions](hhttps://github.com/features/actions).
139
+ We use integrated testing on GitHub via [GitHub Actions](https://github.com/features/actions). Testing modules should be pass/fail and wrapped into **tests/test_core.py** or another **tests/test_something.py** file added, if appropriate.
140
+ Run the tests using `python -m pytest -v`.(The final `-v` is optional and adds more detail to the output.)
141
141
 
142
- References
143
- ----------
142
+ ## References
144
143
 
145
144
  [H. Park et al.,
146
- "Mapping inorganic crystal chemical space" *Faraday Discuss.* (2024)](https://pubs.rsc.org/en/content/articlelanding/2024/fd/d4fd00063c)
145
+ "Mapping inorganic crystal chemical space" _Faraday Discuss._ (2024)](https://pubs.rsc.org/en/content/articlelanding/2024/fd/d4fd00063c)
147
146
 
148
147
  [D. W. Davies et al.,
149
- "SMACT: Semiconducting Materials by Analogy and Chemical Theory" *JOSS* **4**, 1361 (2019)](https://joss.theoj.org/papers/7efd2f2ad60d25bdccee3fbd3fc11448)
148
+ "SMACT: Semiconducting Materials by Analogy and Chemical Theory" _JOSS_ **4**, 1361 (2019)](https://joss.theoj.org/papers/7efd2f2ad60d25bdccee3fbd3fc11448)
150
149
 
151
150
  [D. W. Davies et al.,
152
- "Materials discovery by chemical analogy: role of oxidation states in structure prediction" *Faraday Discuss.* **211**, 553 (2018)](https://pubs.rsc.org/en/Content/ArticleLanding/2018/FD/C8FD00032H)
151
+ "Materials discovery by chemical analogy: role of oxidation states in structure prediction" _Faraday Discuss._ **211**, 553 (2018)](https://pubs.rsc.org/en/Content/ArticleLanding/2018/FD/C8FD00032H)
153
152
 
154
153
  [D. W. Davies et al.,
155
- "Computational screening of all stoichiometric inorganic materials" *Chem* **1**, 617 (2016)](http://www.cell.com/chem/abstract/S2451-9294(16)30155-3)
154
+ "Computational screening of all stoichiometric inorganic materials" _Chem_ **1**, 617 (2016)](<http://www.cell.com/chem/abstract/S2451-9294(16)30155-3>)
156
155
 
157
- [B. R. Pamplin, "A systematic method of deriving new semiconducting
158
- compounds by structural analogy", *J. Phys. Chem. Solids*
159
- **25**, 675 (1964)](http://www.sciencedirect.com/science/article/pii/0022369764901763)
156
+ [B. R. Pamplin, "A systematic method of deriving new semiconducting compounds by structural analogy", _J. Phys. Chem. Solids_
157
+ **25**, 675 (1964)](http://www.sciencedirect.com/science/article/pii/0022369764901763)