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.
Files changed (60) hide show
  1. {structuretoolkit-0.0.26/structuretoolkit.egg-info → structuretoolkit-0.0.28}/PKG-INFO +13 -13
  2. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/pyproject.toml +12 -12
  3. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/setup.py +2 -3
  4. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/__init__.py +43 -23
  5. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/_version.py +3 -3
  6. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/distance.py +14 -10
  7. structuretoolkit-0.0.28/structuretoolkit/analyse/dscribe.py +75 -0
  8. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/neighbors.py +321 -91
  9. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/phonopy.py +18 -11
  10. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/pyscal.py +51 -77
  11. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/snap.py +13 -3
  12. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/spatial.py +92 -4
  13. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/strain.py +115 -6
  14. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/symmetry.py +167 -10
  15. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/__init__.py +3 -6
  16. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/aimsgb.py +4 -2
  17. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/compound.py +11 -2
  18. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/mesh.py +7 -6
  19. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/random.py +3 -6
  20. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/sqs.py +106 -12
  21. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/build/surface.py +9 -20
  22. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/__init__.py +2 -2
  23. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/helper.py +40 -2
  24. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/pyscal.py +2 -6
  25. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/visualize.py +27 -6
  26. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28/structuretoolkit.egg-info}/PKG-INFO +13 -13
  27. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit.egg-info/SOURCES.txt +4 -0
  28. structuretoolkit-0.0.28/structuretoolkit.egg-info/requires.txt +39 -0
  29. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_aimsgb.py +2 -0
  30. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_analyse.py +5 -5
  31. structuretoolkit-0.0.28/tests/test_analyse_distance.py +20 -0
  32. structuretoolkit-0.0.28/tests/test_analyse_phonopy.py +32 -0
  33. structuretoolkit-0.0.28/tests/test_analyse_symmetry.py +137 -0
  34. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_compound.py +3 -1
  35. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_dscribe.py +8 -4
  36. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_helpers.py +3 -3
  37. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_high_index_surface.py +1 -0
  38. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_mesh.py +3 -3
  39. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_neighbors.py +4 -2
  40. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_pymatgen.py +14 -13
  41. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_pyscal.py +8 -9
  42. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_pyxtal.py +8 -5
  43. structuretoolkit-0.0.28/tests/test_snap.py +803 -0
  44. structuretoolkit-0.0.28/tests/test_sqs.py +78 -0
  45. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_strain.py +2 -0
  46. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_symmetry.py +39 -10
  47. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/tests/test_visualize.py +5 -6
  48. structuretoolkit-0.0.26/structuretoolkit/analyse/dscribe.py +0 -49
  49. structuretoolkit-0.0.26/structuretoolkit.egg-info/requires.txt +0 -39
  50. structuretoolkit-0.0.26/tests/test_snap.py +0 -367
  51. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/LICENSE +0 -0
  52. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/MANIFEST.in +0 -0
  53. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/README.md +0 -0
  54. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/setup.cfg +0 -0
  55. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/analyse/__init__.py +5 -5
  56. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/error.py +0 -0
  57. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/phonopy.py +0 -0
  58. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit/common/pymatgen.py +0 -0
  59. {structuretoolkit-0.0.26 → structuretoolkit-0.0.28}/structuretoolkit.egg-info/dependency_links.txt +0 -0
  60. {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.26
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.0,>=1.9.3
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.6.10,>=2022.2.1; extra == "grainboundary"
59
+ Requires-Dist: pymatgen<=2024.8.9,>=2022.2.1; extra == "grainboundary"
60
60
  Provides-Extra: pyscal
61
- Requires-Dist: pyscal2==2.10.18; extra == "pyscal"
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.8.4; extra == "matplotlib"
65
+ Requires-Dist: matplotlib==3.9.2; extra == "matplotlib"
66
66
  Provides-Extra: plotly
67
- Requires-Dist: plotly<=5.22.0,>=4.14.3; extra == "plotly"
67
+ Requires-Dist: plotly<=5.23.0,>=4.14.3; extra == "plotly"
68
68
  Provides-Extra: clusters
69
- Requires-Dist: scikit-learn==1.5.0; extra == "clusters"
69
+ Requires-Dist: scikit-learn==1.5.1; extra == "clusters"
70
70
  Provides-Extra: symmetry
71
- Requires-Dist: spglib<=2.4.0,>=1.16.5; extra == "symmetry"
71
+ Requires-Dist: spglib<=2.5.0,>=1.16.5; extra == "symmetry"
72
72
  Provides-Extra: surface
73
- Requires-Dist: spglib<=2.4.0,>=1.16.5; extra == "surface"
74
- Requires-Dist: pymatgen<=2024.6.10,>=2022.2.1; extra == "surface"
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.24.3,>=2.16.2; extra == "phonopy"
77
- Requires-Dist: spglib<=2.4.0,>=1.16.5; extra == "phonopy"
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.6.7,>=0.5.5; extra == "pyxtal"
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.0",
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.6.10",
42
+ "pymatgen>=2022.2.1,<=2024.8.9",
43
43
  ]
44
- pyscal = ["pyscal2==2.10.18"]
44
+ pyscal = ["pyscal3>=3.2.5,<=3.2.7"]
45
45
  nglview = ["nglview>=2.7.7,<=3.1.2"]
46
- matplotlib = ["matplotlib==3.8.4"]
47
- plotly = ["plotly>=4.14.3,<=5.22.0"]
48
- clusters = ["scikit-learn==1.5.0"]
49
- symmetry = ["spglib>=1.16.5,<=2.4.0"]
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.4.0",
52
- "pymatgen>=2022.2.1,<=2024.6.10",
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.24.3",
56
- "spglib>=1.16.5,<=2.4.0",
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.6.7"]
58
+ pyxtal = ["pyxtal>=0.5.5,<=1.0.2"]
59
59
 
60
60
  [tool.setuptools.packages.find]
61
61
  include = ["structuretoolkit*"]
@@ -1,8 +1,7 @@
1
- from setuptools import setup
2
-
3
1
  import versioneer
2
+ from setuptools import setup
4
3
 
5
4
  setup(
6
5
  version=versioneer.get_version(),
7
6
  cmdclass=versioneer.get_cmdclass(),
8
- )
7
+ )
@@ -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
- create_mesh,
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
- # Analyse - for backwards compatibility
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-06-25T10:24:48+0200",
11
+ "date": "2024-08-23T10:18:12+0200",
12
12
  "dirty": true,
13
13
  "error": null,
14
- "full-revisionid": "ad534b234cdbd638aeea242cefa4077059fd2ed8",
15
- "version": "0.0.26"
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
- from ase.atoms import Atoms
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
- p1 (numpy.ndarray/list): Nx3 array of positions
22
- p2 (numpy.ndarray/list): Nx3 array of positions
23
- mic (bool): minimum image convention
24
- vectors (bool): return vectors instead of distances
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
- v (list/numpy.ndarray): 3d vector or a list/array of 3d vectors
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: numpy.ndarray of the same shape as input with mic
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
+ )