@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,263 +0,0 @@
1
- import copy
2
- from types import SimpleNamespace
3
-
4
- import numpy as np
5
- import pytest
6
- from mat3ra.made.basis import Basis
7
- from mat3ra.made.lattice import COORDINATE_TOLERANCE
8
- from mat3ra.made.material import Material
9
- from mat3ra.made.tools.analyze.interface.zsl import ZSLInterfaceAnalyzer
10
- from mat3ra.made.tools.build.compound_pristine_structures.two_dimensional.interface.base.builder import InterfaceBuilder
11
- from mat3ra.made.tools.build.compound_pristine_structures.two_dimensional.interface.base.configuration import (
12
- InterfaceConfiguration,
13
- )
14
- from mat3ra.made.tools.build.compound_pristine_structures.two_dimensional.interface.zsl.helpers import (
15
- create_interface_zsl,
16
- create_interface_zsl_between_slabs,
17
- )
18
- from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab import SlabBuilder, SlabConfiguration
19
- from mat3ra.made.tools.build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
20
- from mat3ra.standata.materials import Materials
21
-
22
- from .fixtures.bulk import BULK_Ni_PRIMITIVE
23
- from .fixtures.interface.gr_ni_111_top_hcp import (
24
- GRAPHENE_NICKEL_INTERFACE_TOP_HCP,
25
- GRAPHENE_NICKEL_INTERFACE_TOP_HCP_GH_WF,
26
- )
27
- from .fixtures.interface.zsl import DIAMOND_GaAs_INTERFACE, DIAMOND_GaAs_INTERFACE_GH
28
- from .fixtures.monolayer import GRAPHENE
29
- from .utils import OSPlatform, assert_interfaces_almost_equal, get_platform_specific_value
30
-
31
- GRAPHENE_NICKEL_TEST_CASE = (
32
- SimpleNamespace(
33
- bulk_config=BULK_Ni_PRIMITIVE,
34
- miller_indices=(1, 1, 1),
35
- number_of_layers=3,
36
- vacuum=0.0,
37
- ),
38
- SimpleNamespace(
39
- bulk_config=GRAPHENE,
40
- miller_indices=(0, 0, 1),
41
- number_of_layers=1,
42
- vacuum=0.0,
43
- ),
44
- 3.0, # gap between graphene and nickel
45
- 10.0, # vacuum
46
- 90, # max area
47
- {
48
- OSPlatform.DARWIN: GRAPHENE_NICKEL_INTERFACE_TOP_HCP,
49
- OSPlatform.OTHER: GRAPHENE_NICKEL_INTERFACE_TOP_HCP_GH_WF,
50
- },
51
- )
52
-
53
- BULK_DIAMOND = Materials.get_by_name_first_match("Diamond")
54
- BULK_GaAs = Materials.get_by_name_first_match("GaAs")
55
-
56
- DIAMOND_GAAS_CSL_TEST_CASE = (
57
- SimpleNamespace(
58
- bulk_config=BULK_DIAMOND,
59
- miller_indices=(0, 0, 1),
60
- number_of_layers=1,
61
- vacuum=0.0,
62
- ),
63
- SimpleNamespace(
64
- bulk_config=BULK_GaAs,
65
- miller_indices=(0, 0, 1),
66
- number_of_layers=1,
67
- vacuum=0.0,
68
- ),
69
- 1.5, # gap between diamond and gaas
70
- 10.0, # vacuum
71
- 70.0, # max area
72
- {
73
- OSPlatform.DARWIN: DIAMOND_GaAs_INTERFACE,
74
- OSPlatform.OTHER: DIAMOND_GaAs_INTERFACE_GH,
75
- },
76
- )
77
-
78
-
79
- MAX_AREA_RATIO_TOL = 0.09
80
- MAX_LENGTH_TOL = 0.05
81
- MAX_ANGLE_TOL = 0.02
82
-
83
-
84
- # The default comparison tolerance (atol=1e-9) in assert_two_entities_deep_almost_equal
85
- # is too strict for cross-platform floating-point variations in ZSL interface coordinate
86
- # calculations, which can differ on the order of 10**-8 to 10**-7 across different systems
87
- # and compilers. We instead use the coordinate tolerance defined in mat3ra.made.lattice,
88
- # which is 10**-COORDINATE_TOLERANCE (10**-6 = 1e-6).
89
- UPDATED_COORDINATE_TOLERANCE = 10**-COORDINATE_TOLERANCE
90
-
91
-
92
- def to_basis_obj(b_dict: dict) -> Basis:
93
- """
94
- Ensure a basis dictionary has sequential IDs and convert it to a Basis object.
95
-
96
- Args:
97
- b_dict (dict): The dictionary representation of a basis.
98
-
99
- Returns:
100
- Basis: The instantiated Basis object.
101
- """
102
- b_dict = copy.deepcopy(b_dict)
103
- for key in ["elements", "coordinates"]:
104
- if key in b_dict and isinstance(b_dict[key], list):
105
- for idx, item in enumerate(b_dict[key]):
106
- if isinstance(item, dict) and "id" not in item:
107
- item["id"] = idx
108
- return Basis(**b_dict)
109
-
110
-
111
- def are_bases_almost_equal(b1: Basis, b2: Basis, atol: float) -> bool:
112
- """
113
- Compare two Basis objects for equality with permuted ordering and coordinate tolerance.
114
-
115
- Args:
116
- b1 (Basis): The first Basis object.
117
- b2 (Basis): The second Basis object.
118
- atol (float): Absolute tolerance for coordinate comparison.
119
-
120
- Returns:
121
- bool: True if the bases are physically equivalent within tolerance, False otherwise.
122
- """
123
- if b1.number_of_atoms != b2.number_of_atoms:
124
- return False
125
- n = b1.number_of_atoms
126
- self_elements, other_elements = b1.elements.values, b2.elements.values
127
- self_coords, other_coords = b1.coordinates.values, b2.coordinates.values
128
- self_labels = b1.labels.values if (b1.labels and len(b1.labels.values) == n) else [None] * n
129
- other_labels = b2.labels.values if (b2.labels and len(b2.labels.values) == n) else [None] * n
130
- self_constraints = b1.constraints.values if (b1.constraints and len(b1.constraints.values) == n) else [None] * n
131
- other_constraints = b2.constraints.values if (b2.constraints and len(b2.constraints.values) == n) else [None] * n
132
-
133
- other_indices_left = set(range(n))
134
- for i in range(n):
135
- found = False
136
- elem, coord, lbl, const = self_elements[i], self_coords[i], self_labels[i], self_constraints[i]
137
- for j in list(other_indices_left):
138
- if other_elements[j] == elem and other_labels[j] == lbl and other_constraints[j] == const:
139
- if np.allclose(other_coords[j], coord, atol=atol):
140
- other_indices_left.remove(j)
141
- found = True
142
- break
143
- if not found:
144
- return False
145
- return True
146
-
147
-
148
- @pytest.mark.parametrize(
149
- "substrate, film,gap, vacuum, max_area, expected_interface",
150
- [GRAPHENE_NICKEL_TEST_CASE, DIAMOND_GAAS_CSL_TEST_CASE],
151
- )
152
- def test_zsl_interface_builder(substrate, film, gap, vacuum, max_area, expected_interface):
153
- """Test creating Si/Ge interface using ZSL approach."""
154
- substrate_slab_config = SlabConfiguration.from_parameters(
155
- substrate.bulk_config, substrate.miller_indices, substrate.number_of_layers, vacuum=substrate.vacuum
156
- )
157
- film_slab_config = SlabConfiguration.from_parameters(
158
- film.bulk_config, film.miller_indices, film.number_of_layers, vacuum=film.vacuum
159
- )
160
-
161
- # Use ZSLInterfaceAnalyzer to get strained slab configurations
162
- analyzer = ZSLInterfaceAnalyzer(
163
- substrate_slab_configuration=substrate_slab_config,
164
- film_slab_configuration=film_slab_config,
165
- max_area=max_area,
166
- max_area_ratio_tol=MAX_AREA_RATIO_TOL,
167
- max_length_tol=MAX_LENGTH_TOL,
168
- max_angle_tol=MAX_ANGLE_TOL,
169
- reduce_result_cell=False,
170
- )
171
-
172
- interface_configurations = analyzer.get_strained_configurations()
173
-
174
- selected_config = interface_configurations[0]
175
- vacuum_configuration = VacuumConfiguration(size=vacuum)
176
- interface_config = InterfaceConfiguration(
177
- stack_components=[
178
- selected_config.substrate_configuration,
179
- selected_config.film_configuration,
180
- vacuum_configuration,
181
- ],
182
- gaps=[gap, gap],
183
- )
184
-
185
- builder = InterfaceBuilder()
186
- interface = builder.get_material(interface_config)
187
-
188
- # remove metadata
189
- interface.metadata.build = []
190
- expected_interface = Material.create(get_platform_specific_value(expected_interface))
191
-
192
- assert interface.basis.number_of_atoms == expected_interface.basis.number_of_atoms
193
-
194
- assert_interfaces_almost_equal(interface, expected_interface)
195
-
196
-
197
- @pytest.mark.parametrize("substrate, film,gap, vacuum, max_area, expected_interface", [GRAPHENE_NICKEL_TEST_CASE])
198
- def test_create_zsl_interface(substrate, film, gap, vacuum, max_area, expected_interface):
199
- interface = create_interface_zsl(
200
- substrate_crystal=substrate.bulk_config,
201
- film_crystal=film.bulk_config,
202
- substrate_miller_indices=substrate.miller_indices,
203
- film_miller_indices=film.miller_indices,
204
- substrate_number_of_layers=substrate.number_of_layers,
205
- film_number_of_layers=film.number_of_layers,
206
- substrate_termination_formula=None,
207
- film_termination_formula=None,
208
- gap=gap,
209
- vacuum=vacuum,
210
- xy_shift=[0, 0],
211
- max_area=max_area,
212
- max_area_ratio_tol=MAX_AREA_RATIO_TOL,
213
- max_length_tol=MAX_LENGTH_TOL,
214
- max_angle_tol=MAX_ANGLE_TOL,
215
- use_conventional_cell=True,
216
- reduce_result_cell=False,
217
- reduce_result_cell_to_primitive=True,
218
- )
219
- interface.metadata.build = []
220
- expected_interface = get_platform_specific_value(expected_interface)
221
- assert_interfaces_almost_equal(interface, expected_interface)
222
-
223
-
224
- @pytest.mark.parametrize(
225
- "substrate, film, gap, vacuum, max_area, expected_interface",
226
- [GRAPHENE_NICKEL_TEST_CASE, DIAMOND_GAAS_CSL_TEST_CASE],
227
- )
228
- def test_create_zsl_interface_between_slabs(substrate, film, gap, vacuum, max_area, expected_interface):
229
- substrate_slab_config = SlabConfiguration.from_parameters(
230
- material_or_dict=substrate.bulk_config,
231
- miller_indices=substrate.miller_indices,
232
- number_of_layers=substrate.number_of_layers,
233
- vacuum=0.0,
234
- termination_top_formula=None,
235
- use_conventional_cell=True,
236
- )
237
- film_slab_config = SlabConfiguration.from_parameters(
238
- material_or_dict=film.bulk_config,
239
- miller_indices=film.miller_indices,
240
- number_of_layers=film.number_of_layers,
241
- vacuum=0.0,
242
- termination_bottom_formula=None,
243
- use_conventional_cell=True,
244
- )
245
-
246
- substrate_slab = SlabBuilder().get_material(substrate_slab_config)
247
- film_slab = SlabBuilder().get_material(film_slab_config)
248
-
249
- interface = create_interface_zsl_between_slabs(
250
- substrate_slab=substrate_slab,
251
- film_slab=film_slab,
252
- gap=gap,
253
- vacuum=vacuum,
254
- xy_shift=[0, 0],
255
- max_area=max_area,
256
- max_area_ratio_tol=MAX_AREA_RATIO_TOL,
257
- max_length_tol=MAX_LENGTH_TOL,
258
- max_angle_tol=MAX_ANGLE_TOL,
259
- reduce_result_cell=False,
260
- reduce_result_cell_to_primitive=True,
261
- )
262
- expected_interface = get_platform_specific_value(expected_interface)
263
- assert_interfaces_almost_equal(interface, expected_interface)
@@ -1,123 +0,0 @@
1
- import numpy as np
2
- import pytest
3
- from mat3ra.made.material import Material
4
- from mat3ra.made.tools.build_components.operations.core.modifications.perturb.functions.maxwell_boltzmann import (
5
- MaxwellBoltzmannDisplacementHolder,
6
- )
7
- from mat3ra.made.tools.build_components.operations.core.modifications.perturb.helpers import create_maxwell_displacement
8
- from mat3ra.made.tools.helpers import create_supercell
9
- from mat3ra.periodic_table.helpers import get_atomic_mass_from_element
10
-
11
- from .fixtures.bulk import BULK_Si_PRIMITIVE
12
- from .fixtures.slab import SI_CONVENTIONAL_SLAB_001
13
-
14
- DISORDER_PARAMETER = 1.0 # Temperature-like
15
- RANDOM_SEED = 42
16
- NUM_SAMPLES_FOR_MSD = 1000
17
-
18
-
19
- @pytest.mark.parametrize("random_seed", [None, 42, 123])
20
- def test_maxwell_displacement_deterministic(random_seed):
21
- material = Material.create(BULK_Si_PRIMITIVE)
22
- displacement_func1 = MaxwellBoltzmannDisplacementHolder(
23
- disorder_parameter=DISORDER_PARAMETER, random_seed=random_seed
24
- )
25
- displacement_func2 = MaxwellBoltzmannDisplacementHolder(
26
- disorder_parameter=DISORDER_PARAMETER, random_seed=random_seed
27
- )
28
-
29
- coord = [0.0, 0.0, 0.0]
30
-
31
- if random_seed is not None:
32
- disp1 = displacement_func1.apply_function(coord, material=material)
33
- disp2 = displacement_func2.apply_function(coord, material=material)
34
- assert np.allclose(disp1, disp2)
35
-
36
- # Different seed should give different results
37
- displacement_func3 = MaxwellBoltzmannDisplacementHolder(
38
- disorder_parameter=DISORDER_PARAMETER, random_seed=random_seed + 1
39
- )
40
- disp3 = displacement_func3.apply_function(coord, material=material)
41
- assert not np.allclose(disp1, disp3) or np.allclose(disp1, [0, 0, 0], atol=1e-10)
42
- else:
43
- # No seed: different instances should give different results (non-deterministic)
44
- disp1 = displacement_func1.apply_function(coord, material=material)
45
- disp2 = displacement_func2.apply_function(coord, material=material)
46
- assert not np.allclose(disp1, disp2) or np.allclose(disp1, [0, 0, 0], atol=1e-10)
47
-
48
-
49
- def test_maxwell_displacement_perturb_integration():
50
- material = Material.create(BULK_Si_PRIMITIVE)
51
- original_coords = [coord[:] for coord in material.basis.coordinates.values]
52
-
53
- perturbed_material = create_maxwell_displacement(
54
- material, disorder_parameter=DISORDER_PARAMETER, random_seed=RANDOM_SEED
55
- )
56
-
57
- assert len(perturbed_material.basis.coordinates.values) == len(original_coords)
58
- for i, (orig, pert) in enumerate(zip(original_coords, perturbed_material.basis.coordinates.values)):
59
- delta = np.array(pert) - np.array(orig)
60
- assert np.linalg.norm(delta) > 0 or np.allclose(delta, 0, atol=1e-10)
61
-
62
-
63
- def test_maxwell_displacement_msd_expectation():
64
- material = Material.create(BULK_Si_PRIMITIVE)
65
- si_mass = get_atomic_mass_from_element("Si")
66
- disorder_parameter = DISORDER_PARAMETER
67
- expected_variance = disorder_parameter / si_mass
68
- expected_msd = 3 * expected_variance
69
-
70
- displacements = []
71
- coord = [0.0, 0.0, 0.0]
72
- for _ in range(NUM_SAMPLES_FOR_MSD):
73
- displacement_func = MaxwellBoltzmannDisplacementHolder(disorder_parameter=disorder_parameter, random_seed=None)
74
- disp = displacement_func.apply_function(coord, material=material)
75
- displacements.append(disp)
76
-
77
- displacements_array = np.array(displacements)
78
- msd = np.mean(np.sum(displacements_array**2, axis=1))
79
-
80
- assert abs(msd - expected_msd) / expected_msd < 0.3
81
-
82
-
83
- @pytest.mark.parametrize(
84
- "slab_config, temperature_k, random_seed",
85
- [
86
- (SI_CONVENTIONAL_SLAB_001, 1300.0, 42),
87
- (SI_CONVENTIONAL_SLAB_001, 1300.0, 42),
88
- ],
89
- )
90
- def test_maxwell_boltzmann_on_slab(slab_config, temperature_k, random_seed):
91
- material = Material.create(slab_config)
92
- material = create_supercell(material, scaling_factor=[4, 4, 1])
93
- original_coords = [coord[:] for coord in material.basis.coordinates.values]
94
- original_lattice = material.lattice.vector_arrays.copy()
95
-
96
- perturbed_material = create_maxwell_displacement(
97
- material, disorder_parameter=temperature_k, random_seed=random_seed
98
- )
99
-
100
- assert len(perturbed_material.basis.coordinates.values) == len(original_coords)
101
- assert len(perturbed_material.basis.elements.values) == len(material.basis.elements.values)
102
-
103
- coordinate_changes = []
104
- for i, (orig, pert) in enumerate(zip(original_coords, perturbed_material.basis.coordinates.values)):
105
- delta = np.array(pert) - np.array(orig)
106
- displacement_magnitude = np.linalg.norm(delta)
107
- coordinate_changes.append(displacement_magnitude)
108
-
109
- max_displacement = max(coordinate_changes)
110
- mean_displacement = np.mean(coordinate_changes)
111
-
112
- assert max_displacement > 0
113
- assert mean_displacement > 0
114
-
115
- si_mass = get_atomic_mass_from_element("Si")
116
- expected_std = np.sqrt(temperature_k / si_mass)
117
-
118
- assert mean_displacement < 5 * expected_std
119
-
120
- assert np.allclose(perturbed_material.lattice.vector_arrays, original_lattice, atol=1e-10)
121
-
122
- for i, element in enumerate(material.basis.elements.values):
123
- assert perturbed_material.basis.elements.values[i] == element
@@ -1,79 +0,0 @@
1
- import pytest
2
- from mat3ra.code.entity import InMemoryEntityPydantic
3
- from mat3ra.made.tools.build_components.metadata import BuildMetadata, MaterialBuildMetadata
4
-
5
-
6
- class ConfigWithToDict(InMemoryEntityPydantic):
7
- value: str = "test_dict"
8
-
9
-
10
- class ConfigWithToJsonReturnsStr(InMemoryEntityPydantic):
11
- value: str = "test_json_str"
12
-
13
-
14
- class MockParameters(InMemoryEntityPydantic):
15
- param: str = "param_value"
16
-
17
-
18
- def test_metadata_initialization_with_data():
19
- initial_data = {"existing_key": "existing_value", "build": [{"configuration": {"initial": "config"}}]}
20
- metadata = MaterialBuildMetadata(**initial_data)
21
-
22
- assert metadata.existing_key == "existing_value"
23
- assert metadata.build[-1].configuration["initial"] == "config"
24
-
25
-
26
- def test_metadata_empty_initialization():
27
- metadata = MaterialBuildMetadata()
28
- assert metadata.model_dump(exclude_none=True) == {"build": []}
29
-
30
-
31
- def test_get_latest_build_metadata():
32
- metadata = MaterialBuildMetadata(build=[BuildMetadata(configuration={"type": "SlabConfiguration"})])
33
- assert metadata.get_latest_build_metadata().configuration["type"] == "SlabConfiguration"
34
-
35
-
36
- def test_get_latest_build_metadata_raises_when_empty():
37
- with pytest.raises(ValueError, match="No metadata.build"):
38
- MaterialBuildMetadata().get_latest_build_metadata()
39
-
40
-
41
- @pytest.mark.parametrize(
42
- "config_object, expected_dict",
43
- [
44
- (ConfigWithToDict(), {"value": "test_dict"}),
45
- (ConfigWithToJsonReturnsStr(), {"value": "test_json_str"}),
46
- ],
47
- )
48
- def test_build_metadata_update(config_object, expected_dict):
49
- build_metadata = BuildMetadata()
50
-
51
- build_metadata.update(configuration=config_object)
52
- assert build_metadata.configuration == expected_dict
53
-
54
- build_metadata.configuration = {}
55
- build_metadata.update(build_parameters=config_object)
56
- assert build_metadata.build_parameters == expected_dict
57
-
58
-
59
- def test_full_lifecycle_and_serialization():
60
- # Initialize with some existing data
61
- metadata = MaterialBuildMetadata(existing_key="previous_material_metadata_value")
62
-
63
- # Update with a 'to_dict' config
64
- config = ConfigWithToDict(value="config_value")
65
- params = MockParameters(param="param_value")
66
- metadata.build.append(BuildMetadata(configuration=config, build_parameters=params))
67
-
68
- # Check the final state before serialization
69
- assert metadata.existing_key == "previous_material_metadata_value"
70
- assert metadata.build[-1].configuration["value"] == "config_value"
71
- assert metadata.build[-1].build_parameters["param"] == "param_value"
72
-
73
- # Check the final serialized dict
74
- final_dict = metadata.model_dump()
75
- expected_dict = {
76
- "existing_key": "previous_material_metadata_value",
77
- "build": [{"configuration": {"value": "config_value"}, "build_parameters": {"param": "param_value"}}],
78
- }
79
- assert final_dict == expected_dict
@@ -1,33 +0,0 @@
1
- import sys
2
-
3
- import pytest
4
- from mat3ra.made.material import Material
5
- from mat3ra.made.tools.build.pristine_structures.three_dimensional.ideal_crystal.helpers import create_monolayer
6
-
7
- from .fixtures.bulk import BULK_GRAPHITE, BULK_Si_PRIMITIVE
8
- from .fixtures.monolayer import GRAPHENE, SILICENE
9
- from .utils import assert_two_entities_deep_almost_equal
10
-
11
-
12
- @pytest.mark.parametrize(
13
- "material_config, vacuum, expected_material_config, skip_on_gh",
14
- [
15
- (BULK_Si_PRIMITIVE, 10.0, SILICENE, True),
16
- (BULK_GRAPHITE, 12.197, GRAPHENE, False),
17
- ],
18
- )
19
- def test_create_monolayer(material_config, vacuum, expected_material_config, skip_on_gh):
20
- if sys.platform != "darwin" and skip_on_gh:
21
- pytest.skip("Skipping test on non-Darwin platform due to different slab generation.")
22
- crystal = Material.create(material_config)
23
- monolayer = create_monolayer(crystal, vacuum=vacuum)
24
-
25
- assert isinstance(monolayer, Material)
26
- assert "Monolayer" in monolayer.name
27
-
28
- # reset the name and lattice.type to ignore them in the comparison
29
- monolayer.name = expected_material_config["name"]
30
- monolayer.lattice.type = expected_material_config["lattice"]["type"]
31
- monolayer.metadata.build = []
32
-
33
- assert_two_entities_deep_almost_equal(monolayer, expected_material_config, atol=1e-6)
@@ -1,42 +0,0 @@
1
- import pytest
2
- from mat3ra.made.material import Material
3
- from mat3ra.made.tools.build.pristine_structures.zero_dimensional.nanoparticle import (
4
- NanoparticleShapesEnum,
5
- create_nanoparticle_by_shape,
6
- create_nanoparticle_from_material,
7
- )
8
- from mat3ra.made.tools.entities.coordinate import SphereCoordinateCondition
9
- from unit.fixtures.bulk import BULK_Si_PRIMITIVE
10
- from unit.fixtures.nanoparticle import SI_NANOPARTICLE_SPHERE
11
- from unit.utils import assert_two_entities_deep_almost_equal
12
-
13
-
14
- @pytest.mark.parametrize(
15
- "material_config, condition, expected_material_config",
16
- [
17
- (
18
- BULK_Si_PRIMITIVE,
19
- SphereCoordinateCondition(radius=6.0),
20
- SI_NANOPARTICLE_SPHERE,
21
- ),
22
- ],
23
- )
24
- def test_create_nanoparticle_by_condition(material_config, condition, expected_material_config):
25
- material = Material.create(material_config)
26
- nanoparticle = create_nanoparticle_from_material(
27
- material, condition=condition, center_around_atom=True, use_cartesian_coordinates=True
28
- )
29
-
30
- assert_two_entities_deep_almost_equal(nanoparticle, expected_material_config)
31
-
32
-
33
- @pytest.mark.parametrize(
34
- "material_config, shape, parameters",
35
- [
36
- (BULK_Si_PRIMITIVE, NanoparticleShapesEnum.ICOSAHEDRON, {"noshells": 3}),
37
- ],
38
- )
39
- def test_create_nanoparticle_by_shape(material_config, shape, parameters):
40
- material = Material.create(material_config)
41
- nanoparticle = create_nanoparticle_by_shape(material, shape, parameters)
42
- assert isinstance(nanoparticle, Material)
@@ -1,45 +0,0 @@
1
- import pytest
2
- from mat3ra.made.material import Material
3
- from mat3ra.made.tools.build.pristine_structures.two_dimensional.nanoribbon import create_nanoribbon
4
- from mat3ra.made.tools.build_components.entities.reusable.one_dimensional.crystal_lattice_lines import (
5
- CrystalLatticeLinesBuilder,
6
- CrystalLatticeLinesConfiguration,
7
- )
8
-
9
- from .fixtures.monolayer import GRAPHENE
10
- from .fixtures.nanoribbon.armchair import GRAPHENE_NANORIBBON_ARMCHAIR
11
- from .fixtures.nanoribbon.zigzag import GRAPHENE_NANORIBBON_ZIGZAG
12
- from .utils import assert_two_entities_deep_almost_equal
13
-
14
-
15
- @pytest.mark.parametrize(
16
- "material_config, width, length, vacuum_width, vacuum_length, miller_indices_2d, edge_type, expected_nanoribbon",
17
- [
18
- (GRAPHENE, 5, 4, 5.0, 5.0, (1, 1), "armchair", GRAPHENE_NANORIBBON_ARMCHAIR),
19
- (GRAPHENE, 2, 4, 5.0, 5.0, (0, 1), "zigzag", GRAPHENE_NANORIBBON_ZIGZAG),
20
- ],
21
- )
22
- def test_build_nanoribbon(
23
- material_config, width, length, vacuum_width, vacuum_length, miller_indices_2d, edge_type, expected_nanoribbon
24
- ):
25
- material = Material.create(material_config)
26
-
27
- nanoribbon = create_nanoribbon(
28
- material=material,
29
- miller_indices_2d=miller_indices_2d,
30
- width=width,
31
- length=length,
32
- vacuum_width=vacuum_width,
33
- vacuum_length=vacuum_length,
34
- )
35
-
36
- assert_two_entities_deep_almost_equal(nanoribbon, expected_nanoribbon)
37
-
38
-
39
- def test_crystal_lattice_lines():
40
- builder = CrystalLatticeLinesBuilder()
41
- config = CrystalLatticeLinesConfiguration(crystal=Material.create(GRAPHENE), miller_indices_2d=(1, 0))
42
-
43
- material = builder.get_material(config)
44
- material.name = f"{material.name} {config.miller_indices_2d}"
45
- assert isinstance(material, Material)
@@ -1,85 +0,0 @@
1
- import pytest
2
- from mat3ra.made.tools.build import MaterialWithBuildMetadata
3
- from mat3ra.made.tools.build.processed_structures.two_dimensional.passivation.helpers import (
4
- get_coordination_numbers_distribution,
5
- get_unique_coordination_numbers,
6
- passivate_dangling_bonds,
7
- passivate_surface,
8
- )
9
-
10
- from .fixtures.nanoribbon.nanoribbon import GRAPHENE_ZIGZAG_NANORIBBON
11
- from .fixtures.passivated.nanoribbon import GRAPHENE_ZIGZAG_NANORIBBON_PASSIVATED
12
- from .fixtures.passivated.slab import PASSIVATED_SI_CONVENTIONAL_SLAB_001
13
- from .fixtures.slab import SI_CONVENTIONAL_SLAB_001
14
- from .utils import assert_two_entities_deep_almost_equal
15
-
16
-
17
- @pytest.mark.parametrize(
18
- "slab_config, passivant, bond_length, surface, passivation_parameters, expected_material_config",
19
- [
20
- (
21
- SI_CONVENTIONAL_SLAB_001,
22
- "H",
23
- 1.48,
24
- "both",
25
- {"shadowing_radius": 2.5, "depth": 2.0},
26
- PASSIVATED_SI_CONVENTIONAL_SLAB_001,
27
- ),
28
- ],
29
- )
30
- def test_passivate_surface(
31
- slab_config, passivant, bond_length, surface, passivation_parameters, expected_material_config
32
- ):
33
- slab = MaterialWithBuildMetadata.create(slab_config)
34
- passivated_material = passivate_surface(slab, passivant, bond_length, **passivation_parameters)
35
- assert_two_entities_deep_almost_equal(passivated_material, expected_material_config)
36
-
37
-
38
- #
39
- @pytest.mark.parametrize(
40
- "slab_config, passivant, bond_length, surface, cutoff, expected_numbers",
41
- [(GRAPHENE_ZIGZAG_NANORIBBON, "H", 1.48, "both", 3.0, [2, 3])],
42
- )
43
- def test_get_unique_coordination_numbers(slab_config, passivant, bond_length, surface, cutoff, expected_numbers):
44
- """Test getting unique coordination numbers for passivation analysis"""
45
- material = MaterialWithBuildMetadata.create(slab_config)
46
- unique_coordination_numbers = get_unique_coordination_numbers(material=material, cutoff=cutoff)
47
- assert unique_coordination_numbers == expected_numbers
48
-
49
-
50
- @pytest.mark.parametrize(
51
- "slab_config, passivant, bond_length, surface, cutoff, expected_distribution",
52
- [(GRAPHENE_ZIGZAG_NANORIBBON, "H", 1.48, "both", 3.0, {2: 8, 3: 8})],
53
- )
54
- def test_get_coordination_numbers_distribution(
55
- slab_config, passivant, bond_length, surface, cutoff, expected_distribution
56
- ):
57
- """Test getting coordination numbers distribution for passivation analysis"""
58
- material = MaterialWithBuildMetadata.create(slab_config)
59
- distribution = get_coordination_numbers_distribution(material=material, cutoff=cutoff)
60
- # Should return a dictionary with coordination numbers as keys and counts as values
61
- assert distribution == expected_distribution
62
-
63
-
64
- @pytest.mark.parametrize(
65
- "slab_config, passivant, bond_length, builder_params_dict, expected_material_config",
66
- [
67
- (
68
- GRAPHENE_ZIGZAG_NANORIBBON,
69
- "H",
70
- 1.48,
71
- {"shadowing_radius": 2.5, "coordination_threshold": 2, "number_of_bonds_to_passivate": 1},
72
- GRAPHENE_ZIGZAG_NANORIBBON_PASSIVATED,
73
- ),
74
- ],
75
- )
76
- def test_passivate_coordination_based(
77
- slab_config, passivant, bond_length, builder_params_dict, expected_material_config
78
- ):
79
- passivated_material = passivate_dangling_bonds(
80
- MaterialWithBuildMetadata.create(slab_config),
81
- passivant=passivant,
82
- bond_length=bond_length,
83
- **builder_params_dict,
84
- )
85
- assert_two_entities_deep_almost_equal(passivated_material, expected_material_config)