SMACT 3.0.1__tar.gz → 3.2.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 (79) hide show
  1. {smact-3.0.1/SMACT.egg-info → smact-3.2.0}/PKG-INFO +35 -31
  2. {smact-3.0.1 → smact-3.2.0}/README.md +2 -3
  3. {smact-3.0.1 → smact-3.2.0/SMACT.egg-info}/PKG-INFO +35 -31
  4. {smact-3.0.1 → smact-3.2.0}/SMACT.egg-info/SOURCES.txt +11 -3
  5. {smact-3.0.1 → smact-3.2.0}/SMACT.egg-info/requires.txt +27 -20
  6. {smact-3.0.1 → smact-3.2.0}/pyproject.toml +79 -34
  7. smact-3.2.0/smact/benchmarking/__init__.py +1 -0
  8. smact-3.2.0/smact/benchmarking/pymatgen_benchmark.py +40 -0
  9. smact-3.2.0/smact/benchmarking/smact_benchmark.py +33 -0
  10. smact-3.2.0/smact/benchmarking/utilities.py +45 -0
  11. {smact-3.0.1 → smact-3.2.0}/smact/data_loader.py +19 -19
  12. smact-3.2.0/smact/metallicity.py +157 -0
  13. {smact-3.0.1 → smact-3.2.0}/smact/oxidation_states.py +1 -1
  14. {smact-3.0.1 → smact-3.2.0}/smact/screening.py +110 -97
  15. {smact-3.0.1 → smact-3.2.0}/smact/structure_prediction/structure.py +1 -1
  16. {smact-3.0.1 → smact-3.2.0}/smact/tests/test_core.py +114 -13
  17. smact-3.2.0/smact/tests/test_metallicity.py +172 -0
  18. {smact-3.0.1 → smact-3.2.0}/smact/tests/test_structure.py +19 -2
  19. smact-3.2.0/smact/tests/test_utils.py +330 -0
  20. smact-3.2.0/smact/utils/crystal_space/__init__.py +1 -0
  21. smact-3.2.0/smact/utils/crystal_space/download_compounds_with_mp_api.py +96 -0
  22. smact-3.2.0/smact/utils/crystal_space/generate_composition_with_smact.py +257 -0
  23. smact-3.2.0/smact/utils/crystal_space/plot_embedding.py +159 -0
  24. {smact-3.0.1 → smact-3.2.0}/smact/utils/oxidation.py +71 -21
  25. smact-3.0.1/SMACT.egg-info/not-zip-safe +0 -1
  26. smact-3.0.1/setup.py +0 -80
  27. smact-3.0.1/smact/tests/test_utils.py +0 -200
  28. {smact-3.0.1 → smact-3.2.0}/LICENSE +0 -0
  29. {smact-3.0.1 → smact-3.2.0}/MANIFEST.in +0 -0
  30. {smact-3.0.1 → smact-3.2.0}/SMACT.egg-info/dependency_links.txt +0 -0
  31. {smact-3.0.1 → smact-3.2.0}/SMACT.egg-info/top_level.txt +0 -0
  32. {smact-3.0.1 → smact-3.2.0}/setup.cfg +0 -0
  33. {smact-3.0.1 → smact-3.2.0}/smact/__init__.py +0 -0
  34. {smact-3.0.1 → smact-3.2.0}/smact/builder.py +0 -0
  35. {smact-3.0.1 → smact-3.2.0}/smact/data/Covalent_radii.csv +0 -0
  36. {smact-3.0.1 → smact-3.2.0}/smact/data/SSE.csv +0 -0
  37. {smact-3.0.1 → smact-3.2.0}/smact/data/SSE_2015.csv +0 -0
  38. {smact-3.0.1 → smact-3.2.0}/smact/data/SSE_Pauling.csv +0 -0
  39. {smact-3.0.1 → smact-3.2.0}/smact/data/element_data.txt +0 -0
  40. {smact-3.0.1 → smact-3.2.0}/smact/data/element_valence_modified.csv +0 -0
  41. {smact-3.0.1 → smact-3.2.0}/smact/data/hhi.txt +0 -0
  42. {smact-3.0.1 → smact-3.2.0}/smact/data/ionic_radii.csv +0 -0
  43. {smact-3.0.1 → smact-3.2.0}/smact/data/magpie.csv +0 -0
  44. {smact-3.0.1 → smact-3.2.0}/smact/data/ordered_periodic.txt +0 -0
  45. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_state_probability_table.json +0 -0
  46. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states.txt +0 -0
  47. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states_SP.txt +0 -0
  48. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states_icsd.txt +0 -0
  49. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states_icsd24_common.txt +0 -0
  50. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states_icsd24_counts.json +0 -0
  51. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states_icsd24_filtered.txt +0 -0
  52. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states_icsd24_raw.txt +0 -0
  53. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states_pmg.txt +0 -0
  54. {smact-3.0.1 → smact-3.2.0}/smact/data/oxidation_states_wiki.txt +0 -0
  55. {smact-3.0.1 → smact-3.2.0}/smact/data/shannon_radii.csv +0 -0
  56. {smact-3.0.1 → smact-3.2.0}/smact/data/shannon_radii_ML_extended.csv +0 -0
  57. {smact-3.0.1 → smact-3.2.0}/smact/data/solid_properties.txt +0 -0
  58. {smact-3.0.1 → smact-3.2.0}/smact/data/solid_properties.xlsx +0 -0
  59. {smact-3.0.1 → smact-3.2.0}/smact/data/species_rep/ion_embedding_M3GNet-MP-2023.11.1-oxi-Eform_cosine_similarity.json +0 -0
  60. {smact-3.0.1 → smact-3.2.0}/smact/data/species_rep/ion_embedding_M3GNet-MP-2023.11.1-oxi-band_gap_cosine_similarity.json +0 -0
  61. {smact-3.0.1 → smact-3.2.0}/smact/data/species_rep/skipspecies_20221028_319ion_dim200_cosine_similarity.json +0 -0
  62. {smact-3.0.1 → smact-3.2.0}/smact/distorter.py +0 -0
  63. {smact-3.0.1 → smact-3.2.0}/smact/dopant_prediction/__init__.py +0 -0
  64. {smact-3.0.1 → smact-3.2.0}/smact/dopant_prediction/doper.py +0 -0
  65. {smact-3.0.1 → smact-3.2.0}/smact/lattice.py +0 -0
  66. {smact-3.0.1 → smact-3.2.0}/smact/lattice_parameters.py +0 -0
  67. {smact-3.0.1 → smact-3.2.0}/smact/mainpage.py +0 -0
  68. {smact-3.0.1 → smact-3.2.0}/smact/properties.py +0 -0
  69. {smact-3.0.1 → smact-3.2.0}/smact/structure_prediction/__init__.py +0 -0
  70. {smact-3.0.1 → smact-3.2.0}/smact/structure_prediction/database.py +0 -0
  71. {smact-3.0.1 → smact-3.2.0}/smact/structure_prediction/mutation.py +0 -0
  72. {smact-3.0.1 → smact-3.2.0}/smact/structure_prediction/prediction.py +0 -0
  73. {smact-3.0.1 → smact-3.2.0}/smact/structure_prediction/probability_models.py +0 -0
  74. {smact-3.0.1 → smact-3.2.0}/smact/structure_prediction/utilities.py +0 -0
  75. {smact-3.0.1 → smact-3.2.0}/smact/tests/__init__.py +0 -0
  76. {smact-3.0.1 → smact-3.2.0}/smact/tests/test_doper.py +0 -0
  77. {smact-3.0.1 → smact-3.2.0}/smact/utils/__init__.py +0 -0
  78. {smact-3.0.1 → smact-3.2.0}/smact/utils/band_gap_simple.py +0 -0
  79. {smact-3.0.1 → smact-3.2.0}/smact/utils/composition.py +0 -0
