@mat3ra/made 2026.8.7-0 → 2026.8.18-0

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 (522) hide show
  1. package/dist/js/Material.d.ts +219 -0
  2. package/dist/js/Material.js +457 -0
  3. package/dist/js/basis/basis.d.ts +14 -9
  4. package/dist/js/basis/basis.js +15 -13
  5. package/dist/js/basis/constrained_basis.d.ts +9 -7
  6. package/dist/js/basis/constrained_basis.js +4 -4
  7. package/dist/js/generated/MaterialSchemaMixin.d.ts +5 -0
  8. package/dist/js/generated/MaterialSchemaMixin.js +69 -0
  9. package/dist/js/lattice/lattice.d.ts +4 -3
  10. package/dist/js/lattice/lattice.js +1 -2
  11. package/dist/js/made.d.ts +12 -12
  12. package/dist/js/made.js +38 -5
  13. package/dist/js/parsers/espresso.d.ts +2 -3
  14. package/dist/js/parsers/espresso.js +0 -1
  15. package/dist/js/parsers/native_format_parsers.d.ts +9 -8
  16. package/dist/js/parsers/native_format_parsers.js +6 -6
  17. package/dist/js/parsers/parsers.d.ts +6 -6
  18. package/dist/js/parsers/poscar.d.ts +5 -4
  19. package/dist/js/parsers/poscar.js +3 -2
  20. package/dist/js/parsers/xyz.d.ts +3 -5
  21. package/dist/js/parsers/xyz.js +3 -4
  22. package/dist/js/parsers/xyz_combinatorial_basis.js +3 -1
  23. package/dist/js/tools/basis.d.ts +1 -1
  24. package/dist/js/tools/index.d.ts +7 -7
  25. package/dist/js/tools/material.d.ts +1 -1
  26. package/dist/js/tools/material.js +8 -7
  27. package/dist/js/tools/supercell.d.ts +4 -5
  28. package/dist/js/tools/supercell.js +2 -4
  29. package/dist/js/tools/surface.d.ts +4 -4
  30. package/dist/js/tools/surface.js +2 -7
  31. package/package.json +12 -8
  32. package/.babelrc +0 -10
  33. package/.eslintrc.json +0 -11
  34. package/.gitattributes +0 -1
  35. package/.husky/post-checkout +0 -3
  36. package/.husky/post-commit +0 -3
  37. package/.husky/post-merge +0 -3
  38. package/.husky/pre-commit +0 -6
  39. package/.husky/pre-push +0 -3
  40. package/.mocharc.json +0 -5
  41. package/.pre-commit-config.yaml +0 -26
  42. package/.prettierignore +0 -2
  43. package/.prettierrc +0 -6
  44. package/AGENTS.md +0 -133
  45. package/MANIFEST.in +0 -1
  46. package/data/constants.json +0 -13
  47. package/data/reciprocal_paths.json +0 -111
  48. package/dist/js/material.d.ts +0 -169
  49. package/dist/js/material.js +0 -362
  50. package/images/made/tools/tools_diagram_general.png +0 -3
  51. package/images/made/tools/tools_diagram_interface.png +0 -3
  52. package/pyproject.toml +0 -123
  53. package/src/__init__.py +0 -0
  54. package/src/js/basis/basis.ts +0 -621
  55. package/src/js/basis/constrained_basis.ts +0 -114
  56. package/src/js/basis/coordinates.ts +0 -93
  57. package/src/js/basis/elements.ts +0 -24
  58. package/src/js/basis/helpers.ts +0 -20
  59. package/src/js/basis/labels.ts +0 -6
  60. package/src/js/cell/cell.ts +0 -150
  61. package/src/js/cell/conventional_cell.ts +0 -86
  62. package/src/js/cell/primitive_cell.ts +0 -166
  63. package/src/js/constants/molecule.ts +0 -18
  64. package/src/js/constants.ts +0 -4
  65. package/src/js/constraints/constraints.ts +0 -45
  66. package/src/js/lattice/lattice.ts +0 -306
  67. package/src/js/lattice/lattice_types.ts +0 -134
  68. package/src/js/lattice/reciprocal/lattice_reciprocal.ts +0 -193
  69. package/src/js/lattice/reciprocal/paths.ts +0 -39
  70. package/src/js/lattice/reciprocal/symmetry_points.ts +0 -886
  71. package/src/js/lattice/unit_cell.ts +0 -66
  72. package/src/js/made.ts +0 -62
  73. package/src/js/material.ts +0 -458
  74. package/src/js/parsers/cif.ts +0 -25
  75. package/src/js/parsers/errors.ts +0 -6
  76. package/src/js/parsers/espresso.ts +0 -30
  77. package/src/js/parsers/native_format_parsers.ts +0 -51
  78. package/src/js/parsers/parsers.ts +0 -13
  79. package/src/js/parsers/poscar.ts +0 -212
  80. package/src/js/parsers/xyz.ts +0 -187
  81. package/src/js/parsers/xyz_combinatorial_basis.ts +0 -265
  82. package/src/js/tools/basis.ts +0 -132
  83. package/src/js/tools/cell.ts +0 -41
  84. package/src/js/tools/index.ts +0 -11
  85. package/src/js/tools/material.ts +0 -62
  86. package/src/js/tools/supercell.ts +0 -88
  87. package/src/js/tools/surface.ts +0 -223
  88. package/src/py/__init__.py +0 -0
  89. package/src/py/mat3ra/__init__.py +0 -1
  90. package/src/py/mat3ra/made/__init__.py +0 -7
  91. package/src/py/mat3ra/made/basis/__init__.py +0 -255
  92. package/src/py/mat3ra/made/basis/coordinates.py +0 -43
  93. package/src/py/mat3ra/made/cell/__init__.py +0 -55
  94. package/src/py/mat3ra/made/cell/primitive_cell.py +0 -156
  95. package/src/py/mat3ra/made/data_helper.py +0 -5
  96. package/src/py/mat3ra/made/lattice.py +0 -195
  97. package/src/py/mat3ra/made/material.py +0 -134
  98. package/src/py/mat3ra/made/metadata.py +0 -45
  99. package/src/py/mat3ra/made/reciprocal/__init__.py +0 -5
  100. package/src/py/mat3ra/made/reciprocal/lattice_reciprocal.py +0 -147
  101. package/src/py/mat3ra/made/reciprocal/paths.py +0 -30
  102. package/src/py/mat3ra/made/reciprocal/symmetry_points.py +0 -385
  103. package/src/py/mat3ra/made/tools/README.md +0 -173
  104. package/src/py/mat3ra/made/tools/__init__.py +0 -0
  105. package/src/py/mat3ra/made/tools/analyze/__init__.py +0 -31
  106. package/src/py/mat3ra/made/tools/analyze/basis/__init__.py +0 -3
  107. package/src/py/mat3ra/made/tools/analyze/basis/analyzer.py +0 -50
  108. package/src/py/mat3ra/made/tools/analyze/build_metadata_analyzer.py +0 -32
  109. package/src/py/mat3ra/made/tools/analyze/build_metadata_analyzer_factory.py +0 -31
  110. package/src/py/mat3ra/made/tools/analyze/coordination.py +0 -56
  111. package/src/py/mat3ra/made/tools/analyze/crystal_site/__init__.py +0 -0
  112. package/src/py/mat3ra/made/tools/analyze/crystal_site/adatom_crystal_site_material_analyzer.py +0 -35
  113. package/src/py/mat3ra/made/tools/analyze/crystal_site/adatom_material_analyzer.py +0 -49
  114. package/src/py/mat3ra/made/tools/analyze/crystal_site/crystal_site_analyzer.py +0 -65
  115. package/src/py/mat3ra/made/tools/analyze/crystal_site/voronoi_crystal_site_analyzer.py +0 -47
  116. package/src/py/mat3ra/made/tools/analyze/enums.py +0 -33
  117. package/src/py/mat3ra/made/tools/analyze/fingerprint/__init__.py +0 -4
  118. package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/__init__.py +0 -0
  119. package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/layered_fingerprint_along_axis.py +0 -83
  120. package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/unique_element_string_per_layer.py +0 -9
  121. package/src/py/mat3ra/made/tools/analyze/interface/__init__.py +0 -20
  122. package/src/py/mat3ra/made/tools/analyze/interface/commensurate.py +0 -156
  123. package/src/py/mat3ra/made/tools/analyze/interface/enums.py +0 -60
  124. package/src/py/mat3ra/made/tools/analyze/interface/grain_boundary.py +0 -80
  125. package/src/py/mat3ra/made/tools/analyze/interface/simple.py +0 -251
  126. package/src/py/mat3ra/made/tools/analyze/interface/twisted_nanoribbons.py +0 -91
  127. package/src/py/mat3ra/made/tools/analyze/interface/utils/__init__.py +0 -77
  128. package/src/py/mat3ra/made/tools/analyze/interface/utils/holders.py +0 -14
  129. package/src/py/mat3ra/made/tools/analyze/interface/utils/vector.py +0 -56
  130. package/src/py/mat3ra/made/tools/analyze/interface/zsl.py +0 -259
  131. package/src/py/mat3ra/made/tools/analyze/interface_material.py +0 -45
  132. package/src/py/mat3ra/made/tools/analyze/lattice/__init__.py +0 -2
  133. package/src/py/mat3ra/made/tools/analyze/lattice/analyzer.py +0 -126
  134. package/src/py/mat3ra/made/tools/analyze/lattice/helpers.py +0 -31
  135. package/src/py/mat3ra/made/tools/analyze/lattice_lines.py +0 -30
  136. package/src/py/mat3ra/made/tools/analyze/lattice_planes.py +0 -192
  137. package/src/py/mat3ra/made/tools/analyze/lattice_swap_analyzer.py +0 -105
  138. package/src/py/mat3ra/made/tools/analyze/material.py +0 -276
  139. package/src/py/mat3ra/made/tools/analyze/other.py +0 -434
  140. package/src/py/mat3ra/made/tools/analyze/rdf.py +0 -74
  141. package/src/py/mat3ra/made/tools/analyze/slab.py +0 -76
  142. package/src/py/mat3ra/made/tools/analyze/solid_solution_analyzer.py +0 -171
  143. package/src/py/mat3ra/made/tools/analyze/terrace.py +0 -105
  144. package/src/py/mat3ra/made/tools/analyze/utils.py +0 -162
  145. package/src/py/mat3ra/made/tools/bond_directions/__init__.py +0 -0
  146. package/src/py/mat3ra/made/tools/bond_directions/bond_directions.py +0 -150
  147. package/src/py/mat3ra/made/tools/bond_directions/bond_directions_for_element_list.py +0 -7
  148. package/src/py/mat3ra/made/tools/bond_directions/bond_directions_templates_enum.py +0 -8
  149. package/src/py/mat3ra/made/tools/bond_directions/bond_directions_templates_for_element.py +0 -16
  150. package/src/py/mat3ra/made/tools/build/__init__.py +0 -25
  151. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/__init__.py +0 -7
  152. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/helpers.py +0 -59
  153. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/types.py +0 -26
  154. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/utils.py +0 -139
  155. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/__init__.py +0 -47
  156. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/__init__.py +0 -11
  157. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/build_parameters.py +0 -5
  158. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/builder.py +0 -164
  159. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/configuration.py +0 -48
  160. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/helpers.py +0 -134
  161. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/commensurate/__init__.py +0 -6
  162. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/commensurate/helpers.py +0 -157
  163. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/enums.py +0 -7
  164. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/__init__.py +0 -7
  165. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/configuration.py +0 -13
  166. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/helpers.py +0 -70
  167. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/utils.py +0 -87
  168. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/zsl/__init__.py +0 -6
  169. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/zsl/helpers.py +0 -129
  170. package/src/py/mat3ra/made/tools/build/defective_structures/__init__.py +0 -0
  171. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/__init__.py +0 -0
  172. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/__init__.py +0 -0
  173. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/build_parameters.py +0 -12
  174. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/builder.py +0 -17
  175. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/configuration.py +0 -40
  176. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/helpers.py +0 -82
  177. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/__init__.py +0 -1
  178. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/__init__.py +0 -9
  179. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/builder.py +0 -37
  180. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/configuration.py +0 -30
  181. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/enums.py +0 -8
  182. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/helpers.py +0 -76
  183. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/__init__.py +0 -0
  184. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/__init__.py +0 -0
  185. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/builder.py +0 -11
  186. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/configuration.py +0 -18
  187. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/helpers.py +0 -137
  188. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/types.py +0 -22
  189. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/__init__.py +0 -0
  190. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/builder.py +0 -28
  191. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/configuration.py +0 -55
  192. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/helpers.py +0 -75
  193. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/builder.py +0 -15
  194. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/configuration.py +0 -16
  195. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/helpers.py +0 -116
  196. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/build_parameters.py +0 -10
  197. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/builder.py +0 -30
  198. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/configuration.py +0 -11
  199. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/helpers.py +0 -78
  200. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/__init__.py +0 -0
  201. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/__init__.py +0 -0
  202. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/builder.py +0 -31
  203. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/configuration.py +0 -45
  204. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/helpers.py +0 -80
  205. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/__init__.py +0 -40
  206. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/atom_placement_method_enum.py +0 -14
  207. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/__init__.py +0 -7
  208. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/builder.py +0 -42
  209. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/configuration.py +0 -27
  210. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/complex_defect_type_enum.py +0 -5
  211. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/factories.py +0 -69
  212. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/helpers.py +0 -92
  213. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/__init__.py +0 -7
  214. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/builder.py +0 -8
  215. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/configuration.py +0 -29
  216. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/helpers.py +0 -48
  217. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/interstitial_placement_method_enum.py +0 -8
  218. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/point_defect_type_enum.py +0 -8
  219. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/__init__.py +0 -7
  220. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/builder.py +0 -6
  221. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/configuration.py +0 -41
  222. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/helpers.py +0 -43
  223. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/substitution_placement_method_enum.py +0 -7
  224. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/types.py +0 -24
  225. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/__init__.py +0 -7
  226. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/builder.py +0 -19
  227. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/configuration.py +0 -27
  228. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/helpers.py +0 -42
  229. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/vacancy_placement_method_enum.py +0 -7
  230. package/src/py/mat3ra/made/tools/build/pristine_structures/__init__.py +0 -0
  231. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/__init__.py +0 -0
  232. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/builder.py +0 -80
  233. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/configurations.py +0 -22
  234. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/helpers.py +0 -40
  235. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/__init__.py +0 -0
  236. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/__init__.py +0 -29
  237. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/build_parameters.py +0 -5
  238. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/builders.py +0 -56
  239. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/configuration.py +0 -33
  240. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/helpers.py +0 -76
  241. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/__init__.py +0 -11
  242. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/build_parameters.py +0 -9
  243. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/builders.py +0 -83
  244. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/configuration.py +0 -35
  245. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/helpers.py +0 -62
  246. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/__init__.py +0 -9
  247. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/build_parameters.py +0 -8
  248. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/builder.py +0 -42
  249. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/configuration.py +0 -99
  250. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/helpers.py +0 -95
  251. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/termination_utils.py +0 -14
  252. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/utils.py +0 -61
  253. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab_strained_supercell/builder.py +0 -22
  254. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab_strained_supercell/configuration.py +0 -17
  255. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/__init__.py +0 -0
  256. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/__init__.py +0 -19
  257. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/analyzer.py +0 -86
  258. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/__init__.py +0 -7
  259. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/builder.py +0 -54
  260. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/configuration.py +0 -19
  261. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/enums.py +0 -42
  262. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/helpers.py +0 -127
  263. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/__init__.py +0 -7
  264. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/builder.py +0 -33
  265. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/configuration.py +0 -16
  266. package/src/py/mat3ra/made/tools/build/processed_structures/__init__.py +0 -0
  267. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/__init__.py +0 -0
  268. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/__init__.py +0 -0
  269. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/__init__.py +0 -9
  270. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/coordination_based_passivation_material_analyzer.py +0 -112
  271. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/passivation_material_analyzer.py +0 -16
  272. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/surface_passivation_material_analyzer.py +0 -32
  273. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/builder.py +0 -23
  274. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/configuration.py +0 -31
  275. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/enums.py +0 -7
  276. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/helpers.py +0 -151
  277. package/src/py/mat3ra/made/tools/build_components/__init__.py +0 -10
  278. package/src/py/mat3ra/made/tools/build_components/entities/__init__.py +0 -0
  279. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/__init__.py +0 -0
  280. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/one_dimensional/miller_indices_2d.py +0 -0
  281. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/two_dimensional/miller_indices.py +0 -18
  282. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/two_dimensional/termination.py +0 -33
  283. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/__init__.py +0 -0
  284. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/__init__.py +0 -2
  285. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/crystal_site.py +0 -24
  286. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/crystal_site_list.py +0 -9
  287. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/point_defect_site/builder.py +0 -32
  288. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/point_defect_site/configuration.py +0 -14
  289. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/__init__.py +0 -0
  290. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/builder.py +0 -29
  291. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/configuration.py +0 -19
  292. package/src/py/mat3ra/made/tools/build_components/entities/core/two_dimensional/vacuum/builder.py +0 -48
  293. package/src/py/mat3ra/made/tools/build_components/entities/core/two_dimensional/vacuum/configuration.py +0 -17
  294. package/src/py/mat3ra/made/tools/build_components/entities/core/zero_dimensional/atom/builder.py +0 -25
  295. package/src/py/mat3ra/made/tools/build_components/entities/core/zero_dimensional/atom/configuration.py +0 -8
  296. package/src/py/mat3ra/made/tools/build_components/entities/reusable/__init__.py +0 -0
  297. package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/__init__.py +0 -16
  298. package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/base_configuration_pydantic.py +0 -5
  299. package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/base_single_builder.py +0 -87
  300. package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/build_parameters.py +0 -5
  301. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/__init__.py +0 -0
  302. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/__init__.py +0 -4
  303. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/builder.py +0 -46
  304. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/configuration.py +0 -19
  305. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/edge_types.py +0 -51
  306. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/helpers.py +0 -58
  307. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/__init__.py +0 -4
  308. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/builder.py +0 -42
  309. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/configuration.py +0 -21
  310. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/__init__.py +0 -0
  311. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/configuration.py +0 -11
  312. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/helpers.py +0 -38
  313. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/__init__.py +0 -24
  314. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/__init__.py +0 -7
  315. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/builder.py +0 -62
  316. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/configuration.py +0 -14
  317. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/helpers.py +0 -42
  318. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/__init__.py +0 -7
  319. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/builder.py +0 -39
  320. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/configuration.py +0 -24
  321. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/__init__.py +0 -10
  322. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/builder.py +0 -36
  323. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/configuration.py +0 -31
  324. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/helpers.py +0 -80
  325. package/src/py/mat3ra/made/tools/build_components/entities/reusable/zero_dimensional/__init__.py +0 -0
  326. package/src/py/mat3ra/made/tools/build_components/entities/reusable/zero_dimensional/coordinates_shape_enum.py +0 -8
  327. package/src/py/mat3ra/made/tools/build_components/metadata/__init__.py +0 -2
  328. package/src/py/mat3ra/made/tools/build_components/metadata/build_metadata.py +0 -7
  329. package/src/py/mat3ra/made/tools/build_components/metadata/material_build_metadata.py +0 -35
  330. package/src/py/mat3ra/made/tools/build_components/metadata/material_with_build_metadata.py +0 -8
  331. package/src/py/mat3ra/made/tools/build_components/mixins/__init__.py +0 -2
  332. package/src/py/mat3ra/made/tools/build_components/mixins/convert_generated_items_ase_atoms_mixin.py +0 -8
  333. package/src/py/mat3ra/made/tools/build_components/mixins/convert_generated_items_pymatgen_structure_mixin.py +0 -8
  334. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/__init__.py +0 -0
  335. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/enums.py +0 -11
  336. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/__init__.py +0 -6
  337. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/build_parameters.py +0 -18
  338. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/builder.py +0 -93
  339. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/configuration.py +0 -20
  340. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/stack/builder.py +0 -83
  341. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/stack/configuration.py +0 -24
  342. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/__init__.py +0 -15
  343. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/build_parameters.py +0 -5
  344. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/builders/base.py +0 -33
  345. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/builders/isometric.py +0 -25
  346. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/configuration.py +0 -24
  347. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/__init__.py +0 -13
  348. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/atomic_mass_dependent_function_holder.py +0 -32
  349. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/function_holder.py +0 -80
  350. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/maxwell_boltzmann.py +0 -39
  351. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/perturbation_function_holder.py +0 -45
  352. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/sine_wave_perturbation_function_holder.py +0 -29
  353. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/helpers.py +0 -83
  354. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/__init__.py +0 -5
  355. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/builder.py +0 -25
  356. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/configuration.py +0 -23
  357. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/helpers.py +0 -49
  358. package/src/py/mat3ra/made/tools/build_components/utils.py +0 -44
  359. package/src/py/mat3ra/made/tools/calculate/__init__.py +0 -149
  360. package/src/py/mat3ra/made/tools/calculate/ase/__init__.py +0 -133
  361. package/src/py/mat3ra/made/tools/calculate/ase/constraints.py +0 -91
  362. package/src/py/mat3ra/made/tools/calculate/calculators/__init__.py +0 -4
  363. package/src/py/mat3ra/made/tools/calculate/calculators/interface_material_calculator.py +0 -70
  364. package/src/py/mat3ra/made/tools/calculate/calculators/interface_material_calculator_parameters.py +0 -14
  365. package/src/py/mat3ra/made/tools/calculate/calculators/material_calculator.py +0 -32
  366. package/src/py/mat3ra/made/tools/calculate/calculators/material_calculator_parameters.py +0 -17
  367. package/src/py/mat3ra/made/tools/calculate/interaction_functions.py +0 -23
  368. package/src/py/mat3ra/made/tools/convert/__init__.py +0 -286
  369. package/src/py/mat3ra/made/tools/convert/interface_parts_enum.py +0 -9
  370. package/src/py/mat3ra/made/tools/convert/utils.py +0 -96
  371. package/src/py/mat3ra/made/tools/entities/__init__.py +0 -5
  372. package/src/py/mat3ra/made/tools/entities/coordinate/__init__.py +0 -14
  373. package/src/py/mat3ra/made/tools/entities/coordinate/box_coordinate_condition.py +0 -15
  374. package/src/py/mat3ra/made/tools/entities/coordinate/coordinate_condition.py +0 -16
  375. package/src/py/mat3ra/made/tools/entities/coordinate/coordinate_functions.py +0 -158
  376. package/src/py/mat3ra/made/tools/entities/coordinate/cylinder_coordinate_condition.py +0 -17
  377. package/src/py/mat3ra/made/tools/entities/coordinate/plane_coordinate_condition.py +0 -14
  378. package/src/py/mat3ra/made/tools/entities/coordinate/sphere_coordinate_condition.py +0 -15
  379. package/src/py/mat3ra/made/tools/entities/coordinate/triangular_prism_coordinate_condition.py +0 -26
  380. package/src/py/mat3ra/made/tools/entities/termination_holder.py +0 -12
  381. package/src/py/mat3ra/made/tools/helpers.py +0 -168
  382. package/src/py/mat3ra/made/tools/modify.py +0 -627
  383. package/src/py/mat3ra/made/tools/operations/core/binary.py +0 -106
  384. package/src/py/mat3ra/made/tools/operations/core/unary.py +0 -170
  385. package/src/py/mat3ra/made/tools/operations/core/utils.py +0 -138
  386. package/src/py/mat3ra/made/tools/operations/reusable/unary.py +0 -53
  387. package/src/py/mat3ra/made/tools/optimize.py +0 -55
  388. package/src/py/mat3ra/made/tools/third_party.py +0 -69
  389. package/src/py/mat3ra/made/tools/utils.py +0 -182
  390. package/src/py/mat3ra/made/utils.py +0 -144
  391. package/tests/.gitattributes +0 -1
  392. package/tests/fixtures/AsGe-basis.json +0 -3
  393. package/tests/fixtures/C2H4-translated.json +0 -3
  394. package/tests/fixtures/C2H4.json +0 -3
  395. package/tests/fixtures/FeLiSi-basis.json +0 -3
  396. package/tests/fixtures/FeO.json +0 -3
  397. package/tests/fixtures/Ge2-basis.json +0 -3
  398. package/tests/fixtures/Graphene.json +0 -3
  399. package/tests/fixtures/Graphene.poscar +0 -3
  400. package/tests/fixtures/H2+H-final.json +0 -3
  401. package/tests/fixtures/H2+H-image.json +0 -3
  402. package/tests/fixtures/H2+H-initial.json +0 -3
  403. package/tests/fixtures/H2O.poscar +0 -3
  404. package/tests/fixtures/LiFeSi-basis-labels.json +0 -3
  405. package/tests/fixtures/LiFeSi-basis.json +0 -3
  406. package/tests/fixtures/Na.json +0 -3
  407. package/tests/fixtures/Na4Cl4-cartesian.json +0 -3
  408. package/tests/fixtures/Na4Cl4.json +0 -3
  409. package/tests/fixtures/Na4Cl4.poscar +0 -3
  410. package/tests/fixtures/Ni-hex.json +0 -3
  411. package/tests/fixtures/Ni-hex.poscar +0 -3
  412. package/tests/fixtures/OSi-basis.json +0 -3
  413. package/tests/fixtures/Si-hex.poscar +0 -3
  414. package/tests/fixtures/Si-pwscf.in +0 -3
  415. package/tests/fixtures/Si-slab.json +0 -3
  416. package/tests/fixtures/Si-supercell.json +0 -3
  417. package/tests/fixtures/Si2-basis-repeated.json +0 -3
  418. package/tests/fixtures/Si2-basis.json +0 -3
  419. package/tests/fixtures/Zr1H23Zr1H1.json +0 -3
  420. package/tests/fixtures/Zr1H23Zr1H1.poscar +0 -3
  421. package/tests/fixtures/atomic-constraints.json +0 -3
  422. package/tests/fixtures/hashes.json +0 -3
  423. package/tests/fixtures/si-slab-100.json +0 -3
  424. package/tests/fixtures/si-slab-111-0-vacuum.json +0 -3
  425. package/tests/fixtures/si-slab-111-0.5-vacuum-gamma-120.json +0 -3
  426. package/tests/fixtures/si-slab-111-0.5-vacuum-ratio.json +0 -3
  427. package/tests/fixtures/si-standata.json +0 -3
  428. package/tests/js/basis/basis.ts +0 -247
  429. package/tests/js/cell/cell.ts +0 -182
  430. package/tests/js/cell/primitive_cell.ts +0 -21
  431. package/tests/js/constraints/constraints.ts +0 -11
  432. package/tests/js/fixtures.ts +0 -120
  433. package/tests/js/lattice/lattice.ts +0 -43
  434. package/tests/js/lattice/lattice_reciprocal.ts +0 -104
  435. package/tests/js/material.test.ts +0 -42
  436. package/tests/js/parsers/espresso.ts +0 -15
  437. package/tests/js/parsers/native_formats.ts +0 -35
  438. package/tests/js/parsers/poscar.ts +0 -89
  439. package/tests/js/parsers/xyz.ts +0 -33
  440. package/tests/js/parsers/xyz_combinatorial_basis.ts +0 -156
  441. package/tests/js/setup.ts +0 -6
  442. package/tests/js/tools/basis.ts +0 -22
  443. package/tests/js/tools/supercell.ts +0 -58
  444. package/tests/js/tools/surface.ts +0 -115
  445. package/tests/py/conftest.py +0 -34
  446. package/tests/py/mat3ra/debug_utils.py +0 -75
  447. package/tests/py/unit/__init__.py +0 -0
  448. package/tests/py/unit/fixtures/__init__.py +0 -0
  449. package/tests/py/unit/fixtures/adatom.py +0 -60
  450. package/tests/py/unit/fixtures/bulk.py +0 -162
  451. package/tests/py/unit/fixtures/cuts.py +0 -118
  452. package/tests/py/unit/fixtures/grain_boundary.py +0 -875
  453. package/tests/py/unit/fixtures/interface/commensurate.py +0 -498
  454. package/tests/py/unit/fixtures/interface/gaas_dia.py +0 -837
  455. package/tests/py/unit/fixtures/interface/gr_ni_111_top_hcp.py +0 -123
  456. package/tests/py/unit/fixtures/interface/simple.py +0 -84
  457. package/tests/py/unit/fixtures/interface/twisted_nanoribbons.py +0 -131
  458. package/tests/py/unit/fixtures/interface/zsl.py +0 -756
  459. package/tests/py/unit/fixtures/island.py +0 -336
  460. package/tests/py/unit/fixtures/merge.py +0 -147
  461. package/tests/py/unit/fixtures/monolayer.py +0 -46
  462. package/tests/py/unit/fixtures/nanoparticle.py +0 -116
  463. package/tests/py/unit/fixtures/nanoribbon/__init__.py +0 -0
  464. package/tests/py/unit/fixtures/nanoribbon/armchair.py +0 -102
  465. package/tests/py/unit/fixtures/nanoribbon/nanoribbon.py +0 -145
  466. package/tests/py/unit/fixtures/nanoribbon/zigzag.py +0 -54
  467. package/tests/py/unit/fixtures/pair_defects.py +0 -41
  468. package/tests/py/unit/fixtures/passivated/nanoribbon.py +0 -69
  469. package/tests/py/unit/fixtures/passivated/slab.py +0 -58
  470. package/tests/py/unit/fixtures/point_defects.py +0 -158
  471. package/tests/py/unit/fixtures/slab.py +0 -606
  472. package/tests/py/unit/fixtures/strain.py +0 -42
  473. package/tests/py/unit/fixtures/supercell.py +0 -64
  474. package/tests/py/unit/fixtures/terrace.py +0 -70
  475. package/tests/py/unit/fixtures/thrid_party/ase_atoms.py +0 -13
  476. package/tests/py/unit/test_analyze_lattice_planes.py +0 -131
  477. package/tests/py/unit/test_cell.py +0 -104
  478. package/tests/py/unit/test_data_files.py +0 -68
  479. package/tests/py/unit/test_lattice.py +0 -103
  480. package/tests/py/unit/test_lattice_type_extended.py +0 -53
  481. package/tests/py/unit/test_material.py +0 -158
  482. package/tests/py/unit/test_operations.py +0 -126
  483. package/tests/py/unit/test_primitive_cell.py +0 -118
  484. package/tests/py/unit/test_reciprocal_lattice.py +0 -86
  485. package/tests/py/unit/test_reciprocal_paths.py +0 -64
  486. package/tests/py/unit/test_symmetry_points.py +0 -151
  487. package/tests/py/unit/test_tools_analyze.py +0 -219
  488. package/tests/py/unit/test_tools_analyze_basis.py +0 -105
  489. package/tests/py/unit/test_tools_analyze_interface.py +0 -223
  490. package/tests/py/unit/test_tools_analyze_interface_material.py +0 -63
  491. package/tests/py/unit/test_tools_analyze_interface_zsl.py +0 -187
  492. package/tests/py/unit/test_tools_analyze_lattice.py +0 -74
  493. package/tests/py/unit/test_tools_analyze_swap.py +0 -80
  494. package/tests/py/unit/test_tools_build.py +0 -158
  495. package/tests/py/unit/test_tools_build_defect/__init__.py +0 -0
  496. package/tests/py/unit/test_tools_build_defect/test_adatom.py +0 -84
  497. package/tests/py/unit/test_tools_build_defect/test_island.py +0 -45
  498. package/tests/py/unit/test_tools_build_defect/test_pair_defect.py +0 -84
  499. package/tests/py/unit/test_tools_build_defect/test_point_defect.py +0 -196
  500. package/tests/py/unit/test_tools_build_defect/test_slab_stack.py +0 -30
  501. package/tests/py/unit/test_tools_build_defect/test_solid_solution.py +0 -90
  502. package/tests/py/unit/test_tools_build_defect/test_terrace.py +0 -44
  503. package/tests/py/unit/test_tools_build_grain_boundary.py +0 -133
  504. package/tests/py/unit/test_tools_build_heterostructure.py +0 -46
  505. package/tests/py/unit/test_tools_build_interface.py +0 -292
  506. package/tests/py/unit/test_tools_build_interface_zsl.py +0 -263
  507. package/tests/py/unit/test_tools_build_maxwell_disorder.py +0 -123
  508. package/tests/py/unit/test_tools_build_metadata.py +0 -79
  509. package/tests/py/unit/test_tools_build_monolayer.py +0 -33
  510. package/tests/py/unit/test_tools_build_nanoparticle.py +0 -42
  511. package/tests/py/unit/test_tools_build_nanoribbon.py +0 -45
  512. package/tests/py/unit/test_tools_build_passivation.py +0 -85
  513. package/tests/py/unit/test_tools_build_perturbation.py +0 -103
  514. package/tests/py/unit/test_tools_build_slab.py +0 -382
  515. package/tests/py/unit/test_tools_build_strain.py +0 -36
  516. package/tests/py/unit/test_tools_build_supercell.py +0 -47
  517. package/tests/py/unit/test_tools_calculate.py +0 -67
  518. package/tests/py/unit/test_tools_convert.py +0 -174
  519. package/tests/py/unit/test_tools_modify.py +0 -248
  520. package/tests/py/unit/utils.py +0 -142
  521. package/tsconfig-transpile.json +0 -3
  522. package/tsconfig.json +0 -3
