@mat3ra/made 2025.8.5-0 → 2025.8.7-1

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 (260) hide show
  1. package/package.json +1 -1
  2. package/pyproject.toml +1 -1
  3. package/src/py/mat3ra/made/lattice.py +11 -3
  4. package/src/py/mat3ra/made/tools/__init__.py +0 -28
  5. package/src/py/mat3ra/made/tools/analyze/__init__.py +1 -1
  6. package/src/py/mat3ra/made/tools/analyze/build_metadata_analyzer.py +1 -1
  7. package/src/py/mat3ra/made/tools/analyze/crystal_site/adatom_crystal_site_material_analyzer.py +5 -3
  8. package/src/py/mat3ra/made/tools/analyze/crystal_site/adatom_material_analyzer.py +5 -5
  9. package/src/py/mat3ra/made/tools/analyze/crystal_site/crystal_site_analyzer.py +1 -1
  10. package/src/py/mat3ra/made/tools/analyze/interface/grain_boundary.py +1 -1
  11. package/src/py/mat3ra/made/tools/analyze/interface/simple.py +6 -4
  12. package/src/py/mat3ra/made/tools/analyze/interface/twisted_nanoribbons.py +3 -2
  13. package/src/py/mat3ra/made/tools/analyze/interface/utils/holders.py +3 -1
  14. package/src/py/mat3ra/made/tools/analyze/interface/zsl.py +2 -2
  15. package/src/py/mat3ra/made/tools/analyze/lattice.py +1 -1
  16. package/src/py/mat3ra/made/tools/analyze/lattice_planes.py +1 -1
  17. package/src/py/mat3ra/made/tools/analyze/material.py +3 -1
  18. package/src/py/mat3ra/made/tools/analyze/other.py +1 -1
  19. package/src/py/mat3ra/made/tools/analyze/slab.py +4 -4
  20. package/src/py/mat3ra/made/tools/bond_directions/bond_directions_for_element_list.py +1 -1
  21. package/src/py/mat3ra/made/tools/build/__init__.py +18 -2
  22. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/__init__.py +13 -17
  23. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/base/__init__.py +2 -2
  24. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/base/builder.py +20 -21
  25. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/base/configuration.py +8 -5
  26. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/helpers.py +134 -0
  27. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/commensurate/__init__.py +6 -0
  28. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/commensurate/helpers.py +9 -8
  29. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/twisted/__init__.py +2 -2
  30. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/twisted/helpers.py +6 -7
  31. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/utils.py +5 -5
  32. package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/zsl/__init__.py +6 -0
  33. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/zsl/helpers.py +14 -12
  34. package/src/py/mat3ra/made/tools/build/{grain_boundary/linear_build_parameters.py → defective_structures/one_dimensional/grain_boundary_linear/build_parameters.py} +2 -2
  35. package/src/py/mat3ra/made/tools/build/{grain_boundary/linear_builder.py → defective_structures/one_dimensional/grain_boundary_linear/builder.py} +3 -3
  36. package/src/py/mat3ra/made/tools/build/{grain_boundary/linear_configuration.py → defective_structures/one_dimensional/grain_boundary_linear/configuration.py} +2 -2
  37. package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/helpers.py +82 -0
  38. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/adatom/builder.py +1 -1
  39. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/adatom/configuration.py +1 -1
  40. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/adatom/helpers.py +8 -8
  41. package/src/py/mat3ra/made/tools/build/{grain_boundary/planar_builder.py → defective_structures/two_dimensional/grain_boundary_planar/builder.py} +6 -7
  42. package/src/py/mat3ra/made/tools/build/{grain_boundary/planar_configuration.py → defective_structures/two_dimensional/grain_boundary_planar/configuration.py} +6 -5
  43. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/helpers.py +75 -0
  44. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/island/builder.py +1 -1
  45. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/island/configuration.py +1 -1
  46. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/island/helpers.py +12 -9
  47. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/terrace/build_parameters.py +1 -1
  48. package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/builder.py +30 -0
  49. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/terrace/configuration.py +3 -1
  50. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/two_dimensional}/terrace/helpers.py +10 -8
  51. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/__init__.py +0 -0
  52. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional}/pair_defect/builder.py +3 -3
  53. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional}/pair_defect/configuration.py +6 -5
  54. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional}/pair_defect/helpers.py +10 -8
  55. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/__init__.py +40 -0
  56. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/__init__.py +7 -0
  57. package/src/py/mat3ra/made/tools/build/{defect/point → defective_structures/zero_dimensional/point_defect}/base/builder.py +7 -7
  58. package/src/py/mat3ra/made/tools/build/{defect/point → defective_structures/zero_dimensional/point_defect}/base/configuration.py +4 -2
  59. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional/point_defect}/factories.py +11 -11
  60. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/helpers.py +95 -0
  61. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/__init__.py +7 -0
  62. package/src/py/mat3ra/made/tools/build/{defect/point/intersitital → defective_structures/zero_dimensional/point_defect/interstitial}/configuration.py +4 -2
  63. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/helpers.py +48 -0
  64. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional/point_defect/interstitial}/interstitial_placement_method_enum.py +1 -1
  65. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/__init__.py +7 -0
  66. package/src/py/mat3ra/made/tools/build/{defect/point → defective_structures/zero_dimensional/point_defect}/substitutional/configuration.py +4 -2
  67. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/helpers.py +43 -0
  68. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional/point_defect/substitutional}/substitution_placement_method_enum.py +1 -1
  69. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/__init__.py +7 -0
  70. package/src/py/mat3ra/made/tools/build/{defect/point → defective_structures/zero_dimensional/point_defect}/vacancy/builder.py +2 -2
  71. package/src/py/mat3ra/made/tools/build/{defect/point → defective_structures/zero_dimensional/point_defect}/vacancy/configuration.py +4 -2
  72. package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/helpers.py +42 -0
  73. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional/point_defect/vacancy}/vacancy_placement_method_enum.py +1 -1
  74. package/src/py/mat3ra/made/tools/build/pristine_structures/__init__.py +0 -0
  75. package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/__init__.py +0 -0
  76. package/src/py/mat3ra/made/tools/build/{monolayer → pristine_structures/three_dimensional/ideal_crystal}/builder.py +4 -4
  77. package/src/py/mat3ra/made/tools/build/{monolayer → pristine_structures/three_dimensional/ideal_crystal}/configurations.py +2 -1
  78. package/src/py/mat3ra/made/tools/build/{monolayer → pristine_structures/three_dimensional/ideal_crystal}/helpers.py +1 -1
  79. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/__init__.py +0 -0
  80. package/src/py/mat3ra/made/tools/build/{nanoribbon → pristine_structures/two_dimensional/nanoribbon}/__init__.py +11 -3
  81. package/src/py/mat3ra/made/tools/build/{nanoribbon → pristine_structures/two_dimensional/nanoribbon}/builders.py +3 -4
  82. package/src/py/mat3ra/made/tools/build/{nanoribbon → pristine_structures/two_dimensional/nanoribbon}/configuration.py +3 -3
  83. package/src/py/mat3ra/made/tools/build/{nanoribbon → pristine_structures/two_dimensional/nanoribbon}/helpers.py +8 -4
  84. package/src/py/mat3ra/made/tools/build/{nanotape → pristine_structures/two_dimensional/nanotape}/__init__.py +2 -1
  85. package/src/py/mat3ra/made/tools/build/{nanotape → pristine_structures/two_dimensional/nanotape}/build_parameters.py +1 -1
  86. package/src/py/mat3ra/made/tools/build/{nanotape → pristine_structures/two_dimensional/nanotape}/builders.py +9 -7
  87. package/src/py/mat3ra/made/tools/build/{nanotape → pristine_structures/two_dimensional/nanotape}/configuration.py +6 -4
  88. package/src/py/mat3ra/made/tools/build/{nanotape → pristine_structures/two_dimensional/nanotape}/helpers.py +6 -3
  89. package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/__init__.py +9 -0
  90. package/src/py/mat3ra/made/tools/build/{slab → pristine_structures/two_dimensional}/slab/build_parameters.py +1 -1
  91. package/src/py/mat3ra/made/tools/build/{slab → pristine_structures/two_dimensional}/slab/builder.py +13 -11
  92. package/src/py/mat3ra/made/tools/build/{slab → pristine_structures/two_dimensional}/slab/configuration.py +8 -8
  93. package/src/py/mat3ra/made/tools/build/{slab → pristine_structures/two_dimensional/slab}/helpers.py +4 -43
  94. package/src/py/mat3ra/made/tools/build/{slab → pristine_structures/two_dimensional/slab}/termination_utils.py +1 -1
  95. package/src/py/mat3ra/made/tools/build/{slab → pristine_structures/two_dimensional/slab}/utils.py +5 -5
  96. package/src/py/mat3ra/made/tools/build/{slab/strained_supercell_slab → pristine_structures/two_dimensional/slab_strained_supercell}/builder.py +4 -4
  97. package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/__init__.py +0 -0
  98. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/analyzer.py +2 -2
  99. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/ase_based/builder.py +4 -5
  100. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/ase_based/configuration.py +1 -1
  101. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/enums.py +6 -5
  102. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/helpers.py +18 -12
  103. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/merge_based/builder.py +8 -8
  104. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/merge_based/configuration.py +3 -3
  105. package/src/py/mat3ra/made/tools/build/processed_structures/__init__.py +0 -0
  106. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/__init__.py +0 -0
  107. package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/__init__.py +0 -0
  108. package/src/py/mat3ra/made/tools/build/{passivation → processed_structures/two_dimensional/passivation}/analyzers/coordination_based_passivation_material_analyzer.py +4 -2
  109. package/src/py/mat3ra/made/tools/build/{passivation → processed_structures/two_dimensional/passivation}/analyzers/passivation_material_analyzer.py +2 -2
  110. package/src/py/mat3ra/made/tools/build/{passivation → processed_structures/two_dimensional/passivation}/analyzers/surface_passivation_material_analyzer.py +3 -2
  111. package/src/py/mat3ra/made/tools/build/{passivation → processed_structures/two_dimensional/passivation}/builder.py +5 -4
  112. package/src/py/mat3ra/made/tools/build/{passivation → processed_structures/two_dimensional/passivation}/configuration.py +3 -3
  113. package/src/py/mat3ra/made/tools/build/{passivation → processed_structures/two_dimensional/passivation}/helpers.py +4 -4
  114. package/src/py/mat3ra/made/tools/build_components/__init__.py +11 -0
  115. package/src/py/mat3ra/made/tools/build_components/entities/__init__.py +0 -0
  116. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/__init__.py +0 -0
  117. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/one_dimensional/miller_indices_2d.py +0 -0
  118. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/__init__.py +0 -0
  119. package/src/py/mat3ra/made/tools/{build/defect/point/defect_site → build_components/entities/auxiliary/zero_dimensional/point_defect_site}/builder.py +5 -1
  120. package/src/py/mat3ra/made/tools/{build/defect/point/defect_site → build_components/entities/auxiliary/zero_dimensional/point_defect_site}/configuration.py +1 -1
  121. package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/__init__.py +0 -0
  122. package/src/py/mat3ra/made/tools/{build → build_components/entities/auxiliary/zero_dimensional}/void_region/builder.py +3 -3
  123. package/src/py/mat3ra/made/tools/{build → build_components/entities/auxiliary/zero_dimensional}/void_region/configuration.py +2 -2
  124. package/src/py/mat3ra/made/tools/{build → build_components/entities/core/two_dimensional}/vacuum/builder.py +14 -3
  125. package/src/py/mat3ra/made/tools/{build → build_components/entities/core/two_dimensional}/vacuum/configuration.py +4 -4
  126. package/src/py/mat3ra/made/tools/{build/defect/point/atom_at_coordinate → build_components/entities/core/zero_dimensional/atom}/builder.py +3 -3
  127. package/src/py/mat3ra/made/tools/{build/defect/point/atom_at_coordinate → build_components/entities/core/zero_dimensional/atom}/configuration.py +2 -2
  128. package/src/py/mat3ra/made/tools/build_components/entities/reusable/__init__.py +0 -0
  129. package/src/py/mat3ra/made/tools/{build/base → build_components/entities/reusable/base_builder}/__init__.py +1 -2
  130. package/src/py/mat3ra/made/tools/{build/base → build_components/entities/reusable/base_builder}/base_single_builder.py +2 -2
  131. package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/__init__.py +0 -0
  132. package/src/py/mat3ra/made/tools/{build/lattice_lines/base → build_components/entities/reusable/one_dimensional/crystal_lattice_lines}/builder.py +7 -6
  133. package/src/py/mat3ra/made/tools/{build/lattice_lines/base → build_components/entities/reusable/one_dimensional/crystal_lattice_lines}/configuration.py +3 -1
  134. package/src/py/mat3ra/made/tools/{build/lattice_lines → build_components/entities/reusable/one_dimensional/crystal_lattice_lines}/helpers.py +5 -4
  135. package/src/py/mat3ra/made/tools/{build/lattice_lines/repeated → build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated}/builder.py +4 -4
  136. package/src/py/mat3ra/made/tools/{build/lattice_lines/repeated → build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated}/configuration.py +2 -2
  137. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/strained_non_uniform.py +0 -0
  138. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/strained_uniform.py +0 -0
  139. package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/__init__.py +0 -0
  140. package/src/py/mat3ra/made/tools/{build/supercell/supercell_configuration.py → build_components/entities/reusable/three_dimensional/supercell/configuration.py} +1 -1
  141. package/src/py/mat3ra/made/tools/{build → build_components/entities/reusable/three_dimensional}/supercell/helpers.py +5 -5
  142. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/__init__.py +24 -0
  143. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/__init__.py +7 -0
  144. package/src/py/mat3ra/made/tools/{build/slab → build_components/entities/reusable/two_dimensional}/atomic_layers_unique_repeated/builder.py +6 -8
  145. package/src/py/mat3ra/made/tools/{build/slab → build_components/entities/reusable/two_dimensional}/atomic_layers_unique_repeated/configuration.py +1 -1
  146. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/helpers.py +42 -0
  147. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/__init__.py +7 -0
  148. package/src/py/mat3ra/made/tools/{build/slab → build_components/entities/reusable/two_dimensional}/crystal_lattice_planes/builder.py +7 -5
  149. package/src/py/mat3ra/made/tools/{build/slab → build_components/entities/reusable/two_dimensional}/crystal_lattice_planes/configuration.py +4 -2
  150. package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/__init__.py +10 -0
  151. package/src/py/mat3ra/made/tools/{build/defect/slab → build_components/entities/reusable/two_dimensional/slab_stack}/builder.py +8 -5
  152. package/src/py/mat3ra/made/tools/{build/defect/slab → build_components/entities/reusable/two_dimensional/slab_stack}/configuration.py +6 -8
  153. package/src/py/mat3ra/made/tools/{build/defect/slab → build_components/entities/reusable/two_dimensional/slab_stack}/helpers.py +6 -6
  154. package/src/py/mat3ra/made/tools/build_components/entities/reusable/zero_dimensional/__init__.py +0 -0
  155. package/src/py/mat3ra/made/tools/build_components/metadata/__init__.py +2 -0
  156. package/src/py/mat3ra/made/tools/{build → build_components}/metadata/build_metadata.py +1 -2
  157. package/src/py/mat3ra/made/tools/{build → build_components}/metadata/material_with_build_metadata.py +1 -2
  158. package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/__init__.py +0 -0
  159. package/src/py/mat3ra/made/tools/{build/defect/adatom_placement_method_enum.py → build_components/operations/core/combinations/enums.py} +3 -1
  160. package/src/py/mat3ra/made/tools/{build → build_components/operations/core/combinations}/merge/build_parameters.py +1 -1
  161. package/src/py/mat3ra/made/tools/{build → build_components/operations/core/combinations}/merge/builder.py +5 -8
  162. package/src/py/mat3ra/made/tools/{build → build_components/operations/core/combinations}/merge/configuration.py +3 -4
  163. package/src/py/mat3ra/made/tools/{build → build_components/operations/core/combinations}/stack/builder.py +7 -6
  164. package/src/py/mat3ra/made/tools/{build → build_components/operations/core/combinations}/stack/configuration.py +2 -2
  165. package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/build_parameters.py +5 -0
  166. package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/builders/base.py +7 -5
  167. package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/builders/isometric.py +3 -3
  168. package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/configuration.py +4 -2
  169. package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/functions/perturbation_function_holder.py +2 -1
  170. package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/helpers.py +5 -6
  171. package/src/py/mat3ra/made/tools/build_components/utils.py +99 -0
  172. package/src/py/mat3ra/made/tools/calculate/__init__.py +2 -3
  173. package/src/py/mat3ra/made/tools/calculate/calculators/interface_material_calculator.py +1 -1
  174. package/src/py/mat3ra/made/tools/entities/__init__.py +2 -2
  175. package/src/py/mat3ra/made/tools/entities/termination_holder.py +1 -1
  176. package/src/py/mat3ra/made/tools/helpers.py +107 -37
  177. package/src/py/mat3ra/made/tools/modify.py +1 -26
  178. package/src/py/mat3ra/made/tools/operations/core/binary.py +1 -1
  179. package/src/py/mat3ra/made/tools/operations/core/unary.py +27 -2
  180. package/src/py/mat3ra/made/tools/operations/core/utils.py +1 -2
  181. package/tests/py/unit/test_operations.py +1 -1
  182. package/tests/py/unit/test_tools_analyze.py +4 -2
  183. package/tests/py/unit/test_tools_analyze_interface.py +1 -1
  184. package/tests/py/unit/test_tools_analyze_interface_zsl.py +4 -2
  185. package/tests/py/unit/test_tools_build.py +6 -3
  186. package/tests/py/unit/test_tools_build_defect/test_adatom.py +7 -4
  187. package/tests/py/unit/test_tools_build_defect/test_island.py +3 -3
  188. package/tests/py/unit/test_tools_build_defect/test_pair_defect.py +8 -4
  189. package/tests/py/unit/test_tools_build_defect/test_point_defect.py +12 -10
  190. package/tests/py/unit/test_tools_build_defect/test_slab_stack.py +4 -1
  191. package/tests/py/unit/test_tools_build_defect/test_terrace.py +3 -3
  192. package/tests/py/unit/test_tools_build_grain_boundary.py +12 -3
  193. package/tests/py/unit/test_tools_build_interface.py +34 -12
  194. package/tests/py/unit/test_tools_build_interface_zsl.py +10 -9
  195. package/tests/py/unit/test_tools_build_metadata.py +1 -1
  196. package/tests/py/unit/test_tools_build_monolayer.py +1 -1
  197. package/tests/py/unit/test_tools_build_nanoparticle.py +5 -2
  198. package/tests/py/unit/test_tools_build_nanoribbon.py +5 -2
  199. package/tests/py/unit/test_tools_build_passivation.py +1 -1
  200. package/tests/py/unit/test_tools_build_perturbation.py +7 -5
  201. package/tests/py/unit/test_tools_build_slab.py +16 -10
  202. package/tests/py/unit/test_tools_build_supercell.py +1 -1
  203. package/tests/py/unit/test_tools_modify.py +3 -3
  204. package/src/py/mat3ra/made/tools/build/defect/point/helpers.py +0 -207
  205. package/src/py/mat3ra/made/tools/build/defect/terrace/builder.py +0 -27
  206. package/src/py/mat3ra/made/tools/build/grain_boundary/__init__.py +0 -14
  207. package/src/py/mat3ra/made/tools/build/grain_boundary/build_parameters.py +0 -5
  208. package/src/py/mat3ra/made/tools/build/grain_boundary/helpers.py +0 -152
  209. package/src/py/mat3ra/made/tools/build/interface/base/helpers.py +0 -63
  210. package/src/py/mat3ra/made/tools/build/interface/commensurate/__init__.py +0 -6
  211. package/src/py/mat3ra/made/tools/build/interface/zsl/__init__.py +0 -6
  212. package/src/py/mat3ra/made/tools/build/lattice_lines/__init__.py +0 -17
  213. package/src/py/mat3ra/made/tools/build/metadata/__init__.py +0 -3
  214. package/src/py/mat3ra/made/tools/build/perturbation/build_parameters.py +0 -5
  215. package/src/py/mat3ra/made/tools/build/perturbation/builders/__init__.py +0 -7
  216. package/src/py/mat3ra/made/tools/build/slab/__init__.py +0 -25
  217. package/src/py/mat3ra/made/tools/build/supercell/__init__.py +0 -1
  218. package/src/py/mat3ra/made/tools/build/utils.py +0 -43
  219. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/base/build_parameters.py +0 -0
  220. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/enums.py +0 -0
  221. package/src/py/mat3ra/made/tools/build/{interface → compound_pristine_structures/two_dimensional/interface}/twisted/configuration.py +0 -0
  222. package/src/py/mat3ra/made/tools/build/{defect → defective_structures}/__init__.py +0 -0
  223. package/src/py/mat3ra/made/tools/build/{defect/pair_defect → defective_structures/one_dimensional}/__init__.py +0 -0
  224. package/src/py/mat3ra/made/tools/build/{defect/point → defective_structures/one_dimensional/grain_boundary_linear}/__init__.py +0 -0
  225. package/src/py/mat3ra/made/tools/build/{defect/point/intersitital → defective_structures/two_dimensional}/__init__.py +0 -0
  226. package/src/py/mat3ra/made/tools/build/{defect/slab → defective_structures/two_dimensional/adatom}/__init__.py +0 -0
  227. package/src/py/mat3ra/made/tools/build/{monolayer → defective_structures/two_dimensional/grain_boundary_planar}/__init__.py +0 -0
  228. package/src/py/mat3ra/made/tools/build/{passivation → defective_structures/zero_dimensional}/__init__.py +0 -0
  229. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional/point_defect}/atom_placement_method_enum.py +0 -0
  230. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional/point_defect}/complex_defect_type_enum.py +0 -0
  231. package/src/py/mat3ra/made/tools/build/{defect/point/intersitital → defective_structures/zero_dimensional/point_defect/interstitial}/builder.py +0 -0
  232. package/src/py/mat3ra/made/tools/build/{defect → defective_structures/zero_dimensional/point_defect}/point_defect_type_enum.py +0 -0
  233. package/src/py/mat3ra/made/tools/build/{defect/point → defective_structures/zero_dimensional/point_defect}/substitutional/builder.py +0 -0
  234. package/src/py/mat3ra/made/tools/build/{nanoribbon → pristine_structures/two_dimensional/nanoribbon}/build_parameters.py +0 -0
  235. package/src/py/mat3ra/made/tools/build/{slab/strained_supercell_slab → pristine_structures/two_dimensional/slab_strained_supercell}/configuration.py +0 -0
  236. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/__init__.py +0 -0
  237. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/ase_based/__init__.py +0 -0
  238. package/src/py/mat3ra/made/tools/build/{nanoparticle → pristine_structures/zero_dimensional/nanoparticle}/merge_based/__init__.py +0 -0
  239. package/src/py/mat3ra/made/tools/build/{passivation → processed_structures/two_dimensional/passivation}/analyzers/__init__.py +0 -0
  240. package/src/py/mat3ra/made/tools/{enums.py → build/processed_structures/two_dimensional/passivation/enums.py} +0 -0
  241. package/src/py/mat3ra/made/tools/{entities → build_components/entities/auxiliary/two_dimensional}/miller_indices.py +0 -0
  242. package/src/py/mat3ra/made/tools/{entities → build_components/entities/auxiliary/two_dimensional}/termination.py +0 -0
  243. package/src/py/mat3ra/made/tools/{crystal_site → build_components/entities/auxiliary/zero_dimensional/crystal_site}/__init__.py +0 -0
  244. package/src/py/mat3ra/made/tools/{crystal_site → build_components/entities/auxiliary/zero_dimensional/crystal_site}/crystal_site.py +0 -0
  245. package/src/py/mat3ra/made/tools/{crystal_site → build_components/entities/auxiliary/zero_dimensional/crystal_site}/crystal_site_list.py +0 -0
  246. package/src/py/mat3ra/made/tools/{build/base → build_components/entities/reusable/base_builder}/base_configuration_pydantic.py +0 -0
  247. package/src/py/mat3ra/made/tools/{build/base → build_components/entities/reusable/base_builder}/build_parameters.py +0 -0
  248. package/src/py/mat3ra/made/tools/{build/lattice_lines/base → build_components/entities/reusable/one_dimensional/crystal_lattice_lines}/__init__.py +0 -0
  249. package/src/py/mat3ra/made/tools/{build/lattice_lines → build_components/entities/reusable/one_dimensional/crystal_lattice_lines}/edge_types.py +1 -1
  250. package/src/py/mat3ra/made/tools/{build/lattice_lines/repeated → build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated}/__init__.py +0 -0
  251. package/src/py/mat3ra/made/tools/{build/defect → build_components/entities/reusable/zero_dimensional}/coordinates_shape_enum.py +0 -0
  252. package/src/py/mat3ra/made/tools/{build → build_components}/metadata/material_build_metadata.py +1 -1
  253. /package/src/py/mat3ra/made/tools/{build → build_components}/mixins/__init__.py +0 -0
  254. /package/src/py/mat3ra/made/tools/{build → build_components}/mixins/convert_generated_items_ase_atoms_mixin.py +0 -0
  255. /package/src/py/mat3ra/made/tools/{build → build_components}/mixins/convert_generated_items_pymatgen_structure_mixin.py +0 -0
  256. /package/src/py/mat3ra/made/tools/{build → build_components/operations/core/combinations}/merge/__init__.py +0 -0
  257. /package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/__init__.py +0 -0
  258. /package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/functions/__init__.py +0 -0
  259. /package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/functions/function_holder.py +0 -0
  260. /package/src/py/mat3ra/made/tools/{build/perturbation → build_components/operations/core/modifications/perturb}/functions/sine_wave_perturbation_function_holder.py +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mat3ra/made",