@@ -1,13 +1,10 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: SMACT
3
- Version: 3.0.1
3
+ Version: 3.2.0
4
4
  Summary: Semiconducting Materials by Analogy and Chemical Theory
5
- Home-page: https://github.com/WMD-group/SMACT
6
- Author: The SMACT Developers
7
5
  Author-email: The SMACT Developers <a.walsh@imperial.ac.uk>
8
- Maintainer: Anthony O. Onwuli
9
6
  Maintainer-email: "Anthony O. Onwuli" <anthony.onwuli16@imperial.ac.uk>
10
- License: MIT
7
+ License-Expression: MIT
11
8
  Project-URL: Homepage, https://github.com/WMD-group/SMACT
12
9
  Project-URL: Documentation, https://smact.readthedocs.io/en/latest/
13
10
  Project-URL: Repository, https://github.com/WMD-group/SMACT
@@ -16,24 +13,25 @@ Project-URL: Pypi, https://pypi.org/project/SMACT/
16
13
  Keywords: python,machine-learning,computational-chemistry,materials-science,materials-informatics,materials-screening,materials-design,materials
17
14
  Classifier: Development Status :: 5 - Production/Stable
18
15
  Classifier: Intended Audience :: Science/Research
19
- Classifier: License :: OSI Approved :: MIT License
20
16
  Classifier: Operating System :: OS Independent
21
17
  Classifier: Programming Language :: Python :: 3
22
18
  Classifier: Programming Language :: Python :: 3.10
23
19
  Classifier: Programming Language :: Python :: 3.11
24
20
  Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
25
22
  Classifier: Topic :: Scientific/Engineering
26
23
  Classifier: Topic :: Scientific/Engineering :: Chemistry
27
- Requires-Python: >=3.10
24
+ Requires-Python: <3.14,>=3.10
28
25
  Description-Content-Type: text/markdown
