SMACT 3.0__tar.gz → 3.1.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 (78) hide show
  1. {smact-3.0/SMACT.egg-info → smact-3.1.0}/PKG-INFO +35 -31
  2. {smact-3.0 → smact-3.1.0}/README.md +1 -1
  3. {smact-3.0 → smact-3.1.0/SMACT.egg-info}/PKG-INFO +35 -31
  4. {smact-3.0 → smact-3.1.0}/SMACT.egg-info/SOURCES.txt +13 -3
  5. {smact-3.0 → smact-3.1.0}/SMACT.egg-info/requires.txt +28 -22
  6. {smact-3.0 → smact-3.1.0}/pyproject.toml +80 -36
  7. smact-3.1.0/smact/benchmarking/__init__.py +1 -0
  8. smact-3.1.0/smact/benchmarking/pymatgen_benchmark.py +40 -0
  9. smact-3.1.0/smact/benchmarking/smact_benchmark.py +33 -0
  10. smact-3.1.0/smact/benchmarking/utilities.py +45 -0
  11. smact-3.1.0/smact/data/species_rep/ion_embedding_M3GNet-MP-2023.11.1-oxi-Eform_cosine_similarity.json +66051 -0
  12. smact-3.1.0/smact/data/species_rep/ion_embedding_M3GNet-MP-2023.11.1-oxi-band_gap_cosine_similarity.json +65538 -0
  13. {smact-3.0 → smact-3.1.0}/smact/data_loader.py +11 -11
  14. {smact-3.0 → smact-3.1.0}/smact/dopant_prediction/doper.py +64 -121
  15. smact-3.1.0/smact/metallicity.py +157 -0
  16. {smact-3.0 → smact-3.1.0}/smact/oxidation_states.py +1 -1
  17. {smact-3.0 → smact-3.1.0}/smact/screening.py +69 -79
  18. {smact-3.0 → smact-3.1.0}/smact/structure_prediction/structure.py +1 -1
  19. {smact-3.0 → smact-3.1.0}/smact/tests/test_core.py +114 -13
  20. {smact-3.0 → smact-3.1.0}/smact/tests/test_doper.py +10 -0
  21. smact-3.1.0/smact/tests/test_metallicity.py +172 -0
  22. {smact-3.0 → smact-3.1.0}/smact/tests/test_structure.py +19 -2
  23. {smact-3.0 → smact-3.1.0}/smact/tests/test_utils.py +134 -31
  24. smact-3.1.0/smact/utils/crystal_space/__init__.py +1 -0
  25. smact-3.1.0/smact/utils/crystal_space/download_compounds_with_mp_api.py +96 -0
  26. smact-3.1.0/smact/utils/crystal_space/generate_composition_with_smact.py +144 -0
  27. smact-3.1.0/smact/utils/crystal_space/plot_embedding.py +159 -0
  28. {smact-3.0 → smact-3.1.0}/smact/utils/oxidation.py +70 -20
  29. smact-3.0/SMACT.egg-info/not-zip-safe +0 -1
  30. smact-3.0/setup.py +0 -80
  31. {smact-3.0 → smact-3.1.0}/LICENSE +0 -0
  32. {smact-3.0 → smact-3.1.0}/MANIFEST.in +0 -0
  33. {smact-3.0 → smact-3.1.0}/SMACT.egg-info/dependency_links.txt +0 -0
  34. {smact-3.0 → smact-3.1.0}/SMACT.egg-info/top_level.txt +0 -0
  35. {smact-3.0 → smact-3.1.0}/setup.cfg +0 -0
  36. {smact-3.0 → smact-3.1.0}/smact/__init__.py +0 -0
  37. {smact-3.0 → smact-3.1.0}/smact/builder.py +0 -0
  38. {smact-3.0 → smact-3.1.0}/smact/data/Covalent_radii.csv +0 -0
  39. {smact-3.0 → smact-3.1.0}/smact/data/SSE.csv +0 -0
  40. {smact-3.0 → smact-3.1.0}/smact/data/SSE_2015.csv +0 -0
  41. {smact-3.0 → smact-3.1.0}/smact/data/SSE_Pauling.csv +0 -0
  42. {smact-3.0 → smact-3.1.0}/smact/data/element_data.txt +0 -0
  43. {smact-3.0 → smact-3.1.0}/smact/data/element_valence_modified.csv +0 -0
  44. {smact-3.0 → smact-3.1.0}/smact/data/hhi.txt +0 -0
  45. {smact-3.0 → smact-3.1.0}/smact/data/ionic_radii.csv +0 -0
  46. {smact-3.0 → smact-3.1.0}/smact/data/magpie.csv +0 -0
  47. {smact-3.0 → smact-3.1.0}/smact/data/ordered_periodic.txt +0 -0
  48. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_state_probability_table.json +0 -0
  49. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states.txt +0 -0
  50. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states_SP.txt +0 -0
  51. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states_icsd.txt +0 -0
  52. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states_icsd24_common.txt +0 -0
  53. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states_icsd24_counts.json +0 -0
  54. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states_icsd24_filtered.txt +0 -0
  55. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states_icsd24_raw.txt +0 -0
  56. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states_pmg.txt +0 -0
  57. {smact-3.0 → smact-3.1.0}/smact/data/oxidation_states_wiki.txt +0 -0
  58. {smact-3.0 → smact-3.1.0}/smact/data/shannon_radii.csv +0 -0
  59. {smact-3.0 → smact-3.1.0}/smact/data/shannon_radii_ML_extended.csv +0 -0
  60. {smact-3.0 → smact-3.1.0}/smact/data/solid_properties.txt +0 -0
  61. {smact-3.0 → smact-3.1.0}/smact/data/solid_properties.xlsx +0 -0
  62. {smact-3.0 → smact-3.1.0}/smact/data/species_rep/skipspecies_20221028_319ion_dim200_cosine_similarity.json +0 -0
  63. {smact-3.0 → smact-3.1.0}/smact/distorter.py +0 -0
  64. {smact-3.0 → smact-3.1.0}/smact/dopant_prediction/__init__.py +0 -0
  65. {smact-3.0 → smact-3.1.0}/smact/lattice.py +0 -0
  66. {smact-3.0 → smact-3.1.0}/smact/lattice_parameters.py +0 -0
  67. {smact-3.0 → smact-3.1.0}/smact/mainpage.py +0 -0
  68. {smact-3.0 → smact-3.1.0}/smact/properties.py +0 -0
  69. {smact-3.0 → smact-3.1.0}/smact/structure_prediction/__init__.py +0 -0
  70. {smact-3.0 → smact-3.1.0}/smact/structure_prediction/database.py +0 -0
  71. {smact-3.0 → smact-3.1.0}/smact/structure_prediction/mutation.py +0 -0
  72. {smact-3.0 → smact-3.1.0}/smact/structure_prediction/prediction.py +0 -0
  73. {smact-3.0 → smact-3.1.0}/smact/structure_prediction/probability_models.py +0 -0
  74. {smact-3.0 → smact-3.1.0}/smact/structure_prediction/utilities.py +0 -0
  75. {smact-3.0 → smact-3.1.0}/smact/tests/__init__.py +0 -0
  76. {smact-3.0 → smact-3.1.0}/smact/utils/__init__.py +0 -0
  77. {smact-3.0 → smact-3.1.0}/smact/utils/band_gap_simple.py +0 -0
  78. {smact-3.0 → smact-3.1.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
3
+ Version: 3.1.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,46 +48,52 @@ 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
- Requires-Dist: umap-learn>=0.5.3; extra == "optional"
75
74
  Requires-Dist: kaleido>=0.2.1; extra == "optional"
76
75
  Requires-Dist: ase>=3.22.0; extra == "optional"
77
- Requires-Dist: numpy; extra == "optional"
76
+ Requires-Dist: llvmlite>=0.40; extra == "optional"
78
77
  Requires-Dist: ElementEmbeddings>=0.4; extra == "optional"
79
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"
80
82
  Provides-Extra: strict
81
83
  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: mp-api==0.45.3; extra == "strict"
85
+ Requires-Dist: pymatviz==0.15.1; extra == "strict"
86
+ Requires-Dist: mp-api==0.45.3; extra == "strict"
84
87
  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: pymatgen==2025.3.10; extra == "strict"
89
+ Requires-Dist: matminer==0.9.3; extra == "strict"
90
+ Requires-Dist: umap-learn==0.5.7; extra == "strict"
88
91
  Requires-Dist: kaleido==0.2.1; extra == "strict"
89
- Requires-Dist: ase==3.23.0; extra == "strict"
92
+ Requires-Dist: ase==3.24.0; extra == "strict"
90
93
  Requires-Dist: numpy; extra == "strict"
91
94
  Requires-Dist: ElementEmbeddings==0.6.1; extra == "strict"
92
- Requires-Dist: dash==2.18.2; extra == "strict"
95
+ Requires-Dist: dash==3.0.2; extra == "strict"
96
+ Dynamic: license-file
93
97
 
94
98
  [![DOI](https://joss.theoj.org/papers/10.21105/joss.01361/status.svg)](https://doi.org/10.21105/joss.01361)
95
99
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5553202.svg)](https://doi.org/10.5281/zenodo.5553202)
@@ -174,7 +178,7 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
174
178
 
175
179
  ## Requirements
176
180
 
177
- The main language is Python 3 and has been tested using Python 3.10+.
181
+ 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).
178
182
  Basic requirements are Numpy and Scipy.
179
183
  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
184
 
@@ -81,7 +81,7 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
81
81
 
82
82
  ## Requirements
83
83
 
84
- The main language is Python 3 and has been tested using Python 3.10+.
84
+ 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
85
  Basic requirements are Numpy and Scipy.
86
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
87
 
@@ -1,13 +1,10 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: SMACT
3
- Version: 3.0
3
+ Version: 3.1.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,46 +48,52 @@ 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
- Requires-Dist: umap-learn>=0.5.3; extra == "optional"
75
74
  Requires-Dist: kaleido>=0.2.1; extra == "optional"
76
75
  Requires-Dist: ase>=3.22.0; extra == "optional"
77
- Requires-Dist: numpy; extra == "optional"
76
+ Requires-Dist: llvmlite>=0.40; extra == "optional"
78
77
  Requires-Dist: ElementEmbeddings>=0.4; extra == "optional"
79
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"
80
82
  Provides-Extra: strict
81
83
  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: mp-api==0.45.3; extra == "strict"
85
+ Requires-Dist: pymatviz==0.15.1; extra == "strict"
86
+ Requires-Dist: mp-api==0.45.3; extra == "strict"
84
87
  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: pymatgen==2025.3.10; extra == "strict"
89
+ Requires-Dist: matminer==0.9.3; extra == "strict"
90
+ Requires-Dist: umap-learn==0.5.7; extra == "strict"
88
91
  Requires-Dist: kaleido==0.2.1; extra == "strict"
89
- Requires-Dist: ase==3.23.0; extra == "strict"
92
+ Requires-Dist: ase==3.24.0; extra == "strict"
90
93
  Requires-Dist: numpy; extra == "strict"
91
94
  Requires-Dist: ElementEmbeddings==0.6.1; extra == "strict"
92
- Requires-Dist: dash==2.18.2; extra == "strict"
95
+ Requires-Dist: dash==3.0.2; extra == "strict"
96
+ Dynamic: license-file
93
97
 
94
98
  [![DOI](https://joss.theoj.org/papers/10.21105/joss.01361/status.svg)](https://doi.org/10.21105/joss.01361)
95
99
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5553202.svg)](https://doi.org/10.5281/zenodo.5553202)
@@ -174,7 +178,7 @@ Use cases are available in our [examples](https://smact.readthedocs.io/en/latest
174
178
 
175
179
  ## Requirements
176
180
 
177
- The main language is Python 3 and has been tested using Python 3.10+.
181
+ 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).
178
182
  Basic requirements are Numpy and Scipy.
179
183
  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
184
 
@@ -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
@@ -43,6 +46,8 @@ smact/data/shannon_radii.csv
43
46
  smact/data/shannon_radii_ML_extended.csv
44
47
  smact/data/solid_properties.txt
45
48
  smact/data/solid_properties.xlsx
49
+ smact/data/species_rep/ion_embedding_M3GNet-MP-2023.11.1-oxi-Eform_cosine_similarity.json
50
+ smact/data/species_rep/ion_embedding_M3GNet-MP-2023.11.1-oxi-band_gap_cosine_similarity.json
46
51
  smact/data/species_rep/skipspecies_20221028_319ion_dim200_cosine_similarity.json
47
52
  smact/dopant_prediction/__init__.py
48
53
  smact/dopant_prediction/doper.py
@@ -56,9 +61,14 @@ smact/structure_prediction/utilities.py
56
61
  smact/tests/__init__.py
57
62
  smact/tests/test_core.py
58
63
  smact/tests/test_doper.py
64
+ smact/tests/test_metallicity.py
59
65
  smact/tests/test_structure.py
60
66
  smact/tests/test_utils.py
61
67
  smact/utils/__init__.py
62
68
  smact/utils/band_gap_simple.py
63
69
  smact/utils/composition.py
64
- 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,38 +34,44 @@ 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
- umap-learn>=0.5.3
48
51
  kaleido>=0.2.1
49
52
  ase>=3.22.0
50
- numpy
53
+ llvmlite>=0.40
51
54
  ElementEmbeddings>=0.4
52
55
  dash>=2.18.2
56
+ smact[ml]
57
+ pandarallel>=1.6.5
58
+ matplotlib-venn[shapely]>=1.1.2
53
59
 
54
60
  [strict]
55
61
  pydantic==2.9.2
56
- mp-api==0.42.2
57
- pymatviz==0.14
62
+ mp-api==0.45.3
63
+ pymatviz==0.15.1
58
64
  seaborn==0.13.2
59
- pymatgen==2024.11.13
60
- matminer==0.9.2
61
- umap-learn==0.5.3
65
+ pymatgen==2025.3.10
66
+ matminer==0.9.3
67
+ umap-learn==0.5.7
62
68
  kaleido==0.2.1
63
- ase==3.23.0
69
+ ase==3.24.0
64
70
  numpy
65
71
  ElementEmbeddings==0.6.1
66
- dash==2.18.2
72
+ dash==3.0.2
67
73
 
68
74
  [visualisation]
69
- seaborn
70
- pymatviz
71
- 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"
9
+ version = "3.1.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,58 +76,65 @@ 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
- "umap-learn>=0.5.3",
103
100
  "kaleido>=0.2.1",
104
101
  "ase>=3.22.0",
105
- "numpy",
102
+ "llvmlite>=0.40",
106
103
  "ElementEmbeddings>=0.4",
107
104
  "dash>=2.18.2",
108
-
105
+ "smact[ml]",
106
+ "pandarallel>=1.6.5",
107
+ "matplotlib-venn[shapely]>=1.1.2",
109
108
  ]
110
109
  strict = [
111
110
  "pydantic==2.9.2",
112
- "mp-api==0.42.2",
113
- "pymatviz==0.14",
111
+ "mp-api==0.45.3",
112
+ "pymatviz==0.15.1",
113
+ "mp-api==0.45.3",
114
114
  "seaborn==0.13.2",
115
- "pymatgen==2024.11.13",
116
- "matminer==0.9.2",
117
- "umap-learn==0.5.3",
115
+ "pymatgen==2025.3.10",
116
+ "matminer==0.9.3",
117
+ "umap-learn==0.5.7",
118
118
  "kaleido==0.2.1",
119
- "ase==3.23.0",
119
+ "ase==3.24.0",
120
120
  "numpy",
121
121
  "ElementEmbeddings==0.6.1",
122
- "dash==2.18.2",
122
+ "dash==3.0.2",
123
123
  ]
124
124
 
125
- [tool.semantic_release]
126
- version_variable = "setup.py:__version__"
127
- 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"]
128
138
 
129
139
  [tool.ruff]
130
140
  target-version = "py310"
@@ -214,7 +224,7 @@ reportPossiblyUnboundVariable = true
214
224
  reportUnboundVariable = true
215
225
 
216
226
  [tool.codespell]
217
- 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"
218
228
  check-filenames = true
219
229
  ignore-regex = "[A-Za-z0-9+/]{100,}"
220
230
 
@@ -320,3 +330,37 @@ ignore-words-list = [
320
330
  "assertIn",
321
331
  "Mater",
322
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."""
@@ -0,0 +1,40 @@
1
+ """Benchmarking functions for pymatgen."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from itertools import combinations_with_replacement as cwr
6
+
7
+ from pymatgen.analysis.structure_prediction.substitution_probability import (
8
+ SubstitutionProbability,
9
+ )
10
+
11
+ from .utilities import timeit
12
+
13
+
14
+ class ProbabilityBenchmarker:
15
+ """Benchmarking tests for pymatgen SubstitutionProbability."""
16
+
17
+ @timeit
18
+ def run_tests(self):
19
+ """Run all tests."""
20
+ self.__sp_setup()
21
+ self.__pair_corr()
22
+
23
+ @timeit
24
+ def __sp_setup(self):
25
+ """Set up SubstitutionProbability."""
26
+ self.sp = SubstitutionProbability()
27
+
28
+ @timeit
29
+ def __pair_corr(self):
30
+ """Get pair correlation."""
31
+ pairs = cwr(self.sp.species, 2)
32
+
33
+ for s1, s2 in pairs:
34
+ self.sp.pair_corr(s1, s2)
35
+
36
+
37
+ @timeit(delim=True, n=100)
38
+ def probability_test_run():
39
+ """Run all tests."""
40
+ ProbabilityBenchmarker().run_tests()
@@ -0,0 +1,33 @@
1
+ """SMACT benchmarking."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from smact.structure_prediction.mutation import CationMutator
6
+
7
+ from .utilities import timeit
8
+
9
+
10
+ class MutatorBenchmarker:
11
+ """Benchmarking tests for CationMutator."""
12
+
13
+ @timeit
14
+ def run_tests(self):
15
+ """Initialize Mutator and perform tests."""
16
+ self.__cm_setup()
17
+ self.__pair_corr()
18
+
19
+ @timeit
20
+ def __cm_setup(self) -> CationMutator:
21
+ """Create a CationMutator."""
22
+ self.cm = CationMutator.from_json()
23
+
24
+ @timeit
25
+ def __pair_corr(self):
26
+ """Get pair correlations."""
27
+ self.cm.complete_pair_corrs()
28
+
29
+
30
+ @timeit(delim=True, n=100)
31
+ def mutator_test_run():
32
+ """Run benchmark tests for CationMutator."""
33
+ MutatorBenchmarker().run_tests()