structuretoolkit 0.0.26__tar.gz → 0.0.28__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.
- {structuretoolkit-0.0.26/structuretoolkit.egg-info → structuretoolkit-0.0.28}/PKG-INFO +13 -13
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/pyproject.toml +12 -12
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/setup.py +2 -3
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/__init__.py +43 -23
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/_version.py +3 -3
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/distance.py +14 -10
- structuretoolkit-0.0.28/structuretoolkit/analyse/dscribe.py +75 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/neighbors.py +321 -91
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/phonopy.py +18 -11
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/pyscal.py +51 -77
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/snap.py +13 -3
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/spatial.py +92 -4
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/strain.py +115 -6
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/symmetry.py +167 -10
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/__init__.py +3 -6
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/aimsgb.py +4 -2
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/compound.py +11 -2
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/mesh.py +7 -6
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/random.py +3 -6
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/sqs.py +106 -12
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/surface.py +9 -20
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/__init__.py +2 -2
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/helper.py +40 -2
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/pyscal.py +2 -6
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/visualize.py +27 -6
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28/structuretoolkit.egg-info}/PKG-INFO +13 -13
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit.egg-info/SOURCES.txt +4 -0
- structuretoolkit-0.0.28/structuretoolkit.egg-info/requires.txt +39 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_aimsgb.py +2 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_analyse.py +5 -5
- structuretoolkit-0.0.28/tests/test_analyse_distance.py +20 -0
- structuretoolkit-0.0.28/tests/test_analyse_phonopy.py +32 -0
- structuretoolkit-0.0.28/tests/test_analyse_symmetry.py +137 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_compound.py +3 -1
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_dscribe.py +8 -4
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_helpers.py +3 -3
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_high_index_surface.py +1 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_mesh.py +3 -3
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_neighbors.py +4 -2
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_pymatgen.py +14 -13
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_pyscal.py +8 -9
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_pyxtal.py +8 -5
- structuretoolkit-0.0.28/tests/test_snap.py +803 -0
- structuretoolkit-0.0.28/tests/test_sqs.py +78 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_strain.py +2 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_symmetry.py +39 -10
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_visualize.py +5 -6
- structuretoolkit-0.0.26/structuretoolkit/analyse/dscribe.py +0 -49
- structuretoolkit-0.0.26/structuretoolkit.egg-info/requires.txt +0 -39
- structuretoolkit-0.0.26/tests/test_snap.py +0 -367
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/LICENSE +0 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/MANIFEST.in +0 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/README.md +0 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/setup.cfg +0 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/__init__.py +5 -5
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/error.py +0 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/phonopy.py +0 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/pymatgen.py +0 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit.egg-info/dependency_links.txt +0 -0
- {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: structuretoolkit
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.28
|
|
4
4
|
Summary: build, analyse and visualise atomistic structures for materials science
|
|
5
5
|
Author-email: Jan Janssen <janssen@mpie.de>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -51,32 +51,32 @@ Description-Content-Type: text/markdown
|
|
|
51
51
|
License-File: LICENSE
|
|
52
52
|
Requires-Dist: ase<=3.23.0,>=3.20.1
|
|
53
53
|
Requires-Dist: numpy<=1.26.4,>=1.23.5
|
|
54
|
-
Requires-Dist: scipy<=1.14.
|
|
54
|
+
Requires-Dist: scipy<=1.14.1,>=1.9.3
|
|
55
55
|
Provides-Extra: dscribe
|
|
56
56
|
Requires-Dist: dscribe==2.1.1; extra == "dscribe"
|
|
57
57
|
Provides-Extra: grainboundary
|
|
58
58
|
Requires-Dist: aimsgb<=1.1.1,>=1.0.2; extra == "grainboundary"
|
|
59
|
-
Requires-Dist: pymatgen<=2024.
|
|
59
|
+
Requires-Dist: pymatgen<=2024.8.9,>=2022.2.1; extra == "grainboundary"
|
|
60
60
|
Provides-Extra: pyscal
|
|
61
|
-
Requires-Dist:
|
|
61
|
+
Requires-Dist: pyscal3<=3.2.7,>=3.2.5; extra == "pyscal"
|
|
62
62
|
Provides-Extra: nglview
|
|
63
63
|
Requires-Dist: nglview<=3.1.2,>=2.7.7; extra == "nglview"
|
|
64
64
|
Provides-Extra: matplotlib
|
|
65
|
-
Requires-Dist: matplotlib==3.
|
|
65
|
+
Requires-Dist: matplotlib==3.9.2; extra == "matplotlib"
|
|
66
66
|
Provides-Extra: plotly
|
|
67
|
-
Requires-Dist: plotly<=5.
|
|
67
|
+
Requires-Dist: plotly<=5.23.0,>=4.14.3; extra == "plotly"
|
|
68
68
|
Provides-Extra: clusters
|
|
69
|
-
Requires-Dist: scikit-learn==1.5.
|
|
69
|
+
Requires-Dist: scikit-learn==1.5.1; extra == "clusters"
|
|
70
70
|
Provides-Extra: symmetry
|
|
71
|
-
Requires-Dist: spglib<=2.
|
|
71
|
+
Requires-Dist: spglib<=2.5.0,>=1.16.5; extra == "symmetry"
|
|
72
72
|
Provides-Extra: surface
|
|
73
|
-
Requires-Dist: spglib<=2.
|
|
74
|
-
Requires-Dist: pymatgen<=2024.
|
|
73
|
+
Requires-Dist: spglib<=2.5.0,>=1.16.5; extra == "surface"
|
|
74
|
+
Requires-Dist: pymatgen<=2024.8.9,>=2022.2.1; extra == "surface"
|
|
75
75
|
Provides-Extra: phonopy
|
|
76
|
-
Requires-Dist: phonopy<=2.
|
|
77
|
-
Requires-Dist: spglib<=2.
|
|
76
|
+
Requires-Dist: phonopy<=2.26.6,>=2.16.2; extra == "phonopy"
|
|
77
|
+
Requires-Dist: spglib<=2.5.0,>=1.16.5; extra == "phonopy"
|
|
78
78
|
Provides-Extra: pyxtal
|
|
79
|
-
Requires-Dist: pyxtal<=0.
|
|
79
|
+
Requires-Dist: pyxtal<=1.0.2,>=0.5.5; extra == "pyxtal"
|
|
80
80
|
|
|
81
81
|
# structuretoolkit
|
|
82
82
|
|
|
@@ -26,7 +26,7 @@ classifiers = [
|
|
|
26
26
|
dependencies = [
|
|
27
27
|
"ase>=3.20.1,<=3.23.0",
|
|
28
28
|
"numpy>=1.23.5,<=1.26.4",
|
|
29
|
-
"scipy>=1.9.3,<=1.14.
|
|
29
|
+
"scipy>=1.9.3,<=1.14.1",
|
|
30
30
|
]
|
|
31
31
|
dynamic = ["version"]
|
|
32
32
|
|
|
@@ -39,23 +39,23 @@ Repository = "https://github.com/pyiron/structuretoolkit"
|
|
|
39
39
|
dscribe = ["dscribe==2.1.1"]
|
|
40
40
|
grainboundary = [
|
|
41
41
|
"aimsgb>=1.0.2,<=1.1.1",
|
|
42
|
-
"pymatgen>=2022.2.1,<=2024.
|
|
42
|
+
"pymatgen>=2022.2.1,<=2024.8.9",
|
|
43
43
|
]
|
|
44
|
-
pyscal = ["
|
|
44
|
+
pyscal = ["pyscal3>=3.2.5,<=3.2.7"]
|
|
45
45
|
nglview = ["nglview>=2.7.7,<=3.1.2"]
|
|
46
|
-
matplotlib = ["matplotlib==3.
|
|
47
|
-
plotly = ["plotly>=4.14.3,<=5.
|
|
48
|
-
clusters = ["scikit-learn==1.5.
|
|
49
|
-
symmetry = ["spglib>=1.16.5,<=2.
|
|
46
|
+
matplotlib = ["matplotlib==3.9.2"]
|
|
47
|
+
plotly = ["plotly>=4.14.3,<=5.23.0"]
|
|
48
|
+
clusters = ["scikit-learn==1.5.1"]
|
|
49
|
+
symmetry = ["spglib>=1.16.5,<=2.5.0"]
|
|
50
50
|
surface = [
|
|
51
|
-
"spglib>=1.16.5,<=2.
|
|
52
|
-
"pymatgen>=2022.2.1,<=2024.
|
|
51
|
+
"spglib>=1.16.5,<=2.5.0",
|
|
52
|
+
"pymatgen>=2022.2.1,<=2024.8.9",
|
|
53
53
|
]
|
|
54
54
|
phonopy = [
|
|
55
|
-
"phonopy>=2.16.2,<=2.
|
|
56
|
-
"spglib>=1.16.5,<=2.
|
|
55
|
+
"phonopy>=2.16.2,<=2.26.6",
|
|
56
|
+
"spglib>=1.16.5,<=2.5.0",
|
|
57
57
|
]
|
|
58
|
-
pyxtal = ["pyxtal>=0.5.5,<=0.
|
|
58
|
+
pyxtal = ["pyxtal>=0.5.5,<=1.0.2"]
|
|
59
59
|
|
|
60
60
|
[tool.setuptools.packages.find]
|
|
61
61
|
include = ["structuretoolkit*"]
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from . import _version
|
|
2
|
-
|
|
3
1
|
# Analyse
|
|
4
2
|
from structuretoolkit.analyse import (
|
|
5
3
|
find_mic,
|
|
@@ -25,6 +23,32 @@ from structuretoolkit.analyse import (
|
|
|
25
23
|
get_voronoi_volumes,
|
|
26
24
|
)
|
|
27
25
|
|
|
26
|
+
# Analyse - for backwards compatibility
|
|
27
|
+
from structuretoolkit.analyse import (
|
|
28
|
+
find_solids as analyse_find_solids,
|
|
29
|
+
)
|
|
30
|
+
from structuretoolkit.analyse import (
|
|
31
|
+
get_adaptive_cna_descriptors as analyse_cna_adaptive,
|
|
32
|
+
)
|
|
33
|
+
from structuretoolkit.analyse import (
|
|
34
|
+
get_centro_symmetry_descriptors as analyse_centro_symmetry,
|
|
35
|
+
)
|
|
36
|
+
from structuretoolkit.analyse import (
|
|
37
|
+
get_cluster_positions as cluster_positions,
|
|
38
|
+
)
|
|
39
|
+
from structuretoolkit.analyse import (
|
|
40
|
+
get_diamond_structure_descriptors as analyse_diamond_structure,
|
|
41
|
+
)
|
|
42
|
+
from structuretoolkit.analyse import (
|
|
43
|
+
get_equivalent_atoms as analyse_phonopy_equivalent_atoms,
|
|
44
|
+
)
|
|
45
|
+
from structuretoolkit.analyse import (
|
|
46
|
+
get_steinhardt_parameters as get_steinhardt_parameter_structure,
|
|
47
|
+
)
|
|
48
|
+
from structuretoolkit.analyse import (
|
|
49
|
+
get_voronoi_volumes as analyse_voronoi_volume,
|
|
50
|
+
)
|
|
51
|
+
|
|
28
52
|
# Build
|
|
29
53
|
from structuretoolkit.build import (
|
|
30
54
|
B2,
|
|
@@ -32,12 +56,26 @@ from structuretoolkit.build import (
|
|
|
32
56
|
C15,
|
|
33
57
|
C36,
|
|
34
58
|
D03,
|
|
59
|
+
create_mesh,
|
|
35
60
|
get_grainboundary_info,
|
|
36
61
|
get_high_index_surface_info,
|
|
37
62
|
grainboundary,
|
|
38
63
|
high_index_surface,
|
|
39
64
|
sqs_structures,
|
|
40
|
-
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Build - for backwards compatibility
|
|
68
|
+
from structuretoolkit.build import (
|
|
69
|
+
get_grainboundary_info as grainboundary_info,
|
|
70
|
+
)
|
|
71
|
+
from structuretoolkit.build import (
|
|
72
|
+
get_high_index_surface_info as high_index_surface_info,
|
|
73
|
+
)
|
|
74
|
+
from structuretoolkit.build import (
|
|
75
|
+
grainboundary as grainboundary_build,
|
|
76
|
+
)
|
|
77
|
+
from structuretoolkit.build import (
|
|
78
|
+
sqs_structures as get_sqs_structures,
|
|
41
79
|
)
|
|
42
80
|
|
|
43
81
|
# Common
|
|
@@ -47,35 +85,17 @@ from structuretoolkit.common import (
|
|
|
47
85
|
ase_to_pymatgen,
|
|
48
86
|
ase_to_pyscal,
|
|
49
87
|
center_coordinates_in_unit_cell,
|
|
88
|
+
get_cell,
|
|
50
89
|
get_extended_positions,
|
|
51
90
|
get_vertical_length,
|
|
52
91
|
get_wrapped_coordinates,
|
|
53
92
|
pymatgen_to_ase,
|
|
54
93
|
select_index,
|
|
55
|
-
get_cell,
|
|
56
94
|
)
|
|
57
95
|
|
|
58
96
|
# Visualize
|
|
59
97
|
from structuretoolkit.visualize import plot3d
|
|
60
98
|
|
|
61
|
-
|
|
62
|
-
from structuretoolkit.analyse import (
|
|
63
|
-
find_solids as analyse_find_solids,
|
|
64
|
-
get_adaptive_cna_descriptors as analyse_cna_adaptive,
|
|
65
|
-
get_centro_symmetry_descriptors as analyse_centro_symmetry,
|
|
66
|
-
get_cluster_positions as cluster_positions,
|
|
67
|
-
get_diamond_structure_descriptors as analyse_diamond_structure,
|
|
68
|
-
get_equivalent_atoms as analyse_phonopy_equivalent_atoms,
|
|
69
|
-
get_steinhardt_parameters as get_steinhardt_parameter_structure,
|
|
70
|
-
get_voronoi_volumes as analyse_voronoi_volume,
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
# Build - for backwards compatibility
|
|
74
|
-
from structuretoolkit.build import (
|
|
75
|
-
get_grainboundary_info as grainboundary_info,
|
|
76
|
-
get_high_index_surface_info as high_index_surface_info,
|
|
77
|
-
grainboundary as grainboundary_build,
|
|
78
|
-
sqs_structures as get_sqs_structures,
|
|
79
|
-
)
|
|
99
|
+
from . import _version
|
|
80
100
|
|
|
81
101
|
__version__ = _version.get_versions()["version"]
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-
|
|
11
|
+
"date": "2024-08-23T10:18:12+0200",
|
|
12
12
|
"dirty": true,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.0.
|
|
14
|
+
"full-revisionid": "654ff39333277ba99eda0c195167d3bc006f56b7",
|
|
15
|
+
"version": "0.0.28"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import numpy as np
|
|
4
|
+
from ase.atoms import Atoms
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
def get_distances_array(
|
|
@@ -9,7 +10,7 @@ def get_distances_array(
|
|
|
9
10
|
p2: Optional[np.ndarray] = None,
|
|
10
11
|
mic: bool = True,
|
|
11
12
|
vectors: bool = False,
|
|
12
|
-
):
|
|
13
|
+
) -> np.ndarray:
|
|
13
14
|
"""
|
|
14
15
|
Return distance matrix of every position in p1 with every position in
|
|
15
16
|
p2. If p2 is not set, it is assumed that distances between all
|
|
@@ -18,13 +19,14 @@ def get_distances_array(
|
|
|
18
19
|
returned.
|
|
19
20
|
|
|
20
21
|
Args:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
structure (ase.atoms.Atoms): The structure object
|
|
23
|
+
p1 (numpy.ndarray/list, optional): Nx3 array of positions. Defaults to None.
|
|
24
|
+
p2 (numpy.ndarray/list, optional): Nx3 array of positions. Defaults to None.
|
|
25
|
+
mic (bool, optional): Minimum image convention. Defaults to True.
|
|
26
|
+
vectors (bool, optional): Return vectors instead of distances. Defaults to False.
|
|
27
|
+
|
|
25
28
|
Returns:
|
|
26
29
|
numpy.ndarray: NxN if vector=False and NxNx3 if vector=True
|
|
27
|
-
|
|
28
30
|
"""
|
|
29
31
|
if p1 is None and p2 is not None:
|
|
30
32
|
p1 = p2
|
|
@@ -47,16 +49,18 @@ def get_distances_array(
|
|
|
47
49
|
return find_mic(structure=structure, v=diff_relative, vectors=vectors)
|
|
48
50
|
|
|
49
51
|
|
|
50
|
-
def find_mic(structure: Atoms, v: np.ndarray, vectors: bool = True):
|
|
52
|
+
def find_mic(structure: Atoms, v: np.ndarray, vectors: bool = True) -> np.ndarray:
|
|
51
53
|
"""
|
|
52
54
|
Find vectors following minimum image convention (mic). In principle this
|
|
53
55
|
function does the same as ase.geometry.find_mic
|
|
54
56
|
|
|
55
57
|
Args:
|
|
56
|
-
|
|
58
|
+
structure (ase.atoms.Atoms): The structure object
|
|
59
|
+
v (numpy.ndarray/list): 3d vector or a list/array of 3d vectors
|
|
57
60
|
vectors (bool): Whether to return vectors (distances are returned if False)
|
|
58
61
|
|
|
59
|
-
Returns:
|
|
62
|
+
Returns:
|
|
63
|
+
numpy.ndarray: numpy.ndarray of the same shape as input with mic
|
|
60
64
|
"""
|
|
61
65
|
if any(structure.pbc):
|
|
62
66
|
v = np.einsum("ji,...j->...i", np.linalg.inv(structure.cell), v)
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
from ase.atoms import Atoms
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def soap_descriptor_per_atom(
|
|
8
|
+
structure: Atoms,
|
|
9
|
+
r_cut: Optional[float] = None,
|
|
10
|
+
n_max: Optional[int] = None,
|
|
11
|
+
l_max: Optional[int] = None,
|
|
12
|
+
sigma: Optional[float] = 1.0,
|
|
13
|
+
rbf: str = "gto",
|
|
14
|
+
weighting: Optional[np.ndarray] = None,
|
|
15
|
+
average: str = "off",
|
|
16
|
+
compression: dict = {"mode": "off", "species_weighting": None},
|
|
17
|
+
species: Optional[list] = None,
|
|
18
|
+
periodic: bool = True,
|
|
19
|
+
sparse: bool = False,
|
|
20
|
+
dtype: str = "float64",
|
|
21
|
+
centers: Optional[np.ndarray] = None,
|
|
22
|
+
n_jobs: int = 1,
|
|
23
|
+
only_physical_cores: bool = False,
|
|
24
|
+
verbose: bool = False,
|
|
25
|
+
) -> np.ndarray:
|
|
26
|
+
"""
|
|
27
|
+
Calculates the SOAP descriptor for each atom in the given structure.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
structure (ase.atoms.Atoms): The atomic structure.
|
|
31
|
+
r_cut (float, optional): The cutoff radius. Defaults to None.
|
|
32
|
+
n_max (int, optional): The maximum number of radial basis functions. Defaults to None.
|
|
33
|
+
l_max (int, optional): The maximum degree of spherical harmonics. Defaults to None.
|
|
34
|
+
sigma (float, optional): The width parameter for the Gaussian-type orbital. Defaults to 1.0.
|
|
35
|
+
rbf (str, optional): The radial basis function. Defaults to "gto".
|
|
36
|
+
weighting (np.ndarray, optional): The weighting coefficients for the radial basis functions. Defaults to None.
|
|
37
|
+
average (str, optional): The type of averaging. Defaults to "off".
|
|
38
|
+
compression (dict, optional): The compression settings. Defaults to {"mode": "off", "species_weighting": None}.
|
|
39
|
+
species (list, optional): The list of chemical symbols. Defaults to None.
|
|
40
|
+
periodic (bool, optional): Whether the system is periodic. Defaults to True.
|
|
41
|
+
sparse (bool, optional): Whether to use sparse matrices. Defaults to False.
|
|
42
|
+
dtype (str, optional): The data type of the output. Defaults to "float64".
|
|
43
|
+
centers (np.ndarray, optional): The centers for the descriptor calculation. Defaults to None.
|
|
44
|
+
n_jobs (int, optional): The number of parallel jobs. Defaults to 1.
|
|
45
|
+
only_physical_cores (bool, optional): Whether to use only physical cores. Defaults to False.
|
|
46
|
+
verbose (bool, optional): Whether to print verbose output. Defaults to False.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
np.ndarray: The SOAP descriptor for each atom.
|
|
50
|
+
"""
|
|
51
|
+
from dscribe.descriptors import SOAP
|
|
52
|
+
|
|
53
|
+
if species is None:
|
|
54
|
+
species = list(set(structure.get_chemical_symbols()))
|
|
55
|
+
periodic_soap = SOAP(
|
|
56
|
+
r_cut=r_cut,
|
|
57
|
+
n_max=n_max,
|
|
58
|
+
l_max=l_max,
|
|
59
|
+
sigma=sigma,
|
|
60
|
+
rbf=rbf,
|
|
61
|
+
weighting=weighting,
|
|
62
|
+
average=average,
|
|
63
|
+
compression=compression,
|
|
64
|
+
species=species,
|
|
65
|
+
periodic=periodic,
|
|
66
|
+
sparse=sparse,
|
|
67
|
+
dtype=dtype,
|
|
68
|
+
)
|
|
69
|
+
return periodic_soap.create(
|
|
70
|
+
system=structure,
|
|
71
|
+
centers=centers,
|
|
72
|
+
n_jobs=n_jobs,
|
|
73
|
+
only_physical_cores=only_physical_cores,
|
|
74
|
+
verbose=verbose,
|
|
75
|
+
)
|