29
26
  License-File: LICENSE
30
27
  Requires-Dist: ase
31
28
  Requires-Dist: numpy<3
29
+ Requires-Dist: pandarallel[optional]>=1.6.5
32
30
  Requires-Dist: pandas
33
31
  Requires-Dist: pathos
34
32
  Requires-Dist: pymatgen>=2024.2.20
35
33
  Requires-Dist: scipy
36
- Requires-Dist: spglib
34
+ Requires-Dist: spglib>=2.6.0
37
35
  Requires-Dist: typing-extensions
38
36
  Provides-Extra: dev
39
37
  Requires-Dist: pytest; extra == "dev"
@@ -50,25 +48,27 @@ Requires-Dist: readthedocs-sphinx-search==0.3.2; extra == "docs"
50
48
  Requires-Dist: sphinx-book-theme==1.1.3; extra == "docs"
51
49
  Requires-Dist: myst-nb==1.1.2; extra == "docs"
52
50
  Provides-Extra: mp
53
- Requires-Dist: mp-api; extra == "mp"
51
+ Requires-Dist: mp-api>=0.45.3; extra == "mp"
54
52
  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"
53
+ Requires-Dist: smact[mp]; extra == "crystal-space"
54
+ Requires-Dist: ElementEmbeddings>=0.4; extra == "crystal-space"
55
+ Requires-Dist: umap-learn==0.5.7; extra == "crystal-space"
56
+ Requires-Dist: kaleido>=0.2.1; extra == "crystal-space"
60
57
  Provides-Extra: featurisers
61
58
  Requires-Dist: matminer; extra == "featurisers"
62
59
  Requires-Dist: ElementEmbeddings; extra == "featurisers"
63
60
  Provides-Extra: visualisation
64
- Requires-Dist: seaborn; extra == "visualisation"
65
- Requires-Dist: pymatviz; extra == "visualisation"
66
- Requires-Dist: dash; extra == "visualisation"
61
+ Requires-Dist: seaborn>=0.13.2; extra == "visualisation"
62
+ Requires-Dist: pymatviz>=0.15; extra == "visualisation"
63
+ Requires-Dist: dash>=2.18.2; extra == "visualisation"
64
+ Provides-Extra: ml
65
+ Requires-Dist: xgboost; extra == "ml"
66
+ Requires-Dist: shap; extra == "ml"
67
+ Requires-Dist: smact[featurisers]; extra == "ml"
67
68
  Provides-Extra: optional
68
69
  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"
70
+ Requires-Dist: smact[mp]; extra == "optional"
71
+ Requires-Dist: smact[visualisation]; extra == "optional"
72
72
  Requires-Dist: pymatgen>=2024.2.20; extra == "optional"
73
73
  Requires-Dist: matminer>=0.9.2; extra == "optional"
74
74
  Requires-Dist: kaleido>=0.2.1; extra == "optional"
@@ -76,19 +76,24 @@ Requires-Dist: ase>=3.22.0; extra == "optional"
76
76
  Requires-Dist: llvmlite>=0.40; extra == "optional"
77
77
  Requires-Dist: ElementEmbeddings>=0.4; extra == "optional"
78
78
  Requires-Dist: dash>=2.18.2; extra == "optional"
79
+ Requires-Dist: smact[ml]; extra == "optional"
80
+ Requires-Dist: pandarallel>=1.6.5; extra == "optional"
81
+ Requires-Dist: matplotlib-venn[shapely]>=1.1.2; extra == "optional"
79
82
  Provides-Extra: strict
80
83
  Requires-Dist: pydantic==2.9.2; extra == "strict"
81
- Requires-Dist: mp-api==0.42.2; extra == "strict"
82
- Requires-Dist: pymatviz==0.14; extra == "strict"
84
+ Requires-Dist: mp-api==0.45.5; extra == "strict"
85
+ Requires-Dist: pymatviz==0.15.1; extra == "strict"
86
+ Requires-Dist: mp-api==0.45.5; extra == "strict"
83
87
  Requires-Dist: seaborn==0.13.2; extra == "strict"
84
- Requires-Dist: pymatgen==2024.11.13; extra == "strict"
85
- Requires-Dist: matminer==0.9.2; extra == "strict"
86
- Requires-Dist: umap-learn==0.5.3; extra == "strict"
88
+ Requires-Dist: pymatgen==2025.4.24; extra == "strict"
89
+ Requires-Dist: matminer==0.9.3; extra == "strict"
90
+ Requires-Dist: umap-learn==0.5.7; extra == "strict"
87
91
  Requires-Dist: kaleido==0.2.1; extra == "strict"
88
- Requires-Dist: ase==3.23.0; extra == "strict"
92
+ Requires-Dist: ase==3.24.0; extra == "strict"
89
93
  Requires-Dist: numpy; extra == "strict"
