SMACT 2.8__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.8/SMACT.egg-info → smact-3.0}/PKG-INFO +138 -79
  2. {smact-2.8 → smact-3.0}/README.md +66 -68
  3. {smact-2.8 → smact-3.0/SMACT.egg-info}/PKG-INFO +138 -79
  4. {smact-2.8 → 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.8 → smact-3.0}/setup.py +13 -9
  8. {smact-2.8 → smact-3.0}/smact/__init__.py +109 -103
  9. {smact-2.8 → smact-3.0}/smact/builder.py +21 -8
  10. {smact-2.8 → smact-3.0}/smact/data/Covalent_radii.csv +1 -1
  11. {smact-2.8 → smact-3.0}/smact/data/SSE.csv +1 -1
  12. {smact-2.8 → smact-3.0}/smact/data/SSE_2015.csv +1 -1
  13. {smact-2.8 → 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.8 → smact-3.0}/smact/data/oxidation_states.txt +4 -0
  16. {smact-2.8 → smact-3.0}/smact/data/oxidation_states_SP.txt +4 -0
  17. {smact-2.8 → 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.8 → smact-3.0}/smact/data/oxidation_states_pmg.txt +4 -0
  23. {smact-2.8 → smact-3.0}/smact/data/oxidation_states_wiki.txt +4 -0
  24. {smact-2.8 → 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.8 → smact-3.0}/smact/data_loader.py +130 -128
  27. {smact-2.8 → smact-3.0}/smact/distorter.py +27 -13
  28. {smact-2.8 → smact-3.0}/smact/dopant_prediction/__init__.py +2 -0
  29. {smact-2.8 → smact-3.0}/smact/dopant_prediction/doper.py +60 -63
  30. {smact-2.8 → smact-3.0}/smact/lattice.py +12 -5
  31. {smact-2.8 → smact-3.0}/smact/lattice_parameters.py +73 -25
  32. {smact-2.8 → smact-3.0}/smact/mainpage.py +1 -1
  33. {smact-2.8 → smact-3.0}/smact/oxidation_states.py +40 -53
  34. {smact-2.8 → smact-3.0}/smact/properties.py +34 -35
  35. {smact-2.8 → smact-3.0}/smact/screening.py +146 -146
  36. {smact-2.8 → smact-3.0}/smact/structure_prediction/__init__.py +2 -0
  37. {smact-2.8 → smact-3.0}/smact/structure_prediction/database.py +77 -48
  38. {smact-2.8 → smact-3.0}/smact/structure_prediction/mutation.py +71 -63
  39. {smact-2.8 → smact-3.0}/smact/structure_prediction/prediction.py +89 -107
  40. {smact-2.8 → smact-3.0}/smact/structure_prediction/probability_models.py +22 -12
  41. {smact-2.8 → smact-3.0}/smact/structure_prediction/structure.py +164 -115
  42. smact-3.0/smact/structure_prediction/utilities.py +105 -0
  43. {smact-2.8 → smact-3.0}/smact/tests/test_core.py +55 -102
  44. {smact-2.8 → smact-3.0}/smact/tests/test_doper.py +13 -19
  45. {smact-2.8 → 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.8 → smact-3.0}/smact/utils/composition.py +8 -12
  49. smact-3.0/smact/utils/oxidation.py +157 -0
  50. smact-2.8/SMACT.egg-info/requires.txt +0 -8
  51. smact-2.8/pyproject.toml +0 -11
  52. smact-2.8/smact/data/oxidation_state_probability_table.json +0 -1
  53. smact-2.8/smact/data/oxidationstates.data +0 -135
  54. smact-2.8/smact/data/species_rep/skipspecies_20221028_319ion_dim200_cosine_similarity.json +0 -1
  55. smact-2.8/smact/structure_prediction/utilities.py +0 -94
  56. smact-2.8/smact/tests/test_utils.py +0 -76
  57. {smact-2.8 → smact-3.0}/LICENSE +0 -0
  58. {smact-2.8 → smact-3.0}/MANIFEST.in +0 -0
  59. {smact-2.8 → smact-3.0}/SMACT.egg-info/dependency_links.txt +0 -0
  60. {smact-2.8 → smact-3.0}/SMACT.egg-info/not-zip-safe +0 -0
  61. {smact-2.8 → smact-3.0}/SMACT.egg-info/top_level.txt +0 -0
  62. {smact-2.8 → smact-3.0}/setup.cfg +0 -0
  63. {smact-2.8 → smact-3.0}/smact/data/element_data.txt +0 -0
  64. {smact-2.8 → smact-3.0}/smact/data/element_valence_modified.csv +0 -0
  65. /smact-2.8/smact/data/HHIs.txt → /smact-3.0/smact/data/hhi.txt +0 -0
  66. {smact-2.8 → smact-3.0}/smact/data/ionic_radii.csv +0 -0
  67. {smact-2.8 → smact-3.0}/smact/data/magpie.csv +0 -0
  68. {smact-2.8 → smact-3.0}/smact/data/ordered_periodic.txt +0 -0
  69. {smact-2.8 → smact-3.0}/smact/data/shannon_radii.csv +0 -0
  70. {smact-2.8 → smact-3.0}/smact/data/shannon_radii_ML_extended.csv +0 -0
  71. {smact-2.8 → smact-3.0}/smact/data/solid_properties.xlsx +0 -0
  72. {smact-2.8 → smact-3.0}/smact/tests/__init__.py +0 -0
  73. {smact-2.8 → smact-3.0}/smact/utils/__init__.py +0 -0
