@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,106 +0,0 @@
1
- from typing import List, Optional
2
-
3
- import numpy as np
4
- from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
5
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
6
- from mat3ra.made.material import Material
7
- from mat3ra.made.utils import AXIS_TO_INDEX_MAP
8
-
9
- from ...build_components import MaterialWithBuildMetadata
10
- from ...modify import translate_by_vector
11
- from .utils import merge_two_materials, should_skip_stacking
12
-
13
-
14
- def merge(
15
- materials: List[Material],
16
- merge_method: Optional[MergeMethodsEnum] = MergeMethodsEnum.ADD,
17
- material_name: Optional[str] = None,
18
- distance_tolerance: float = 0.1,
19
- merge_dangerously: bool = False,
20
- ) -> MaterialWithBuildMetadata:
21
- """
22
- Merge multiple materials using a specific merge method.
23
-
24
- Args:
25
- materials (List[Material]): List of materials to merge.
26
- merge_method (MergeMethodsEnum): The merge method to use.
27
- material_name (Optional[str]): Name of the merged material.
28
- distance_tolerance (float): The tolerance for resolving overlapping coordinates.
29
- merge_dangerously (bool): If True, allows merging even if lattices are different.
30
-
31
- Returns:
32
- MaterialWithBuildMetadata: The merged material.
33
- """
34
- merged_material = materials[0]
35
- for material in materials[1:]:
36
- merged_material = merge_two_materials(
37
- merged_material, material, merge_method, material_name, distance_tolerance, merge_dangerously
38
- )
39
- return merged_material
40
-
41
-
42
- def stack(materials: List[Material], direction: AxisEnum) -> MaterialWithBuildMetadata:
43
- result = materials[0]
44
- for material in materials[1:]:
45
- result = stack_two_materials(material_1=result, material_2=material, direction=direction)
46
- return result
47
-
48
-
49
- def stack_two_materials(
50
- material_1: Material,
51
- material_2: Material,
52
- direction: AxisEnum = AxisEnum.z,
53
- ) -> MaterialWithBuildMetadata:
54
- """
55
- Stack two materials along a specified direction by expanding lattices and merging.
56
-
57
- First attempts to stack materials as-is. If that fails due to lattice mismatch,
58
- adjusts the in-plane lattice vectors of material_2 to match material_1 and tries again.
59
-
60
- Args:
61
- material_1: First material to stack.
62
- material_2: Second material to stack.
63
- direction: Direction along which to stack (x, y, or z axis).
64
-
65
- Returns:
66
- MaterialWithBuildMetadata: Stacked material with combined lattice and atoms.
67
- """
68
- lattice_vector_index = AXIS_TO_INDEX_MAP[direction.value]
69
-
70
- try:
71
- if should_skip_stacking(material_1, material_2, lattice_vector_index):
72
- return material_1.clone()
73
-
74
- material_1_lattice_vectors = material_1.lattice.vector_arrays
75
- material_2_lattice_vectors = material_2.lattice.vector_arrays
76
-
77
- stacked_lattice_vectors_values = [vector.copy() for vector in material_1_lattice_vectors]
78
- stacked_lattice_vectors_values[lattice_vector_index] = (
79
- np.array(material_1_lattice_vectors[lattice_vector_index])
80
- + np.array(material_2_lattice_vectors[lattice_vector_index])
81
- ).tolist()
82
-
83
- material_1_final_lattice_config = material_1.clone()
84
- material_1_final_lattice_config.set_lattice_vectors_from_array(stacked_lattice_vectors_values)
85
-
86
- # Translate material2 so its atoms are positioned correctly relative to material1
87
- material_2_adjusted_c = material_2.clone()
88
- material_2_adjusted_c.set_lattice_vectors_from_array(stacked_lattice_vectors_values)
89
- # The translation amount is the original lattice vector of material1 in the stacking direction
90
- translation_vec = material_1_lattice_vectors[lattice_vector_index]
91
- material_2_translated = translate_by_vector(
92
- material_2_adjusted_c, translation_vec, use_cartesian_coordinates=True
93
- )
94
-
95
- stacked_material = merge_two_materials(
96
- material1=material_1_final_lattice_config,
97
- material2=material_2_translated,
98
- distance_tolerance=0,
99
- merge_dangerously=False,
100
- material_name=material_1.name,
101
- )
102
- return stacked_material
103
- except ValueError as e:
104
- raise ValueError(
105
- f"Failed to stack materials {material_1.name} and {material_2.name} due to lattice mismatch: {str(e)}"
106
- ) from e
@@ -1,170 +0,0 @@
1
- from typing import List
2
-
3
- import numpy as np
4
- from mat3ra.code.vector import Vector3D
5
- from mat3ra.esse.models.core.abstract.matrix_3x3 import Matrix3x3Schema
6
- from mat3ra.made.material import Material
7
-
8
- from ...build_components.metadata import MaterialWithBuildMetadata
9
- from ...build_components.operations.core.modifications.perturb import FunctionHolder
10
- from ...convert import from_ase, to_ase
11
- from ...modify import translate_by_vector, wrap_to_unit_cell
12
- from ...third_party import ase_make_supercell
13
- from ...utils import decorator_convert_supercell_matrix_2x2_to_3x3
14
-
15
-
16
- def translate(material: Material, vector: Vector3D) -> Material:
17
- return translate_by_vector(material, vector, use_cartesian_coordinates=True)
18
-
19
-
20
- def translate_atoms(
21
- material: Material,
22
- atom_ids: List[int],
23
- vector: Vector3D,
24
- use_cartesian_coordinates: bool = True,
25
- ) -> Material:
26
- """
27
- Translate the given atoms by a vector.
28
-
29
- Basis order is preserved.
30
-
31
- Args:
32
- material (Material): The material to translate atoms in.
33
- atom_ids (List[int]): Indices of the atoms to translate.
34
- vector (Vector3D): The vector to translate the atoms by.
35
- use_cartesian_coordinates (bool): Whether `vector` is in cartesian coordinates.
36
-
37
- Returns:
38
- Material: The material with the given atoms translated.
39
-
40
- Raises:
41
- IndexError: If any atom id is out of range for the basis.
42
- """
43
- new_material = material.clone()
44
- if use_cartesian_coordinates:
45
- new_material.to_cartesian()
46
- coordinates: List[List[float]] = [list(coordinate) for coordinate in new_material.basis.coordinates.values]
47
-
48
- out_of_range = [atom_id for atom_id in atom_ids if not -len(coordinates) <= atom_id < len(coordinates)]
49
- if out_of_range:
50
- raise IndexError(f"Atom ids {out_of_range} are out of range for a basis of {len(coordinates)} atoms.")
51
-
52
- for atom_id in atom_ids:
53
- coordinates[atom_id] = (np.array(coordinates[atom_id]) + np.array(vector)).tolist()
54
-
55
- new_material.set_coordinates(coordinates)
56
- if use_cartesian_coordinates:
57
- new_material.to_crystal()
58
- return new_material
59
-
60
-
61
- @decorator_convert_supercell_matrix_2x2_to_3x3
62
- def supercell(material: MaterialWithBuildMetadata, supercell_matrix) -> MaterialWithBuildMetadata:
63
- atoms = to_ase(material)
64
-
65
- supercell_atoms = ase_make_supercell(atoms, supercell_matrix)
66
- material_config = from_ase(supercell_atoms)
67
- # ASE make_supercell drops atoms.info; merge prior build/boundaryConditions when present.
68
- source_metadata = material.to_dict().get("metadata") or {}
69
- if source_metadata:
70
- material_config["metadata"] = {**material_config.get("metadata", {}), **source_metadata}
71
- new_material = MaterialWithBuildMetadata.create(material_config)
72
- new_material.name = material.name
73
- return new_material
74
-
75
-
76
- def edit_cell(material: Material, lattice_vectors=None) -> MaterialWithBuildMetadata:
77
- if lattice_vectors is not None:
78
- material.set_lattice_vectors(
79
- lattice_vector1=lattice_vectors[0], lattice_vector2=lattice_vectors[1], lattice_vector3=lattice_vectors[2]
80
- )
81
- wrapped_material = wrap_to_unit_cell(material)
82
- return wrapped_material
83
-
84
-
85
- def strain(material: Material, strain_matrix: Matrix3x3Schema) -> Material:
86
- """
87
- Applies a strain to the material by modifying its lattice vectors while keeping the basis in crystal coordinates.
88
- """
89
- if not isinstance(strain_matrix, Matrix3x3Schema):
90
- raise ValueError("strain_matrix must be an instance of Matrix3x3Schema")
91
-
92
- strain_matrix_np = np.array([row.root for row in strain_matrix.root])
93
- lattice_vectors_np = np.array(material.lattice.vector_arrays)
94
- new_lattice_vectors_np = lattice_vectors_np @ strain_matrix_np
95
- new_lattice_vectors = new_lattice_vectors_np.tolist()
96
-
97
- new_material = material.clone()
98
-
99
- original_crystal_coords = new_material.basis.coordinates.values
100
-
101
- new_material.set_lattice_vectors_from_array(new_lattice_vectors)
102
- new_material.basis.coordinates.values = original_crystal_coords
103
-
104
- return new_material
105
-
106
-
107
- def perturb(
108
- material: Material, perturbation_function: FunctionHolder, use_cartesian_coordinates: bool = False
109
- ) -> Material:
110
- """
111
- Applies a small delta perturbation to a each atom in the material. Lattice vectors are not modified.
112
-
113
- Args:
114
- material: The input Material instance containing coordinates.
115
- perturbation_function: A PerturbationFunctionHolder that defines
116
- a function f(x,y,z) -> float (or vector) and
117
- optional transform_coordinates behavior.
118
- use_cartesian_coordinates: If True, the perturbation is applied in Cartesian coordinates.
119
- If False, the perturbation is applied in crystal coordinates.
120
-
121
- Returns:
122
- A new Material with perturbed coordinates.
123
- """
124
- new_material = material.clone()
125
- if use_cartesian_coordinates:
126
- new_material.to_cartesian()
127
- original_coordinates = new_material.basis.coordinates.values
128
- perturbed_coordinates: List[List[float]] = []
129
-
130
- for coordinate in original_coordinates:
131
- displacement = perturbation_function.apply_function(coordinate, material=new_material)
132
-
133
- if isinstance(displacement, (list, tuple, np.ndarray)):
134
- delta = np.array(displacement)
135
- else:
136
- delta = np.array([0.0, 0.0, displacement])
137
-
138
- new_coordinate = np.array(coordinate) + delta
139
- perturbed_coordinates.append(new_coordinate.tolist())
140
-
141
- new_material.set_coordinates(perturbed_coordinates)
142
- if use_cartesian_coordinates:
143
- new_material.to_crystal()
144
- return new_material
145
-
146
-
147
- def rotate(material: Material, axis: List[int], angle: float, wrap: bool = True) -> Material:
148
- """
149
- Rotate the basis of the material relative to the lattice.
150
- This operation breaks symmetry and does not modify lattice vectors.
151
-
152
- Args:
153
- material (Material): The material to rotate.
154
- axis (List[int]): The axis to rotate around, expressed as [x, y, z].
155
- angle (float): The angle of rotation in degrees.
156
- wrap (bool): Whether to wrap the material to the unit cell.
157
- Returns:
158
- Atoms: The rotated material.
159
- """
160
- new_material = material.clone()
161
- original_is_in_cartesian_units = new_material.basis.is_in_cartesian_units
162
- new_material.to_crystal()
163
- atoms = to_ase(new_material)
164
- atoms.rotate(v=axis, a=angle, center="COU", rotate_cell=False)
165
- if wrap:
166
- atoms.wrap()
167
- new_material = MaterialWithBuildMetadata.create(from_ase(atoms))
168
- if original_is_in_cartesian_units:
169
- new_material.to_cartesian()
170
- return new_material
@@ -1,138 +0,0 @@
1
- from typing import Optional
2
-
3
- import numpy as np
4
- from mat3ra.code.array_with_ids import ArrayWithIds
5
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
6
- from mat3ra.made.basis import Basis, Coordinates
7
- from mat3ra.made.material import Material
8
-
9
- from ...build_components import MaterialWithBuildMetadata
10
-
11
-
12
- def merge_two_bases(basis1: Basis, basis2: Basis, distance_tolerance: float) -> Basis:
13
- """
14
- Merges two Basis objects into a new Basis object, resolving overlapping coordinates.
15
- The function assumes that both Basis objects have the same lattice structure handled separately.
16
-
17
- Args:
18
- basis1 (Basis): The first Basis object to merge.
19
- basis2 (Basis): The second Basis object to merge.
20
- distance_tolerance (float): The tolerance for resolving overlapping coordinates.
21
-
22
- Returns:
23
- Basis: A new Basis object containing merged elements, coordinates, labels, and constraints.
24
- """
25
- basis1.to_crystal()
26
- basis2.to_crystal()
27
-
28
- merged_elements_values = basis1.elements.values + basis2.elements.values
29
- merged_coordinates_values = basis1.coordinates.values + basis2.coordinates.values
30
- merged_labels_values = basis1.labels.values + basis2.labels.values if basis1.labels and basis2.labels else []
31
- merged_constraints_values = basis1.constraints.values + basis2.constraints.values
32
-
33
- new_basis = basis1.clone()
34
- new_basis.elements = ArrayWithIds.from_values(values=merged_elements_values)
35
- new_basis.coordinates = Coordinates.from_values(values=merged_coordinates_values)
36
- new_basis.labels = ArrayWithIds.from_values(values=merged_labels_values)
37
- new_basis.constraints = ArrayWithIds.from_values(values=merged_constraints_values)
38
- new_basis.resolve_colliding_coordinates(tolerance=distance_tolerance)
39
-
40
- return new_basis
41
-
42
-
43
- def merge_two_materials(
44
- material1: Material,
45
- material2: Material,
46
- merge_method: Optional[MergeMethodsEnum] = MergeMethodsEnum.ADD,
47
- material_name: Optional[str] = None,
48
- distance_tolerance: float = 0.1,
49
- merge_dangerously: bool = False,
50
- ) -> MaterialWithBuildMetadata:
51
- """
52
- Merge two materials using a specific merge method.
53
-
54
- Args:
55
- material1 (Material): The first material to merge.
56
- material2 (Material): The second material to merge.
57
- merge_method (MergeMethodsEnum): The merge method to use.
58
- material_name (Optional[str]): Name of the merged material.
59
- distance_tolerance (float): The tolerance for resolving overlapping coordinates.
60
- merge_dangerously (bool): If True, allows merging even if lattices are different.
61
-
62
- Returns:
63
- MaterialWithBuildMetadata: The merged material.
64
- """
65
- if not np.allclose(material1.lattice.vector_arrays, material2.lattice.vector_arrays) and not merge_dangerously:
66
- raise ValueError("Lattices of the two materials must be the same.")
67
-
68
- if merge_method == MergeMethodsEnum.ADD:
69
- merged_basis = merge_bases_add(material1.basis, material2.basis, distance_tolerance)
70
- elif merge_method == MergeMethodsEnum.REPLACE:
71
- merged_basis = merge_bases_replace(material1.basis, material2.basis, distance_tolerance)
72
- elif merge_method == MergeMethodsEnum.YIELD:
73
- merged_basis = merge_bases_yield(material1.basis, material2.basis, distance_tolerance)
74
- else:
75
- raise ValueError(f"Unknown merge method: {merge_method}")
76
-
77
- name = material_name or "Merged Material"
78
- new_material = MaterialWithBuildMetadata.create(
79
- {"name": name, "lattice": material1.lattice.to_dict(), "basis": merged_basis.to_dict()}
80
- )
81
-
82
- return new_material
83
-
84
-
85
- def should_skip_stacking(
86
- material_1: Material,
87
- material_2: Material,
88
- lattice_vector_index: int,
89
- ) -> bool:
90
- """
91
- Determine if stacking should be skipped due to zero thickness in material_2.
92
-
93
- Also validates that materials are compatible for stacking.
94
-
95
- Args:
96
- material_1: First material to stack.
97
- material_2: Second material to stack.
98
- lattice_vector_index: Index of the lattice vector in the stacking direction.
99
-
100
- Returns:
101
- bool: True if stacking should be skipped (material_2 has zero thickness).
102
-
103
- Raises:
104
- ValueError: If in-plane lattice vectors are not the same.
105
- """
106
- material_1_lattice_vectors = material_1.lattice.vector_arrays
107
- material_2_lattice_vectors = material_2.lattice.vector_arrays
108
-
109
- is_zero_thickness = np.allclose(material_2_lattice_vectors[lattice_vector_index], [0, 0, 0])
110
- if is_zero_thickness:
111
- return True
112
-
113
- # Check that in-plane vectors are the same
114
- all_indices = [0, 1, 2]
115
- in_plane_indices = [i for i in all_indices if i != lattice_vector_index]
116
-
117
- material_1_in_plane_vectors = np.array(material_1_lattice_vectors)[in_plane_indices]
118
- material_2_in_plane_vectors = np.array(material_2_lattice_vectors)[in_plane_indices]
119
-
120
- if not np.allclose(material_1_in_plane_vectors, material_2_in_plane_vectors):
121
- difference = np.abs(material_1_in_plane_vectors - material_2_in_plane_vectors)
122
- raise ValueError(f"In-plane lattice vectors of the two materials must be the same for stacking.\n{difference}")
123
-
124
- return False
125
-
126
-
127
- def merge_bases_add(basis1: Basis, basis2: Basis, distance_tolerance: float) -> Basis:
128
- return merge_two_bases(basis1, basis2, distance_tolerance)
129
-
130
-
131
- def merge_bases_replace(basis1: Basis, basis2: Basis, distance_tolerance: float) -> Basis:
132
- base1 = basis1.clone()
133
- return merge_two_bases(base1, basis2, distance_tolerance)
134
-
135
-
136
- def merge_bases_yield(basis1: Basis, basis2: Basis, distance_tolerance: float) -> Basis:
137
- base2 = basis2.clone()
138
- return merge_two_bases(base2, basis1, distance_tolerance)
@@ -1,53 +0,0 @@
1
- import numpy as np
2
- from mat3ra.esse.models.core.abstract.matrix_3x3 import Matrix3x3Schema
3
- from mat3ra.made.material import Material
4
-
5
- from ...modify import wrap_to_unit_cell
6
- from ..core.unary import strain
7
-
8
-
9
- def transform_material_by_matrix(material: Material, matrix: np.ndarray) -> Material:
10
- """
11
- Transforms a material by applying a transformation matrix to lattice vectors and coordinates.
12
-
13
- Args:
14
- material: The material to be transformed.
15
- matrix: The 3x3 transformation matrix as a numpy array.
16
-
17
- Returns:
18
- A new material instance with transformed lattice and coordinates, wrapped to unit cell.
19
- """
20
- current_lattice_vectors = np.array(material.lattice.vector_arrays)
21
- current_coordinates = material.basis.coordinates.values
22
-
23
- new_lattice_vectors = (matrix @ current_lattice_vectors.T).tolist()
24
- new_coordinates = (np.linalg.inv(matrix) @ np.array(current_coordinates).T).T.tolist()
25
-
26
- transformed_material = material.clone()
27
- transformed_material.set_lattice_vectors_from_array(new_lattice_vectors)
28
- transformed_material.basis.coordinates.values = new_coordinates
29
- return wrap_to_unit_cell(transformed_material)
30
-
31
-
32
- def strain_to_match_lattice(material_to_strain: Material, target_material: Material) -> Material:
33
- """
34
- Strains a material to match the lattice of a target material.
35
-
36
- Args:
37
- material_to_strain: The material to be strained.
38
- target_material: The material with the target lattice.
39
-
40
- Returns:
41
- A new material instance with the strained lattice.
42
- """
43
- target_lattice_vectors = np.array(target_material.lattice.vector_arrays)
44
- source_lattice_vectors = np.array(material_to_strain.lattice.vector_arrays)
45
-
46
- # Prevent division by zero or singular matrix issues
47
- if np.linalg.det(source_lattice_vectors) == 0:
48
- raise ValueError("Lattice of material to strain is singular and cannot be inverted.")
49
-
50
- strain_matrix_np = np.linalg.inv(source_lattice_vectors) @ target_lattice_vectors
51
- strain_matrix = Matrix3x3Schema(root=strain_matrix_np.tolist())
52
- strained_material = strain(material_to_strain, strain_matrix)
53
- return strained_material
@@ -1,55 +0,0 @@
1
- from typing import Any, Callable, Dict, List, Optional, Tuple
2
-
3
- import numpy as np
4
- from mat3ra.made.material import Material
5
-
6
-
7
- def evaluate_calculator_on_xy_grid(
8
- material: Material,
9
- calculator_function: Callable[[Material], Any],
10
- modifier: Optional[Callable] = None,
11
- modifier_parameters: Dict[str, Any] = {},
12
- grid_size_xy: Tuple[int, int] = (10, 10),
13
- grid_offset_position: List[float] = [0, 0],
14
- grid_range_x: Tuple[float, float] = (-0.5, 0.5),
15
- grid_range_y: Tuple[float, float] = (-0.5, 0.5),
16
- use_cartesian_coordinates: bool = False,
17
- ) -> Tuple[List[np.ndarray], np.ndarray]:
18
- """
19
- Calculate a property on a grid of x-y positions.
20
-
21
- Args:
22
- material (Material): The material object.
23
- modifier (Callable): The modifier function to apply to the material.
24
- modifier_parameters (Dict[str, Any]): The parameters to pass to the modifier.
25
- calculator_function (Callable): The calculator function to apply to the modified material.
26
- grid_size_xy (Tuple[int, int]): The size of the grid in x and y directions.
27
- grid_offset_position (List[float]): The offset position of the grid, in Angstroms or crystal coordinates.
28
- grid_range_x (Tuple[float, float]): The range to search in x direction, in Angstroms or crystal coordinates.
29
- grid_range_y (Tuple[float, float]): The range to search in y direction, in Angstroms or crystal coordinates.
30
- use_cartesian_coordinates (bool): Whether to use Cartesian coordinates.
31
-
32
- Returns:
33
- Tuple[List[np.ndarray[float]], np.ndarray[float]]: The x-y positions and the calculated property values.
34
- """
35
- x_values = np.linspace(grid_range_x[0], grid_range_x[1], grid_size_xy[0]) + grid_offset_position[0]
36
- y_values = np.linspace(grid_range_y[0], grid_range_y[1], grid_size_xy[1]) + grid_offset_position[1]
37
-
38
- xy_matrix = [x_values, y_values]
39
- results_matrix = np.zeros(grid_size_xy)
40
-
41
- for i, x in enumerate(x_values):
42
- for j, y in enumerate(y_values):
43
- if modifier is None:
44
- modified_material = material
45
- else:
46
- modified_material = modifier(
47
- material,
48
- displacement=[x, y, 0],
49
- use_cartesian_coordinates=use_cartesian_coordinates,
50
- **modifier_parameters,
51
- )
52
- result = calculator_function(modified_material)
53
- results_matrix[i, j] = result
54
-
55
- return xy_matrix, results_matrix
@@ -1,69 +0,0 @@
1
- from ase import Atoms as ASEAtoms
2
- from ase.build import add_vacuum as ase_add_vacuum
3
- from ase.build.supercells import make_supercell as ase_make_supercell
4
- from ase.calculators.calculator import Calculator as ASECalculator
5
- from ase.calculators.calculator import all_changes as ase_all_changes
6
- from ase.calculators.emt import EMT as ASECalculatorEMT
7
- from ase.cluster import BodyCenteredCubic as ASEBodyCenteredCubic
8
- from ase.cluster import Decahedron as ASEDecahedron
9
- from ase.cluster import FaceCenteredCubic as ASEFaceCenteredCubic
10
- from ase.cluster import HexagonalClosedPacked as ASEHexagonalClosedPacked
11
- from ase.cluster import Icosahedron as ASEIcosahedron
12
- from ase.cluster import Octahedron as ASEOctahedron
13
- from ase.cluster import SimpleCubic as ASESimpleCubic
14
- from ase.cluster.wulff import wulff_construction as ASEWulffConstruction
15
- from ase.constraints import FixAtoms as ASEFixAtoms
16
- from ase.constraints import FixedPlane as ASEFixedPlane
17
- from pymatgen.analysis.defects.core import Interstitial as PymatgenInterstitial
18
- from pymatgen.analysis.defects.core import Substitution as PymatgenSubstitution
19
- from pymatgen.analysis.defects.core import Vacancy as PymatgenVacancy
20
- from pymatgen.analysis.defects.generators import VoronoiInterstitialGenerator as PymatgenVoronoiInterstitialGenerator
21
- from pymatgen.analysis.local_env import VoronoiNN as PymatgenVoronoiNN
22
- from pymatgen.core import IStructure as PymatgenIStructure
23
- from pymatgen.core import PeriodicSite as PymatgenPeriodicSite
24
- from pymatgen.core.interface import Interface as PymatgenInterface
25
- from pymatgen.core.interface import label_termination as label_pymatgen_slab_termination
26
- from pymatgen.core.structure import Lattice as PymatgenLattice
27
- from pymatgen.core.structure import Structure as PymatgenStructure
28
- from pymatgen.core.surface import Slab as PymatgenSlab
29
- from pymatgen.core.surface import SlabGenerator as PymatgenSlabGenerator
30
- from pymatgen.io.ase import AseAtomsAdaptor as PymatgenAseAtomsAdaptor
31
- from pymatgen.io.vasp.inputs import Poscar as PymatgenPoscar
32
- from pymatgen.symmetry.analyzer import SpacegroupAnalyzer as PymatgenSpacegroupAnalyzer
33
-
34
- # Re-exported imports to allow for both use in type hints and instantiation
35
-
36
- __all__ = [
37
- "ASEAtoms",
38
- "ASECalculator",
39
- "ASECalculatorEMT",
40
- "ASEFixAtoms",
41
- "ASEFixedPlane",
42
- "ase_all_changes",
43
- "PymatgenLattice",
44
- "PymatgenStructure",
45
- "PymatgenIStructure",
46
- "PymatgenSlab",
47
- "PymatgenSlabGenerator",
48
- "PymatgenInterface",
49
- "PymatgenPeriodicSite",
50
- "PymatgenSpacegroupAnalyzer",
51
- "PymatgenVacancy",
52
- "PymatgenSubstitution",
53
- "PymatgenInterstitial",
54
- "PymatgenVoronoiInterstitialGenerator",
55
- "label_pymatgen_slab_termination",
56
- "ase_make_supercell",
57
- "ase_add_vacuum",
58
- "PymatgenAseAtomsAdaptor",
59
- "PymatgenPoscar",
60
- "PymatgenVoronoiNN",
61
- "ASESimpleCubic",
62
- "ASEBodyCenteredCubic",
63
- "ASEFaceCenteredCubic",
64
- "ASEIcosahedron",
65
- "ASEOctahedron",
66
- "ASEDecahedron",
67
- "ASEHexagonalClosedPacked",
68
- "ASEWulffConstruction",
69
- ]