@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,618 +0,0 @@
1
- import { InMemoryEntity } from "@mat3ra/code/dist/js/entity";
2
- import { EntityError } from "@mat3ra/code/dist/js/entity/in_memory";
3
- import {
4
- type Defaultable,
5
- defaultableEntityMixin,
6
- } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin";
7
- import {
8
- type HasMetadata,
9
- hasMetadataMixin,
10
- } from "@mat3ra/code/dist/js/entity/mixins/HasMetadataMixin";
11
- import {
12
- type NamedEntity,
13
- namedEntityMixin,
14
- } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin";
15
- import { clone, deepClone } from "@mat3ra/code/dist/js/utils/clone";
16
- import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface";
17
- import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils";
18
- import type {
19
- AtomicConstraintsSchema,
20
- BasisSchema,
21
- ConsistencyCheck,
22
- DerivedPropertiesSchema,
23
- FileSourceSchema,
24
- InChIRepresentationSchema,
25
- LatticeSchema,
26
- MaterialEnhancedHashedSchema,
27
- MaterialEnhancedSchema,
28
- MaterialHashedSchema,
29
- MaterialSchema,
30
- } from "@mat3ra/esse/dist/js/types";
31
- import CryptoJS from "crypto-js";
32
-
33
- import { type BasisConfig } from "./basis/basis";
34
- import { type ConstrainedBasisConfig, ConstrainedBasis } from "./basis/constrained_basis";
35
- import {
36
- isConventionalCellSameAsPrimitiveForLatticeType,
37
- PRIMITIVE_TO_CONVENTIONAL_CELL_LATTICE_TYPES,
38
- PRIMITIVE_TO_CONVENTIONAL_CELL_MULTIPLIERS,
39
- } from "./cell/conventional_cell";
40
- import { Constraint } from "./constraints/constraints";
41
- import { type MaterialSchemaMixin, materialSchemaMixin } from "./generated/MaterialSchemaMixin";
42
- import { Lattice } from "./lattice/lattice";
43
- import parsers from "./parsers/parsers";
44
- import supercellTools from "./tools/supercell";
45
-
46
- /** ESSE `$id` values for material schema variants. */
47
- const MATERIAL_SCHEMA_IDS = {
48
- pure: "material",
49
- enhanced: "material-enhanced",
50
- hashed: "material-hashed",
51
- enhancedHashed: "material-enhanced-hashed",
52
- } as const;
53
-
54
- function parseConstrainedBasis(
55
- textOrObject: string | BasisConfig | ConstrainedBasisConfig,
56
- format?: "xyz",
57
- units?: BasisSchema["units"],
58
- ): ConstrainedBasisConfig {
59
- if (typeof textOrObject === "string") {
60
- if (format !== "xyz") {
61
- throw new Error("Invalid format");
62
- }
63
- return parsers.xyz.toBasisConfig(textOrObject, units);
64
- }
65
- if ("constraints" in textOrObject) {
66
- return textOrObject;
67
- }
68
- return { ...textOrObject, constraints: [] };
69
- }
70
-
71
- export type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
72
-
73
- /**
74
- * Bundle of material JSON-schema variants used by {@link Material} projections.
75
- * Web-app passes extended schemas here so `toJSON*` return types stay precise.
76
- */
77
- export type MaterialSchemaMap = {
78
- pure: MaterialSchema;
79
- enhanced: MaterialEnhancedSchema;
80
- hashed: MaterialHashedSchema;
81
- enhancedHashed: MaterialEnhancedHashedSchema;
82
- };
83
-
84
- /** Default ESSE schema map (no web-app extensions). */
85
- export type DefaultMaterialSchemas = MaterialSchemaMap;
86
-
87
- /**
88
- * Constructor config: constraints/hash/metadata optional — normalized in the constructor
89
- * (`parseConstrainedBasis` + {@link Material.updateHash}; `metadata` defaults to `{}`).
90
- */
91
- export type MaterialConfig<S extends MaterialEnhancedHashedSchema = MaterialEnhancedHashedSchema> =
92
- Omit<PartialBy<S, "name" | "metadata" | "hash" | "scaledHash">, "basis"> & {
93
- basis: MaterialSchema["basis"] | MaterialEnhancedSchema["basis"];
94
- };
95
-
96
- export const defaultMaterialConfig: MaterialEnhancedSchema = {
97
- name: "Silicon FCC",
98
- basis: {
99
- elements: [
100
- {
101
- id: 0,
102
- value: "Si",
103
- },
104
- {
105
- id: 1,
106
- value: "Si",
107
- },
108
- ],
109
- coordinates: [
110
- {
111
- id: 0,
112
- value: [0.0, 0.0, 0.0],
113
- },
114
- {
115
- id: 1,
116
- value: [0.25, 0.25, 0.25],
117
- },
118
- ],
119
- units: "crystal",
120
- constraints: [],
121
- },
122
- lattice: {
123
- // Primitive cell for Diamond FCC Silicon at ambient conditions
124
- type: "FCC",
125
- a: 3.867,
126
- b: 3.867,
127
- c: 3.867,
128
- alpha: 60,
129
- beta: 60,
130
- gamma: 60,
131
- units: {
132
- length: "angstrom",
133
- angle: "degree",
134
- },
135
- },
136
- metadata: {},
137
- };
138
-
139
- interface BaseMaterial<S extends MaterialEnhancedHashedSchema = MaterialEnhancedHashedSchema>
140
- extends MaterialSchemaMixin,
141
- NamedEntity,
142
- Defaultable,
143
- Required<HasMetadata<S["metadata"]>> {}
144
-
145
- class BaseMaterial<
146
- S extends MaterialEnhancedHashedSchema = MaterialEnhancedHashedSchema,
147
- > extends InMemoryEntity<S> {}
148
-
149
- materialSchemaMixin(BaseMaterial.prototype);
150
- namedEntityMixin(BaseMaterial.prototype);
151
- defaultableEntityMixin(BaseMaterial);
152
- hasMetadataMixin(BaseMaterial.prototype);
153
-
154
- /**
155
- * Unified material. Pass extended schemas via {@link MaterialSchemaMap} so each
156
- * `toJSON*` returns the web-app (or other host) schema type.
157
- *
158
- * @example
159
- * ```ts
160
- * type WebappSchemas = {
161
- * pure: MaterialSchema;
162
- * enhanced: WebappMaterialEnhancedSchema;
163
- * hashed: WebappMaterialHashedSchema;
164
- * enhancedHashed: WebappMaterialEnhancedSchema;
165
- * };
166
- * class CoreMaterial extends Material<WebappSchemas> {}
167
- * ```
168
- */
169
- class Material<Schemas extends MaterialSchemaMap = DefaultMaterialSchemas> extends BaseMaterial<
170
- Schemas["enhancedHashed"]
171
- > {
172
- declare static createDefault: () => Material<MaterialSchemaMap>;
173
-
174
- /**
175
- * Schema used by {@link InMemoryEntity.clean} / {@link toJSON}.
176
- * Defaults to enhanced+hashed; subclasses / web-app Core* may override.
177
- */
178
- static get jsonSchema(): JSONSchema {
179
- return this.jsonSchemaEnhancedHashed;
180
- }
181
-
182
- /** Schema for {@link toJSONPure} — override in web-app if the base material schema is extended. */
183
- static get jsonSchemaPure(): JSONSchema {
184
- return JSONSchemasInterface.getRequiredSchemaById(MATERIAL_SCHEMA_IDS.pure);
185
- }
186
-
187
- /** Schema for {@link toJSONEnhanced}. */
188
- static get jsonSchemaEnhanced(): JSONSchema {
189
- return JSONSchemasInterface.getRequiredSchemaById(MATERIAL_SCHEMA_IDS.enhanced);
190
- }
191
-
192
- /** Schema for {@link toJSONHashed}. */
193
- static get jsonSchemaHashed(): JSONSchema {
194
- return JSONSchemasInterface.getRequiredSchemaById(MATERIAL_SCHEMA_IDS.hashed);
195
- }
196
-
197
- /** Schema for {@link toJSONEnhancedHashed}. */
198
- static get jsonSchemaEnhancedHashed(): JSONSchema {
199
- return JSONSchemasInterface.getRequiredSchemaById(MATERIAL_SCHEMA_IDS.enhancedHashed);
200
- }
201
-
202
- static get defaultConfig(): MaterialEnhancedSchema {
203
- return defaultMaterialConfig;
204
- }
205
-
206
- static constructMaterialFileSource(
207
- fileName: string,
208
- fileContent: string,
209
- fileExtension: string,
210
- ): FileSourceSchema {
211
- return {
212
- extension: fileExtension,
213
- filename: fileName,
214
- text: fileContent,
215
- hash: CryptoJS.MD5(fileContent).toString(),
216
- };
217
- }
218
-
219
- /**
220
- * @param config - Partial entity input. `basis.constraints` / `hash` / `metadata` may be omitted;
221
- * constraints and hash are filled here; missing `metadata` becomes `{}`.
222
- * `NoInfer` keeps `Schemas` from being inferred from the config object literal.
223
- */
224
- constructor(config: NoInfer<MaterialConfig>) {
225
- const basis = parseConstrainedBasis(config.basis);
226
-
227
- super({
228
- ...config,
229
- basis,
230
- name: config.name ?? config.formula ?? "",
231
- metadata: config.metadata ?? {},
232
- hash: config.hash ?? "",
233
- });
234
-
235
- this.formula = config.formula || this.getBasis().formula;
236
- this.name = this.name || this.formula;
237
- this.updateHash();
238
- }
239
-
240
- get hash(): Schemas["enhancedHashed"]["hash"] {
241
- return this.requiredProp("hash");
242
- }
243
-
244
- set hash(value: Schemas["enhancedHashed"]["hash"]) {
245
- this.setProp("hash", value);
246
- }
247
-
248
- get scaledHash(): Schemas["enhancedHashed"]["scaledHash"] {
249
- return this.prop("scaledHash");
250
- }
251
-
252
- set scaledHash(value: Schemas["enhancedHashed"]["scaledHash"]) {
253
- this.setProp("scaledHash", value);
254
- }
255
-
256
- /**
257
- * Recompute and store {@link hash} from the current basis/lattice (or InChI if non-periodic).
258
- * When non-periodic but InChI is not derived yet (e.g. designer toggle before butler), use
259
- * geometric hash so setters do not throw — same practical UX as main before auto-updateHash.
260
- */
261
- updateHash(): void {
262
- const hasInchi = Boolean(this.getDerivedPropertyByName("inchi"));
263
- this.hash =
264
- this.isNonPeriodic && !hasInchi
265
- ? this.calculateHash("", false, true)
266
- : this.calculateHash();
267
- }
268
-
269
- // Override schema-mixin accessors so basis/lattice changes keep hash in sync.
270
- get basis(): Schemas["enhancedHashed"]["basis"] {
271
- return this.requiredProp("basis");
272
- }
273
-
274
- set basis(value: Schemas["enhancedHashed"]["basis"]) {
275
- this.setProp("basis", value);
276
- this.updateHash();
277
- }
278
-
279
- get lattice(): Schemas["enhancedHashed"]["lattice"] {
280
- return this.requiredProp("lattice");
281
- }
282
-
283
- set lattice(value: Schemas["enhancedHashed"]["lattice"]) {
284
- this.setProp("lattice", value);
285
- this.updateHash();
286
- }
287
-
288
- updateFormula() {
289
- const basis = this.getBasis();
290
- this.formula = basis.formula;
291
- this.unitCellFormula = basis.unitCellFormula;
292
- }
293
-
294
- /**
295
- * @summary Returns the specific derived property (as specified by name) for a material.
296
- */
297
- getDerivedPropertyByName(name: string) {
298
- return this.getDerivedProperties().find((x) => x.name === name);
299
- }
300
-
301
- /**
302
- * @summary Returns the derived properties array for a material.
303
- */
304
- getDerivedProperties(): DerivedPropertiesSchema {
305
- return this.derivedProperties ?? [];
306
- }
307
-
308
- unsetFileProps() {
309
- this.unsetProp("src");
310
- this.unsetProp("icsdId");
311
- this.unsetProp("external");
312
- }
313
-
314
- setBasis(basis: BasisConfig | ConstrainedBasisConfig): void;
315
-
316
- setBasis(basis: string, format: "xyz", units?: BasisSchema["units"]): void;
317
-
318
- setBasis(
319
- textOrObject: string | BasisConfig | ConstrainedBasisConfig,
320
- format?: "xyz",
321
- units?: BasisSchema["units"],
322
- ) {
323
- this.basis = parseConstrainedBasis(textOrObject, format, units);
324
- this.unsetFileProps();
325
- this.updateFormula();
326
- }
327
-
328
- private setBasisConstraints(constraints: Constraint[]) {
329
- this.setBasis({
330
- ...this.basis,
331
- constraints: constraints.map((constraint) => ({
332
- id: constraint.id,
333
- value: constraint.value,
334
- })),
335
- });
336
- }
337
-
338
- setBasisConstraintsFromArrayOfObjects(constraints: AtomicConstraintsSchema) {
339
- this.setBasisConstraints(
340
- constraints.map((constraint) =>
341
- Constraint.fromValueAndId(constraint.value, constraint.id),
342
- ),
343
- );
344
- }
345
-
346
- getBasis(): ConstrainedBasis {
347
- return new ConstrainedBasis({
348
- ...parseConstrainedBasis(this.basis),
349
- cell: this.getLattice().vectors,
350
- });
351
- }
352
-
353
- setLattice(lattice: LatticeSchema) {
354
- const basis = this.getBasis();
355
- const originalIsInCrystalUnits = basis.isInCrystalUnits;
356
-
357
- basis.toCartesian();
358
- basis.cell = new Lattice(lattice).vectors;
359
-
360
- if (originalIsInCrystalUnits) {
361
- basis.toCrystal();
362
- }
363
-
364
- this.basis = basis.toJSON();
365
- this.lattice = lattice;
366
-
367
- this.unsetFileProps();
368
- }
369
-
370
- getLattice() {
371
- return new Lattice(this.lattice);
372
- }
373
-
374
- /**
375
- * High-level access to unique elements from material instead of basis.
376
- */
377
- get uniqueElements() {
378
- return this.getBasis().uniqueElements;
379
- }
380
-
381
- /**
382
- * Returns the inchi string from the derivedProperties for a non-periodic material, or throws an error if the
383
- * inchi cannot be found.
384
- * @returns {String}
385
- */
386
- getInchiStringForHash(): string {
387
- const inchi = this.getDerivedPropertyByName("inchi");
388
- if (inchi) {
389
- return (inchi as InChIRepresentationSchema).value;
390
- }
391
- throw new Error("Hash cannot be created. Missing InChI string in derivedProperties");
392
- }
393
-
394
- /**
395
- * Calculates hash from basis and lattice. Algorithm expects the following:
396
- * - asserts lattice units to be angstrom
397
- * - asserts basis units to be crystal
398
- * - asserts basis coordinates and lattice measurements are rounded to hash precision
399
- * - forms strings for lattice and basis
400
- * - creates MD5 hash from basisStr + latticeStr + salt
401
- * @param salt Salt for hashing, empty string by default.
402
- * @param isScaled Whether to scale the lattice parameter 'a' to 1.
403
- */
404
- calculateHash(salt = "", isScaled = false, bypassNonPeriodicCheck = false): string {
405
- let message;
406
- if (!this.isNonPeriodic || bypassNonPeriodicCheck) {
407
- message =
408
- this.getBasis().hashString +
409
- "#" +
410
- this.getLattice().getHashString(isScaled) +
411
- "#" +
412
- salt;
413
- } else {
414
- message = this.getInchiStringForHash();
415
- }
416
- return CryptoJS.MD5(message).toString();
417
- }
418
-
419
- /**
420
- * Converts basis to crystal/fractional coordinates.
421
- */
422
- toCrystal() {
423
- this.setBasis(this.getBasis().toCrystal().toJSON());
424
- }
425
-
426
- /**
427
- * Converts current material's basis coordinates to cartesian.
428
- * No changes if coordinates already cartesian.
429
- */
430
- toCartesian() {
431
- this.setBasis(this.getBasis().toCartesian().toJSON());
432
- }
433
-
434
- /**
435
- * Returns material's basis in XYZ format (includes atomic constraints when present).
436
- */
437
- getBasisAsXyz(fractional = false): string {
438
- return parsers.xyz.fromMaterial(this.toJSONEnhanced(), fractional);
439
- }
440
-
441
- /**
442
- * Returns material in Quantum Espresso output format:
443
- * ```
444
- * CELL_PARAMETERS (angstroms)
445
- * -0.543131284 -0.000000000 0.543131284
446
- * -0.000000000 0.543131284 0.543131284
447
- * -0.543131284 0.543131284 0.000000000
448
- *
449
- * ATOMIC_POSITIONS (crystal)
450
- * Si 0.000000000 0.000000000 -0.000000000
451
- * Si 0.250000000 0.250000000 0.250000000
452
- * ```
453
- */
454
- getAsQEFormat(): string {
455
- return parsers.espresso.toEspressoFormat(this.toJSONPure());
456
- }
457
-
458
- /**
459
- * Returns material in POSCAR format. Pass `true` to ignore original poscar source and re-serialize.
460
- */
461
- getAsPOSCAR(ignoreOriginal = false, omitConstraints = false): string {
462
- // By default return original source if exists
463
- if (this.src?.extension === "poscar" && !ignoreOriginal) {
464
- return this.src.text;
465
- }
466
- return parsers.poscar.toPoscar(this.toJSONEnhanced(), omitConstraints);
467
- }
468
-
469
- /**
470
- * Returns a copy of the material with conventional cell constructed instead of primitive.
471
- */
472
- getACopyWithConventionalCell(): this {
473
- const material = this.clone();
474
-
475
- const lattice = this.getLattice();
476
-
477
- // if conventional and primitive cells are the same => return a copy.
478
- if (isConventionalCellSameAsPrimitiveForLatticeType(lattice.type)) {
479
- return material;
480
- }
481
-
482
- const conventionalSupercellMatrix =
483
- PRIMITIVE_TO_CONVENTIONAL_CELL_MULTIPLIERS[lattice.type];
484
- const conventionalLatticeType = PRIMITIVE_TO_CONVENTIONAL_CELL_LATTICE_TYPES[lattice.type];
485
- const config = supercellTools.generateConfig(this, conventionalSupercellMatrix);
486
-
487
- config.lattice.type = conventionalLatticeType;
488
- config.name = `${this.name} - conventional cell`;
489
-
490
- return this.clone(config);
491
- }
492
-
493
- /**
494
- * @summary a series of checks for the material and returns an array of results in ConsistencyChecks format.
495
- * @returns Array of checks results
496
- */
497
- getConsistencyChecks(): ConsistencyCheck[] {
498
- const basisChecks = this.getBasisConsistencyChecks();
499
-
500
- // any other Material checks can be added here
501
-
502
- return basisChecks;
503
- }
504
-
505
- /**
506
- * @summary a series of checks for the material's basis and returns an array of results in ConsistencyChecks format.
507
- * @returns Array of checks results
508
- */
509
- getBasisConsistencyChecks(): ConsistencyCheck[] {
510
- const checks: ConsistencyCheck[] = [];
511
- const limit = 1000;
512
- const basis = this.getBasis();
513
-
514
- if (basis.elements.length < limit) {
515
- const overlappingAtomsGroups = basis.getOverlappingAtoms();
516
- overlappingAtomsGroups.forEach(({ id1, id2, element1, element2 }) => {
517
- checks.push(
518
- {
519
- key: `basis.coordinates.${id1}`,
520
- name: "atomsOverlap",
521
- severity: "warning",
522
- message: `Atom ${element1} is too close to ${element2} at position ${
523
- id2 + 1
524
- }`,
525
- },
526
- {
527
- key: `basis.coordinates.${id2}`,
528
- name: "atomsOverlap",
529
- severity: "warning",
530
- message: `Atom ${element2} is too close to ${element1} at position ${
531
- id1 + 1
532
- }`,
533
- },
534
- );
535
- });
536
- }
537
-
538
- return checks;
539
- }
540
-
541
- /**
542
- * Full material JSON: constrained basis + hash fields from live getters.
543
- * Variants below AJV-clean this payload against the matching ESSE schema.
544
- * Builds from `_json` (not `super.toJSON`) so we do not pre-clean against
545
- * {@link Material.jsonSchema} before projecting to a narrower schema.
546
- */
547
- private getFullJSON(): Schemas["enhancedHashed"] {
548
- const fullJSON = {
549
- ...clone(this._json),
550
- lattice: this.getLattice().toJSON(),
551
- basis: this.getBasis().toJSON(),
552
- isNonPeriodic: this.isNonPeriodic,
553
- hash: this.hash,
554
- } as Schemas["enhancedHashed"];
555
- if (this.scaledHash !== undefined) {
556
- fullJSON.scaledHash = this.scaledHash;
557
- }
558
- return fullJSON;
559
- }
560
-
561
- /**
562
- * Clone {@link getFullJSON} and validate/clean against `jsonSchema` via AJV
563
- * (same path as {@link InMemoryEntity.validateData} / {@link InMemoryEntity.clean}).
564
- */
565
- private cleanFullJSONAgainstSchema(jsonSchema: JSONSchema): object {
566
- try {
567
- return (this.constructor as typeof Material).validateData(
568
- deepClone(this.getFullJSON()),
569
- true,
570
- jsonSchema,
571
- );
572
- } catch (err) {
573
- // validateData throws EntityError with only the code as message — log details for DevTools.
574
- if (err instanceof EntityError) {
575
- console.error("Material.toJSON validation failed", {
576
- code: err.code,
577
- error: err.details?.error,
578
- json: err.details?.json,
579
- schema: err.details?.schema,
580
- });
581
- }
582
- throw err;
583
- }
584
- }
585
-
586
- toJSONPure(): Schemas["pure"] {
587
- return this.cleanFullJSONAgainstSchema(
588
- (this.constructor as typeof Material).jsonSchemaPure,
589
- ) as Schemas["pure"];
590
- }
591
-
592
- toJSONEnhanced(): Schemas["enhanced"] {
593
- return this.cleanFullJSONAgainstSchema(
594
- (this.constructor as typeof Material).jsonSchemaEnhanced,
595
- ) as Schemas["enhanced"];
596
- }
597
-
598
- toJSONHashed(): Schemas["hashed"] {
599
- return this.cleanFullJSONAgainstSchema(
600
- (this.constructor as typeof Material).jsonSchemaHashed,
601
- ) as Schemas["hashed"];
602
- }
603
-
604
- toJSONEnhancedHashed(): Schemas["enhancedHashed"] {
605
- return this.cleanFullJSONAgainstSchema(
606
- (this.constructor as typeof Material).jsonSchemaEnhancedHashed,
607
- ) as Schemas["enhancedHashed"];
608
- }
609
-
610
- toJSON(): Schemas["enhancedHashed"] {
611
- // Same payload as toJSONEnhancedHashed when jsonSchema is the enhanced-hashed default.
612
- return this.cleanFullJSONAgainstSchema(
613
- (this.constructor as typeof Material).jsonSchema,
614
- ) as Schemas["enhancedHashed"];
615
- }
616
- }
617
-
618
- export default Material;