@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,634 +0,0 @@
1
- // @ts-ignore
2
- import { getElectronegativity, getElementAtomicRadius } from "@exabyte-io/periodic-table.js";
3
- import { InMemoryEntity } from "@mat3ra/code/dist/js/entity";
4
- import {
5
- BaseInMemoryEntitySchema,
6
- BasisSchema,
7
- Coordinate3DSchema,
8
- Vector3DSchema,
9
- } from "@mat3ra/esse/dist/js/types";
10
- import { Utils } from "@mat3ra/utils";
11
- import { chain, toPairs, uniq, values } from "lodash";
12
-
13
- import { Cell } from "../cell/cell";
14
- import { ATOMIC_COORD_UNITS, HASH_TOLERANCE } from "../constants";
15
- import {
16
- defaultNonPeriodicMinimumLatticeSize,
17
- diatomicLatticePaddingFactor,
18
- molecularLatticePaddingFactor,
19
- } from "../lattice/lattice";
20
- import { AtomicCoordinateValue, Coordinates } from "./coordinates";
21
- import { AtomicElementValue, Elements } from "./elements";
22
- import { AtomicLabelValue, Labels } from "./labels";
23
-
24
- export interface ElementWithCoordinate {
25
- id?: number; // numeric id of the element (optional).
26
- element: AtomicElementValue; // Chemical element
27
- coordinate: AtomicCoordinateValue; // Coordinates of the element
28
- }
29
-
30
- export interface ElementCount {
31
- count: number;
32
- value: AtomicElementValue;
33
- }
34
-
35
- interface Overlap {
36
- id1: number;
37
- id2: number;
38
- element1: AtomicElementValue;
39
- element2: AtomicElementValue;
40
- }
41
-
42
- export interface BasisConfig extends BasisSchema {
43
- cell?: Cell;
44
- isEmpty?: boolean;
45
- }
46
-
47
- export interface ElementsAndCoordinatesConfig {
48
- elements: AtomicElementValue[];
49
- coordinates: AtomicCoordinateValue[];
50
- labels?: AtomicLabelValue[];
51
- units?: BasisSchema["units"];
52
- cell?: Cell;
53
- }
54
-
55
- const DEFAULT_BASIS_CONFIG = {
56
- elements: [
57
- {
58
- id: 0,
59
- value: "Si",
60
- },
61
- {
62
- id: 1,
63
- value: "Si",
64
- },
65
- ],
66
- coordinates: [
67
- {
68
- id: 0,
69
- value: [0, 0, 0],
70
- },
71
- {
72
- id: 1,
73
- value: [0.25, 0.25, 0.25],
74
- },
75
- ],
76
- units: "crystal",
77
- };
78
-
79
- type BasisEntitySchema<S extends BasisConfig = BasisConfig> = S & BaseInMemoryEntitySchema;
80
-
81
- // Keep `{` on same line as `implements` to satisfy brace-style (conflicts with Prettier multi-line heritage).
82
- // prettier-ignore
83
- export class Basis<S extends BasisConfig = BasisConfig> extends InMemoryEntity<BasisEntitySchema<S>> implements BasisSchema {
84
- static defaultConfig: BasisSchema = DEFAULT_BASIS_CONFIG as BasisSchema;
85
-
86
- units: BasisSchema["units"];
87
-
88
- cell: Cell;
89
-
90
- _elements: Elements;
91
-
92
- _coordinates: Coordinates;
93
-
94
- _labels: Labels;
95
-
96
- static _convertValuesToConfig({
97
- elements = [],
98
- coordinates = [],
99
- units = ATOMIC_COORD_UNITS.crystal as BasisSchema["units"],
100
- cell = new Cell(),
101
- labels = [],
102
- }: ElementsAndCoordinatesConfig): BasisConfig {
103
- const elementsArrayWithIdsJSON = Elements.fromValues(elements).toJSON();
104
- const coordinatesArrayWithIdsJSON = Coordinates.fromValues(coordinates).toJSON();
105
- const labelsArrayWithIdsJSON = Labels.fromValues(labels).toJSON();
106
- return {
107
- elements: elementsArrayWithIdsJSON as BasisSchema["elements"],
108
- coordinates: coordinatesArrayWithIdsJSON as BasisSchema["coordinates"],
109
- units,
110
- cell,
111
- labels: labelsArrayWithIdsJSON as BasisSchema["labels"],
112
- };
113
- }
114
-
115
- static fromElementsAndCoordinates({
116
- elements = [],
117
- coordinates = [],
118
- units = ATOMIC_COORD_UNITS.crystal as BasisSchema["units"],
119
- cell = new Cell(),
120
- labels = [],
121
- }: ElementsAndCoordinatesConfig): Basis {
122
- return new Basis(
123
- Basis._convertValuesToConfig({
124
- elements,
125
- coordinates,
126
- units,
127
- cell,
128
- labels,
129
- }),
130
- );
131
- }
132
-
133
- // NoInfer: keep default S (or an explicit type arg) instead of inferring S from the config literal.
134
- constructor(config: NoInfer<S> = Basis.defaultConfig as NoInfer<S>) {
135
- super(config as BasisEntitySchema<S>);
136
- const { elements, coordinates, units, labels } = config;
137
- this.cell = new Cell(config.cell);
138
- this.units = units || (ATOMIC_COORD_UNITS.crystal as BasisSchema["units"]);
139
- this._elements = Elements.fromObjects(elements);
140
- this._coordinates = Coordinates.fromObjects(coordinates);
141
- this._labels = Labels.fromObjects(labels || []);
142
- }
143
-
144
- get elements(): BasisSchema["elements"] {
145
- return this._elements.toJSON() as BasisSchema["elements"];
146
- }
147
-
148
- set elements(elements: BasisSchema["elements"]) {
149
- this._elements = Elements.fromObjects(elements);
150
- }
151
-
152
- get coordinates(): BasisSchema["coordinates"] {
153
- return this._coordinates.toJSON() as BasisSchema["coordinates"];
154
- }
155
-
156
- set coordinates(coordinates: BasisSchema["coordinates"]) {
157
- this._coordinates = Coordinates.fromObjects(coordinates);
158
- }
159
-
160
- get labels(): BasisSchema["labels"] {
161
- return this._labels.toJSON() as BasisSchema["labels"];
162
- }
163
-
164
- set labels(labels: BasisSchema["labels"]) {
165
- this._labels = Labels.fromObjects(labels || []);
166
- }
167
-
168
- toJSON(
169
- exclude: (keyof BasisEntitySchema<S>)[] = ["cell"] as (keyof BasisEntitySchema<S>)[],
170
- ): BasisEntitySchema<S> {
171
- return {
172
- ...super.toJSON(exclude),
173
- elements: this.elements,
174
- coordinates: this.coordinates,
175
- units: this.units,
176
- ...(this.labels?.length ? { labels: this.labels } : {}),
177
- } as BasisEntitySchema<S>;
178
- }
179
-
180
- override clone(): this {
181
- const instance = super.clone();
182
- instance.cell = this.cell.clone();
183
- return instance;
184
- }
185
-
186
- removeAllAtoms() {
187
- this.elements = [];
188
- this.coordinates = [];
189
- this.labels = [];
190
- }
191
-
192
- get cellRounded() {
193
- return this.cell.vectorArraysRounded;
194
- }
195
-
196
- get elementsArray(): object[] {
197
- return this._elements.toJSON();
198
- }
199
-
200
- getElementsAsObject(): BasisSchema["elements"] {
201
- return this.elements;
202
- }
203
-
204
- get coordinatesAsArray() {
205
- return this._coordinates.values;
206
- }
207
-
208
- get isInCartesianUnits(): boolean {
209
- return this.units === ATOMIC_COORD_UNITS.cartesian;
210
- }
211
-
212
- get isInCrystalUnits(): boolean {
213
- return this.units === ATOMIC_COORD_UNITS.crystal;
214
- }
215
-
216
- toCartesian() {
217
- if (this.isInCartesianUnits) return this;
218
- this._coordinates.mapArrayInPlace((point) => this.cell.convertPointToCartesian(point));
219
- this.units = ATOMIC_COORD_UNITS.cartesian as BasisSchema["units"];
220
- return this;
221
- }
222
-
223
- toCrystal() {
224
- if (this.isInCrystalUnits) return this;
225
- this._coordinates.mapArrayInPlace((point) => this.cell.convertPointToCrystal(point));
226
- this.units = ATOMIC_COORD_UNITS.crystal as BasisSchema["units"];
227
- return this;
228
- }
229
-
230
- getElementByIndex(idx: number): AtomicElementValue {
231
- return this._elements.getElementValueByIndex(idx) as AtomicElementValue;
232
- }
233
-
234
- getElementById(id: number): AtomicElementValue {
235
- const result = this._elements.getElementValueById(id) as AtomicElementValue;
236
- if (result) {
237
- return result;
238
- }
239
- throw new Error(`Element with index ${id} not found`);
240
- }
241
-
242
- getCoordinateValueByIndex(idx: number): AtomicCoordinateValue {
243
- const value = this._coordinates.getElementValueByIndex(idx);
244
- if (value) {
245
- return value as AtomicCoordinateValue;
246
- }
247
- throw new Error(`Coordinate with index ${idx} not found`);
248
- }
249
-
250
- getCoordinateValueById(id: number): AtomicCoordinateValue {
251
- const coordinate = this._coordinates.getElementValueById(id);
252
- if (coordinate) {
253
- return coordinate as AtomicCoordinateValue;
254
- }
255
- throw new Error(`Coordinate with index ${id} not found`);
256
- }
257
-
258
- toStandardRepresentation() {
259
- this.toCrystal();
260
- this._coordinates.mapArrayInPlace(
261
- (point) => point.map((x) => Utils.math.mod(x)) as Coordinate3DSchema,
262
- );
263
- }
264
-
265
- /** A representation where all coordinates are within 0 and 1 in crystal units */
266
- get standardRepresentation(): BasisSchema {
267
- const originalIsInCartesianUnits = this.isInCartesianUnits;
268
-
269
- this.toStandardRepresentation();
270
- const result = this.toJSON();
271
-
272
- if (originalIsInCartesianUnits) this.toCartesian();
273
-
274
- return result as BasisSchema;
275
- }
276
-
277
- /**
278
- * Add atom with a chemical element at coordinate.
279
- */
280
- addAtom({ element = "Si", coordinate = [0.5, 0.5, 0.5] }: ElementWithCoordinate) {
281
- this._elements.addItem(element);
282
- this._coordinates.addItem(coordinate);
283
- this.coordinates = this._coordinates.toJSON() as BasisSchema["coordinates"];
284
- }
285
-
286
- /**
287
- * Remove atom with a chemical element at coordinate either by passing the (element AND coordinate) OR id.
288
- */
289
- removeAtom({ element, coordinate, id }: ElementWithCoordinate) {
290
- if (element && coordinate) {
291
- const coordinateId = this._coordinates.getElementIdByValue(coordinate) || -1;
292
- this._elements.removeItem(coordinateId, id);
293
- this._coordinates.removeItem(coordinateId, id);
294
- }
295
- }
296
-
297
- /**
298
- * Unique names (symbols) of the chemical elements basis. E.g. `['Si', 'Li']`
299
- */
300
- get uniqueElements(): AtomicElementValue[] {
301
- return uniq(this._elements.values);
302
- }
303
-
304
- /**
305
- * Returns unique chemical elements with their count sorted by electronegativity.
306
- * `{ "Fe": 4.0, "O": 8.0, "Li": 2.0}`.
307
- */
308
- get uniqueElementCountsSortedByElectronegativity() {
309
- return chain(this.elements)
310
- .sortBy("value")
311
- .sortBy((x) => getElectronegativity(x.value))
312
- .countBy((element) => element.value)
313
- .value();
314
- }
315
-
316
- /**
317
- * Returns chemical elements with their count wrt their original order in the basis.
318
- * Note: entries for the same element separated by another element are considered separately.
319
- * [{"count":1, "value":"Zr"}, {"count":23, "value":"H"}, {"count":11, "value":"Zr"}, {"count":1, "value":"H"}]
320
- */
321
- get elementCounts(): ElementCount[] {
322
- const elementCounts: ElementCount[] = [];
323
- this.elements.forEach((element, index) => {
324
- const previousElement = this.elements[index - 1];
325
- if (previousElement && previousElement.value === element.value) {
326
- const previousElementCount = elementCounts[elementCounts.length - 1];
327
- previousElementCount.count += 1;
328
- } else {
329
- elementCounts.push({
330
- count: 1,
331
- value: element.value,
332
- });
333
- }
334
- });
335
- return elementCounts;
336
- }
337
-
338
- /**
339
- * Reduced formula in IUPAC format. E.g., Na2SO4
340
- */
341
- get formula(): string {
342
- const counts = this.uniqueElementCountsSortedByElectronegativity;
343
- const countsValues = values(counts);
344
- const gcd = countsValues.length > 1 ? Utils.math.gcd(...countsValues) : countsValues[0];
345
-
346
- return toPairs(counts)
347
- .map(([element, count]) => element + (count / gcd === 1 ? "" : count / gcd))
348
- .reduce((acc, part) => acc + part, "");
349
- }
350
-
351
- /**
352
- * Returns the unit cell formula as object `{ "Fe": 4.0, "O": 8.0, "Li": 2.0}`
353
- */
354
- get unitCellFormula(): string {
355
- const counts = this.uniqueElementCountsSortedByElectronegativity;
356
- return toPairs(counts)
357
- .map(([element, count]) => element + (count === 1 ? "" : count))
358
- .reduce((acc, part) => acc + part, "");
359
- }
360
-
361
- /**
362
- * Returns a nested array with elements and their corresponding coordinates
363
- * @example Output: [ ["Si", [0,0,0]], ["Si", [0.5,0.5,0.5]] ]
364
- */
365
- get elementsAndCoordinatesArray(): [AtomicElementValue, AtomicCoordinateValue][] {
366
- return this._elements.values.map((element, idx) => {
367
- const coordinate = this.getCoordinateValueByIndex(idx);
368
- return [element, coordinate];
369
- });
370
- }
371
-
372
- /**
373
- * Returns a nested array with elements and their corresponding coordinates with labels
374
- * @example Output: [ ["Si", [0,0,0], ['1']], ["Si", [0.5,0.5,0.5]] , ['2']]
375
- */
376
- get elementsAndCoordinatesAndLabelsArray(): [
377
- AtomicElementValue,
378
- AtomicCoordinateValue,
379
- AtomicLabelValue,
380
- ][] {
381
- return this._elements.values.map((element, idx) => {
382
- const coordinate = this.getCoordinateValueByIndex(idx);
383
- const atomicLabel = this.atomicLabelsArray[idx];
384
- return [element, coordinate, atomicLabel];
385
- });
386
- }
387
-
388
- /**
389
- * @summary Concatenates elements and sorts them in alphanumeric order.
390
- * E.g.,
391
- * ```
392
- * elements: [{id: 0, value: 'Si'}, {id: 1, value: 'Si'}]
393
- * coordinates: [{id: 0, value: [1,0,0]}, {id: 1, value: [0, 1, 0]}]
394
- *
395
- * result: "Si 0,1,0;Si 1,0,0"
396
- * ```
397
- * This guarantees the independence from the order in the elements array.
398
- */
399
- getAsSortedString(): string {
400
- const clsInstance = this.clone();
401
- clsInstance.toStandardRepresentation();
402
- const standardRep = clsInstance.elementsAndCoordinatesAndLabelsArray.map((entry) => {
403
- const element = entry[0];
404
- const coordinate = entry[1];
405
- const atomicLabel = entry[2];
406
- const toleratedCoordinate = coordinate.map((x) =>
407
- Utils.math.roundCustom(x, HASH_TOLERANCE),
408
- );
409
- return `${element}${atomicLabel} ${toleratedCoordinate.join()}`;
410
- });
411
- return `${standardRep.sort().join(";")};`;
412
- }
413
-
414
- /**
415
- * Returns a string for hash calculation (in crystal units)
416
- */
417
- get hashString(): string {
418
- const originallyInCartesianUnits = this.isInCartesianUnits;
419
-
420
- this.toCrystal();
421
- const hashString = this.getAsSortedString();
422
-
423
- // preserve the original state
424
- if (originallyInCartesianUnits) this.toCartesian();
425
-
426
- return hashString;
427
- }
428
-
429
- /* Returns array of atomic labels E.g., ["1", "2", "", ""] */
430
- get atomicLabelsArray(): string[] {
431
- const labelsArray = Array.from({ length: this.elements.length }, () => "");
432
- // https://dev.to/maafaishal/benchmarking-for-while-forof-and-arrayforeach-using-performancenow-1jjg
433
- if (this.labels?.length) {
434
- for (let i = 0; i < this.labels.length; i++) {
435
- // @ts-ignore
436
- labelsArray[this.labels[i].id] = this.labels[i].value.toString();
437
- }
438
- }
439
- return labelsArray;
440
- }
441
-
442
- /* Returns array of elements with labels E.g., ["Fe1", "Fe2", "O", "O"] */
443
- get elementsWithLabelsArray(): string[] {
444
- return this.elements.map((element, i) => {
445
- const label = this.labels?.[i]?.value || "";
446
- return `${element.value}${label}`;
447
- });
448
- }
449
-
450
- /**
451
- * Returns an array of strings with chemical elements and their atomic positions.
452
- * E.g., ``` ['Si 0 0 0', 'Li 0.5 0.5 0.5']```
453
- */
454
- get atomicPositions(): string[] {
455
- return this.elementsAndCoordinatesAndLabelsArray.map((entry, idx) => {
456
- const element = entry[0];
457
- const coordinate = entry[1];
458
- const atomicLabel = this.atomicLabelsArray[idx];
459
- return `${element}${atomicLabel} ${coordinate}`;
460
- });
461
- }
462
-
463
- /**
464
- * @summary Returns number of atoms in material
465
- */
466
- get nAtoms(): number {
467
- return this._elements.values.length;
468
- }
469
-
470
- // helpers
471
-
472
- /**
473
- * @summary Returns true if bases are equal, otherwise - false.
474
- * @param anotherBasisClsInstance {Basis} Another Basis.
475
- */
476
- isEqualTo(anotherBasisClsInstance: { hashString: string }): boolean {
477
- return this.hashString === anotherBasisClsInstance.hashString;
478
- }
479
-
480
- /**
481
- * @summary Returns true if basis cells are equal, otherwise - false.
482
- * @param anotherBasisClsInstance {Basis} Another Basis.
483
- */
484
- hasEquivalentCellTo(anotherBasisClsInstance: { cell: Cell }): boolean {
485
- return !this.cell.vectorArrays
486
- .map((vector, idx) => {
487
- return Utils.math.vEqualWithTolerance(
488
- vector,
489
- anotherBasisClsInstance.cell.vectorArrays[idx],
490
- );
491
- })
492
- .some((x) => !x);
493
- }
494
-
495
- /**
496
- * @summary Returns the minimum cubic lattice size for a non-periodic structure.
497
- * Single-atom structures use the element atomic radius floored at defaultMinimumLatticeSize.
498
- * Multi-atom structures scale the maximum pairwise distance by 3 when W=min/max pairwise distance
499
- * is ~1 (diatomic), otherwise by 2.
500
- */
501
- getMinimumLatticeSize(
502
- defaultMinimumLatticeSize = defaultNonPeriodicMinimumLatticeSize,
503
- ): number {
504
- if (this._elements.values.length === 1) {
505
- const elementSymbol = this._elements.getElementValueByIndex(0);
506
- const atomicRadius = getElementAtomicRadius(elementSymbol);
507
- return Math.max(defaultMinimumLatticeSize, atomicRadius);
508
- }
509
- const maxDistance = this.maxPairwiseDistance;
510
- const minDistance = this.minPairwiseDistance;
511
- const widthRatio = maxDistance > 0 ? minDistance / maxDistance : 1;
512
- const latticeScalingFactor = Utils.math.almostEqual(widthRatio, 1)
513
- ? diatomicLatticePaddingFactor
514
- : molecularLatticePaddingFactor;
515
- const moleculeLatticeSize = maxDistance * latticeScalingFactor;
516
- return Math.max(defaultMinimumLatticeSize, moleculeLatticeSize);
517
- }
518
-
519
- /**
520
- * @summary function returns an array of overlapping atoms within specified tolerance.
521
- */
522
- getOverlappingAtoms(): Overlap[] {
523
- // to simplify calculations, convert to cartesian coordinates
524
- this.toCartesian();
525
- const { coordinates, elements } = this;
526
- const overlaps: Overlap[] = [];
527
- // temporary value for overlap approximation, where atoms most certainly can't be located
528
- const overlapCoefficient = 0.75;
529
-
530
- coordinates.forEach((entry1, i) => {
531
- for (let j = i + 1; j < coordinates.length; j++) {
532
- const entry2 = coordinates[j];
533
- const el1 = elements[i].value;
534
- const el2 = elements[j].value;
535
-
536
- const tolerance =
537
- overlapCoefficient *
538
- (getElementAtomicRadius(el1) + getElementAtomicRadius(el2)); // in angstroms
539
-
540
- // @ts-ignore
541
- const distance = Utils.math.vDist(entry1.value, entry2.value) as number;
542
- if (distance < tolerance) {
543
- overlaps.push({
544
- id1: i,
545
- id2: j,
546
- element1: el1,
547
- element2: el2,
548
- });
549
- }
550
- }
551
- });
552
-
553
- this.toCrystal();
554
- return overlaps;
555
- }
556
-
557
- /**
558
- * @summary function returns the max distance between pairs of basis coordinates by
559
- * calculating the distance between pairs of basis coordinates.
560
- * basis coordinates = [[x1, y1, z1], [x2, y2, z2], ... [xn, yn, zn]]
561
- * n = last set of coordinates
562
- * n-1 = second to last set of coordinates
563
- *
564
- * Iterate through pairs without redundancy.
565
- * pair 0,1 pair 0,2 pair 0,3 ... pair 0,n
566
- * - pair 1,2 pair 1,3 ... pair 1,n
567
- * - - - pair 2,3 ... pair 2,n
568
- * - - - ... ...
569
- * - - - ... ... pair n-1, n
570
- *
571
- */
572
- get maxPairwiseDistance(): number {
573
- return this.getPairwiseDistanceExtremum("max");
574
- }
575
-
576
- get minPairwiseDistance(): number {
577
- return this.getPairwiseDistanceExtremum("min");
578
- }
579
-
580
- getPairwiseDistanceExtremum(extremum: "max" | "min"): number {
581
- const originalUnits = this.units;
582
- this.toCartesian();
583
- let resultDistance = extremum === "max" ? 0 : Infinity;
584
- if (this._elements.values.length >= 2) {
585
- for (let i = 0; i < this._elements.values.length; i++) {
586
- for (let j = i + 1; j < this._elements.values.length; j++) {
587
- const distance = Utils.math.vDist(
588
- this._coordinates.getElementValueByIndex(i) as Coordinate3DSchema,
589
- this._coordinates.getElementValueByIndex(j) as Coordinate3DSchema,
590
- );
591
- if (distance) {
592
- if (extremum === "max" && distance > resultDistance) {
593
- resultDistance = distance;
594
- }
595
- if (extremum === "min" && distance < resultDistance) {
596
- resultDistance = distance;
597
- }
598
- }
599
- }
600
- }
601
- }
602
- if (originalUnits !== ATOMIC_COORD_UNITS.cartesian) this.toCrystal();
603
- return extremum === "min" && resultDistance === Infinity ? 0 : resultDistance;
604
- }
605
-
606
- /**
607
- * @summary Function takes basis coordinates and transposes them so that the values for each dimension of the
608
- * the basis are in their own nested array.
609
- * Then the center point for each dimension of the coordinates is calculated.
610
- *
611
- * initial basisCoordinates
612
- * [[x1, y1, z1],
613
- * [x2, y2, z2],
614
- * [.., .., ..],
615
- * [xn, yn, zn]]
616
- *
617
- * transposed basisCoordinates
618
- * [[x1, x2, ...xn],
619
- * [y1, y2, ...yn],
620
- * [z1, z2, ...zn]]
621
- *
622
- * Returns an array = [xCenter, yCenter, zCenter]
623
- */
624
- get centerOfCoordinatesPoint(): AtomicCoordinateValue {
625
- return this._coordinates.getCenterPoint();
626
- }
627
-
628
- /**
629
- * @summary Function translates coordinates by the vector passed as an argument.
630
- */
631
- translateByVector(translationVector: Vector3DSchema) {
632
- this._coordinates.translateByVector(translationVector);
633
- }
634
- }