@@ -1,36 +1,97 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: SMACT
3
- Version: 2.8
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
22
  Classifier: Programming Language :: Python :: 3.10
13
23
  Classifier: Programming Language :: Python :: 3.11
14
24
  Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Development Status :: 5 - Production/Stable
16
- Classifier: Intended Audience :: Science/Research
17
- Classifier: Operating System :: OS Independent
18
- Classifier: License :: OSI Approved :: MIT License
19
25
  Classifier: Topic :: Scientific/Engineering
20
26
  Classifier: Topic :: Scientific/Engineering :: Chemistry
21
27
  Requires-Python: >=3.10
22
28
  Description-Content-Type: text/markdown
23
29
  License-File: LICENSE
24
- Requires-Dist: scipy
25
- Requires-Dist: numpy
26
- Requires-Dist: spglib
27
- Requires-Dist: pymatgen>=2024.2.20
28
30
  Requires-Dist: ase
31
+ Requires-Dist: numpy<3
29
32
  Requires-Dist: pandas
30
33
  Requires-Dist: pathos
34
+ Requires-Dist: pymatgen>=2024.2.20
35
+ Requires-Dist: scipy
36
+ Requires-Dist: spglib
31
37
  Requires-Dist: typing-extensions
32
-
33
- [![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)
34
95
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5553202.svg)](https://doi.org/10.5281/zenodo.5553202)
35
96
  [![Documentation Status](https://readthedocs.org/projects/smact/badge/?version=latest)](http://smact.readthedocs.org/en/latest/?badge=latest)
36
97
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
@@ -44,96 +105,99 @@ Requires-Dist: typing-extensions
44
105
  [![codecov](https://codecov.io/gh/WMD-group/SMACT/branch/master/graph/badge.svg?token=UtgVxjoYNP)](https://codecov.io/gh/WMD-group/SMACT)
45
106
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact)
46
107
 
47
- SMACT
48
- =====
108
+ # SMACT
49
109
 
50
110
  **Semiconducting Materials from Analogy and Chemical Theory** (SMACT) is a collection of rapid screening and informatics tools that uses data about chemical elements.
51
111
 
52
- - **Documentation:** https://smact.readthedocs.io/en/latest/
53
- - **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>
114
+
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)
54
116
 
55
- ![](SMACT.png)
117
+ _If you torture the data enough, nature will always confess_ - Roland Coase (from 'How should economists choose?')
56
118
 
57
- *If you torture the data enough, nature will always confess* - Roland Coase (from 'How should economists choose?')
119
+ ## Statement of need
58
120
 
59
- Statement of need
60
- --------
61
- 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.
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.
62
122
 
63
- ![](smact_simple.gif)
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
64
126
 
65
- Getting started
66
- -----
67
127
  Features are accessed through Python scripts, importing classes and functions as needed.
68
- 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.
69
- 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
70
132
 
71
- Code features
72
- --------
73
- - 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.
74
134
 
75
135
  - Oxidation states that are accessible to each element are included in their properties.
76
136
 
77
- - 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).
78
138
 
79
- - 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:
80
- - 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).
81
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).
82
143
 