3
- "version": "2025.8.5-0",
3
+ "version": "2025.8.7-1",
4
4
  "description": "MAterials DEsign library",
5
5
  "scripts": {
6
6
  "lint": "eslint --cache src/js tests/js && prettier --write src/js tests/js",
package/pyproject.toml CHANGED
@@ -19,7 +19,7 @@ dependencies = [
19
19
  # new verison of numpy==2.0.0 is not handled by pymatgen yet
20
20
  "numpy<=1.26.4",
21
21
  "mat3ra-utils",
22
- "mat3ra-esse>=2025.7.29.post0",
22
+ "mat3ra-esse @ git+https://github.com/Exabyte-io/esse.git@fe1c134459a1a1fe6646bb0d82a075db256cb09c",
23
23
  "mat3ra-code"
24
24
 
25
25
  ]
@@ -88,9 +88,17 @@ class Lattice(RoundNumericValuesMixin, LatticeSchemaVectorless, InMemoryEntityPy
88
88
  a = np.linalg.norm(vectors[0])
89
89
  b = np.linalg.norm(vectors[1])
90
90
  c = np.linalg.norm(vectors[2])
91
- alpha = np.degrees(np.arccos(np.dot(vectors[1], vectors[2]) / (b * c)))
92
- beta = np.degrees(np.arccos(np.dot(vectors[0], vectors[2]) / (a * c)))
93
- gamma = np.degrees(np.arccos(np.dot(vectors[0], vectors[1]) / (a * b)))
91
+ bc = b * c
92
+ ac = a * c
93
+ ab = a * b
94
+
95
+ if bc == 0 or ac == 0 or ab == 0:
96
+ print("Vectors:", vectors)
97
+ raise ValueError("Vectors must not be zero vectors.")
98
+
99
+ alpha = np.degrees(np.arccos(np.dot(vectors[1], vectors[2]) / bc))
100
+ beta = np.degrees(np.arccos(np.dot(vectors[0], vectors[2]) / ac))
101
+ gamma = np.degrees(np.arccos(np.dot(vectors[0], vectors[1]) / ab))
94
102
 
95
103
  return cls(
96
104
  a=float(a),
@@ -1,28 +0,0 @@
1
- from .bond_directions.bond_directions import BondDirections
2
- from .bond_directions.bond_directions_for_element_list import BondDirectionsForElementList
3
- from .bond_directions.bond_directions_templates_enum import BondDirectionsTemplatesEnum
4
- from .bond_directions.bond_directions_templates_for_element import BondDirectionsTemplatesForElement
5
- from .crystal_site.crystal_site import CrystalSite
6
- from .crystal_site.crystal_site_list import CrystalSiteList
7
- from .modify import (
8
- add_vacuum,
9
- add_vacuum_sides,
10
- filter_by_box,
11
- filter_by_circle_projection,
12
- filter_by_condition_on_coordinates,
13
- filter_by_ids,
14
- filter_by_label,
15
- filter_by_layers,
16
- filter_by_rectangle_projection,
17
- filter_by_sphere,
18
- filter_by_triangle_projection,
19
- interface_displace_part,
20
- interface_get_part,
21
- remove_vacuum,
22
- rotate,
23
- translate_by_vector,
24
- translate_to_center,
25
- translate_to_z_level,
26
- wrap_to_unit_cell,
27
- )
28
- from .optimize import evaluate_calculator_on_xy_grid
@@ -5,7 +5,7 @@ from mat3ra.made.material import Material
5
5
  from pydantic import BaseModel
6
6
  from scipy.spatial.distance import pdist
7
7
 
8
- from ..build.metadata.material_with_build_metadata import MaterialWithBuildMetadata
8
+ from ..build_components.metadata.material_with_build_metadata import MaterialWithBuildMetadata
9
9
  from .other import get_chemical_formula_empirical
10
10
  from .utils import decorator_perform_operation_in_cartesian_coordinates
11
11
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Generic, Type, TypeVar
4
4
 
5
- from ..build import BuildMetadata, MaterialWithBuildMetadata
5
+ from ..build_components.metadata import BuildMetadata, MaterialWithBuildMetadata
6
6
  from . import BaseMaterialAnalyzer
7
7
 
8
8
  TypeConfiguration = TypeVar("TypeConfiguration")
@@ -1,10 +1,12 @@
1
1
  from typing import List
2
2
 
3
3
  from mat3ra.made.material import Material
4
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.builder import SlabBuilder
4
5
 
5
- from ...build import MaterialWithBuildMetadata
6
- from ...build.defect.slab.helpers import recreate_slab_with_fractional_layers
7
- from ...build.slab.slab.builder import SlabBuilder
6
+ from ...build_components.entities.reusable.two_dimensional.slab_stack.helpers import (
7
+ recreate_slab_with_fractional_layers,
8
+ )
9
+ from ...build_components.metadata import MaterialWithBuildMetadata
8
10
  from .adatom_material_analyzer import AdatomMaterialAnalyzer
9
11
  from .crystal_site_analyzer import CrystalSiteAnalyzer
10
12
 
@@ -2,11 +2,11 @@ from typing import List
2
2
 
3
3
  from mat3ra.esse.models.materials_category_components.entities.core.zero_dimensional.atom import AtomSchema
4
4
 
5
- from ...build import MaterialWithBuildMetadata
6
- from ...build.defect.point.atom_at_coordinate.builder import AtomAtCoordinateBuilder
7
- from ...build.defect.point.atom_at_coordinate.configuration import AtomAtCoordinateConfiguration
8
- from ...build.vacuum.builder import VacuumBuilder
9
- from ...build.vacuum.configuration import VacuumConfiguration
5
+ from ...build_components.entities.core.two_dimensional.vacuum.builder import VacuumBuilder
6
+ from ...build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
7
+ from ...build_components.entities.core.zero_dimensional.atom.builder import AtomAtCoordinateBuilder
8
+ from ...build_components.entities.core.zero_dimensional.atom.configuration import AtomAtCoordinateConfiguration
9
+ from ...build_components.metadata import MaterialWithBuildMetadata
10
10
  from ..slab import SlabMaterialAnalyzer
11
11
 
12
12
 
@@ -1,7 +1,7 @@
1
1
  from typing import List
2
2
 
3
3
  from ....utils import get_center_of_coordinates
4
- from ...build.supercell.helpers import create_supercell
4
+ from ...build_components.entities.reusable.three_dimensional.supercell.helpers import create_supercell
5
5
  from ...modify import filter_by_condition_on_coordinates
6
6
  from ...utils import transform_coordinate_to_supercell
7
7
  from .. import BaseMaterialAnalyzer
@@ -6,9 +6,9 @@ from mat3ra.esse.models.materials_category_components.entities.auxiliary.two_dim
6
6
  SupercellMatrix2DSchema,
7
7
  )
8
8
  from mat3ra.made.material import Material
9
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import SlabConfiguration
9
10
  from pydantic import model_validator
10
11
 
11
- from ...build.slab.slab.configuration import SlabConfiguration
12
12
  from .utils.holders import MatchedSubstrateFilmConfigurationHolder
13
13
  from .zsl import ZSLInterfaceAnalyzer
14
14
 
@@ -7,11 +7,13 @@ from mat3ra.esse.models.core.abstract.matrix_3x3 import Matrix3x3Schema
7
7
  from mat3ra.esse.models.materials_category_components.entities.auxiliary.two_dimensional.supercell_matrix_2d import (
8
8
  SupercellMatrix2DSchema,
9
9
  )
10
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.build_parameters import SlabBuilderParameters
11
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.builder import SlabBuilder
12
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import SlabConfiguration
10
13
 
11
- from ...build.slab.slab.build_parameters import SlabBuilderParameters
12
- from ...build.slab.slab.builder import SlabBuilder
13
- from ...build.slab.slab.configuration import SlabConfiguration
14
- from ...build.slab.strained_supercell_slab.configuration import SlabStrainedSupercellConfiguration
14
+ from ...build.pristine_structures.two_dimensional.slab_strained_supercell.configuration import (
15
+ SlabStrainedSupercellConfiguration,
16
+ )
15
17
  from ..interface.utils.holders import MatchedSubstrateFilmConfigurationHolder
16
18
 
17
19
 
@@ -1,9 +1,10 @@
1
1
  from typing import Tuple
2
2
 
3
3
  from mat3ra.made.material import Material
4
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import SlabConfiguration
4
5
 
5
- from ...build.slab.slab.configuration import SlabConfiguration
6
- from ...modify import rotate, translate_to_center
6
+ from ...modify import translate_to_center
7
+ from ...operations.core.unary import rotate
7
8
  from ..other import get_surface_area
8
9
  from . import InterfaceAnalyzer
9
10
  from .utils.holders import MatchedSubstrateFilmConfigurationHolder
@@ -2,7 +2,9 @@ from typing import Optional
2
2
 
3
3
  from mat3ra.code.entity import InMemoryEntityPydantic
4
4
 
5
- from ....build.slab.strained_supercell_slab.configuration import SlabStrainedSupercellConfiguration
5
+ from ....build.pristine_structures.two_dimensional.slab_strained_supercell.configuration import (
6
+ SlabStrainedSupercellConfiguration,
7
+ )
6
8
 
7
9
 
8
10
  class MatchedSubstrateFilmConfigurationHolder(InMemoryEntityPydantic):
@@ -8,11 +8,11 @@ from mat3ra.esse.models.core.abstract.matrix_3x3 import Matrix3x3Schema
8
8
  from mat3ra.esse.models.materials_category_components.entities.auxiliary.two_dimensional.supercell_matrix_2d import (
9
9
  SupercellMatrix2DSchema,
10
10
  )
11
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.builder import SlabBuilder
11
12
  from mat3ra.utils.matrix import convert_2x2_to_3x3
12
13
  from pymatgen.analysis.interfaces.coherent_interfaces import ZSLGenerator as PymatgenZSLGenerator
13
14
 
14
- from ...build import MaterialWithBuildMetadata
15
- from ...build.slab.slab.builder import SlabBuilder
15
+ from ...build_components import MaterialWithBuildMetadata
16
16
  from ..interface.simple import InterfaceAnalyzer
17
17
  from ..interface.utils.holders import MatchedSubstrateFilmConfigurationHolder
18
18
  from ..utils import calculate_von_mises_strain
@@ -1,4 +1,4 @@
1
- from ..build import MaterialWithBuildMetadata
1
+ from ..build_components.metadata import MaterialWithBuildMetadata
2
2
  from ..convert import from_pymatgen, to_pymatgen
3
3
  from ..third_party import PymatgenSpacegroupAnalyzer
4
4
  from . import BaseMaterialAnalyzer
@@ -4,7 +4,7 @@ from mat3ra.code.vector import Vector3D
4
4
  from mat3ra.esse.models.core.abstract.matrix_3x3 import Matrix3x3Schema
5
5
  from mat3ra.made.material import Material
6
6
 
7
- from ..build import MaterialWithBuildMetadata
7
+ from ..build_components.metadata import MaterialWithBuildMetadata
8
8
  from ..convert import from_pymatgen, to_pymatgen
9
9
  from ..entities import MillerIndices, Termination, TerminationHolder
10
10
  from ..third_party import PymatgenSlab, PymatgenSlabGenerator, label_pymatgen_slab_termination
@@ -5,7 +5,9 @@ from mat3ra.code.array_with_ids import ArrayWithIds
5
5
  from mat3ra.made.material import Material
6
6
  from scipy.spatial._ckdtree import cKDTree
7
7
 
8
- from .. import BondDirections, BondDirectionsTemplatesForElement, CrystalSite, CrystalSiteList
8
+ from ..bond_directions.bond_directions import BondDirections
9
+ from ..bond_directions.bond_directions_templates_for_element import BondDirectionsTemplatesForElement
10
+ from ..build_components.entities.auxiliary.zero_dimensional.crystal_site import CrystalSite, CrystalSiteList
9
11
  from .rdf import RadialDistributionFunction
10
12
  from .utils import decorator_handle_periodic_boundary_conditions
11
13
 
@@ -2,10 +2,10 @@ from typing import Callable, List, Literal, Optional
2
2
 
3
3
  import numpy as np
4
4
  from mat3ra.made.material import Material
5
+ from mat3ra.made.tools.build.processed_structures.two_dimensional.passivation.enums import SurfaceTypesEnum
5
6
  from scipy.spatial import cKDTree
6
7
 
7
8
  from ..convert import decorator_convert_material_args_kwargs_to_atoms, to_pymatgen
8
- from ..enums import SurfaceTypesEnum
9
9
  from ..third_party import ASEAtoms, PymatgenIStructure
10
10
  from ..utils import decorator_convert_position_to_coordinate
11
11
  from .utils import decorator_handle_periodic_boundary_conditions
@@ -2,12 +2,12 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Type
4
4
 
5
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.build_parameters import SlabBuilderParameters
6
+ from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import SlabConfiguration
5
7
  from mat3ra.made.utils import adjust_material_cell_to_set_gap_along_direction, get_atomic_coordinates_extremum
6
8
 
7
- from ..build import MaterialWithBuildMetadata
8
- from ..build.slab.slab.build_parameters import SlabBuilderParameters
9
- from ..build.slab.slab.configuration import SlabConfiguration
10
- from ..build.vacuum.configuration import VacuumConfiguration
9
+ from ..build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
10
+ from ..build_components.metadata import MaterialWithBuildMetadata
11
11
  from .build_metadata_analyzer import BuildMetadataAnalyzer
12
12
  from .crystal_site.crystal_site_analyzer import CrystalSiteAnalyzer
13
13
 
@@ -1,6 +1,6 @@
1
1
  from typing import List
2
2
 
3
- from .bond_directions_templates_for_element import BondDirectionsTemplatesForElement
3
+ from ...bond_directions.bond_directions_templates_for_element import BondDirectionsTemplatesForElement
4
4
 
5
5
 
6
6
  class BondDirectionsForElementList(List[BondDirectionsTemplatesForElement]):
@@ -1,5 +1,9 @@
1
- from .metadata import BuildMetadata, MaterialBuildMetadata, MaterialWithBuildMetadata
2
- from .base import (
1
+ from ..build_components.metadata import (
2
+ BuildMetadata,
3
+ MaterialBuildMetadata,
4
+ MaterialWithBuildMetadata,
5
+ )
6
+ from ..build_components import (
3
7
  BaseConfigurationPydantic,
4
8
  BaseBuilderParameters,
5
9
  BaseSingleBuilder,
@@ -7,3 +11,15 @@ from .base import (
7
11
  TypeBuildParameters,
8
12
  BaseConfigurationPydanticChild,
9
13
  )
14
+
15
+ __all__ = [
16
+ "BuildMetadata",
17
+ "MaterialBuildMetadata",
18
+ "MaterialWithBuildMetadata",
19
+ "BaseConfigurationPydantic",
20
+ "BaseBuilderParameters",
21
+ "BaseSingleBuilder",
22
+ "TypeConfiguration",
23
+ "TypeBuildParameters",
24
+ "BaseConfigurationPydanticChild",
25
+ ]
@@ -2,26 +2,22 @@ from .base import (
2
2
  InterfaceConfiguration,
3
3
  InterfaceBuilder,
4
4
  InterfaceBuilderParameters,
5
- create_simple_interface_between_slabs,
6
- )
7
- from .zsl import (
8
- create_zsl_interface,
9
- create_zsl_interface_between_slabs,
5
+ create_interface_simple_between_slabs,
10
6
  )
11
7
  from .commensurate import (
12
- create_commensurate_interface,
8
+ create_interface_commensurate,
13
9
  get_commensurate_strained_configurations,
14
10
  )
11
+ from .enums import StrainModes
15
12
  from .twisted import (
16
13
  TwistedNanoribbonsInterfaceConfiguration,
17
- create_twisted_interface,
14
+ create_interface_twisted,
18
15
  )
19
- from .utils import (
20
- get_optimal_film_displacement,
21
- get_slab,
22
- remove_duplicate_interfaces,
16
+ from .utils import get_optimal_film_displacement, get_slab, remove_duplicate_interfaces
17
+ from .zsl import (
18
+ create_interface_zsl,
19
+ create_interface_zsl_between_slabs,
23
20
  )
24
- from .enums import StrainModes
25
21
 
26
22
  __all__ = [
27
23
  # Base interface classes
@@ -29,16 +25,16 @@ __all__ = [
29
25
  "InterfaceBuilder",
30
26
  "InterfaceBuilderParameters",
31
27
  # Simple interface
32
- "create_simple_interface_between_slabs",
28
+ "create_interface_simple_between_slabs",
33
29
  # ZSL interface
34
- "create_zsl_interface",
35
- "create_zsl_interface_between_slabs",
30
+ "create_interface_zsl",
31
+ "create_interface_zsl_between_slabs",
36
32
  # Commensurate interface
37
- "create_commensurate_interface",
33
+ "create_interface_commensurate",
38
34
  "get_commensurate_strained_configurations",
39
35
  # Twisted interface
40
36
  "TwistedNanoribbonsInterfaceConfiguration",
41
- "create_twisted_interface",
37
+ "create_interface_twisted",
42
38
  # Utilities
43
39
  "get_optimal_film_displacement",
44
40
  "get_slab",
@@ -1,11 +1,11 @@
1
1
  from .configuration import InterfaceConfiguration
2
2
  from .builder import InterfaceBuilder
3
3
  from .build_parameters import InterfaceBuilderParameters
4
- from .helpers import create_simple_interface_between_slabs
4
+ from .helpers import create_interface_simple_between_slabs
5
5
 
6
6
  __all__ = [
7
7
  "InterfaceConfiguration",
8
8
  "InterfaceBuilder",
9
9
  "InterfaceBuilderParameters",
10
- "create_simple_interface_between_slabs",
10
+ "create_interface_simple_between_slabs",
11
11
  ]
@@ -1,26 +1,24 @@
1
- from typing import Optional, Any, Type, Union
1
+ from typing import Optional, Any, Type, Union, cast
2
2
 
3
3
  import numpy as np
4
4
 
5
5
  from mat3ra.made.material import Material
6
- from .configuration import InterfaceConfiguration
6
+ from mat3ra.made.utils import AXIS_TO_INDEX_MAP
7
7
  from .build_parameters import InterfaceBuilderParameters
8
- from ... import MaterialWithBuildMetadata, TypeConfiguration
9
- from ...slab.strained_supercell_slab.builder import SlabStrainedSupercellBuilder
10
- from ...slab.strained_supercell_slab.configuration import SlabStrainedSupercellConfiguration
11
- from ...stack.builder import StackNComponentsBuilder
12
- from ...stack.configuration import StackConfiguration
13
- from ....analyze import BaseMaterialAnalyzer
14
- from ....analyze.lattice import get_material_with_primitive_lattice
15
- from ....convert.interface_parts_enum import InterfacePartsEnum
16
- from ....modify import (
17
- translate_by_vector,
18
- wrap_to_unit_cell,
19
- translate_to_center,
8
+ from .configuration import InterfaceConfiguration
9
+ from .....pristine_structures.two_dimensional.slab_strained_supercell.builder import SlabStrainedSupercellBuilder
10
+ from .....pristine_structures.two_dimensional.slab_strained_supercell.configuration import (
11
+ SlabStrainedSupercellConfiguration,
20
12
  )
21
- from ....operations.core.unary import supercell
22
- from ....operations.core.utils import should_skip_stacking
23
- from .....utils import AXIS_TO_INDEX_MAP
13
+ from ......analyze import BaseMaterialAnalyzer
14
+ from ......analyze.lattice import get_material_with_primitive_lattice
15
+ from ......build_components import MaterialWithBuildMetadata
16
+ from ......build_components.operations.core.combinations.stack.builder import StackNComponentsBuilder
17
+ from ......build_components.operations.core.combinations.stack.configuration import StackConfiguration
18
+ from ......convert.interface_parts_enum import InterfacePartsEnum
19
+ from ......modify import translate_by_vector, translate_to_center, wrap_to_unit_cell
20
+ from ......operations.core.unary import supercell
21
+ from ......operations.core.utils import should_skip_stacking
24
22
 
25
23
 
26
24
  class InterfaceBuilder(StackNComponentsBuilder):
@@ -40,7 +38,7 @@ class InterfaceBuilder(StackNComponentsBuilder):
40
38
  SlabStrainedSupercellConfiguration: SlabStrainedSupercellBuilder,
41
39
  }
42
40
 
43
- def _generate(self, configuration: TypeConfiguration) -> MaterialWithBuildMetadata:
41
+ def _generate(self, configuration: InterfaceConfiguration) -> MaterialWithBuildMetadata:
44
42
  film_material = self._stack_component_to_material(configuration.film_configuration, configuration)
45
43
  substrate_material = self._stack_component_to_material(configuration.substrate_configuration, configuration)
46
44
 
@@ -80,9 +78,10 @@ class InterfaceBuilder(StackNComponentsBuilder):
80
78
  self,
81
79
  material: MaterialWithBuildMetadata,
82
80
  post_process_parameters: Optional[Any],
83
- configuration: Optional[TypeConfiguration] = None,
81
+ configuration: Optional[InterfaceConfiguration] = None,
84
82
  ) -> MaterialWithBuildMetadata:
85
- if self.build_parameters.make_primitive:
83
+ build_params = cast(InterfaceBuilderParameters, self.build_parameters)
84
+ if build_params.make_primitive:
86
85
  # TODO: check that this doesn't warp material or flip it -- otherwise raise and skip
87
86
  primitive_material = get_material_with_primitive_lattice(material, return_original_if_not_reduced=True)
88
87
 
@@ -115,7 +114,7 @@ class InterfaceBuilder(StackNComponentsBuilder):
115
114
  return f"Interface, Strain {strain:.3f}pct"
116
115
 
117
116
  def _update_material_name(
118
- self, material: Union[Material, MaterialWithBuildMetadata], configuration: TypeConfiguration
117
+ self, material: Union[Material, MaterialWithBuildMetadata], configuration: InterfaceConfiguration
119
118
  ) -> MaterialWithBuildMetadata:
120
119
  base_name = self.get_base_name_from_configuration(
121
120
  configuration.film_configuration, configuration.substrate_configuration
@@ -5,11 +5,13 @@ from mat3ra.esse.models.materials_category.compound_pristine_structures.two_dime
5
5
  InterfaceConfigurationSchema,
6
6
  )
7
7
 
8
- from ....utils import unwrap
9
- from ...slab.strained_supercell_slab.configuration import SlabStrainedSupercellConfiguration
10
- from ...stack.configuration import StackConfiguration
11
- from ...vacuum.configuration import VacuumConfiguration
12
- from ....analyze.utils import calculate_von_mises_strain
8
+ from .....pristine_structures.two_dimensional.slab_strained_supercell.configuration import (
9
+ SlabStrainedSupercellConfiguration,
10
+ )
11
+ from ......analyze.utils import calculate_von_mises_strain
12
+ from ......build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
13
+ from ......build_components.operations.core.combinations.stack.configuration import StackConfiguration
14
+ from ......utils import unwrap
13
15
 
14
16
 
15
17
  class InterfaceConfiguration(StackConfiguration, InterfaceConfigurationSchema):
@@ -21,6 +23,7 @@ class InterfaceConfiguration(StackConfiguration, InterfaceConfigurationSchema):
21
23
  ]
22
24
  ]
23
25
  xy_shift: List[float] = InterfaceConfigurationSchema.model_fields["xy_shift"].default # in Angstroms
26
+
24
27
  type: str = "InterfaceConfiguration"
25
28
 
26
29
  @property
@@ -0,0 +1,134 @@
1
+ from typing import List, Optional, Tuple, Union
2
+
3
+ from mat3ra.code.array_with_ids import ArrayWithIds
4
+
5
+ from mat3ra.made.material import Material
6
+ from .build_parameters import InterfaceBuilderParameters
7
+ from .builder import InterfaceBuilder
8
+ from .configuration import InterfaceConfiguration
9
+ from ......analyze.interface import InterfaceAnalyzer
10
+ from ......analyze.slab import SlabMaterialAnalyzer
11
+ from ......build.pristine_structures.two_dimensional.slab.helpers import create_slab
12
+ from ......build_components import MaterialWithBuildMetadata
13
+ from ......build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
14
+
15
+
16
+ def create_interface_simple_between_slabs(
17
+ substrate_slab: MaterialWithBuildMetadata,
18
+ film_slab: MaterialWithBuildMetadata,
19
+ gap: Optional[float] = None,
20
+ vacuum: float = 10.0,
21
+ xy_shift: List[float] = [0, 0],
22
+ reduce_result_cell_to_primitive: bool = False,
23
+ ) -> Material:
24
+ """
25
+ Create an interface between two slab materials with specified parameters.
26
+ No strain matching is performed, the interface is created as a simple stack of two slabs.
27
+
28
+ Args:
29
+ substrate_slab (MaterialWithBuildMetadata): Substrate slab material.
30
+ film_slab (MaterialWithBuildMetadata): Film slab material.
31
+ gap (Optional[float]): Gap between the two materials, in Angstroms.
32
+ Distance between top most atom of the substrate and bottom most atom of the film.
33
+ vacuum (float): Size of the vacuum layer in Angstroms.
34
+ xy_shift (List[float]): Shift in x and y directions, in Angstroms.
35
+
36
+ Returns:
37
+ Material: The interface material.
38
+ """
39
+ substrate_analyzer = SlabMaterialAnalyzer(material=substrate_slab)
40
+ film_analyzer = SlabMaterialAnalyzer(material=film_slab)
41
+
42
+ analyzer = InterfaceAnalyzer(
43
+ substrate_slab_configuration=substrate_analyzer.build_configuration,
44
+ film_slab_configuration=film_analyzer.build_configuration,
45
+ substrate_build_parameters=substrate_analyzer.build_parameters,
46
+ film_build_parameters=film_analyzer.build_parameters,
47
+ )
48
+
49
+ film_configuration = analyzer.film_strained_configuration
50
+ substrate_configuration = analyzer.substrate_strained_configuration
51
+ vacuum_configuration = VacuumConfiguration(
52
+ size=vacuum,
53
+ )
54
+
55
+ config = InterfaceConfiguration(
56
+ stack_components=[substrate_configuration, film_configuration, vacuum_configuration],
57
+ xy_shift=xy_shift,
58
+ gaps=ArrayWithIds.from_values([gap]),
59
+ )
60
+ builder = InterfaceBuilder(
61
+ build_parameters=InterfaceBuilderParameters(make_primitive=reduce_result_cell_to_primitive)
62
+ )
63
+ interface = builder.get_material(config)
64
+ return interface
65
+
66
+
67
+ def create_interface_simple(
68
+ substrate_crystal: Union[Material, MaterialWithBuildMetadata],
69
+ film_crystal: Union[Material, MaterialWithBuildMetadata],
70
+ substrate_miller_indices: Tuple[int, int, int] = (0, 0, 1),
71
+ film_miller_indices: Tuple[int, int, int] = (0, 0, 1),
72
+ substrate_number_of_layers: int = 1,
73
+ film_number_of_layers: int = 1,
74
+ substrate_termination_formula: Optional[str] = None,
75
+ film_termination_formula: Optional[str] = None,
76
+ substrate_xy_supercell_matrix: List[List[int]] = [[1, 0], [0, 1]],
77
+ film_xy_supercell_matrix: List[List[int]] = [[1, 0], [0, 1]],
78
+ gap: Optional[float] = None,
79
+ vacuum: float = 10.0,
80
+ xy_shift: List[float] = [0, 0],
81
+ use_conventional_cell: bool = True,
82
+ reduce_result_cell_to_primitive: bool = False,
83
+ ) -> Material:
84
+ """
85
+ Create an interface between two crystal materials by first creating slabs and then stacking them.
86
+ No strain matching is performed, the interface is created as a simple stack of two slabs.
87
+
88
+ Args:
89
+ substrate_crystal (Union[Material, MaterialWithBuildMetadata]): Substrate crystal material.
90
+ film_crystal (Union[Material, MaterialWithBuildMetadata]): Film crystal material.
91
+ substrate_miller_indices (Tuple[int, int, int]): Miller indices for the substrate slab surface.
92
+ film_miller_indices (Tuple[int, int, int]): Miller indices for the film slab surface.
93
+ substrate_number_of_layers (int): Number of atomic layers in the substrate slab.
94
+ film_number_of_layers (int): Number of atomic layers in the film slab.
95
+ substrate_termination_formula (Optional[str]): Formula of the termination for substrate slab.
96
+ film_termination_formula (Optional[str]): Formula of the termination for film slab.
97
+ substrate_xy_supercell_matrix (List[List[int]]): Supercell matrix for substrate slab xy plane.
98
+ film_xy_supercell_matrix (List[List[int]]): Supercell matrix for film slab xy plane.
99
+ gap (Optional[float]): Gap between the two materials, in Angstroms.
100
+ vacuum (float): Size of the vacuum layer in Angstroms.
101
+ xy_shift (List[float]): Shift in x and y directions, in Angstroms.
102
+ use_conventional_cell (bool): Whether to use conventional cell for crystals.
103
+ reduce_result_cell_to_primitive (bool): Whether to reduce result cell to primitive.
104
+
105
+ Returns:
106
+ Material: The interface material.
107
+ """
108
+ substrate_slab = create_slab(
109
+ crystal=substrate_crystal,
110
+ miller_indices=substrate_miller_indices,
111
+ number_of_layers=substrate_number_of_layers,
112
+ vacuum=0,
113
+ termination_formula=substrate_termination_formula,
114
+ xy_supercell_matrix=substrate_xy_supercell_matrix,
115
+ use_conventional_cell=use_conventional_cell,
116
+ )
117
+ film_slab = create_slab(
118
+ crystal=film_crystal,
119
+ miller_indices=film_miller_indices,
120
+ number_of_layers=film_number_of_layers,
121
+ vacuum=0,
122
+ termination_formula=film_termination_formula,
123
+ xy_supercell_matrix=film_xy_supercell_matrix,
124
+ use_conventional_cell=use_conventional_cell,
125
+ )
126
+
127
+ return create_interface_simple_between_slabs(
128
+ substrate_slab=substrate_slab,
129
+ film_slab=film_slab,
130
+ gap=gap,
131
+ vacuum=vacuum,
132
+ xy_shift=xy_shift,
133
+ reduce_result_cell_to_primitive=reduce_result_cell_to_primitive,
134
+ )
@@ -0,0 +1,6 @@
1
+ from .helpers import create_interface_commensurate, get_commensurate_strained_configurations
2
+
3
+ __all__ = [
4
+ "create_interface_commensurate",
5
+ "get_commensurate_strained_configurations",
6
+ ]