@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,19 +0,0 @@
1
- from .merge_based import NanoparticleConfiguration, NanoparticleBuilder
2
- from .ase_based import ASEBasedNanoparticleConfiguration, ASEBasedNanoparticleBuilder
3
- from .enums import NanoparticleShapesEnum
4
- from .helpers import (
5
- create_nanoparticle_by_shape,
6
- create_nanoparticle_from_material,
7
- create_nanoparticle_by_shape_from_element,
8
- )
9
-
10
- __all__ = [
11
- "NanoparticleConfiguration",
12
- "NanoparticleBuilder",
13
- "ASEBasedNanoparticleConfiguration",
14
- "ASEBasedNanoparticleBuilder",
15
- "NanoparticleShapesEnum",
16
- "create_nanoparticle_by_shape",
17
- "create_nanoparticle_from_material",
18
- "create_nanoparticle_by_shape_from_element",
19
- ]
@@ -1,86 +0,0 @@
1
- from typing import List, Union
2
-
3
- import numpy as np
4
-
5
- from .....analyze import BaseMaterialAnalyzer
6
- from .....entities.coordinate import SphereCoordinateCondition, CoordinateCondition
7
-
8
-
9
- class NanoparticleMaterialAnalyzer(BaseMaterialAnalyzer):
10
- orientation_z: List[int] = [0, 0, 1]
11
- vacuum_padding: float = 10.0
12
- coordinate_condition: Union[SphereCoordinateCondition, CoordinateCondition] = SphereCoordinateCondition()
13
-
14
- def _calculate_max_dimension_from_condition(self) -> float:
15
- if isinstance(self.coordinate_condition, SphereCoordinateCondition):
16
- return 2.0 * self.coordinate_condition.radius
17
-
18
- return self.vacuum_padding
19
-
20
- def _get_cartesian_lattice_dimensions(self) -> List[float]:
21
- """
22
- Get the Cartesian dimensions of the unit cell lattice vectors.
23
- """
24
- lattice_vectors = self.material.lattice.vector_arrays
25
- return [np.linalg.norm(vector) for vector in lattice_vectors]
26
-
27
- @property
28
- def supercell_to_fit_nanoparticle(self) -> List[List[int]]:
29
- """
30
- Calculate the supercell size needed to fit the nanoparticle.
31
- This calculates how many unit cells are needed in each direction to contain
32
- the nanoparticle defined by the coordinate condition.
33
- """
34
- max_dimension = self._calculate_max_dimension_from_condition()
35
-
36
- lattice_dimensions = self._get_cartesian_lattice_dimensions()
37
-
38
- nx = max(1, int(np.ceil(max_dimension / lattice_dimensions[0])))
39
- ny = max(1, int(np.ceil(max_dimension / lattice_dimensions[1])))
40
- nz = max(1, int(np.ceil(max_dimension / lattice_dimensions[2])))
41
-
42
- return [[nx, 0, 0], [0, ny, 0], [0, 0, nz]]
43
-
44
- @property
45
- def supercell_for_vacuum(self) -> List[List[int]]:
46
- """
47
- Calculate the supercell size that includes vacuum padding on all sides.
48
- This is used to create the final cell with appropriate vacuum space.
49
- """
50
- nanoparticle_supercell = self.supercell_to_fit_nanoparticle
51
-
52
- # Get base dimensions from nanoparticle supercell
53
- nx_base = nanoparticle_supercell[0][0]
54
- ny_base = nanoparticle_supercell[1][1]
55
- nz_base = nanoparticle_supercell[2][2]
56
-
57
- # Get lattice dimensions
58
- lattice_dimensions = self._get_cartesian_lattice_dimensions()
59
-
60
- # Calculate additional cells needed for vacuum padding on each side
61
- # We need padding on both sides, so total padding = 2 * vacuum_padding
62
- vacuum_cells_x = max(1, int(np.ceil(2 * self.vacuum_padding / lattice_dimensions[0])))
63
- vacuum_cells_y = max(1, int(np.ceil(2 * self.vacuum_padding / lattice_dimensions[1])))
64
- vacuum_cells_z = max(1, int(np.ceil(2 * self.vacuum_padding / lattice_dimensions[2])))
65
-
66
- # Total supercell size = nanoparticle size + vacuum padding
67
- nx_total = nx_base + vacuum_cells_x
68
- ny_total = ny_base + vacuum_cells_y
69
- nz_total = nz_base + vacuum_cells_z
70
-
71
- return [[nx_total, 0, 0], [0, ny_total, 0], [0, 0, nz_total]]
72
-
73
- @property
74
- def xy_supercell_matrix_to_fit_nanoparticle(self) -> List[List[int]]:
75
- """
76
- Get the 2D supercell matrix for the xy plane to fit the nanoparticle.
77
- """
78
- supercell_3d = self.supercell_to_fit_nanoparticle
79
- return [[supercell_3d[0][0], 0], [0, supercell_3d[1][1]]]
80
-
81
- @property
82
- def number_of_layers_to_fit_nanoparticle(self) -> int:
83
- """
84
- Get the number of layers (z-direction repetitions) needed to fit the nanoparticle.
85
- """
86
- return self.supercell_to_fit_nanoparticle[2][2]
@@ -1,7 +0,0 @@
1
- from .configuration import ASEBasedNanoparticleConfiguration
2
- from .builder import ASEBasedNanoparticleBuilder
3
-
4
- __all__ = [
5
- "ASEBasedNanoparticleConfiguration",
6
- "ASEBasedNanoparticleBuilder",
7
- ]
@@ -1,54 +0,0 @@
1
- from typing import Callable, Dict
2
-
3
- from .configuration import ASEBasedNanoparticleConfiguration
4
- from ..enums import NanoparticleShapesEnum
5
- from ......analyze import get_chemical_formula_empirical
6
- from ......build_components import MaterialWithBuildMetadata, BaseSingleBuilder
7
- from ......build_components.mixins import ConvertGeneratedItemsASEAtomsMixin
8
- from ......third_party import ASEAtoms
9
-
10
-
11
- class ASEBasedNanoparticleBuilder(ConvertGeneratedItemsASEAtomsMixin, BaseSingleBuilder):
12
- """
13
- Generalized builder for creating nanoparticles based on ASE cluster tools.
14
- Passes configuration parameters directly to the ASE constructors.
15
- """
16
-
17
- _ConfigurationType: type(ASEBasedNanoparticleConfiguration) = ASEBasedNanoparticleConfiguration # type: ignore
18
- _GeneratedItemType: type(ASEAtoms) = ASEAtoms # type: ignore
19
-
20
- @staticmethod
21
- def _get_ase_nanoparticle_parameters(config: ASEBasedNanoparticleConfiguration) -> Dict:
22
- parameters = config.parameters or {}
23
- parameters["symbol"] = config.element
24
- return parameters
25
-
26
- @classmethod
27
- def _get_ase_nanoparticle_constructor(cls, config: ASEBasedNanoparticleConfiguration) -> Callable[..., ASEAtoms]:
28
- constructor = NanoparticleShapesEnum.get_ase_constructor(config.shape.value)
29
- return constructor
30
-
31
- @staticmethod
32
- def _set_ase_cell(atoms: ASEAtoms, vacuum: float) -> ASEAtoms:
33
- """
34
- Set the cell of an ASE atoms object to a cubic box with vacuum padding around the nanoparticle.
35
- """
36
- max_dimension_along_x = abs(atoms.positions[:, 0]).max()
37
- box_size = 2 * max_dimension_along_x + vacuum
38
- atoms.set_cell([box_size, box_size, box_size], scale_atoms=False)
39
- atoms.center()
40
- return atoms
41
-
42
- def _generate(self, configuration: ASEBasedNanoparticleConfiguration) -> MaterialWithBuildMetadata:
43
- parameters = self._get_ase_nanoparticle_parameters(configuration)
44
- constructor = self._get_ase_nanoparticle_constructor(configuration)
45
- nanoparticle_without_cell = constructor(**parameters)
46
- nanoparticle = self._set_ase_cell(nanoparticle_without_cell, configuration.vacuum_padding)
47
-
48
- return MaterialWithBuildMetadata.create(self._convert_generated_item(nanoparticle))
49
-
50
- def _update_material_name(
51
- self, material: MaterialWithBuildMetadata, configuration: ASEBasedNanoparticleConfiguration
52
- ) -> MaterialWithBuildMetadata:
53
- material.name = f"{get_chemical_formula_empirical(material)} {configuration.shape.value.capitalize()}"
54
- return material
@@ -1,19 +0,0 @@
1
- from typing import Dict, Optional
2
-
3
- from ......build_components import BaseConfigurationPydantic
4
- from ..enums import NanoparticleShapesEnum
5
-
6
-
7
- class ASEBasedNanoparticleConfiguration(BaseConfigurationPydantic):
8
- """
9
- Configuration for building a nanoparticle with bottom-up approach from atoms.
10
-
11
- Attributes:
12
- shape (NanoparticleShapes): The desired shape of the nanoparticle.
13
- parameters (dict): Dictionary of parameters to pass to the corresponding ASE constructor.
14
- """
15
-
16
- shape: NanoparticleShapesEnum
17
- parameters: Optional[Dict] = None
18
- element: str
19
- vacuum_padding: float = 10.0
@@ -1,42 +0,0 @@
1
- from enum import Enum
2
- from typing import Callable
3
-
4
- from .....third_party import (
5
- ASEIcosahedron,
6
- ASEOctahedron,
7
- ASEDecahedron,
8
- ASESimpleCubic,
9
- ASEFaceCenteredCubic,
10
- ASEBodyCenteredCubic,
11
- ASEHexagonalClosedPacked,
12
- ASEWulffConstruction,
13
- ASEAtoms,
14
- )
15
-
16
-
17
- class NanoparticleShapesEnum(str, Enum):
18
- """
19
- Enum for supported nanoparticle shapes.
20
- """
21
-
22
- ICOSAHEDRON = "icosahedron"
23
- OCTAHEDRON = "octahedron"
24
- DECAHEDRON = "decahedron"
25
- SIMPLE_CUBIC = "simple_cubic"
26
- FACE_CENTERED_CUBIC = "face_centered_cubic"
27
- BODY_CENTERED_CUBIC = "body_centered_cubic"
28
- HEXAGONAL_CLOSED_PACKED = "hexagonal_closed_packed"
29
- WULFF_CONSTRUCTION = "wulff_construction"
30
-
31
- @staticmethod
32
- def get_ase_constructor(shape: str) -> Callable[..., ASEAtoms]:
33
- return {
34
- "icosahedron": ASEIcosahedron,
35
- "octahedron": ASEOctahedron,
36
- "decahedron": ASEDecahedron,
37
- "simple_cubic": ASESimpleCubic,
38
- "face_centered_cubic": ASEFaceCenteredCubic,
39
- "body_centered_cubic": ASEBodyCenteredCubic,
40
- "hexagonal_closed_packed": ASEHexagonalClosedPacked,
41
- "ase_wulff_construction": ASEWulffConstruction,
42
- }[shape]
@@ -1,127 +0,0 @@
1
- from types import SimpleNamespace
2
- from typing import Union
3
-
4
- from mat3ra.made.material import Material
5
- from . import (
6
- NanoparticleConfiguration,
7
- NanoparticleBuilder,
8
- NanoparticleShapesEnum,
9
- ASEBasedNanoparticleConfiguration,
10
- ASEBasedNanoparticleBuilder,
11
- )
12
- from .analyzer import NanoparticleMaterialAnalyzer
13
- from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.helpers import create_slab
14
- from ....defective_structures.two_dimensional.island.helpers import CoordinateConditionType
15
- from .....analyze.other import get_closest_site_id_from_coordinate
16
- from .....build_components import MaterialWithBuildMetadata
17
- from .....build_components.entities.auxiliary.zero_dimensional.void_region.configuration import VoidRegionConfiguration
18
- from .....entities.coordinate import SphereCoordinateCondition
19
-
20
-
21
- def create_nanoparticle_from_material(
22
- material: Union[Material, MaterialWithBuildMetadata],
23
- condition: Union[
24
- SphereCoordinateCondition,
25
- CoordinateConditionType,
26
- ] = SphereCoordinateCondition(),
27
- orientation_z=None,
28
- center_around_atom: bool = True,
29
- use_cartesian_coordinates: bool = True,
30
- vacuum_padding: float = 10.0,
31
- ) -> MaterialWithBuildMetadata:
32
- """
33
- Create a nanoparticle by applying a coordinate condition to a crystal.
34
-
35
- Args:
36
- material: The crystal material from which the nanoparticle is created.
37
- condition: The coordinate condition that defines the nanoparticle shape.
38
- orientation_z: The orientation of the crystallographic axis in the z-direction.
39
- center_around_atom: Whether to center the condition around an atom close to the center in the material.
40
- use_cartesian_coordinates: Whether the condition supplied is in Cartesian coordinates.
41
- vacuum_padding: Padding for vacuum space around the nanoparticle.
42
-
43
- Returns:
44
- MaterialWithBuildMetadata: The nanoparticle material with build metadata.
45
- """
46
-
47
- if orientation_z is None:
48
- orientation_z = [0, 0, 1]
49
- analyzer = NanoparticleMaterialAnalyzer(
50
- material=material,
51
- orientation_z=orientation_z,
52
- vacuum_padding=vacuum_padding,
53
- coordinate_condition=condition,
54
- )
55
-
56
- repetitions_z = analyzer.number_of_layers_to_fit_nanoparticle
57
- xy_supercell = analyzer.xy_supercell_matrix_to_fit_nanoparticle
58
-
59
- if len(orientation_z) != 3:
60
- raise ValueError("orientation_z must have exactly three elements.")
61
- slab = create_slab(
62
- material,
63
- miller_indices=tuple(orientation_z), # type: ignore
64
- number_of_layers=repetitions_z,
65
- xy_supercell_matrix=xy_supercell,
66
- vacuum=0,
67
- )
68
-
69
- # Find an atom close to center, to apply the condition around it
70
- if center_around_atom:
71
- slab.to_cartesian()
72
- center_coordinate = slab.basis.cell.convert_point_to_cartesian([0.5, 0.5, 0.5])
73
- center_id_at_site = get_closest_site_id_from_coordinate(slab, center_coordinate, use_cartesian_coordinates=True)
74
- center_coordinate = slab.basis.coordinates.get_element_value_by_index(center_id_at_site)
75
- condition.center_coordinate = center_coordinate
76
-
77
- void_region_config = VoidRegionConfiguration(
78
- crystal=slab,
79
- coordinate_condition=condition,
80
- use_cartesian_coordinates=use_cartesian_coordinates,
81
- )
82
- config = NanoparticleConfiguration(merge_components=[slab, void_region_config])
83
-
84
- nanoparticle = NanoparticleBuilder().get_material(config)
85
- return nanoparticle
86
-
87
-
88
- def create_nanoparticle_by_shape(
89
- crystal: Union[Material, MaterialWithBuildMetadata],
90
- shape: NanoparticleShapesEnum,
91
- parameters: Union[dict, SimpleNamespace],
92
- ):
93
- """
94
- Create a nanoparticle from a crystal material by specifying its shape and parameters.
95
-
96
- Provide the crystal which first element nad lattice constant will be used to create the nanoparticle.
97
-
98
- """
99
-
100
- # TODO: should done in analyzer
101
- element = crystal.basis.elements.values[0]
102
- lattice_constant = crystal.lattice.a
103
-
104
- return create_nanoparticle_by_shape_from_element(
105
- element=element, shape=shape, lattice_constant=lattice_constant, parameters=parameters
106
- )
107
-
108
-
109
- def create_nanoparticle_by_shape_from_element(
110
- element: str,
111
- lattice_constant: float,
112
- shape: NanoparticleShapesEnum,
113
- parameters: Union[dict, SimpleNamespace],
114
- ):
115
- """
116
- Create a nanoparticle from a specified element, lattice constant, shape, and parameters.
117
- The shape is defined by the NanoparticleShapesEnum, and parameters are passed directly to the ASE constructor.
118
- """
119
- if not isinstance(parameters, SimpleNamespace):
120
- parameters = SimpleNamespace(**parameters)
121
- if not hasattr(parameters, "latticeconstant"):
122
- parameters.latticeconstant = lattice_constant
123
-
124
- config = ASEBasedNanoparticleConfiguration(shape=shape, parameters=parameters.__dict__, element=element)
125
- builder = ASEBasedNanoparticleBuilder()
126
- nanoparticles = builder.get_material(config)
127
- return nanoparticles
@@ -1,7 +0,0 @@
1
- from .configuration import NanoparticleConfiguration
2
- from .builder import NanoparticleBuilder
3
-
4
- __all__ = [
5
- "NanoparticleConfiguration",
6
- "NanoparticleBuilder",
7
- ]
@@ -1,33 +0,0 @@
1
- from typing import Dict, Type, Union
2
-
3
- from mat3ra.made.material import Material
4
- from .configuration import NanoparticleConfiguration
5
- from .....defective_structures.zero_dimensional.point_defect.vacancy.builder import VacancyDefectBuilder
6
- from ......analyze import get_chemical_formula_empirical
7
- from ......build_components import MaterialWithBuildMetadata
8
- from ......build_components.entities.auxiliary.zero_dimensional.void_region.builder import VoidRegionBuilder
9
- from ......build_components.entities.auxiliary.zero_dimensional.void_region.configuration import VoidRegionConfiguration
10
- from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.builder import SlabBuilder
11
- from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import SlabConfiguration
12
- from ......build_components.operations.core.combinations.merge import MergeBuilder
13
-
14
-
15
- class NanoparticleBuilder(VacancyDefectBuilder, MergeBuilder):
16
- """
17
- Builder class for creating a nanoparticle by merging a slab with a void region.
18
- """
19
-
20
- @property
21
- def merge_component_types_conversion_map(self) -> Dict[Type, Type]:
22
- return {
23
- SlabConfiguration: SlabBuilder,
24
- VoidRegionConfiguration: VoidRegionBuilder,
25
- }
26
-
27
- def _update_material_name(
28
- self, material: Union[Material, MaterialWithBuildMetadata], configuration: NanoparticleConfiguration
29
- ) -> Material:
30
- formula = get_chemical_formula_empirical(material)
31
-
32
- material.name = f"{formula} {configuration.void_region_configuration.condition_name} Nanoparticle"
33
- return material
@@ -1,16 +0,0 @@
1
- from typing import List
2
-
3
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
4
-
5
- from ......build_components.entities.auxiliary.zero_dimensional.void_region.configuration import VoidRegionConfiguration
6
- from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import SlabConfiguration
7
- from ......build_components.operations.core.combinations.merge.configuration import MergeConfiguration
8
-
9
-
10
- class NanoparticleConfiguration(MergeConfiguration):
11
- merge_components: List = [SlabConfiguration, VoidRegionConfiguration]
12
- merge_method: MergeMethodsEnum = MergeMethodsEnum.REPLACE
13
-
14
- @property
15
- def void_region_configuration(self) -> VoidRegionConfiguration:
16
- return self.merge_components[1]
@@ -1,9 +0,0 @@
1
- from .passivation_material_analyzer import PassivationMaterialAnalyzer
2
- from .surface_passivation_material_analyzer import SurfacePassivationMaterialAnalyzer
3
- from .coordination_based_passivation_material_analyzer import CoordinationBasedPassivationMaterialAnalyzer
4
-
5
- __all__ = [
6
- "PassivationMaterialAnalyzer",
7
- "SurfacePassivationMaterialAnalyzer",
8
- "CoordinationBasedPassivationMaterialAnalyzer",
9
- ]
@@ -1,112 +0,0 @@
1
- from typing import List
2
-
3
- import numpy as np
4
-
5
- from ......analyze.material import MaterialWithCrystalSites
6
- from ......bond_directions.bond_directions import BondDirections
7
- from ......bond_directions.bond_directions_templates_for_element import BondDirectionsTemplatesForElement
8
-
9
- from .surface_passivation_material_analyzer import SurfacePassivationMaterialAnalyzer
10
-
11
-
12
- class CoordinationBasedPassivationMaterialAnalyzer(SurfacePassivationMaterialAnalyzer):
13
- """
14
- Builder for passivating material surfaces based on coordination number analysis.
15
-
16
- This builder analyzes atomic coordination environments and reconstructs missing bonds
17
- using templates derived from fully coordinated atoms. It works by:
18
-
19
- 1. Finding undercoordinated atoms that need passivation
20
- 2. Creating bond vector templates for each element type by:
21
- - Collecting vectors from atoms with the highest valid coordination
22
- - Grouping similar vector arrangements into unique templates
23
- 3. Reconstructing missing bonds by:
24
- - Matching existing bonds against templates
25
- - Finding the best-matching template for each atom
26
- - Adding missing bond vectors from the template
27
- 4. Placing passivant atoms (typically H) along the reconstructed bond vectors
28
- """
29
-
30
- coordination_threshold: int = 3 # The coordination number threshold for an atom to be considered undercoordinated.
31
- number_of_bonds_to_passivate: int = 1 # The maximum number of bonds to passivate for each undercoordinated atom.
32
- symmetry_tolerance: float = 0.1 # The tolerance for symmetry comparison of vectors for bonds.
33
-
34
- @property
35
- def material_with_crystal_sites(self) -> MaterialWithCrystalSites:
36
- material_with_crystal_sites = MaterialWithCrystalSites.from_material(material=self.material)
37
- material_with_crystal_sites.analyze()
38
- return material_with_crystal_sites
39
-
40
- @property
41
- def undercoordinated_atoms_indices(self):
42
- return self.material_with_crystal_sites.get_undercoordinated_atom_indices(
43
- cutoff=self.shadowing_radius,
44
- coordination_threshold=self.coordination_threshold,
45
- )
46
-
47
- @property
48
- def bonds_templates(self) -> List[BondDirectionsTemplatesForElement]:
49
- """
50
- Find unique bond directions based on the material's crystal sites.
51
-
52
- Returns:
53
- List[BondDirectionsTemplatesForElement]: A list of unique bond direction templates.
54
- """
55
- # TODO: bonds_templates will be passed from the self in the "controlled" version of this class
56
- return self.material_with_crystal_sites.find_unique_bond_directions()
57
-
58
- @property
59
- def reconstructed_bonds(self) -> List[BondDirections]:
60
- """
61
- Find missing bonds for all sites based on the bond templates.
62
-
63
- Returns:
64
- List[BondDirections]: A list of reconstructed bond directions for each atom.
65
- """
66
- return self.material_with_crystal_sites.find_missing_bonds_for_all_sites(
67
- bond_templates_list=self.bonds_templates,
68
- max_bonds_to_add=self.number_of_bonds_to_passivate,
69
- angle_tolerance=self.symmetry_tolerance,
70
- )
71
-
72
- def _normalize_and_convert_bond_vector(self, bond_vector):
73
- """
74
- Normalize a bond vector and convert it to crystal coordinates.
75
- Args:
76
- bond_vector: The bond vector to normalize and convert.
77
-
78
- Returns:
79
- numpy.ndarray: The normalized bond vector in crystal coordinates, or None if the vector is zero.
80
- """
81
- bond_vector_np = np.array(bond_vector)
82
- if np.linalg.norm(bond_vector_np) == 0:
83
- return None
84
- normalized_bond = bond_vector_np / np.linalg.norm(bond_vector_np) * self.bond_length
85
- return self.material.basis.cell.convert_point_to_crystal(normalized_bond)
86
-
87
- @property
88
- def passivant_coordinates(
89
- self,
90
- ):
91
- """
92
- Calculate the coordinates for placing passivating atoms based on reconstructed bonds.
93
-
94
- Args:
95
- self (PassivationConfiguration): Configuration for passivation.
96
-
97
- Returns:
98
- list: Coordinates where passivants should be added.
99
- """
100
- passivant_coordinates = []
101
-
102
- for idx in self.undercoordinated_atoms_indices:
103
- for bond_vector in self.reconstructed_bonds[idx]:
104
- normalized_bond_crystal = self._normalize_and_convert_bond_vector(bond_vector)
105
- if normalized_bond_crystal is None:
106
- continue
107
- passivant_coordinates.append(
108
- np.array(self.material.basis.coordinates.get_element_value_by_index(idx))
109
- + np.array(normalized_bond_crystal)
110
- )
111
-
112
- return passivant_coordinates
@@ -1,16 +0,0 @@
1
- from typing import List
2
-
3
- from ......analyze.slab import SlabMaterialAnalyzer
4
- from ..enums import SurfaceTypesEnum
5
-
6
-
7
- class PassivationMaterialAnalyzer(SlabMaterialAnalyzer):
8
- passivant: str = "H"
9
- bond_length: float = 1.0
10
- surface: SurfaceTypesEnum = SurfaceTypesEnum.TOP
11
-
12
- @property
13
- def passivant_coordinates(self) -> List[List[float]]:
14
- raise NotImplementedError(
15
- "This method should be implemented in subclasses to return passivant coordinates based on the surface type."
16
- )
@@ -1,32 +0,0 @@
1
- import numpy as np
2
-
3
- from ......analyze.other import get_surface_atom_indices
4
- from ..enums import SurfaceTypesEnum
5
-
6
- from .passivation_material_analyzer import PassivationMaterialAnalyzer
7
-
8
-
9
- class SurfacePassivationMaterialAnalyzer(PassivationMaterialAnalyzer):
10
- shadowing_radius: float = 2.5
11
- depth: float = 5.0
12
-
13
- @property
14
- def passivant_coordinates(
15
- self,
16
- ):
17
- """
18
- Calculate the coordinates for placing passivants based on the specified surface type.
19
-
20
- Args:
21
- self (SurfacePassivationConfiguration): Configuration for passivation.
22
-
23
- Returns:
24
- list: Coordinates where passivants should be added.
25
- """
26
- surface_atoms_indices = get_surface_atom_indices(self.material, self.surface, self.shadowing_radius, self.depth)
27
- surface_atoms_coordinates = [
28
- self.material.basis.coordinates.get_element_value_by_index(i) for i in surface_atoms_indices
29
- ]
30
- bond_vector = [0, 0, self.bond_length] if self.surface == SurfaceTypesEnum.TOP else [0, 0, -self.bond_length]
31
- passivant_bond_vector_crystal = self.material.basis.cell.convert_point_to_crystal(bond_vector)
32
- return (np.array(surface_atoms_coordinates) + np.array(passivant_bond_vector_crystal)).tolist()
@@ -1,23 +0,0 @@
1
- from typing import Dict, Type
2
-
3
- from .....build_components import MaterialWithBuildMetadata
4
- from .....build_components.entities.core.zero_dimensional.atom.builder import AtomAtCoordinateBuilder
5
- from .....build_components.entities.core.zero_dimensional.atom.configuration import AtomAtCoordinateConfiguration
6
- from .....build_components.operations.core.combinations.merge import MergeBuilder
7
-
8
- from .configuration import PassivationConfiguration
9
-
10
-
11
- class PassivationBuilder(MergeBuilder):
12
- @property
13
- def merge_component_types_conversion_map(self) -> Dict[Type, Type]:
14
- return {
15
- AtomAtCoordinateConfiguration: AtomAtCoordinateBuilder,
16
- }
17
-
18
- def _update_material_name(
19
- self, material: MaterialWithBuildMetadata, configuration: PassivationConfiguration
20
- ) -> MaterialWithBuildMetadata:
21
- material_name = configuration.material.name
22
- material.name = f"{material_name}, {configuration.passivant}-passivated"
23
- return material
@@ -1,31 +0,0 @@
1
- from typing import List, Union
2
-
3
- from mat3ra.esse.models.materials_category.processed_structures.two_dimensional.passivation.configuration import (
4
- PassivationConfigurationSchema,
5
- )
6
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
7
-
8
- from mat3ra.made.material import Material
9
- from .....build_components import MaterialWithBuildMetadata
10
- from .....build_components.entities.core.zero_dimensional.atom.configuration import AtomAtCoordinateConfiguration
11
- from .....build_components.operations.core.combinations.merge.configuration import MergeConfiguration
12
-
13
-
14
- class PassivationConfiguration(MergeConfiguration, PassivationConfigurationSchema):
15
- """
16
- Configuration for a passivation.
17
-
18
- Args:
19
- merge_components (List[Material, AtomAtCoordinateConfiguration]): The components to merge.
20
- passivant (str): The passivating element.
21
- bond_length (float): The bond length.
22
- """
23
-
24
- merge_components: List[Union[Material, MaterialWithBuildMetadata, AtomAtCoordinateConfiguration]]
25
- merge_method: MergeMethodsEnum = MergeMethodsEnum.ADD
26
- passivant: str = "H"
27
- bond_length: float = 1.0
28
-
29
- @property
30
- def material(self) -> MaterialWithBuildMetadata:
31
- return self.merge_components[0]
@@ -1,7 +0,0 @@
1
- from enum import Enum
2
-
3
-
4
- class SurfaceTypesEnum(str, Enum):
5
- TOP = "top"
6
- BOTTOM = "bottom"
7
- BOTH = "both"