83
- - 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).
84
145
 
85
- - 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.
86
147
 
87
- - The code also has tools for manipulating common crystal lattice types:
148
+ - The code also has tools for manipulating common crystal lattice types:
88
149
  - Certain structure types can be built using the [builder module](https://smact.readthedocs.io/en/latest/smact.builder.html)
89
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).
90
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.
91
- - 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.
92
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.
93
154
 
94
- List of modules
95
- -------
96
- * **smact** library containing:
97
- * **\_\_init\_\_.py** Contains the core `Element` and `Species` classes.
98
- * **data_loader.py** Handles the loading of external data used to initialise the core `smact.Element` and `smact.Species` classes.
99
- * **screening.py** Used for generating and applying filters to compositional search spaces.
100
- * **properties.py** A collection of tools for estimating useful properties based on composition.
101
- * **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
102
163
  at those sites, this reads from the database and generates all possible
103
164
  stoichiometries.
104
- * **builder.py** Builds some common lattice structures, given the chemical
165
+ - **builder.py** Builds some common lattice structures, given the chemical
105
166
  composition.
106
- * **lattice_parameters.py** Estimation of lattice parameters for various lattice types using covalent/ionic radii.
107
- * **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
108
169
  substituting on inequivalent sites of a sub-lattice.
109
- * **oxidation_states.py**: Used for predicting the likelihood of species coexisting in a compound based on a statistical model.
110
- * **structure_prediction**: A submodule which contains a collection of tools for facilitating crystal structure predictions via ionic substitutions
111
- * **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
112
176
 
113
- Requirements
114
- ------------
115
177
  The main language is Python 3 and has been tested using Python 3.10+.
116
178
  Basic requirements are Numpy and Scipy.
117
- 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
118
182
 
119
- Installation
120
- ------------
121
183
  The latest stable release can be installed via pip which will automatically set up other Python packages as required:
122
184
 
123
- 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]"
124
190
 
125
191
  SMACT is also available via conda through the conda-forge channel on Anaconda Cloud:
126
192
 
127
- ```
128
- conda install -c conda-forge smact
129
- ```
193
+ conda install -c conda-forge smact
130
194
 
131
195
  Alternatively, the very latest version can be installed using:
132
196
 
133
197
  pip install git+https://github.com/WMD-group/SMACT.git
134
198
 
135
199
  For developer installation SMACT can be installed from a copy of the source
136
- 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.
137
201
 
138
202
  To clone the project from GitHub and make a local installation:
139
203
 
@@ -144,19 +208,18 @@ To clone the project from GitHub and make a local installation:
144
208
  With -e pip will create links to the source folder so that that changes
145
209
  to the code will be immediately reflected on the PATH.
146
210
 
147
-
148
- License and attribution
149
- -----------------------
211
+ ## License and attribution
150
212
 
151
213
  Python code and original data tables are licensed under the MIT License.
152
214
 
153
- Development notes
154
- -----------------
215
+ ## Development notes
155
216
 
156
217
  ### Bugs, features and questions
157
- 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).
158
220
 
159
221
  ### Code contributions
222
+
160
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:
161
224
 
162
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.
@@ -165,27 +228,23 @@ We are always looking for ways to make SMACT better and more useful to the wider
165
228
  - Look at the [contributing guide](CONTRIBUTING.md) for more information.
166
229
 
167
230
  ### Tests
168
- Testing modules should be pass/fail and wrapped into **tests/test_core.py** or another **tests/test_something.py** file added, if appropriate.
169
- Run the tests using `python -m pytest -v`.
170
- (The final `-v` is optional and adds more detail to the output.)
171
231
 
172
- 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.)
173
234
 
174
- References
175
- ----------
235
+ ## References
176
236
 
177
237
  [H. Park et al.,
178
- "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)
179
239
 
180
240
  [D. W. Davies et al.,
181
- "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)
182
242
 
183
243
  [D. W. Davies et al.,
184
- "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)
185
245
 
186
246
  [D. W. Davies et al.,
187
- "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>)
188
248
 
189
- [B. R. Pamplin, "A systematic method of deriving new semiconducting
190
- 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_
191
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
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)