@mat3ra/made 2026.8.7-0 → 2026.8.18-0

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