90
94
  Requires-Dist: ElementEmbeddings==0.6.1; extra == "strict"
91
- Requires-Dist: dash==2.18.2; extra == "strict"
95
+ Requires-Dist: dash==3.0.2; extra == "strict"
96
+ Dynamic: license-file
92
97
 
93
98
  [![DOI](https://joss.theoj.org/papers/10.21105/joss.01361/status.svg)](https://doi.org/10.21105/joss.01361)
94
99
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5553202.svg)](https://doi.org/10.5281/zenodo.5553202)
@@ -102,7 +107,7 @@ Requires-Dist: dash==2.18.2; extra == "strict"
102
107
  ![dependencies](https://img.shields.io/librariesio/release/pypi/smact)
103
108
  [![CI Status](https://github.com/WMD-group/SMACT/actions/workflows/ci.yml/badge.svg)](https://github.com/WMD-group/SMACT/actions/workflows/ci.yml)
104
109
  [![codecov](https://codecov.io/gh/WMD-group/SMACT/branch/master/graph/badge.svg?token=UtgVxjoYNP)](https://codecov.io/gh/WMD-group/SMACT)
105
- ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact)
110
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/WMD-group/SMACT)
106
111
 
107
112
  # SMACT
108
113
 
@@ -136,7 +141,6 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
136
141
  - 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).
137
142
 
138
143
  - 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:
139
-
140
144
  - 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).
141
145
  - 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).
142
146
 
@@ -173,7 +177,7 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
173
177
 
174
178
  ## Requirements
175
179
 
176
- The main language is Python 3 and has been tested using Python 3.10+.
180
+ The main language is Python 3 and has been tested using Python 3.10 - 3.13 (Windows is not officially supported for Python 3.13 as of yet).
177
181
  Basic requirements are Numpy and Scipy.
178
182
  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
183
 
@@ -10,7 +10,7 @@
10
10
  ![dependencies](https://img.shields.io/librariesio/release/pypi/smact)
11
11
  [![CI Status](https://github.com/WMD-group/SMACT/actions/workflows/ci.yml/badge.svg)](https://github.com/WMD-group/SMACT/actions/workflows/ci.yml)
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
- ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact)
13
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/WMD-group/SMACT)
14
14
 
15
15
  # SMACT
16
16
 
@@ -44,7 +44,6 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
44
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).
45
45
 
46
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
47
  - 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
48
  - 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
49
 
@@ -81,7 +80,7 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
81
80
 
82
81
  ## Requirements
83
82
 
84
- The main language is Python 3 and has been tested using Python 3.10+.
83
+ The main language is Python 3 and has been tested using Python 3.10 - 3.13 (Windows is not officially supported for Python 3.13 as of yet).
85
84
  Basic requirements are Numpy and Scipy.
86
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.
87
86
 
@@ -1,13 +1,10 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: SMACT
3
- Version: 3.0.1
3
+ Version: 3.2.0
4
4
  Summary: Semiconducting Materials by Analogy and Chemical Theory
5
- Home-page: https://github.com/WMD-group/SMACT
6
- Author: The SMACT Developers
7
5
  Author-email: The SMACT Developers <a.walsh@imperial.ac.uk>
8
- Maintainer: Anthony O. Onwuli
9
6
  Maintainer-email: "Anthony O. Onwuli" <anthony.onwuli16@imperial.ac.uk>
10
- License: MIT
7
+ License-Expression: MIT
11
8
  Project-URL: Homepage, https://github.com/WMD-group/SMACT
12
9
  Project-URL: Documentation, https://smact.readthedocs.io/en/latest/
13
10
  Project-URL: Repository, https://github.com/WMD-group/SMACT
@@ -16,24 +13,25 @@ Project-URL: Pypi, https://pypi.org/project/SMACT/
16
13
  Keywords: python,machine-learning,computational-chemistry,materials-science,materials-informatics,materials-screening,materials-design,materials
17
14
  Classifier: Development Status :: 5 - Production/Stable
18
15
  Classifier: Intended Audience :: Science/Research
19
- Classifier: License :: OSI Approved :: MIT License
20
16
  Classifier: Operating System :: OS Independent
21
17
  Classifier: Programming Language :: Python :: 3
22
18
  Classifier: Programming Language :: Python :: 3.10
23
19
  Classifier: Programming Language :: Python :: 3.11
24
20
  Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
25
22
  Classifier: Topic :: Scientific/Engineering
26
23
  Classifier: Topic :: Scientific/Engineering :: Chemistry
27
- Requires-Python: >=3.10
24
+ Requires-Python: <3.14,>=3.10
28
25
  Description-Content-Type: text/markdown
29
26
  License-File: LICENSE
30
27
  Requires-Dist: ase
31
28
  Requires-Dist: numpy<3
29
+ Requires-Dist: pandarallel[optional]>=1.6.5
32
30
  Requires-Dist: pandas
33
31
  Requires-Dist: pathos
34
32
  Requires-Dist: pymatgen>=2024.2.20
35
33
  Requires-Dist: scipy
36
- Requires-Dist: spglib
34
+ Requires-Dist: spglib>=2.6.0
37
35
  Requires-Dist: typing-extensions
38
36
  Provides-Extra: dev
39
37
  Requires-Dist: pytest; extra == "dev"
@@ -50,25 +48,27 @@ Requires-Dist: readthedocs-sphinx-search==0.3.2; extra == "docs"
50
48
  Requires-Dist: sphinx-book-theme==1.1.3; extra == "docs"
51
49
  Requires-Dist: myst-nb==1.1.2; extra == "docs"
52
50
  Provides-Extra: mp
53
- Requires-Dist: mp-api; extra == "mp"
51
+ Requires-Dist: mp-api>=0.45.3; extra == "mp"
54
52
  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"
53
+ Requires-Dist: smact[mp]; extra == "crystal-space"
54
+ Requires-Dist: ElementEmbeddings>=0.4; extra == "crystal-space"
55
+ Requires-Dist: umap-learn==0.5.7; extra == "crystal-space"
56
+ Requires-Dist: kaleido>=0.2.1; extra == "crystal-space"
60
57
  Provides-Extra: featurisers
61
58
  Requires-Dist: matminer; extra == "featurisers"
62
59
  Requires-Dist: ElementEmbeddings; extra == "featurisers"
63
60
  Provides-Extra: visualisation
64
- Requires-Dist: seaborn; extra == "visualisation"
65
- Requires-Dist: pymatviz; extra == "visualisation"
66
- Requires-Dist: dash; extra == "visualisation"
61
+ Requires-Dist: seaborn>=0.13.2; extra == "visualisation"
62
+ Requires-Dist: pymatviz>=0.15; extra == "visualisation"
63
+ Requires-Dist: dash>=2.18.2; extra == "visualisation"
64
+ Provides-Extra: ml
65
+ Requires-Dist: xgboost; extra == "ml"
66
+ Requires-Dist: shap; extra == "ml"
67
+ Requires-Dist: smact[featurisers]; extra == "ml"
67
68
  Provides-Extra: optional
68
69
  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"
70
+ Requires-Dist: smact[mp]; extra == "optional"
71
+ Requires-Dist: smact[visualisation]; extra == "optional"
72
72
  Requires-Dist: pymatgen>=2024.2.20; extra == "optional"
73
73
  Requires-Dist: matminer>=0.9.2; extra == "optional"
74
74
  Requires-Dist: kaleido>=0.2.1; extra == "optional"
@@ -76,19 +76,24 @@ Requires-Dist: ase>=3.22.0; extra == "optional"
76
76
  Requires-Dist: llvmlite>=0.40; extra == "optional"
77
77
  Requires-Dist: ElementEmbeddings>=0.4; extra == "optional"
78
78
  Requires-Dist: dash>=2.18.2; extra == "optional"
79
+ Requires-Dist: smact[ml]; extra == "optional"
80
+ Requires-Dist: pandarallel>=1.6.5; extra == "optional"
81
+ Requires-Dist: matplotlib-venn[shapely]>=1.1.2; extra == "optional"
79
82
  Provides-Extra: strict
80
83
  Requires-Dist: pydantic==2.9.2; extra == "strict"
81
- Requires-Dist: mp-api==0.42.2; extra == "strict"
82
- Requires-Dist: pymatviz==0.14; extra == "strict"
84
+ Requires-Dist: mp-api==0.45.5; extra == "strict"
85
+ Requires-Dist: pymatviz==0.15.1; extra == "strict"
86
+ Requires-Dist: mp-api==0.45.5; extra == "strict"
83
87
  Requires-Dist: seaborn==0.13.2; extra == "strict"
84
- Requires-Dist: pymatgen==2024.11.13; extra == "strict"
85
- Requires-Dist: matminer==0.9.2; extra == "strict"
86
- Requires-Dist: umap-learn==0.5.3; extra == "strict"
88
+ Requires-Dist: pymatgen==2025.4.24; extra == "strict"
89
+ Requires-Dist: matminer==0.9.3; extra == "strict"
90
+ Requires-Dist: umap-learn==0.5.7; extra == "strict"
87
91
  Requires-Dist: kaleido==0.2.1; extra == "strict"
88
- Requires-Dist: ase==3.23.0; extra == "strict"
92
+ Requires-Dist: ase==3.24.0; extra == "strict"
89
93
  Requires-Dist: numpy; extra == "strict"
90
94
  Requires-Dist: ElementEmbeddings==0.6.1; extra == "strict"
91
- Requires-Dist: dash==2.18.2; extra == "strict"
95
+ Requires-Dist: dash==3.0.2; extra == "strict"
96
+ Dynamic: license-file
92
97
 
93
98
  [![DOI](https://joss.theoj.org/papers/10.21105/joss.01361/status.svg)](https://doi.org/10.21105/joss.01361)
94
99
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5553202.svg)](https://doi.org/10.5281/zenodo.5553202)
@@ -102,7 +107,7 @@ Requires-Dist: dash==2.18.2; extra == "strict"
102
107
  ![dependencies](https://img.shields.io/librariesio/release/pypi/smact)
103
108
  [![CI Status](https://github.com/WMD-group/SMACT/actions/workflows/ci.yml/badge.svg)](https://github.com/WMD-group/SMACT/actions/workflows/ci.yml)
104
109
  [![codecov](https://codecov.io/gh/WMD-group/SMACT/branch/master/graph/badge.svg?token=UtgVxjoYNP)](https://codecov.io/gh/WMD-group/SMACT)
105
- ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact)
110
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/smact) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/WMD-group/SMACT)
106
111
 
107
112
  # SMACT
108
113
 
@@ -136,7 +141,6 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
136
141
  - 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).
137
142
 
138
143
  - 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:
139
-
140
144
  - 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).
141
145
  - 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).
142
146
 
@@ -173,7 +177,7 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
173
177
 
174
178
  ## Requirements
175
179
 
176
- The main language is Python 3 and has been tested using Python 3.10+.
180
+ The main language is Python 3 and has been tested using Python 3.10 - 3.13 (Windows is not officially supported for Python 3.13 as of yet).
177
181
  Basic requirements are Numpy and Scipy.
178
182
  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
183
 
@@ -2,11 +2,9 @@ LICENSE
2
2
  MANIFEST.in
3
3
  README.md
4
4
  pyproject.toml
5
- setup.py
6
5
  SMACT.egg-info/PKG-INFO
7
6
  SMACT.egg-info/SOURCES.txt
8
7
  SMACT.egg-info/dependency_links.txt
9
- SMACT.egg-info/not-zip-safe
10
8
  SMACT.egg-info/requires.txt
11
9
  SMACT.egg-info/top_level.txt
12
10
  smact/__init__.py
@@ -16,9 +14,14 @@ smact/distorter.py
16
14
  smact/lattice.py
17
15
  smact/lattice_parameters.py
18
16
  smact/mainpage.py
17
+ smact/metallicity.py
19
18
  smact/oxidation_states.py
20
19
  smact/properties.py
21
20
  smact/screening.py
21
+ smact/benchmarking/__init__.py
22
+ smact/benchmarking/pymatgen_benchmark.py
23
+ smact/benchmarking/smact_benchmark.py
24
+ smact/benchmarking/utilities.py
22
25
  smact/data/Covalent_radii.csv
23
26
  smact/data/SSE.csv
24
27
  smact/data/SSE_2015.csv
@@ -58,9 +61,14 @@ smact/structure_prediction/utilities.py
58
61
  smact/tests/__init__.py
59
62
  smact/tests/test_core.py
60
63
  smact/tests/test_doper.py
64
+ smact/tests/test_metallicity.py
61
65
  smact/tests/test_structure.py
62
66
  smact/tests/test_utils.py
63
67
  smact/utils/__init__.py
64
68
  smact/utils/band_gap_simple.py
65
69
  smact/utils/composition.py
66
- smact/utils/oxidation.py
70
+ smact/utils/oxidation.py
71
+ smact/utils/crystal_space/__init__.py
72
+ smact/utils/crystal_space/download_compounds_with_mp_api.py
73
+ smact/utils/crystal_space/generate_composition_with_smact.py
74
+ smact/utils/crystal_space/plot_embedding.py
@@ -1,18 +1,18 @@
1
1
  ase
2
2
  numpy<3
3
+ pandarallel[optional]>=1.6.5
3
4
  pandas
4
5
  pathos
5
6
  pymatgen>=2024.2.20
6
7
  scipy
7
- spglib
8
+ spglib>=2.6.0
8
9
  typing-extensions
9
10
 
10
11
  [crystal_space]
11
- mp-api
12
- ElementEmbeddings
13
- umap-learn==0.5.3
14
- kaleido
15
- pydantic<2.10.0
12
+ smact[mp]
13
+ ElementEmbeddings>=0.4
14
+ umap-learn==0.5.7
15
+ kaleido>=0.2.1
16
16
 
17
17
  [dev]
18
18
  pytest
@@ -34,14 +34,18 @@ myst-nb==1.1.2
34
34
  matminer
35
35
  ElementEmbeddings
36
36
 
37
+ [ml]
38
+ xgboost
39
+ shap
40
+ smact[featurisers]
41
+
37
42
  [mp]
38
- mp-api
43
+ mp-api>=0.45.3
39
44
 
40
45
  [optional]
41
46
  pydantic>=2.9.2
42
- mp-api>=0.42.2
43
- pymatviz>=0.14
44
- seaborn>=0.13.2
47
+ smact[mp]
48
+ smact[visualisation]
45
49
  pymatgen>=2024.2.20
46
50
  matminer>=0.9.2
47
51
  kaleido>=0.2.1
@@ -49,22 +53,25 @@ ase>=3.22.0
49
53
  llvmlite>=0.40
50
54
  ElementEmbeddings>=0.4
51
55
  dash>=2.18.2
56
+ smact[ml]
57
+ pandarallel>=1.6.5
58
+ matplotlib-venn[shapely]>=1.1.2
52
59
 
53
60
  [strict]
54
61
  pydantic==2.9.2
55
- mp-api==0.42.2
56
- pymatviz==0.14
62
+ mp-api==0.45.5
63
+ pymatviz==0.15.1
57
64
  seaborn==0.13.2
58
- pymatgen==2024.11.13
59
- matminer==0.9.2
60
- umap-learn==0.5.3
65
+ pymatgen==2025.4.24
66
+ matminer==0.9.3
67
+ umap-learn==0.5.7
61
68
  kaleido==0.2.1
62
- ase==3.23.0
69
+ ase==3.24.0
63
70
  numpy
64
71
  ElementEmbeddings==0.6.1
65
- dash==2.18.2
72
+ dash==3.0.2
66
73
 
67
74
  [visualisation]
68
- seaborn
69
- pymatviz
70
- dash
75
+ seaborn>=0.13.2
76
+ pymatviz>=0.15
77
+ dash>=2.18.2
@@ -1,11 +1,12 @@
1
1
  [build-system]
2
2
  # Minimum requirements for the build system to execute.
3
- requires = ["setuptools>=65.0.0"] # PEP 508 specifications.
3
+ requires = ["setuptools>=77.0.0",
4
+ "oldest-supported-numpy"] # PEP 508 specifications.
4
5
  build-backend = "setuptools.build_meta"
5
6
 
6
7
  [project]
7
8
  name = "SMACT"
8
- version = "3.0.1"
9
+ version = "3.2.0"
9
10
  description = "Semiconducting Materials by Analogy and Chemical Theory"
10
11
  readme = "README.md"
11
12
  authors = [
@@ -17,16 +18,16 @@ maintainers = [
17
18
  classifiers = [
18
19
  "Development Status :: 5 - Production/Stable",
19
20
  "Intended Audience :: Science/Research",
20
- "License :: OSI Approved :: MIT License",
21
21
  "Operating System :: OS Independent",
22
22
  "Programming Language :: Python :: 3",
23
23
  "Programming Language :: Python :: 3.10",
24
24
  "Programming Language :: Python :: 3.11",
25
25
  "Programming Language :: Python :: 3.12",
26
+ "Programming Language :: Python :: 3.13",
26
27
  "Topic :: Scientific/Engineering",
27
28
  "Topic :: Scientific/Engineering :: Chemistry",
28
29
  ]
29
- requires-python = ">=3.10"
30
+ requires-python = ">=3.10,<3.14"
30
31
  keywords = [
31
32
  "python",
32
33
  "machine-learning",
@@ -40,14 +41,16 @@ keywords = [
40
41
  dependencies = [
41
42
  "ase",
42
43
  "numpy<3",
44
+ "pandarallel[optional]>=1.6.5",
43
45
  "pandas",
44
46
  "pathos",
45
47
  "pymatgen>=2024.2.20",
46
48
  "scipy",
47
- "spglib",
49
+ "spglib>=2.6.0",
48
50
  "typing-extensions",
49
51
  ]
50
- license = {text = "MIT"}
52
+ license = "MIT"
53
+ license-files = ["LICENSE"]
51
54
 
52
55
  [project.urls]
53
56
  Homepage = "https://github.com/WMD-group/SMACT"
@@ -73,30 +76,25 @@ docs = [
73
76
  "sphinx-book-theme==1.1.3",
74
77
  "myst-nb==1.1.2"
75
78
  ]
76
- mp = ["mp-api"]
77
-
78
- crystal_space = ["mp-api",
79
- "ElementEmbeddings",
80
- "umap-learn==0.5.3",
81
- "kaleido",
82
- "pydantic<2.10.0"]
83
-
79
+ mp = ["mp-api>=0.45.3"]
80
+ crystal_space = ["smact[mp]",
81
+ "ElementEmbeddings>=0.4",
82
+ "umap-learn==0.5.7",
83
+ "kaleido>=0.2.1",]
84
84
  featurisers = [
85
85
  "matminer",
86
86
  "ElementEmbeddings",
87
87
  ]
88
-
89
88
  visualisation = [
90
- "seaborn",
91
- "pymatviz",
92
- "dash",
89
+ "seaborn>=0.13.2",
90
+ "pymatviz>=0.15",
91
+ "dash>=2.18.2",
93
92
  ]
94
-
93
+ ml = ["xgboost","shap","smact[featurisers]"]
95
94
  optional = [
96
95
  "pydantic>=2.9.2",
97
- "mp-api>=0.42.2",
98
- "pymatviz>=0.14",
99
- "seaborn>=0.13.2",
96
+ "smact[mp]",
97
+ "smact[visualisation]",
100
98
  "pymatgen>=2024.2.20",
101
99
  "matminer>=0.9.2",
102
100
  "kaleido>=0.2.1",
@@ -104,26 +102,39 @@ optional = [
104
102
  "llvmlite>=0.40",
105
103
  "ElementEmbeddings>=0.4",
106
104
  "dash>=2.18.2",
107
-
105
+ "smact[ml]",
106
+ "pandarallel>=1.6.5",
107
+ "matplotlib-venn[shapely]>=1.1.2",
108
108
  ]
109
109
  strict = [
110
110
  "pydantic==2.9.2",
111
- "mp-api==0.42.2",
112
- "pymatviz==0.14",
111
+ "mp-api==0.45.5",
112
+ "pymatviz==0.15.1",
113
+ "mp-api==0.45.5",
113
114
  "seaborn==0.13.2",
114
- "pymatgen==2024.11.13",
115
- "matminer==0.9.2",
116
- "umap-learn==0.5.3",
115
+ "pymatgen==2025.4.24",
116
+ "matminer==0.9.3",
117
+ "umap-learn==0.5.7",
117
118
  "kaleido==0.2.1",
118
- "ase==3.23.0",
119
+ "ase==3.24.0",
119
120
  "numpy",
120
121
  "ElementEmbeddings==0.6.1",
121
- "dash==2.18.2",
122
+ "dash==3.0.2",
122
123
  ]
123
124
 
124
- [tool.semantic_release]
125
- version_variable = "setup.py:__version__"
126
- version_source = "tag"
125
+ [tool.setuptools]
126
+ include-package-data = true
127
+
128
+ [tool.setuptools.packages.find]
129
+ where = ["."]
130
+ include = ["smact","smact.*"]
131
+
132
+ [tool.setuptools.package-data]
133
+ "smact" = ["data/*.txt", "data/*.csv", "data/*.data", "data/*.xlsx", "data/*.json", "data/species_rep/*.json"]
134
+
135
+ [tool.pytest.ini_options]
136
+ minversion = 6.0
137
+ testpaths = ["smact/tests"]
127
138
 
128
139
  [tool.ruff]
129
140
  target-version = "py310"
@@ -213,7 +224,7 @@ reportPossiblyUnboundVariable = true
213
224
  reportUnboundVariable = true
214
225
 
215
226
  [tool.codespell]
216
- skip = "*.csv,*/site/*,*/docs/_build/*,paper.md,*dev_docs/*,paper.bib,*.txt,*examples/Structure_Prediction/Li-Garnets_SP-Pym-new.ipynb"
227
+ skip = "*.csv,*/site/*,*/docs/_build/*,docs/tutorials/data/*,paper.md,*dev_docs/*,paper.bib,*.txt,*examples/Structure_Prediction/Li-Garnets_SP-Pym-new.ipynb"
217
228
  check-filenames = true
218
229
  ignore-regex = "[A-Za-z0-9+/]{100,}"
219
230
 
@@ -319,3 +330,37 @@ ignore-words-list = [
319
330
  "assertIn",
320
331
  "Mater",
321
332
  ]
333
+ [tool.coverage.report]
334
+ exclude_also = [
335
+ 'def __repr__',
336
+ 'if self.debug:',
337
+ 'if settings.DEBUG',
338
+ 'raise AssertionError',
339
+ 'raise NotImplementedError',
340
+ 'if 0:',
341
+ 'if __name__ == .__main__.:',
342
+ 'if TYPE_CHECKING:',
343
+ 'class .*\bProtocol\):',
344
+ '@(abc\.)?abstractmethod',
345
+ ]
346
+
347
+ [dependency-groups]
348
+ dev = [
349
+ "jupyter>=1.1.1",
350
+ "jupyter-client>=8.6.3",
351
+ "notebook>=7.3.3",
352
+ "blacken-docs>=1.19.1",
353
+ "codespell>=2.4.1",
354
+ "ipykernel>=6.29.5",
355
+ "myst-nb==1.1.2",
356
+ "nbstripout>=0.8.1",
357
+ "pre-commit>=4.2.0",
358
+ "pyright>=1.1.398",
359
+ "pytest>=8.3.5",
360
+ "pytest-cov>=6.1.0",
361
+ "readthedocs-sphinx-search==0.3.2",
362
+ "ruff>=0.11.2",
363
+ "sphinx==8.1.3",
364
+ "sphinx-book-theme==1.1.3",
365
+ "sphinx-rtd-theme==3.0.2",
366
+ ]
@@ -0,0 +1 @@
1
+ """SMACT benchmarking."""