@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,37 +0,0 @@
1
- from typing import Dict, Type, Union
2
-
3
- from mat3ra.made.material import Material
4
-
5
- from .....analyze.other import get_chemical_formula_empirical
6
- from .....build_components import MaterialWithBuildMetadata, TypeConfiguration
7
- from .....build_components.entities.auxiliary.zero_dimensional.point_defect_site.builder import PointDefectSiteBuilder
8
- from .....build_components.entities.auxiliary.zero_dimensional.point_defect_site.configuration import (
9
- PointDefectSiteConfiguration,
10
- )
11
- from .....build_components.operations.core.combinations.merge.builder import MergeBuilder
12
- from .configuration import SolidSolutionConfiguration
13
-
14
-
15
- class SolidSolutionBuilder(MergeBuilder):
16
- """Builds a solid solution by merging substitution sites into a supercell."""
17
-
18
- _ConfigurationType: Type[SolidSolutionConfiguration] = SolidSolutionConfiguration
19
-
20
- @property
21
- def merge_component_types_conversion_map(self) -> Dict[Type, Type]:
22
- return {
23
- PointDefectSiteConfiguration: PointDefectSiteBuilder,
24
- }
25
-
26
- def _update_material_name(
27
- self, material: Union[Material, MaterialWithBuildMetadata], configuration: TypeConfiguration
28
- ) -> MaterialWithBuildMetadata:
29
- formula = get_chemical_formula_empirical(material)
30
- concentration_percentage = configuration.actual_concentration * 100
31
- source_element = configuration.source_element
32
- target_element = configuration.target_element
33
- material.name = (
34
- f"{formula} - Solid Solution ({source_element}->{target_element} "
35
- f"{concentration_percentage:.4g}%)"
36
- )
37
- return material
@@ -1,30 +0,0 @@
1
- from typing import List, Union
2
-
3
- from mat3ra.esse.models.materials_category.defective_structures.three_dimensional.solid_solution.configuration import (
4
- SolidSolutionConfigurationSchema,
5
- )
6
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
7
- from mat3ra.made.material import Material
8
-
9
- from .....build_components import MaterialWithBuildMetadata
10
- from .....build_components.entities.auxiliary.zero_dimensional.point_defect_site.configuration import (
11
- PointDefectSiteConfiguration,
12
- )
13
- from .....build_components.operations.core.combinations.merge.configuration import MergeConfiguration
14
-
15
-
16
- class SolidSolutionConfiguration(MergeConfiguration, SolidSolutionConfigurationSchema):
17
- """Configuration for building a solid solution by merging substitution sites.
18
-
19
- Physical specification: crystal, source_element, target_element, concentrations.
20
- The merge_components hold the resolved substitution sites.
21
- """
22
-
23
- type: str = "SolidSolutionConfiguration"
24
- crystal: Union[Material, MaterialWithBuildMetadata]
25
- source_element: str
26
- target_element: str
27
- target_concentration: float
28
- actual_concentration: float
29
- merge_components: List[Union[Material, MaterialWithBuildMetadata, PointDefectSiteConfiguration]]
30
- merge_method: MergeMethodsEnum = MergeMethodsEnum.REPLACE
@@ -1,8 +0,0 @@
1
- from enum import Enum
2
-
3
-
4
- class SiteSelectionMethodEnum(str, Enum):
5
- # Selects sites purely at random (seeded for reproducibility).
6
- RANDOM = "random"
7
- # Selects sites using Farthest Point Sampling for maximal dispersion under PBC.
8
- UNIFORM = "uniform"
@@ -1,76 +0,0 @@
1
- from typing import Optional, Union
2
-
3
- from mat3ra.esse.models.materials_category_components.entities.core.zero_dimensional.atom import AtomSchema
4
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
5
- from mat3ra.made.material import Material
6
-
7
- from .....analyze.solid_solution_analyzer import SolidSolutionAnalyzer
8
- from .....build_components import MaterialWithBuildMetadata
9
- from .....build_components.entities.auxiliary.zero_dimensional.point_defect_site.configuration import (
10
- PointDefectSiteConfiguration,
11
- )
12
- from .....build_components.entities.reusable.three_dimensional.supercell.helpers import create_supercell
13
- from .builder import SolidSolutionBuilder
14
- from .configuration import SolidSolutionConfiguration
15
- from .enums import SiteSelectionMethodEnum
16
-
17
-
18
- def create_solid_solution(
19
- material: Union[Material, MaterialWithBuildMetadata],
20
- source_element: str,
21
- target_element: str,
22
- concentration: float,
23
- seed: Optional[int] = None,
24
- tolerance: float = 0.01,
25
- max_supercell_cells: int = 128,
26
- site_selection_method: SiteSelectionMethodEnum = SiteSelectionMethodEnum.UNIFORM,
27
- ) -> MaterialWithBuildMetadata:
28
- """
29
- Create a solid solution by partially substituting one element for another.
30
-
31
- Automatically determines the optimal supercell size to achieve the target
32
- concentration, builds the supercell, and performs substitution.
33
-
34
- Args:
35
- material (Union[Material, MaterialWithBuildMetadata]): Unit cell crystal.
36
- source_element (str): Element to partially replace (e.g. "Hf").
37
- target_element (str): Replacement element (e.g. "Zr").
38
- concentration (float): Fraction of source_element to replace (0.0-1.0).
39
- seed (Optional[int]): Random seed for reproducible site selection.
40
- tolerance (float): Acceptable deviation from target concentration.
41
- max_supercell_cells (int): Maximum supercell size to search.
42
- site_selection_method (SiteSelectionMethodEnum): RANDOM or UNIFORM (Farthest Point Sampling).
43
-
44
- Returns:
45
- MaterialWithBuildMetadata: Solid solution with full build metadata.
46
- """
47
- analyzer = SolidSolutionAnalyzer(
48
- material=material,
49
- source_element=source_element,
50
- target_element=target_element,
51
- target_concentration=concentration,
52
- tolerance=tolerance,
53
- max_supercell_cells=max_supercell_cells,
54
- seed=seed,
55
- site_selection_method=site_selection_method,
56
- )
57
- supercell = create_supercell(material, scaling_factor=analyzer.optimal_supercell_dimensions)
58
- coordinates = supercell.basis.coordinates.values
59
- site_configurations = [
60
- PointDefectSiteConfiguration(
61
- crystal=supercell,
62
- coordinate=coordinates[site_index],
63
- element=AtomSchema(chemical_element=target_element),
64
- )
65
- for site_index in analyzer.selected_site_indices
66
- ]
67
- configuration = SolidSolutionConfiguration(
68
- crystal=material,
69
- source_element=source_element,
70
- target_element=target_element,
71
- target_concentration=concentration,
72
- actual_concentration=analyzer.actual_concentration,
73
- merge_components=[supercell] + site_configurations,
74
- merge_method=MergeMethodsEnum.REPLACE,
75
- )
76
- return SolidSolutionBuilder().get_material(configuration)
@@ -1,11 +0,0 @@
1
- from .configuration import AdatomDefectConfiguration
2
- from .....build_components.entities.reusable.two_dimensional.slab_stack.builder import SlabStackBuilder
3
-
4
-
5
- class AdatomDefectBuilder(SlabStackBuilder):
6
- _ConfigurationType = AdatomDefectConfiguration
7
-
8
- def get_name_suffix(self, configuration: AdatomDefectConfiguration) -> str:
9
- elements = set(configuration.added_component.basis.elements.values)
10
- elements_str = ", ".join(sorted(elements))
11
- return f"{elements_str} Adatom"
@@ -1,18 +0,0 @@
1
- from mat3ra.esse.models.materials_category.defective_structures.two_dimensional.adatom.configuration import (
2
- AdatomDefectConfigurationSchema,
3
- AxisEnum,
4
- )
5
-
6
- from .....build_components.entities.reusable.two_dimensional.slab_stack.configuration import SlabStackConfiguration
7
-
8
-
9
- class AdatomDefectConfiguration(SlabStackConfiguration, AdatomDefectConfigurationSchema):
10
- """
11
- Configuration for creating an adatom defect on a slab surface.
12
-
13
- Args:
14
- stack_components: List containing [slab, isolated_defect, vacuum].
15
- """
16
-
17
- type: str = "AdatomDefectConfiguration"
18
- direction: AxisEnum = AxisEnum.z
@@ -1,137 +0,0 @@
1
- from typing import List, Optional
2
-
3
- from mat3ra.made.material import Material
4
- from .builder import AdatomDefectBuilder
5
- from .configuration import (
6
- AdatomDefectConfiguration,
7
- )
8
- from .types import AdatomDefectDict
9
- from .....analyze.crystal_site.adatom_crystal_site_material_analyzer import (
10
- AdatomCrystalSiteMaterialAnalyzer,
11
- )
12
- from .....analyze.crystal_site.adatom_material_analyzer import AdatomMaterialAnalyzer
13
- from .....build_components import MaterialWithBuildMetadata
14
- from .....build_components.operations.core.combinations.enums import AdatomPlacementMethodEnum
15
- from .....operations.core.binary import merge
16
-
17
-
18
- def get_adatom_defect_analyzer_cls(
19
- placement_method: str = AdatomPlacementMethodEnum.EXACT_COORDINATE.value,
20
- ):
21
- if placement_method == AdatomPlacementMethodEnum.EXACT_COORDINATE.value:
22
- return AdatomMaterialAnalyzer
23
- elif placement_method == AdatomPlacementMethodEnum.NEW_CRYSTAL_SITE.value:
24
- return AdatomCrystalSiteMaterialAnalyzer
25
- else:
26
- raise ValueError(f"Unsupported placement method: {placement_method}")
27
-
28
-
29
- def create_defect_adatom(
30
- slab: MaterialWithBuildMetadata,
31
- position_on_surface: List[float],
32
- distance_z: float = 1.0,
33
- placement_method: str = AdatomPlacementMethodEnum.EXACT_COORDINATE.value,
34
- element: Optional[str] = None,
35
- use_cartesian_coordinates: bool = False,
36
- ) -> Material:
37
- """
38
- Create an adatom defect based on the specified placement method.
39
-
40
- Args:
41
- slab: The slab material.
42
- position_on_surface: Position on the surface [x, y].
43
- distance_z: Distance above the surface in Angstroms.
44
- placement_method: Method to place the adatom.
45
- element: Chemical element for the adatom.
46
- use_cartesian_coordinates: Whether the position_on_surface is in Cartesian units.
47
-
48
- Returns:
49
- Material: The slab with adatom defect.
50
- """
51
- # Reuse the create_multiple_adatom_defects function below
52
- slab_with_adatom = create_multiple_adatom_defects(
53
- slab,
54
- defect_dicts=[
55
- AdatomDefectDict(
56
- **{
57
- "element": element or "Si", # Default to Silicon if no element provided
58
- "coordinate_2d": position_on_surface,
59
- "distance_z": distance_z,
60
- "use_cartesian_coordinates": use_cartesian_coordinates,
61
- }
62
- )
63
- ],
64
- placement_method=placement_method,
65
- )
66
- return slab_with_adatom
67
-
68
-
69
- def create_multiple_adatom_defects(
70
- slab: MaterialWithBuildMetadata, defect_dicts: List[AdatomDefectDict], placement_method: str
71
- ) -> Material:
72
- """
73
- Create multiple adatom defects from a list of AdatomDefectDict.
74
-
75
- Args:
76
- slab: The slab material.
77
- defect_dicts: List of adatom dictionaries with keys:
78
- - element: str (chemical element for the adatom)
79
- - coordinate: List[float] (position on surface [x, y])
80
- - distance_z: float (distance above surface in Angstroms)
81
- - use_cartesian_coordinates: bool (optional, defaults to False)
82
- Whether the coordinate is in Cartesian units.
83
- placement_method: Method to place all adatoms (common for all defects).
84
- Valid values from AtomPlacementMethodEnum:
85
- - "exact_coordinate" (default): Places atom at exact coordinate
86
- - "new_crystal_site": Places atom at nearest crystal site
87
- - "equidistant": Places atom equidistant from nearest atoms
88
-
89
- Returns:
90
- Material: The slab with all adatom defects applied.
91
- """
92
- if placement_method not in [e.value for e in AdatomPlacementMethodEnum]:
93
- raise ValueError(f"Unsupported placement method: {placement_method}")
94
-
95
- if not defect_dicts:
96
- return slab
97
-
98
- all_adatom_configs = []
99
- analyzer_cls = get_adatom_defect_analyzer_cls(placement_method)
100
-
101
- last_analyzer = None
102
-
103
- for defect_dict in defect_dicts:
104
- coordinate_2d = defect_dict.coordinate_2d
105
- use_cartesian = defect_dict.use_cartesian_coordinates
106
-
107
- if use_cartesian:
108
- coordinate_3d = coordinate_2d + [0.0]
109
- coordinate_3d_crystal = slab.basis.cell.convert_point_to_crystal(coordinate_3d)
110
- coordinate_2d = coordinate_3d_crystal[:2]
111
-
112
- analyzer = analyzer_cls(
113
- material=slab,
114
- coordinate_2d=coordinate_2d,
115
- distance_z=defect_dict.distance_z,
116
- placement_method=placement_method,
117
- element=defect_dict.element,
118
- )
119
- last_analyzer = analyzer
120
- all_adatom_configs.append(analyzer.added_component)
121
-
122
- if not last_analyzer:
123
- return slab
124
-
125
- vacuum_configuration = last_analyzer.get_slab_vacuum_configuration()
126
-
127
- merged_adatoms_component = merge(all_adatom_configs)
128
-
129
- stack_components = [
130
- last_analyzer.slab_material_or_configuration_for_stacking,
131
- merged_adatoms_component,
132
- vacuum_configuration,
133
- ]
134
- configuration = AdatomDefectConfiguration(stack_components=stack_components)
135
-
136
- builder = AdatomDefectBuilder()
137
- return builder.get_material(configuration)
@@ -1,22 +0,0 @@
1
- from typing import List
2
-
3
- from pydantic import BaseModel, Field
4
-
5
-
6
- class AdatomDefectDict(BaseModel):
7
- """
8
- Pydantic model for adatom defect configurations used with create_multiple_adatom_defects.
9
-
10
- Required fields:
11
- element: Chemical element for the adatom
12
- coordinate: Position on surface as [x, y] list
13
- distance_z: Distance above surface in Angstroms
14
-
15
- Optional fields:
16
- use_cartesian_coordinates: Whether coordinates are in Cartesian units
17
- """
18
-
19
- element: str = Field(..., description="Chemical element for the adatom")
20
- coordinate_2d: List[float] = Field(..., min_items=2, max_items=2, description="Position on surface as [x, y]")
21
- distance_z: float = Field(..., gt=0, description="Distance above surface in Angstroms")
22
- use_cartesian_coordinates: bool = False
@@ -1,28 +0,0 @@
1
- from typing import Type
2
-
3
- from mat3ra.made.material import Material
4
- from .configuration import GrainBoundaryPlanarConfiguration
5
- from ....compound_pristine_structures.two_dimensional.interface import InterfaceBuilder, InterfaceBuilderParameters
6
- from .....modify import wrap_to_unit_cell
7
- from .....operations.core.unary import supercell
8
-
9
-
10
- class GrainBoundaryPlanarBuilder(InterfaceBuilder):
11
- """
12
- Builder for creating grain boundaries.
13
-
14
- Uses InterfaceBuilder to create a Z-stacked interface, then transforms the supercell
15
- to flip the Z direction to X direction for grain boundary orientation.
16
- """
17
-
18
- _BuildParametersType: Type[InterfaceBuilderParameters] = InterfaceBuilderParameters
19
- _DefaultBuildParameters = InterfaceBuilderParameters()
20
-
21
- def _generate(self, configuration: GrainBoundaryPlanarConfiguration) -> Material:
22
- interface = super()._generate(configuration)
23
- rotated_interface = supercell(interface, [[0, 0, 1], [0, 1, 0], [1, 0, 0]])
24
- wrapped_interface = wrap_to_unit_cell(rotated_interface)
25
- return wrapped_interface
26
-
27
- def get_name_suffix(self, configuration: GrainBoundaryPlanarConfiguration) -> str:
28
- return "Grain Boundary"
@@ -1,55 +0,0 @@
1
- from typing import List, Optional
2
-
3
- from mat3ra.code.array_with_ids import ArrayWithIds
4
- from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
5
- # fmt: off
6
- from mat3ra.esse.models.materials_category.defective_structures.two_dimensional. \
7
- grain_boundary_planar.configuration import (
8
- GrainBoundaryPlanarConfigurationSchema,
9
- )
10
-
11
- from ....compound_pristine_structures.two_dimensional.interface import InterfaceConfiguration
12
- from ....pristine_structures.two_dimensional.slab_strained_supercell.configuration import \
13
- SlabStrainedSupercellConfiguration
14
- from .....build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
15
- from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import \
16
- SlabConfiguration
17
-
18
-
19
- class GrainBoundaryPlanarConfiguration(InterfaceConfiguration, GrainBoundaryPlanarConfigurationSchema):
20
- direction: AxisEnum = AxisEnum.z
21
-
22
- @property
23
- def phase_1_configuration(self) -> SlabConfiguration:
24
- return self.stack_components[0]
25
-
26
- @property
27
- def phase_2_configuration(self) -> SlabConfiguration:
28
- return self.stack_components[1]
29
-
30
- @property
31
- def vacuum_configuration(self) -> VacuumConfiguration:
32
- if len(self.stack_components) > 2:
33
- return self.stack_components[2]
34
- return VacuumConfiguration(
35
- size=0.0, crystal=self.film_configuration.atomic_layers.crystal, direction=self.direction
36
- )
37
-
38
- @classmethod
39
- def from_parameters(
40
- cls,
41
- phase_1_configuration: SlabStrainedSupercellConfiguration,
42
- phase_2_configuration: SlabStrainedSupercellConfiguration,
43
- xy_shift: Optional[List[float]] = None,
44
- gaps: Optional[List[float]] = None,
45
- ) -> "GrainBoundaryPlanarConfiguration":
46
- if xy_shift is None:
47
- xy_shift = [0.0, 0.0]
48
-
49
- stack_components = [phase_1_configuration, phase_2_configuration]
50
- return cls(
51
- stack_components=stack_components,
52
- direction=AxisEnum.z,
53
- xy_shift=xy_shift,
54
- gaps=ArrayWithIds.from_values(gaps),
55
- )
@@ -1,75 +0,0 @@
1
- from typing import Optional, List, Tuple, Union
2
-
3
- from mat3ra.made.material import Material
4
- from .builder import GrainBoundaryPlanarBuilder
5
- from .configuration import GrainBoundaryPlanarConfiguration
6
- from .....analyze.interface import GrainBoundaryPlanarAnalyzer
7
- from .....analyze.lattice import get_material_with_conventional_lattice
8
- from .....build_components import MaterialWithBuildMetadata
9
-
10
-
11
- def create_grain_boundary_planar(
12
- phase_1_material: Union[Material, MaterialWithBuildMetadata],
13
- phase_2_material: Optional[Material] = None,
14
- phase_1_miller_indices: Tuple[int, int, int] = (0, 0, 1),
15
- phase_2_miller_indices: Tuple[int, int, int] = (0, 0, 1),
16
- phase_1_thickness: int = 1,
17
- phase_2_thickness: int = 1,
18
- translation_vector: List[float] = [0.0, 0.0],
19
- gap: float = 3.0,
20
- max_area: float = 50.0,
21
- match_id: int = 0,
22
- max_area_ratio_tol: float = 0.09,
23
- max_length_tol: float = 0.03,
24
- max_angle_tol: float = 0.01,
25
- use_conventional_cell: bool = True,
26
- ) -> Material:
27
- """
28
- Create a planar grain boundary between two materials with different orientations.
29
-
30
- Args:
31
- phase_1_material: The material to use for each phase of the grain boundary
32
- phase_1_miller_indices: Miller indices for phase 1
33
- phase_2_miller_indices: Miller indices for phase 2
34
- phase_1_thickness: Number of layers for phase 1
35
- phase_2_thickness: Number of layers for phase 2
36
- translation_vector: Relative shift between phases [x, y, z]
37
- gap: Gap between phases in Angstroms
38
- match_id: ZSL match ID to use (0 for first match)
39
- max_area: Maximum area for ZSL matching
40
- max_area_ratio_tol: Area ratio tolerance for ZSL matching
41
- max_length_tol: Length tolerance for ZSL matching
42
- max_angle_tol: Angle tolerance for ZSL matching
43
-
44
- Returns:
45
- Material: The grain boundary material
46
- """
47
- phase_2_material = phase_2_material or phase_1_material
48
- if use_conventional_cell:
49
- phase_1_material = get_material_with_conventional_lattice(phase_1_material)
50
- phase_2_material = get_material_with_conventional_lattice(phase_2_material)
51
-
52
- analyzer = GrainBoundaryPlanarAnalyzer(
53
- phase_1_material=phase_1_material,
54
- phase_2_material=phase_2_material,
55
- phase_1_miller_indices=phase_1_miller_indices,
56
- phase_2_miller_indices=phase_2_miller_indices,
57
- phase_1_thickness=phase_1_thickness,
58
- phase_2_thickness=phase_2_thickness,
59
- max_area=max_area,
60
- max_area_ratio_tol=max_area_ratio_tol,
61
- max_length_tol=max_length_tol,
62
- max_angle_tol=max_angle_tol,
63
- )
64
-
65
- strained_config = analyzer.get_grain_boundary_configuration_by_match_id(match_id)
66
-
67
- gb_config = GrainBoundaryPlanarConfiguration.from_parameters(
68
- phase_1_configuration=strained_config.substrate_configuration,
69
- phase_2_configuration=strained_config.film_configuration,
70
- xy_shift=translation_vector,
71
- gaps=[gap, gap],
72
- )
73
-
74
- builder = GrainBoundaryPlanarBuilder()
75
- return builder.get_material(gb_config)
@@ -1,15 +0,0 @@
1
- from .configuration import IslandDefectConfiguration
2
- from .....build_components.entities.reusable.two_dimensional.slab_stack.builder import SlabStackBuilder
3
-
4
-
5
- class IslandDefectBuilder(SlabStackBuilder):
6
- """
7
- Builder for creating island defects by merging a slab with a void site.
8
- The void site defines which atoms to remove from the slab.
9
- """
10
-
11
- _ConfigurationType = IslandDefectConfiguration
12
-
13
- @property
14
- def name_suffix(self) -> str:
15
- return "Island"
@@ -1,16 +0,0 @@
1
- from mat3ra.esse.models.materials_category.defective_structures.two_dimensional.island.configuration import (
2
- IslandDefectConfigurationSchema,
3
- )
4
-
5
- from .....build_components.entities.reusable.two_dimensional.slab_stack.configuration import SlabStackConfiguration
6
-
7
-
8
- class IslandDefectConfiguration(SlabStackConfiguration, IslandDefectConfigurationSchema):
9
- """
10
- Configuration for creating an island defect on a slab surface.
11
-
12
- Args:
13
- stack_components: List containing [slab, isolated_island, vacuum].
14
- """
15
-
16
- type: str = "IslandDefectConfiguration"
@@ -1,116 +0,0 @@
1
- from typing import Union, TypeVar
2
-
3
- from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
4
-
5
- from .builder import IslandDefectBuilder
6
- from .configuration import IslandDefectConfiguration
7
- from .....analyze.slab import SlabMaterialAnalyzer
8
- from .....build_components import MaterialWithBuildMetadata
9
- from .....build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
10
- from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.builder import SlabBuilder
11
- from .....build_components.entities.reusable.two_dimensional.slab_stack.helpers import (
12
- recreate_slab_with_fractional_layers,
13
- )
14
- from .....build_components.entities.reusable.zero_dimensional.coordinates_shape_enum import CoordinatesShapeEnum
15
- from .....entities.coordinate import (
16
- CoordinateCondition,
17
- CylinderCoordinateCondition,
18
- SphereCoordinateCondition,
19
- BoxCoordinateCondition,
20
- TriangularPrismCoordinateCondition,
21
- PlaneCoordinateCondition,
22
- )
23
- from .....modify import filter_by_condition_on_coordinates
24
-
25
- CoordinateConditionType = TypeVar("CoordinateConditionType", bound=CoordinateCondition)
26
-
27
-
28
- def create_defect_island(
29
- slab: MaterialWithBuildMetadata,
30
- condition: Union[
31
- CylinderCoordinateCondition,
32
- SphereCoordinateCondition,
33
- BoxCoordinateCondition,
34
- TriangularPrismCoordinateCondition,
35
- PlaneCoordinateCondition,
36
- CoordinateConditionType,
37
- ] = CylinderCoordinateCondition(),
38
- use_cartesian_coordinates: bool = True,
39
- number_of_added_layers: Union[int, float] = 1,
40
- ) -> MaterialWithBuildMetadata:
41
- """
42
- Create an island defect using the new IslandDefectConfiguration and IslandDefectBuilder.
43
-
44
- Args:
45
- slab: The slab material.
46
- condition: The coordinate condition that defines the island shape.
47
- number_of_added_layers: Number of additional layers to add to the slab, from which the island will be created.
48
-
49
- Returns:
50
- Material: The slab with island defect.
51
- """
52
-
53
- material_with_additional_layers = recreate_slab_with_fractional_layers(slab, number_of_added_layers)
54
-
55
- isolated_island = filter_by_condition_on_coordinates(
56
- material=material_with_additional_layers,
57
- condition=condition.condition,
58
- use_cartesian_coordinates=use_cartesian_coordinates,
59
- )
60
-
61
- # Create the island defect using IslandDefectBuilder
62
- analyzer = SlabMaterialAnalyzer(material=slab)
63
- slab_without_vacuum_configuration = analyzer.slab_configuration_with_no_vacuum
64
- slab_build_parameters = analyzer.build_parameters
65
-
66
- new_slab = SlabBuilder(build_parameters=slab_build_parameters).get_material(slab_without_vacuum_configuration)
67
-
68
- original_vacuum_config = analyzer.get_slab_vacuum_configuration()
69
- vacuum_config = VacuumConfiguration(
70
- size=original_vacuum_config.size, crystal=new_slab, direction=original_vacuum_config.direction
71
- )
72
-
73
- island_config = IslandDefectConfiguration(
74
- stack_components=[new_slab, isolated_island, vacuum_config], direction=AxisEnum.z
75
- )
76
-
77
- island_builder = IslandDefectBuilder()
78
- return island_builder.get_material(island_config)
79
-
80
-
81
- def get_coordinate_condition(shape: CoordinatesShapeEnum, dict_params: dict):
82
- """
83
- Returns the appropriate coordinate condition based on the shape provided.
84
-
85
- Args:
86
- shape (CoordinatesShapeEnum): Shape of the island (e.g., cylinder, box, etc.).
87
- dict_params (dict): Parameters for the shape condition.
88
-
89
- Returns:
90
- CoordinateCondition: The appropriate condition object.
91
- """
92
- if shape == "cylinder":
93
- return CylinderCoordinateCondition(
94
- center_position=dict_params.get("center_position", [0.5, 0.5]),
95
- radius=dict_params["radius"],
96
- min_z=dict_params["min_z"],
97
- max_z=dict_params["max_z"],
98
- )
99
- elif shape == "sphere":
100
- return SphereCoordinateCondition(
101
- center_coordinate=dict_params.get("center_coordinate", [0.5, 0.5, 0.5]), radius=dict_params["radius"]
102
- )
103
- elif shape == "box":
104
- return BoxCoordinateCondition(
105
- min_coordinate=dict_params["min_coordinate"], max_coordinate=dict_params["max_coordinate"]
106
- )
107
- elif shape == "triangular_prism":
108
- return TriangularPrismCoordinateCondition(
109
- position_on_surface_1=dict_params["position_on_surface_1"],
110
- position_on_surface_2=dict_params["position_on_surface_2"],
111
- position_on_surface_3=dict_params["position_on_surface_3"],
112
- min_z=dict_params["min_z"],
113
- max_z=dict_params["max_z"],
114
- )
115
- else:
116
- raise ValueError(f"Unsupported island shape: {shape}")