@@ -1,45 +0,0 @@
1
- from typing import List
2
-
3
- import numpy as np
4
- from mat3ra.made.utils import AXIS_TO_INDEX_MAP
5
- from scipy.integrate import quad
6
- from scipy.optimize import root_scalar
7
-
8
- from .function_holder import FunctionHolder
9
-
10
- EQUATION_RANGE_COEFFICIENT = 5
11
-
12
-
13
- class PerturbationFunctionHolder(FunctionHolder):
14
- def _integrand(self, t: float, coordinate: List[float], axis: str) -> float:
15
- temp_coordinate = coordinate[:]
16
- temp_coordinate[AXIS_TO_INDEX_MAP[axis]] = t
17
- return np.sqrt(1 + self.calculate_derivative(temp_coordinate, axis) ** 2)
18
-
19
- def get_arc_length_equation(self, w_prime: float, coordinate: List[float], axis: str) -> float:
20
- """
21
- Calculate arc length considering a change along one specific axis.
22
- """
23
- a, b = 0, w_prime
24
- arc_length = quad(self._integrand, a, b, args=(coordinate, axis), limit=1000)[0]
25
- return arc_length - coordinate[AXIS_TO_INDEX_MAP[axis]]
26
-
27
- def normalize_coordinates(self, coordinate: List[float]) -> List[float]:
28
- """
29
- Transform coordinates to preserve the distance between points on a sine wave when perturbation is applied.
30
- Achieved by calculating the integral of the length between [0,0,0] and given coordinate.
31
-
32
- Returns:
33
- Callable[[List[float]], List[float]]: The coordinates transformation function.
34
- """
35
- for i, var in enumerate(self.variables):
36
- index = AXIS_TO_INDEX_MAP[var]
37
- w = coordinate[index]
38
- result = root_scalar(
39
- self.get_arc_length_equation,
40
- args=(coordinate, var),
41
- bracket=[0, EQUATION_RANGE_COEFFICIENT * w],
42
- method="brentq",
43
- )
44
- coordinate[index] = result.root
45
- return coordinate
@@ -1,29 +0,0 @@
1
- from typing import Any
2
-
3
- import sympy as sp
4
-
5
- from .perturbation_function_holder import PerturbationFunctionHolder
6
-
7
-
8
- class SineWavePerturbationFunctionHolder(PerturbationFunctionHolder):
9
- amplitude: float = 0.05
10
- wavelength: float = 1
11
- phase: float = 0
12
- axis: str = "x"
13
-
14
- def __init__(
15
- self,
16
- amplitude: float = 0.05,
17
- wavelength: float = 1,
18
- phase: float = 0,
19
- axis: str = "x",
20
- **data: Any,
21
- ):
22
- w = sp.Symbol(axis)
23
- function = amplitude * sp.sin(2 * sp.pi * w / wavelength + phase)
24
- variables = [axis]
25
- super().__init__(function=function, variables=variables, **data)
26
- self.amplitude = amplitude
27
- self.wavelength = wavelength
28
- self.phase = phase
29
- self.axis = axis
@@ -1,83 +0,0 @@
1
- from typing import Optional, Union
2
-
3
- import sympy as sp
4
- from mat3ra.made.material import Material
5
-
6
- from ..... import MaterialWithBuildMetadata
7
- from .builders.base import PerturbationBuilder
8
- from .builders.isometric import IsometricPerturbationBuilder
9
- from .configuration import PerturbationConfiguration
10
- from .functions import PerturbationFunctionHolder
11
- from .functions.maxwell_boltzmann import MaxwellBoltzmannDisplacementHolder
12
-
13
-
14
- def create_perturbation(
15
- material: Union[Material, MaterialWithBuildMetadata],
16
- perturbation_function: Union[sp.Expr, str],
17
- use_cartesian_coordinates: bool = True,
18
- is_isometric: bool = False,
19
- ):
20
- """
21
- Create a perturbation for a material.
22
- With a function of delta for coordinate [∆x, ∆y, ∆z] = f(x, y, z) applied to each atom in the material.
23
-
24
- Args:
25
- material (Material): The material to be perturbed.
26
- perturbation_function (PerturbationFunctionHolder): The perturbation function to apply.
27
- is_isometric (bool): If True, the lattice will be adjusted to preserve distances between atoms.
28
-
29
- Returns:
30
- Material: The perturbed material.
31
- """
32
-
33
- configuration = PerturbationConfiguration(
34
- material=material,
35
- perturbation_function_holder=PerturbationFunctionHolder(function=perturbation_function),
36
- use_cartesian_coordinates=use_cartesian_coordinates,
37
- )
38
- if is_isometric:
39
- builder = IsometricPerturbationBuilder()
40
- else:
41
- builder = PerturbationBuilder()
42
- return builder.get_material(configuration)
43
-
44
-
45
- def create_maxwell_displacement(
46
- material: Union[Material, MaterialWithBuildMetadata],
47
- disorder_parameter: float,
48
- random_seed: Optional[int] = None,
49
- is_mass_used: bool = True,
50
- ) -> Material:
51
- """
52
- Apply Maxwell-Boltzmann random displacements to a material.
53
-
54
- Generates random 3D displacement vectors where each component follows a normal
55
- distribution with variance proportional to disorder_parameter/m (if is_mass_used=True)
56
- or disorder_parameter (if is_mass_used=False), where m is atomic mass.
57
-
58
- Args:
59
- material: The material to be perturbed.
60
- disorder_parameter: Disorder parameter controlling displacement magnitude,
61
- can be viewed as effective temperature in eV.
62
- random_seed: Optional random seed for reproducibility for the same material and parameters.
63
- is_mass_used: If True, displacement variance is disorder_parameter/m (mass-dependent).
64
- If False, displacement variance is disorder_parameter (mass-independent).
65
-
66
- Returns:
67
- Material with applied Maxwell-Boltzmann displacements.
68
- """
69
- displacement_holder = MaxwellBoltzmannDisplacementHolder(
70
- disorder_parameter=disorder_parameter,
71
- random_seed=random_seed,
72
- is_mass_used=is_mass_used,
73
- )
74
-
75
- configuration = PerturbationConfiguration(
76
- material=material,
77
- perturbation_function_holder=displacement_holder,
78
- use_cartesian_coordinates=True,
79
- )
80
-
81
- builder = PerturbationBuilder()
82
-
83
- return builder.get_material(configuration)
@@ -1,5 +0,0 @@
1
- from .builder import StrainBuilder
2
- from .configuration import StrainConfiguration
3
- from .helpers import create_strain, get_isotropic_strain_matrix
4
-
5
- __all__ = ["StrainBuilder", "StrainConfiguration", "create_strain", "get_isotropic_strain_matrix"]
@@ -1,25 +0,0 @@
1
- from typing import Type
2
-
3
- from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseBuilderParameters, BaseSingleBuilder
4
-
5
- from ......operations.core.unary import strain
6
- from ..... import MaterialWithBuildMetadata
7
- from .configuration import StrainConfiguration
8
-
9
-
10
- class StrainBuilder(BaseSingleBuilder):
11
- _ConfigurationType: Type[StrainConfiguration] = StrainConfiguration
12
- _BuildParametersType: Type[BaseBuilderParameters] = BaseBuilderParameters
13
- _DefaultBuildParameters: BaseBuilderParameters = BaseBuilderParameters()
14
-
15
- def _generate(self, configuration: StrainConfiguration) -> MaterialWithBuildMetadata:
16
- strained_material = strain(configuration.material, configuration.strain_matrix)
17
- return MaterialWithBuildMetadata.create(strained_material.to_dict())
18
-
19
- def _update_material_name(
20
- self, material: MaterialWithBuildMetadata, configuration: StrainConfiguration
21
- ) -> MaterialWithBuildMetadata:
22
- if configuration.scale_factor is not None:
23
- base_name = configuration.material.name
24
- material.name = f"{base_name} (scale={configuration.scale_factor:.4f})"
25
- return material
@@ -1,23 +0,0 @@
1
- from typing import Optional, Union
2
-
3
- from mat3ra.esse.models.core.abstract.matrix_3x3 import Matrix3x3Schema
4
- from mat3ra.made.material import Material
5
- from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseConfigurationPydantic
6
-
7
- from ..... import MaterialWithBuildMetadata
8
-
9
-
10
- class StrainConfiguration(BaseConfigurationPydantic):
11
- """
12
- Configuration for a strain operation on a Material.
13
-
14
- Args:
15
- material (Material): The Material object to be strained.
16
- strain_matrix (Matrix3x3Schema): The 3x3 strain matrix defining the deformation.
17
- scale_factor (Optional[float]): An optional scale factor for isotropic scaling instead of a full strain matrix.
18
- """
19
-
20
- type: str = "StrainConfiguration"
21
- material: Union[Material, MaterialWithBuildMetadata]
22
- strain_matrix: Matrix3x3Schema
23
- scale_factor: Optional[float] = None
@@ -1,49 +0,0 @@
1
- from typing import Optional, Union
2
-
3
- from mat3ra.esse.models.core.abstract.matrix_3x3 import Matrix3x3Schema
4
- from mat3ra.made.material import Material
5
-
6
- from ..... import MaterialWithBuildMetadata
7
- from .builder import StrainBuilder
8
- from .configuration import StrainConfiguration
9
-
10
-
11
- def get_isotropic_strain_matrix(scale_factor: float) -> Matrix3x3Schema:
12
- """
13
- Returns a 3x3 isotropic strain matrix for uniform lattice scaling.
14
- """
15
- return Matrix3x3Schema(
16
- root=[
17
- [scale_factor, 0.0, 0.0],
18
- [0.0, scale_factor, 0.0],
19
- [0.0, 0.0, scale_factor],
20
- ]
21
- )
22
-
23
-
24
- def create_strain(
25
- material: Union[Material, MaterialWithBuildMetadata],
26
- strain_matrix: Optional[Matrix3x3Schema] = None,
27
- scale_factor: Optional[float] = None,
28
- ) -> MaterialWithBuildMetadata:
29
- """
30
- Creates a strained Material based on the provided strain matrix or scale factor.
31
-
32
- Args:
33
- material (Union[Material, MaterialWithBuildMetadata]): The material to be strained.
34
- strain_matrix (Optional[Matrix3x3Schema]): The 3x3 strain matrix defining the deformation.
35
- scale_factor (Optional[float]): An optional scale factor for isotropic scaling instead of a full strain matrix.
36
-
37
- Returns:
38
- MaterialWithBuildMetadata: The strained material with build metadata.
39
- """
40
- if scale_factor is not None:
41
- if scale_factor <= 0:
42
- raise ValueError("scale_factor must be positive.")
43
- strain_matrix = get_isotropic_strain_matrix(scale_factor)
44
- if strain_matrix is None:
45
- raise ValueError("Either strain_matrix or scale_factor must be provided.")
46
-
47
- configuration = StrainConfiguration(material=material, strain_matrix=strain_matrix, scale_factor=scale_factor)
48
- builder = StrainBuilder()
49
- return builder.get_material(configuration)
@@ -1,44 +0,0 @@
1
- from typing import List, Union
2
-
3
- from mat3ra.made.material import Material
4
-
5
- from ..modify import filter_by_box
6
- from . import MaterialWithBuildMetadata
7
- from .entities.reusable.three_dimensional.supercell.helpers import create_supercell
8
-
9
-
10
- def double_and_filter_material(
11
- material: Union[Material, MaterialWithBuildMetadata], start: List[float], end: List[float]
12
- ) -> Material:
13
- """
14
- Double the material and filter it by a box defined by the start and end coordinates.
15
- Args:
16
- material (Material): The material to double and filter.
17
- start (List[float]): The start coordinates of the box.
18
- end (List[float]): The end coordinates of the box.
19
- Returns:
20
- Material: The filtered material.
21
- """
22
- material_doubled = create_supercell(material, scaling_factor=[2, 1, 1])
23
- return filter_by_box(material_doubled, start, end)
24
-
25
-
26
- def expand_lattice_vectors(
27
- material: Union[Material, MaterialWithBuildMetadata], gap: float, direction: int = 0
28
- ) -> Material:
29
- """
30
- Expand the lattice vectors of the material in the specified direction by the given gap.
31
-
32
- Args:
33
- material (Material): The material whose lattice vectors are to be expanded.
34
- gap (float): The gap by which to expand the lattice vector.
35
- direction (int): The index of the lattice vector to expand (0, 1, or 2).
36
- """
37
- new_lattice_vectors = material.lattice.vector_arrays
38
- new_lattice_vectors[direction][direction] += gap
39
- material.set_lattice_vectors(
40
- lattice_vector1=new_lattice_vectors[0],
41
- lattice_vector2=new_lattice_vectors[1],
42
- lattice_vector3=new_lattice_vectors[2],
43
- )
44
- return material
@@ -1,149 +0,0 @@
1
- from typing import Optional, Tuple
2
-
3
- from ...material import Material
4
- from ..analyze.other import get_surface_area
5
- from ..analyze.interface_material import get_interface_bulk_crystal
6
- from ..build.compound_pristine_structures.two_dimensional.interface import get_slab
7
- from ..build_components.metadata import MaterialWithBuildMetadata
8
- from ..convert import decorator_convert_material_args_kwargs_to_atoms
9
- from ..third_party import ASEAtoms, ASECalculator, ASECalculatorEMT
10
- from .calculators import InterfaceMaterialCalculatorParameters
11
- from .interaction_functions import sum_of_inverse_distances_squared
12
-
13
-
14
- @decorator_convert_material_args_kwargs_to_atoms
15
- def calculate_total_energy(atoms: ASEAtoms, calculator: ASECalculator):
16
- """
17
- Set calculator for ASE Atoms and calculate the total energy.
18
-
19
- Args:
20
- atoms (ASEAtoms): The Atoms object to calculate the energy of.
21
- calculator (ase.calculators.calculator.Calculator): The calculator to use for the energy calculation.
22
-
23
- Returns:
24
- float: The total energy of the atoms.
25
- """
26
- atoms.calc = calculator
27
- return atoms.get_total_energy()
28
-
29
-
30
- @decorator_convert_material_args_kwargs_to_atoms
31
- def calculate_total_energy_per_atom(atoms: ASEAtoms, calculator: ASECalculator):
32
- """
33
- Set calculator for ASE Atoms and calculate the total energy per atom.
34
-
35
- Args:
36
- atoms (ASEAtoms): The Atoms object to calculate the energy of.
37
- calculator (ase.calculators.calculator.Calculator): The calculator to use for the energy calculation.
38
-
39
- Returns:
40
- float: The energy per atom of the atoms.
41
- """
42
- return calculate_total_energy(atoms, calculator) / atoms.get_global_number_of_atoms()
43
-
44
-
45
- @decorator_convert_material_args_kwargs_to_atoms
46
- def calculate_surface_energy(slab: ASEAtoms, bulk: ASEAtoms, calculator: ASECalculator):
47
- """
48
- Calculate the surface energy by subtracting the weighted bulk energy from the slab energy.
49
-
50
- Args:
51
- slab (ASEAtoms): The slab Atoms object to calculate the surface energy of.
52
- bulk (ASEAtoms): The bulk Atoms object to calculate the surface energy of.
53
- calculator (ase.calculators.calculator.Calculator): The calculator to use for the energy calculation.
54
-
55
- Returns:
56
- float: The surface energy of the slab.
57
- """
58
- number_of_atoms = slab.get_global_number_of_atoms()
59
- area = get_surface_area(slab)
60
- return (
61
- calculate_total_energy(slab, calculator) - calculate_total_energy_per_atom(bulk, calculator) * number_of_atoms
62
- ) / (2 * area)
63
-
64
-
65
- @decorator_convert_material_args_kwargs_to_atoms
66
- def calculate_adhesion_energy(
67
- interface: ASEAtoms, substrate_slab: ASEAtoms, film_slab: ASEAtoms, calculator: ASECalculator
68
- ):
69
- """
70
- Calculate the adhesion energy.
71
- The adhesion energy is the difference between the energy of the interface and
72
- the sum of the energies of the substrate and film.
73
- According to: 10.1088/0953-8984/27/30/305004
74
-
75
- Args:
76
- interface (ASEAtoms): The interface ASEAtoms object to calculate the adhesion energy of.
77
- substrate_slab (ASEAtoms): The substrate slab ASEAtoms object to calculate the adhesion energy of.
78
- film_slab (ASEAtoms): The film slab ASEAtoms object to calculate the adhesion energy of.
79
- calculator (ase.calculators.calculator.Calculator): The calculator to use for the energy calculation.
80
-
81
- Returns:
82
- float: The adhesion energy of the interface.
83
- """
84
- energy_substrate_slab = calculate_total_energy(substrate_slab, calculator)
85
- energy_film_slab = calculate_total_energy(film_slab, calculator)
86
- energy_interface = calculate_total_energy(interface, calculator)
87
- area = get_surface_area(interface)
88
- return (energy_substrate_slab + energy_film_slab - energy_interface) / area
89
-
90
-
91
- def _get_interface_with_build_metadata(interface: Material) -> MaterialWithBuildMetadata:
92
- if isinstance(interface, MaterialWithBuildMetadata):
93
- return interface
94
- return MaterialWithBuildMetadata.create(interface.to_dict())
95
-
96
-
97
- def _resolve_interface_bulk_materials(
98
- interface: Material,
99
- substrate_bulk: Optional[Material],
100
- film_bulk: Optional[Material],
101
- ) -> Tuple[Optional[Material], Optional[Material]]:
102
- """Resolve missing bulks from interface build metadata (handles BoundaryConditions metadata)."""
103
- try:
104
- interface_with_metadata = _get_interface_with_build_metadata(interface)
105
- if substrate_bulk is None:
106
- substrate_bulk = Material.create(get_interface_bulk_crystal(interface_with_metadata, part="substrate"))
107
- if film_bulk is None:
108
- film_bulk = Material.create(get_interface_bulk_crystal(interface_with_metadata, part="film"))
109
- except (ValueError, TypeError) as exc:
110
- raise ValueError(
111
- "The substrate and film bulk materials must be provided or defined in the interface metadata."
112
- ) from exc
113
- return substrate_bulk, film_bulk
114
-
115
-
116
- def calculate_interfacial_energy(
117
- interface: Material,
118
- substrate_slab: Optional[Material] = None,
119
- substrate_bulk: Optional[Material] = None,
120
- film_slab: Optional[Material] = None,
121
- film_bulk: Optional[Material] = None,
122
- calculator: ASECalculator = ASECalculatorEMT(),
123
- ):
124
- """
125
- Calculate the interfacial energy.
126
- The interfacial energy is the sum of the surface energies of the substrate and film minus the adhesion energy.
127
- According to Dupré's formula
128
-
129
- Args:
130
- interface (Material): The interface Material object to calculate the interfacial energy of.
131
- substrate_slab (Material): The substrate slab Material object to calculate the interfacial energy of.
132
- substrate_bulk (Material): The substrate bulk Material object to calculate the interfacial energy of.
133
- film_slab (Material): The film slab Material object to calculate the interfacial energy of.
134
- film_bulk (Material): The film bulk Material object to calculate the interfacial energy of.
135
- calculator (ase.calculators.calculator.Calculator): The calculator to use for the energy calculation
136
-
137
- Returns:
138
- float: The interfacial energy of the interface.
139
- """
140
- substrate_slab = get_slab(interface, part="substrate") if substrate_slab is None else substrate_slab
141
- film_slab = get_slab(interface, part="film") if film_slab is None else film_slab
142
-
143
- if substrate_bulk is None or film_bulk is None:
144
- substrate_bulk, film_bulk = _resolve_interface_bulk_materials(interface, substrate_bulk, film_bulk)
145
-
146
- surface_energy_substrate = calculate_surface_energy(substrate_slab, substrate_bulk, calculator)
147
- surface_energy_film = calculate_surface_energy(film_slab, film_bulk, calculator)
148
- adhesion_energy = calculate_adhesion_energy(interface, substrate_slab, film_slab, calculator)
149
- return surface_energy_film + surface_energy_substrate - adhesion_energy
@@ -1,133 +0,0 @@
1
- from typing import List, Optional, Union
2
-
3
- import numpy as np
4
- from mat3ra.made.material import Material
5
-
6
- from ...convert import from_ase
7
- from ...convert.interface_parts_enum import INTERFACE_LABELS_MAP, InterfacePartsEnum
8
- from ...third_party import ASEAtoms, ASECalculator, ASEFixAtoms, ASEFixedPlane, ase_all_changes
9
- from ..calculators import InterfaceMaterialCalculator, MaterialCalculator
10
- from .constraints import RigidFilmXYInterfaceConstraint
11
-
12
-
13
- def get_interface_part_indices(atoms: ASEAtoms, part: InterfacePartsEnum) -> List[int]:
14
- """
15
- Get the indices of the atoms in the interface part.
16
-
17
- Args:
18
- atoms (ASEAtoms): The ASE Atoms object.
19
- part (str): The interface part to get the indices of.
20
-
21
- Returns:
22
- List[int]: The indices of the atoms in the interface part.
23
- """
24
- return [i for i, tag in enumerate(atoms.get_tags()) if tag == INTERFACE_LABELS_MAP[part.name.lower()]]
25
-
26
-
27
- class FilmSubstrateDistanceASECalculator(ASECalculator):
28
- """
29
- ASE calculator that calculates the interaction energy between a film and substrate in an interface material.
30
-
31
- Args:
32
- shadowing_radius (float): The radius for atom to shadow underlying from being considered surface, in Angstroms.
33
- force_constant (float): The force constant for the finite difference approximation of the forces.
34
- is_substrate_fixed (bool): Whether to fix the substrate atoms.
35
- is_z_axis_fixed (bool): Whether to fix atoms movement in the z direction.
36
- symprec (float): The symmetry precision for the ASE calculator. This parameter determines the tolerance
37
- for symmetry operations, affecting the identification of equivalent atoms and the overall
38
- symmetry of the system. For more details, refer to the ASE documentation:
39
- https://wiki.fysik.dtu.dk/ase/ase/constraints.html#ase.constraints.FixSymmetry
40
-
41
- Example usage:
42
- ```python
43
- from ase.optimize import BFGS
44
- atoms = to_ase(material)
45
- calc = SurfaceDistanceCalculator(shadowing_radius=2.5)
46
-
47
- atoms.calc = calc
48
- opt = BFGS(atoms)
49
- opt.run(fmax=0.05)
50
- ```
51
- Args:
52
- shadowing_radius (float): Radius for atoms shadowing underlying from being treated as a surface, in Angstroms.
53
- force_constant (float): The force constant for the finite difference approximation of the
54
- Note:
55
- Built following https://wiki.fysik.dtu.dk/ase/development/calculators.html
56
-
57
- The calculate method is responsible for computing the energy and forces (if requested).
58
- Forces are estimated using a finite difference method, which is a simple approximation
59
- and might not be the most accurate or efficient for all cases.
60
- """
61
-
62
- implemented_properties = ["energy", "forces"]
63
-
64
- def __init__(
65
- self,
66
- shadowing_radius: float = 2.5,
67
- is_substrate_fixed: bool = True,
68
- is_z_axis_fixed: bool = True,
69
- symprec: float = 0.01,
70
- material_calculator: Union[MaterialCalculator, InterfaceMaterialCalculator] = InterfaceMaterialCalculator(),
71
- **kwargs,
72
- ):
73
- super().__init__(**kwargs)
74
- self.shadowing_radius = shadowing_radius
75
- self.fix_substrate = is_substrate_fixed
76
- self.fix_z = is_z_axis_fixed
77
- self.symprec = symprec
78
- self.material_calculator = material_calculator
79
-
80
- def _add_constraints(self, atoms: ASEAtoms) -> ASEAtoms:
81
- constraints: List[Union[ASEFixAtoms, ASEFixedPlane, RigidFilmXYInterfaceConstraint]] = []
82
- if self.fix_substrate:
83
- substrate_indices = get_interface_part_indices(atoms, InterfacePartsEnum.SUBSTRATE)
84
- constraints.append(ASEFixAtoms(indices=substrate_indices))
85
- if self.fix_z:
86
- all_indices = list(range(len(atoms)))
87
- constraints.append(ASEFixedPlane(indices=all_indices, direction=[0, 0, 1]))
88
-
89
- film_indices = get_interface_part_indices(atoms, InterfacePartsEnum.FILM)
90
- if film_indices:
91
- constraints.append(RigidFilmXYInterfaceConstraint(film_indices=film_indices))
92
-
93
- atoms.set_constraint(constraints)
94
- return atoms
95
-
96
- def _calculate_forces(self, atoms: ASEAtoms, energy: float) -> np.ndarray:
97
- forces = np.zeros((len(atoms), 3))
98
- dx = 0.01
99
- for i in range(len(atoms)):
100
- for j in range(3):
101
- atoms_plus = atoms.copy()
102
- atoms_plus.positions[i, j] += dx
103
- material_plus = Material.create(from_ase(atoms_plus))
104
- energy_plus = self.material_calculator.get_energy(material_plus)
105
-
106
- forces[i, j] = -(energy_plus - energy) / dx
107
-
108
- return forces
109
-
110
- def calculate(self, atoms: Optional[ASEAtoms] = None, properties=["energy"], system_changes=ase_all_changes):
111
- if atoms is None:
112
- atoms = self.atoms.copy()
113
-
114
- atoms = self._add_constraints(atoms)
115
- constraints = atoms.constraints
116
-
117
- super().calculate(atoms, properties, system_changes)
118
- material = Material.create(from_ase(atoms))
119
- energy = self.material_calculator.get_energy(material)
120
-
121
- self.results = {"energy": energy}
122
-
123
- if "forces" in properties:
124
- forces = self._calculate_forces(atoms, energy)
125
- for constraint in constraints:
126
- constraint.adjust_forces(atoms, forces)
127
- self.results["forces"] = forces
128
-
129
- def get_potential_energy(self, atoms=None, force_consistent=False):
130
- return self.get_property("energy", atoms)
131
-
132
- def get_forces(self, atoms=None):
133
- return self.get_property("forces", atoms)