@mat3ra/made 2026.8.13-0 → 2026.8.26-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 (493) hide show
  1. package/package.json +9 -5
  2. package/.babelrc +0 -10
  3. package/.eslintrc.json +0 -11
  4. package/.gitattributes +0 -1
  5. package/.husky/post-checkout +0 -3
  6. package/.husky/post-commit +0 -3
  7. package/.husky/post-merge +0 -3
  8. package/.husky/pre-commit +0 -6
  9. package/.husky/pre-push +0 -3
  10. package/.mocharc.json +0 -5
  11. package/.pre-commit-config.yaml +0 -26
  12. package/.prettierignore +0 -2
  13. package/.prettierrc +0 -6
  14. package/AGENTS.md +0 -133
  15. package/MANIFEST.in +0 -1
  16. package/data/constants.json +0 -13
  17. package/data/reciprocal_paths.json +0 -111
  18. package/images/made/tools/tools_diagram_general.png +0 -3
  19. package/images/made/tools/tools_diagram_interface.png +0 -3
  20. package/pyproject.toml +0 -123
  21. package/scripts/generate-mixins.ts +0 -28
  22. package/src/__init__.py +0 -0
  23. package/src/js/Material.ts +0 -618
  24. package/src/js/basis/basis.ts +0 -634
  25. package/src/js/basis/constrained_basis.ts +0 -115
  26. package/src/js/basis/coordinates.ts +0 -92
  27. package/src/js/basis/elements.ts +0 -24
  28. package/src/js/basis/helpers.ts +0 -20
  29. package/src/js/basis/labels.ts +0 -6
  30. package/src/js/cell/cell.ts +0 -149
  31. package/src/js/cell/conventional_cell.ts +0 -86
  32. package/src/js/cell/primitive_cell.ts +0 -166
  33. package/src/js/constants/molecule.ts +0 -18
  34. package/src/js/constants.ts +0 -4
  35. package/src/js/constraints/constraints.ts +0 -45
  36. package/src/js/generated/MaterialSchemaMixin.ts +0 -79
  37. package/src/js/lattice/lattice.ts +0 -308
  38. package/src/js/lattice/lattice_types.ts +0 -134
  39. package/src/js/lattice/reciprocal/lattice_reciprocal.ts +0 -206
  40. package/src/js/lattice/reciprocal/paths.ts +0 -39
  41. package/src/js/lattice/reciprocal/symmetry_points.ts +0 -886
  42. package/src/js/lattice/unit_cell.ts +0 -66
  43. package/src/js/made.ts +0 -62
  44. package/src/js/parsers/cif.ts +0 -25
  45. package/src/js/parsers/errors.ts +0 -6
  46. package/src/js/parsers/espresso.ts +0 -29
  47. package/src/js/parsers/native_format_parsers.ts +0 -52
  48. package/src/js/parsers/parsers.ts +0 -13
  49. package/src/js/parsers/poscar.ts +0 -218
  50. package/src/js/parsers/xyz.ts +0 -190
  51. package/src/js/parsers/xyz_combinatorial_basis.ts +0 -268
  52. package/src/js/tools/basis.ts +0 -131
  53. package/src/js/tools/cell.ts +0 -40
  54. package/src/js/tools/index.ts +0 -11
  55. package/src/js/tools/material.ts +0 -64
  56. package/src/js/tools/supercell.ts +0 -89
  57. package/src/js/tools/surface.ts +0 -213
  58. package/src/py/__init__.py +0 -0
  59. package/src/py/mat3ra/__init__.py +0 -1
  60. package/src/py/mat3ra/made/__init__.py +0 -7
  61. package/src/py/mat3ra/made/basis/__init__.py +0 -255
  62. package/src/py/mat3ra/made/basis/coordinates.py +0 -43
  63. package/src/py/mat3ra/made/cell/__init__.py +0 -55
  64. package/src/py/mat3ra/made/cell/primitive_cell.py +0 -156
  65. package/src/py/mat3ra/made/data_helper.py +0 -5
  66. package/src/py/mat3ra/made/lattice.py +0 -195
  67. package/src/py/mat3ra/made/material.py +0 -135
  68. package/src/py/mat3ra/made/metadata.py +0 -45
  69. package/src/py/mat3ra/made/reciprocal/__init__.py +0 -5
  70. package/src/py/mat3ra/made/reciprocal/lattice_reciprocal.py +0 -147
  71. package/src/py/mat3ra/made/reciprocal/paths.py +0 -30
  72. package/src/py/mat3ra/made/reciprocal/symmetry_points.py +0 -385
  73. package/src/py/mat3ra/made/tools/README.md +0 -173
  74. package/src/py/mat3ra/made/tools/__init__.py +0 -0
  75. package/src/py/mat3ra/made/tools/analyze/__init__.py +0 -31
  76. package/src/py/mat3ra/made/tools/analyze/basis/__init__.py +0 -3
  77. package/src/py/mat3ra/made/tools/analyze/basis/analyzer.py +0 -50
  78. package/src/py/mat3ra/made/tools/analyze/build_metadata_analyzer.py +0 -32
  79. package/src/py/mat3ra/made/tools/analyze/build_metadata_analyzer_factory.py +0 -31
  80. package/src/py/mat3ra/made/tools/analyze/coordination.py +0 -56
  81. package/src/py/mat3ra/made/tools/analyze/crystal_site/__init__.py +0 -0
  82. package/src/py/mat3ra/made/tools/analyze/crystal_site/adatom_crystal_site_material_analyzer.py +0 -35
  83. package/src/py/mat3ra/made/tools/analyze/crystal_site/adatom_material_analyzer.py +0 -49
  84. package/src/py/mat3ra/made/tools/analyze/crystal_site/crystal_site_analyzer.py +0 -65
  85. package/src/py/mat3ra/made/tools/analyze/crystal_site/voronoi_crystal_site_analyzer.py +0 -47
  86. package/src/py/mat3ra/made/tools/analyze/enums.py +0 -33
  87. package/src/py/mat3ra/made/tools/analyze/fingerprint/__init__.py +0 -4
  88. package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/__init__.py +0 -0
  89. package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/layered_fingerprint_along_axis.py +0 -83
  90. package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/unique_element_string_per_layer.py +0 -9
  91. package/src/py/mat3ra/made/tools/analyze/interface/__init__.py +0 -20
  92. package/src/py/mat3ra/made/tools/analyze/interface/commensurate.py +0 -156
  93. package/src/py/mat3ra/made/tools/analyze/interface/enums.py +0 -60
  94. package/src/py/mat3ra/made/tools/analyze/interface/grain_boundary.py +0 -80
  95. package/src/py/mat3ra/made/tools/analyze/interface/simple.py +0 -251
  96. package/src/py/mat3ra/made/tools/analyze/interface/twisted_nanoribbons.py +0 -91
  97. package/src/py/mat3ra/made/tools/analyze/interface/utils/__init__.py +0 -77
  98. package/src/py/mat3ra/made/tools/analyze/interface/utils/holders.py +0 -14
  99. package/src/py/mat3ra/made/tools/analyze/interface/utils/vector.py +0 -56
  100. package/src/py/mat3ra/made/tools/analyze/interface/zsl.py +0 -259
  101. package/src/py/mat3ra/made/tools/analyze/interface_material.py +0 -45
  102. package/src/py/mat3ra/made/tools/analyze/lattice/__init__.py +0 -2
  103. package/src/py/mat3ra/made/tools/analyze/lattice/analyzer.py +0 -126
  104. package/src/py/mat3ra/made/tools/analyze/lattice/helpers.py +0 -31
  105. package/src/py/mat3ra/made/tools/analyze/lattice_lines.py +0 -30
  106. package/src/py/mat3ra/made/tools/analyze/lattice_planes.py +0 -192
  107. package/src/py/mat3ra/made/tools/analyze/lattice_swap_analyzer.py +0 -105
  108. package/src/py/mat3ra/made/tools/analyze/material.py +0 -276
  109. package/src/py/mat3ra/made/tools/analyze/other.py +0 -434
  110. package/src/py/mat3ra/made/tools/analyze/rdf.py +0 -74
  111. package/src/py/mat3ra/made/tools/analyze/slab.py +0 -76
  112. package/src/py/mat3ra/made/tools/analyze/solid_solution_analyzer.py +0 -171
  113. package/src/py/mat3ra/made/tools/analyze/terrace.py +0 -105
  114. package/src/py/mat3ra/made/tools/analyze/utils.py +0 -162
  115. package/src/py/mat3ra/made/tools/bond_directions/__init__.py +0 -0
  116. package/src/py/mat3ra/made/tools/bond_directions/bond_directions.py +0 -150
  117. package/src/py/mat3ra/made/tools/bond_directions/bond_directions_for_element_list.py +0 -7
  118. package/src/py/mat3ra/made/tools/bond_directions/bond_directions_templates_enum.py +0 -8
  119. package/src/py/mat3ra/made/tools/bond_directions/bond_directions_templates_for_element.py +0 -16
  120. package/src/py/mat3ra/made/tools/build/__init__.py +0 -25
  121. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/__init__.py +0 -7
  122. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/helpers.py +0 -59
  123. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/types.py +0 -26
  124. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/utils.py +0 -139
  125. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/__init__.py +0 -47
  126. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/__init__.py +0 -11
  127. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/build_parameters.py +0 -5
  128. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/builder.py +0 -164
  129. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/configuration.py +0 -48
  130. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/helpers.py +0 -134
  131. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/commensurate/__init__.py +0 -6
  132. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/commensurate/helpers.py +0 -157
  133. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/enums.py +0 -7
  134. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/__init__.py +0 -7
  135. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/configuration.py +0 -13
  136. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/helpers.py +0 -70
  137. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/utils.py +0 -87
  138. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/zsl/__init__.py +0 -6
  139. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/zsl/helpers.py +0 -129
  140. package/src/py/mat3ra/made/tools/build/defective_structures/__init__.py +0 -0
  141. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/__init__.py +0 -0
  142. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/__init__.py +0 -0
  143. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/build_parameters.py +0 -12
  144. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/builder.py +0 -17
  145. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/configuration.py +0 -40
  146. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/helpers.py +0 -82
  147. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/__init__.py +0 -1
  148. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/__init__.py +0 -9
  149. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/builder.py +0 -37
  150. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/configuration.py +0 -30
  151. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/enums.py +0 -8
  152. package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/helpers.py +0 -76
  153. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/__init__.py +0 -0
  154. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/__init__.py +0 -0
  155. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/builder.py +0 -11
  156. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/configuration.py +0 -18
  157. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/helpers.py +0 -137
  158. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/types.py +0 -22
  159. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/__init__.py +0 -0
  160. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/builder.py +0 -28
  161. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/configuration.py +0 -55
  162. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/helpers.py +0 -75
  163. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/builder.py +0 -15
  164. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/configuration.py +0 -16
  165. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/helpers.py +0 -116
  166. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/build_parameters.py +0 -10
  167. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/builder.py +0 -30
  168. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/configuration.py +0 -11
  169. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/helpers.py +0 -78
  170. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/__init__.py +0 -0
  171. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/__init__.py +0 -0
  172. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/builder.py +0 -31
  173. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/configuration.py +0 -45
  174. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/helpers.py +0 -80
  175. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/__init__.py +0 -40
  176. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/atom_placement_method_enum.py +0 -14
  177. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/__init__.py +0 -7
  178. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/builder.py +0 -42
  179. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/configuration.py +0 -27
  180. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/complex_defect_type_enum.py +0 -5
  181. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/factories.py +0 -69
  182. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/helpers.py +0 -92
  183. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/__init__.py +0 -7
  184. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/builder.py +0 -8
  185. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/configuration.py +0 -29
  186. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/helpers.py +0 -48
  187. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/interstitial_placement_method_enum.py +0 -8
  188. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/point_defect_type_enum.py +0 -8
  189. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/__init__.py +0 -7
  190. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/builder.py +0 -6
  191. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/configuration.py +0 -41
  192. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/helpers.py +0 -43
  193. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/substitution_placement_method_enum.py +0 -7
  194. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/types.py +0 -24
  195. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/__init__.py +0 -7
  196. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/builder.py +0 -19
  197. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/configuration.py +0 -27
  198. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/helpers.py +0 -42
  199. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/vacancy_placement_method_enum.py +0 -7
  200. package/src/py/mat3ra/made/tools/build/pristine_structures/__init__.py +0 -0
  201. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/__init__.py +0 -0
  202. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/builder.py +0 -80
  203. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/configurations.py +0 -22
  204. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/helpers.py +0 -40
  205. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/__init__.py +0 -0
  206. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/__init__.py +0 -29
  207. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/build_parameters.py +0 -5
  208. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/builders.py +0 -56
  209. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/configuration.py +0 -33
  210. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/helpers.py +0 -76
  211. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/__init__.py +0 -11
  212. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/build_parameters.py +0 -9
  213. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/builders.py +0 -83
  214. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/configuration.py +0 -35
  215. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/helpers.py +0 -62
  216. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/__init__.py +0 -9
  217. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/build_parameters.py +0 -8
  218. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/builder.py +0 -42
  219. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/configuration.py +0 -99
  220. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/helpers.py +0 -95
  221. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/termination_utils.py +0 -14
  222. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/utils.py +0 -61
  223. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab_strained_supercell/builder.py +0 -22
  224. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab_strained_supercell/configuration.py +0 -17
  225. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/__init__.py +0 -0
  226. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/__init__.py +0 -19
  227. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/analyzer.py +0 -86
  228. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/__init__.py +0 -7
  229. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/builder.py +0 -54
  230. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/configuration.py +0 -19
  231. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/enums.py +0 -42
  232. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/helpers.py +0 -127
  233. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/__init__.py +0 -7
  234. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/builder.py +0 -33
  235. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/configuration.py +0 -16
  236. package/src/py/mat3ra/made/tools/build/processed_structures/__init__.py +0 -0
  237. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/__init__.py +0 -0
  238. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/__init__.py +0 -0
  239. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/__init__.py +0 -9
  240. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/coordination_based_passivation_material_analyzer.py +0 -112
  241. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/passivation_material_analyzer.py +0 -16
  242. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/surface_passivation_material_analyzer.py +0 -32
  243. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/builder.py +0 -23
  244. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/configuration.py +0 -31
  245. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/enums.py +0 -7
  246. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/helpers.py +0 -151
  247. package/src/py/mat3ra/made/tools/build_components/__init__.py +0 -10
  248. package/src/py/mat3ra/made/tools/build_components/entities/__init__.py +0 -0
  249. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/__init__.py +0 -0
  250. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/one_dimensional/miller_indices_2d.py +0 -0
  251. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/two_dimensional/miller_indices.py +0 -18
  252. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/two_dimensional/termination.py +0 -33
  253. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/__init__.py +0 -0
  254. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/__init__.py +0 -2
  255. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/crystal_site.py +0 -24
  256. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/crystal_site_list.py +0 -9
  257. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/point_defect_site/builder.py +0 -32
  258. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/point_defect_site/configuration.py +0 -14
  259. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/__init__.py +0 -0
  260. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/builder.py +0 -29
  261. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/configuration.py +0 -19
  262. package/src/py/mat3ra/made/tools/build_components/entities/core/two_dimensional/vacuum/builder.py +0 -48
  263. package/src/py/mat3ra/made/tools/build_components/entities/core/two_dimensional/vacuum/configuration.py +0 -17
  264. package/src/py/mat3ra/made/tools/build_components/entities/core/zero_dimensional/atom/builder.py +0 -25
  265. package/src/py/mat3ra/made/tools/build_components/entities/core/zero_dimensional/atom/configuration.py +0 -8
  266. package/src/py/mat3ra/made/tools/build_components/entities/reusable/__init__.py +0 -0
  267. package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/__init__.py +0 -16
  268. package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/base_configuration_pydantic.py +0 -5
  269. package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/base_single_builder.py +0 -87
  270. package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/build_parameters.py +0 -5
  271. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/__init__.py +0 -0
  272. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/__init__.py +0 -4
  273. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/builder.py +0 -46
  274. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/configuration.py +0 -19
  275. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/edge_types.py +0 -51
  276. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/helpers.py +0 -58
  277. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/__init__.py +0 -4
  278. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/builder.py +0 -42
  279. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/configuration.py +0 -21
  280. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/__init__.py +0 -0
  281. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/configuration.py +0 -11
  282. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/helpers.py +0 -38
  283. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/__init__.py +0 -24
  284. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/__init__.py +0 -7
  285. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/builder.py +0 -62
  286. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/configuration.py +0 -14
  287. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/helpers.py +0 -42
  288. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/__init__.py +0 -7
  289. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/builder.py +0 -39
  290. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/configuration.py +0 -24
  291. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/__init__.py +0 -10
  292. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/builder.py +0 -36
  293. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/configuration.py +0 -31
  294. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/helpers.py +0 -80
  295. package/src/py/mat3ra/made/tools/build_components/entities/reusable/zero_dimensional/__init__.py +0 -0
  296. package/src/py/mat3ra/made/tools/build_components/entities/reusable/zero_dimensional/coordinates_shape_enum.py +0 -8
  297. package/src/py/mat3ra/made/tools/build_components/metadata/__init__.py +0 -2
  298. package/src/py/mat3ra/made/tools/build_components/metadata/build_metadata.py +0 -7
  299. package/src/py/mat3ra/made/tools/build_components/metadata/material_build_metadata.py +0 -35
  300. package/src/py/mat3ra/made/tools/build_components/metadata/material_with_build_metadata.py +0 -8
  301. package/src/py/mat3ra/made/tools/build_components/mixins/__init__.py +0 -2
  302. package/src/py/mat3ra/made/tools/build_components/mixins/convert_generated_items_ase_atoms_mixin.py +0 -8
  303. package/src/py/mat3ra/made/tools/build_components/mixins/convert_generated_items_pymatgen_structure_mixin.py +0 -8
  304. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/__init__.py +0 -0
  305. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/enums.py +0 -11
  306. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/__init__.py +0 -6
  307. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/build_parameters.py +0 -18
  308. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/builder.py +0 -93
  309. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/configuration.py +0 -20
  310. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/stack/builder.py +0 -83
  311. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/stack/configuration.py +0 -24
  312. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/__init__.py +0 -15
  313. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/build_parameters.py +0 -5
  314. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/builders/base.py +0 -33
  315. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/builders/isometric.py +0 -25
  316. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/configuration.py +0 -24
  317. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/__init__.py +0 -13
  318. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/atomic_mass_dependent_function_holder.py +0 -32
  319. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/function_holder.py +0 -80
  320. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/maxwell_boltzmann.py +0 -39
  321. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/perturbation_function_holder.py +0 -45
  322. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/sine_wave_perturbation_function_holder.py +0 -29
  323. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/helpers.py +0 -83
  324. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/__init__.py +0 -5
  325. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/builder.py +0 -25
  326. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/configuration.py +0 -23
  327. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/helpers.py +0 -49
  328. package/src/py/mat3ra/made/tools/build_components/utils.py +0 -44
  329. package/src/py/mat3ra/made/tools/calculate/__init__.py +0 -149
  330. package/src/py/mat3ra/made/tools/calculate/ase/__init__.py +0 -133
  331. package/src/py/mat3ra/made/tools/calculate/ase/constraints.py +0 -91
  332. package/src/py/mat3ra/made/tools/calculate/calculators/__init__.py +0 -4
  333. package/src/py/mat3ra/made/tools/calculate/calculators/interface_material_calculator.py +0 -70
  334. package/src/py/mat3ra/made/tools/calculate/calculators/interface_material_calculator_parameters.py +0 -14
  335. package/src/py/mat3ra/made/tools/calculate/calculators/material_calculator.py +0 -32
  336. package/src/py/mat3ra/made/tools/calculate/calculators/material_calculator_parameters.py +0 -17
  337. package/src/py/mat3ra/made/tools/calculate/interaction_functions.py +0 -23
  338. package/src/py/mat3ra/made/tools/convert/__init__.py +0 -286
  339. package/src/py/mat3ra/made/tools/convert/interface_parts_enum.py +0 -9
  340. package/src/py/mat3ra/made/tools/convert/utils.py +0 -96
  341. package/src/py/mat3ra/made/tools/entities/__init__.py +0 -5
  342. package/src/py/mat3ra/made/tools/entities/coordinate/__init__.py +0 -14
  343. package/src/py/mat3ra/made/tools/entities/coordinate/box_coordinate_condition.py +0 -15
  344. package/src/py/mat3ra/made/tools/entities/coordinate/coordinate_condition.py +0 -16
  345. package/src/py/mat3ra/made/tools/entities/coordinate/coordinate_functions.py +0 -158
  346. package/src/py/mat3ra/made/tools/entities/coordinate/cylinder_coordinate_condition.py +0 -17
  347. package/src/py/mat3ra/made/tools/entities/coordinate/plane_coordinate_condition.py +0 -14
  348. package/src/py/mat3ra/made/tools/entities/coordinate/sphere_coordinate_condition.py +0 -15
  349. package/src/py/mat3ra/made/tools/entities/coordinate/triangular_prism_coordinate_condition.py +0 -26
  350. package/src/py/mat3ra/made/tools/entities/termination_holder.py +0 -12
  351. package/src/py/mat3ra/made/tools/helpers.py +0 -168
  352. package/src/py/mat3ra/made/tools/modify.py +0 -627
  353. package/src/py/mat3ra/made/tools/operations/core/binary.py +0 -106
  354. package/src/py/mat3ra/made/tools/operations/core/unary.py +0 -170
  355. package/src/py/mat3ra/made/tools/operations/core/utils.py +0 -138
  356. package/src/py/mat3ra/made/tools/operations/reusable/unary.py +0 -53
  357. package/src/py/mat3ra/made/tools/optimize.py +0 -55
  358. package/src/py/mat3ra/made/tools/third_party.py +0 -69
  359. package/src/py/mat3ra/made/tools/utils.py +0 -182
  360. package/src/py/mat3ra/made/utils.py +0 -144
  361. package/tests/.gitattributes +0 -1
  362. package/tests/fixtures/AsGe-basis.json +0 -3
  363. package/tests/fixtures/C2H4-translated.json +0 -3
  364. package/tests/fixtures/C2H4.json +0 -3
  365. package/tests/fixtures/FeLiSi-basis.json +0 -3
  366. package/tests/fixtures/FeO.json +0 -3
  367. package/tests/fixtures/Ge2-basis.json +0 -3
  368. package/tests/fixtures/Graphene.json +0 -3
  369. package/tests/fixtures/Graphene.poscar +0 -3
  370. package/tests/fixtures/H2+H-final.json +0 -3
  371. package/tests/fixtures/H2+H-image.json +0 -3
  372. package/tests/fixtures/H2+H-initial.json +0 -3
  373. package/tests/fixtures/H2O.poscar +0 -3
  374. package/tests/fixtures/LiFeSi-basis-labels.json +0 -3
  375. package/tests/fixtures/LiFeSi-basis.json +0 -3
  376. package/tests/fixtures/Na.json +0 -3
  377. package/tests/fixtures/Na4Cl4-cartesian.json +0 -3
  378. package/tests/fixtures/Na4Cl4.json +0 -3
  379. package/tests/fixtures/Na4Cl4.poscar +0 -3
  380. package/tests/fixtures/Ni-hex.json +0 -3
  381. package/tests/fixtures/Ni-hex.poscar +0 -3
  382. package/tests/fixtures/OSi-basis.json +0 -3
  383. package/tests/fixtures/Si-hex.poscar +0 -3
  384. package/tests/fixtures/Si-pwscf.in +0 -3
  385. package/tests/fixtures/Si-slab.json +0 -3
  386. package/tests/fixtures/Si-supercell.json +0 -3
  387. package/tests/fixtures/Si2-basis-repeated.json +0 -3
  388. package/tests/fixtures/Si2-basis.json +0 -3
  389. package/tests/fixtures/Zr1H23Zr1H1.json +0 -3
  390. package/tests/fixtures/Zr1H23Zr1H1.poscar +0 -3
  391. package/tests/fixtures/atomic-constraints.json +0 -3
  392. package/tests/fixtures/hashes.json +0 -3
  393. package/tests/fixtures/si-slab-100.json +0 -3
  394. package/tests/fixtures/si-slab-111-0-vacuum.json +0 -3
  395. package/tests/fixtures/si-slab-111-0.5-vacuum-gamma-120.json +0 -3
  396. package/tests/fixtures/si-slab-111-0.5-vacuum-ratio.json +0 -3
  397. package/tests/fixtures/si-standata.json +0 -3
  398. package/tests/js/basis/basis.ts +0 -247
  399. package/tests/js/cell/cell.ts +0 -182
  400. package/tests/js/cell/primitive_cell.ts +0 -21
  401. package/tests/js/constraints/constraints.ts +0 -11
  402. package/tests/js/fixtures.ts +0 -123
  403. package/tests/js/lattice/lattice.ts +0 -43
  404. package/tests/js/lattice/lattice_reciprocal.ts +0 -104
  405. package/tests/js/material/material.ts +0 -161
  406. package/tests/js/parsers/espresso.ts +0 -12
  407. package/tests/js/parsers/native_formats.ts +0 -35
  408. package/tests/js/parsers/poscar.ts +0 -89
  409. package/tests/js/parsers/xyz.ts +0 -33
  410. package/tests/js/parsers/xyz_combinatorial_basis.ts +0 -156
  411. package/tests/js/register-esse-schemas.cjs +0 -10
  412. package/tests/js/setup.ts +0 -6
  413. package/tests/js/tools/basis.ts +0 -22
  414. package/tests/js/tools/supercell.ts +0 -58
  415. package/tests/js/tools/surface.ts +0 -111
  416. package/tests/py/conftest.py +0 -34
  417. package/tests/py/mat3ra/debug_utils.py +0 -75
  418. package/tests/py/unit/__init__.py +0 -0
  419. package/tests/py/unit/fixtures/__init__.py +0 -0
  420. package/tests/py/unit/fixtures/adatom.py +0 -60
  421. package/tests/py/unit/fixtures/bulk.py +0 -162
  422. package/tests/py/unit/fixtures/cuts.py +0 -118
  423. package/tests/py/unit/fixtures/grain_boundary.py +0 -875
  424. package/tests/py/unit/fixtures/interface/commensurate.py +0 -498
  425. package/tests/py/unit/fixtures/interface/gaas_dia.py +0 -837
  426. package/tests/py/unit/fixtures/interface/gr_ni_111_top_hcp.py +0 -123
  427. package/tests/py/unit/fixtures/interface/simple.py +0 -84
  428. package/tests/py/unit/fixtures/interface/twisted_nanoribbons.py +0 -131
  429. package/tests/py/unit/fixtures/interface/zsl.py +0 -756
  430. package/tests/py/unit/fixtures/island.py +0 -336
  431. package/tests/py/unit/fixtures/merge.py +0 -147
  432. package/tests/py/unit/fixtures/monolayer.py +0 -46
  433. package/tests/py/unit/fixtures/nanoparticle.py +0 -116
  434. package/tests/py/unit/fixtures/nanoribbon/__init__.py +0 -0
  435. package/tests/py/unit/fixtures/nanoribbon/armchair.py +0 -102
  436. package/tests/py/unit/fixtures/nanoribbon/nanoribbon.py +0 -145
  437. package/tests/py/unit/fixtures/nanoribbon/zigzag.py +0 -54
  438. package/tests/py/unit/fixtures/pair_defects.py +0 -41
  439. package/tests/py/unit/fixtures/passivated/nanoribbon.py +0 -69
  440. package/tests/py/unit/fixtures/passivated/slab.py +0 -58
  441. package/tests/py/unit/fixtures/point_defects.py +0 -158
  442. package/tests/py/unit/fixtures/slab.py +0 -606
  443. package/tests/py/unit/fixtures/strain.py +0 -42
  444. package/tests/py/unit/fixtures/supercell.py +0 -64
  445. package/tests/py/unit/fixtures/terrace.py +0 -70
  446. package/tests/py/unit/fixtures/thrid_party/ase_atoms.py +0 -13
  447. package/tests/py/unit/test_analyze_lattice_planes.py +0 -131
  448. package/tests/py/unit/test_cell.py +0 -104
  449. package/tests/py/unit/test_data_files.py +0 -68
  450. package/tests/py/unit/test_lattice.py +0 -103
  451. package/tests/py/unit/test_lattice_type_extended.py +0 -53
  452. package/tests/py/unit/test_material.py +0 -158
  453. package/tests/py/unit/test_operations.py +0 -126
  454. package/tests/py/unit/test_primitive_cell.py +0 -118
  455. package/tests/py/unit/test_reciprocal_lattice.py +0 -86
  456. package/tests/py/unit/test_reciprocal_paths.py +0 -64
  457. package/tests/py/unit/test_symmetry_points.py +0 -151
  458. package/tests/py/unit/test_tools_analyze.py +0 -219
  459. package/tests/py/unit/test_tools_analyze_basis.py +0 -105
  460. package/tests/py/unit/test_tools_analyze_interface.py +0 -223
  461. package/tests/py/unit/test_tools_analyze_interface_material.py +0 -63
  462. package/tests/py/unit/test_tools_analyze_interface_zsl.py +0 -187
  463. package/tests/py/unit/test_tools_analyze_lattice.py +0 -74
  464. package/tests/py/unit/test_tools_analyze_swap.py +0 -80
  465. package/tests/py/unit/test_tools_build.py +0 -158
  466. package/tests/py/unit/test_tools_build_defect/__init__.py +0 -0
  467. package/tests/py/unit/test_tools_build_defect/test_adatom.py +0 -84
  468. package/tests/py/unit/test_tools_build_defect/test_island.py +0 -45
  469. package/tests/py/unit/test_tools_build_defect/test_pair_defect.py +0 -84
  470. package/tests/py/unit/test_tools_build_defect/test_point_defect.py +0 -196
  471. package/tests/py/unit/test_tools_build_defect/test_slab_stack.py +0 -30
  472. package/tests/py/unit/test_tools_build_defect/test_solid_solution.py +0 -90
  473. package/tests/py/unit/test_tools_build_defect/test_terrace.py +0 -44
  474. package/tests/py/unit/test_tools_build_grain_boundary.py +0 -133
  475. package/tests/py/unit/test_tools_build_heterostructure.py +0 -46
  476. package/tests/py/unit/test_tools_build_interface.py +0 -292
  477. package/tests/py/unit/test_tools_build_interface_zsl.py +0 -263
  478. package/tests/py/unit/test_tools_build_maxwell_disorder.py +0 -123
  479. package/tests/py/unit/test_tools_build_metadata.py +0 -79
  480. package/tests/py/unit/test_tools_build_monolayer.py +0 -33
  481. package/tests/py/unit/test_tools_build_nanoparticle.py +0 -42
  482. package/tests/py/unit/test_tools_build_nanoribbon.py +0 -45
  483. package/tests/py/unit/test_tools_build_passivation.py +0 -85
  484. package/tests/py/unit/test_tools_build_perturbation.py +0 -103
  485. package/tests/py/unit/test_tools_build_slab.py +0 -382
  486. package/tests/py/unit/test_tools_build_strain.py +0 -36
  487. package/tests/py/unit/test_tools_build_supercell.py +0 -47
  488. package/tests/py/unit/test_tools_calculate.py +0 -67
  489. package/tests/py/unit/test_tools_convert.py +0 -174
  490. package/tests/py/unit/test_tools_modify.py +0 -248
  491. package/tests/py/unit/utils.py +0 -142
  492. package/tsconfig-transpile.json +0 -3
  493. 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}")