@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,7 +0,0 @@
1
- from mat3ra.made.metadata import BaseMetadata
2
- from pydantic import Field
3
-
4
-
5
- class BuildMetadata(BaseMetadata):
6
- configuration: dict = Field(default_factory=dict)
7
- build_parameters: dict = Field(default_factory=dict)
@@ -1,35 +0,0 @@
1
- from typing import List, Optional
2
-
3
- from mat3ra.made.metadata import BaseMetadata
4
- from pydantic import Field
5
-
6
- from .build_metadata import BuildMetadata
7
-
8
-
9
- class MaterialBuildMetadata(BaseMetadata):
10
- # Other metadata fields can be added as needed
11
- build: List[BuildMetadata] = Field([])
12
-
13
- def get_latest_build_metadata(self) -> BuildMetadata:
14
- if not self.build:
15
- raise ValueError("No metadata.build on the material.")
16
- return self.build[-1]
17
-
18
- def get_build_metadata_of_type(self, configuration_type: str) -> Optional[BuildMetadata]:
19
- """
20
- Returns the first build configuration of the specified type.
21
- Args:
22
- configuration_type (str): The type of configuration to search for.
23
- Returns:
24
- Optional[dict]: The build configuration if found, otherwise None.
25
- """
26
- for build_step in reversed(self.build):
27
- if build_step.configuration.get("type") == configuration_type:
28
- return BuildMetadata(
29
- configuration=build_step.configuration, build_parameters=build_step.build_parameters
30
- )
31
- return None
32
-
33
- def add_build_metadata_step(self, configuration: dict, build_parameters: Optional[dict] = None) -> None:
34
- build_metadata = BuildMetadata(configuration=configuration, build_parameters=build_parameters)
35
- self.build.append(build_metadata)
@@ -1,8 +0,0 @@
1
- from mat3ra.made.material import Material
2
- from pydantic import Field
3
-
4
- from .material_build_metadata import MaterialBuildMetadata
5
-
6
-
7
- class MaterialWithBuildMetadata(Material):
8
- metadata: MaterialBuildMetadata = Field(default_factory=MaterialBuildMetadata)
@@ -1,2 +0,0 @@
1
- from .convert_generated_items_ase_atoms_mixin import ConvertGeneratedItemsASEAtomsMixin
2
- from .convert_generated_items_pymatgen_structure_mixin import ConvertGeneratedItemsPymatgenStructureMixin
@@ -1,8 +0,0 @@
1
- from ...convert import from_ase
2
- from ...third_party import ASEAtoms
3
-
4
-
5
- class ConvertGeneratedItemsASEAtomsMixin:
6
- @staticmethod
7
- def _convert_generated_item(item: ASEAtoms):
8
- return from_ase(item)
@@ -1,8 +0,0 @@
1
- from ...convert import from_pymatgen
2
- from ...third_party import PymatgenStructure
3
-
4
-
5
- class ConvertGeneratedItemsPymatgenStructureMixin:
6
- @staticmethod
7
- def _convert_generated_item(item: PymatgenStructure):
8
- return from_pymatgen(item)
@@ -1,11 +0,0 @@
1
- from enum import Enum
2
-
3
- from .....build.defective_structures.zero_dimensional.point_defect.atom_placement_method_enum import (
4
- AtomPlacementMethodEnum,
5
- )
6
-
7
-
8
- class AdatomPlacementMethodEnum(Enum):
9
- EXACT_COORDINATE = AtomPlacementMethodEnum.EXACT_COORDINATE
10
- EQUIDISTANT = AtomPlacementMethodEnum.EQUIDISTANT
11
- NEW_CRYSTAL_SITE = AtomPlacementMethodEnum.NEW_CRYSTAL_SITE
@@ -1,6 +0,0 @@
1
- from .builder import MergeBuilder, MergeBuilderParameters
2
-
3
- __all__ = [
4
- "MergeBuilder",
5
- "MergeBuilderParameters",
6
- ]
@@ -1,18 +0,0 @@
1
- from typing import Optional
2
-
3
- from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseBuilderParameters
4
-
5
-
6
- class MergeBuilderParameters(BaseBuilderParameters):
7
- """
8
- Parameters for merging materials.
9
-
10
- Args:
11
- material_name: Optional name for the merged material.
12
- distance_tolerance: Tolerance for resolving overlapping coordinates.
13
- merge_dangerously: If True, allows merging even if lattices are different.
14
- """
15
-
16
- material_name: Optional[str] = "New Material"
17
- distance_tolerance: float = 0.1
18
- merge_dangerously: bool = False
@@ -1,93 +0,0 @@
1
- from typing import Any, Dict, List, Optional, Type
2
-
3
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
4
- from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseSingleBuilder, TypeConfiguration
5
-
6
- from ......operations.core.binary import merge
7
- from ..... import MaterialWithBuildMetadata
8
- from .....entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
9
- from .build_parameters import MergeBuilderParameters
10
- from .configuration import MergeConfiguration
11
-
12
-
13
- class MergeBuilder(BaseSingleBuilder):
14
- """
15
- Builder class for merging materials based on parameters.
16
- """
17
-
18
- _ConfigurationType: Type[MergeConfiguration] = MergeConfiguration
19
- _BuildParametersType: Type[MergeBuilderParameters] = MergeBuilderParameters
20
- _DefaultBuildParameters: MergeBuilderParameters = MergeBuilderParameters()
21
-
22
- @property
23
- def merge_component_types_conversion_map(self) -> Dict[Type, Type]:
24
- return {}
25
-
26
- @property
27
- def merge_component_types_conversion_pre_process_map(self) -> Dict[Type, Any]:
28
- return {}
29
-
30
- def _merge_component_to_material(
31
- self,
32
- merge_component_configuration_or_material: Any,
33
- configuration: MergeConfiguration,
34
- merge_component_build_parameters: Any = None,
35
- ) -> Optional[MaterialWithBuildMetadata]:
36
- builder = self.merge_component_types_conversion_map.get(type(merge_component_configuration_or_material))
37
- pre_process_function = self.merge_component_types_conversion_pre_process_map.get(
38
- type(merge_component_configuration_or_material), lambda x, y: x
39
- )
40
-
41
- if builder:
42
- merge_component_configuration_or_material = pre_process_function(
43
- merge_component_configuration_or_material, configuration
44
- )
45
- return builder(build_parameters=merge_component_build_parameters).get_material(
46
- merge_component_configuration_or_material
47
- )
48
- elif isinstance(merge_component_configuration_or_material, VacuumConfiguration):
49
- raise ValueError("Merge with VacuumConfiguration is not supported by design.")
50
- else:
51
- return merge_component_configuration_or_material
52
-
53
- def _merge_by_method(
54
- self,
55
- materials: List[MaterialWithBuildMetadata],
56
- parameters: MergeBuilderParameters,
57
- method: MergeMethodsEnum = MergeMethodsEnum.ADD,
58
- ) -> MaterialWithBuildMetadata:
59
- if method not in MergeMethodsEnum:
60
- raise ValueError(f"Unknown merge method: {method}")
61
- return merge(
62
- materials=materials,
63
- merge_method=method,
64
- material_name=parameters.material_name or materials[0].name,
65
- distance_tolerance=parameters.distance_tolerance,
66
- merge_dangerously=parameters.merge_dangerously,
67
- )
68
-
69
- def _generate(self, configuration: TypeConfiguration) -> MaterialWithBuildMetadata:
70
- materials = []
71
- for component in configuration.merge_components:
72
- material = self._merge_component_to_material(component, configuration)
73
- if material is not None:
74
- materials.append(material)
75
-
76
- if len(materials) == 0:
77
- raise ValueError("No valid materials found after processing merge components")
78
-
79
- if len(materials) == 1:
80
- return materials[0]
81
-
82
- # Optimization: when there are many materials to merge, combine all non-first
83
- # materials into one before merging with the base to avoid N sequential merges.
84
- if len(materials) > 2:
85
- base = materials[0]
86
- combined = materials[1]
87
- for m in materials[2:]:
88
- combined.basis.add_atoms_from_another_basis(m.basis)
89
- materials = [base, combined]
90
-
91
- parameters = self.build_parameters or self._DefaultBuildParameters
92
- merge_method = getattr(configuration, "merge_method", None)
93
- return self._merge_by_method(materials, parameters, merge_method)
@@ -1,20 +0,0 @@
1
- from typing import Any, List
2
-
3
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import (
4
- MergeMethodsEnum,
5
- MergeSchema,
6
- )
7
- from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseConfigurationPydantic
8
-
9
-
10
- class MergeConfiguration(MergeSchema, BaseConfigurationPydantic):
11
- """
12
- Parameters for merging materials.
13
-
14
- Args:
15
- merge_components: List of materials or configurations to merge.
16
- merge_method: Method to use for merging
17
- """
18
-
19
- merge_components: List[Any]
20
- merge_method: MergeMethodsEnum
@@ -1,83 +0,0 @@
1
- from typing import Any, Optional, Type
2
-
3
- from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
4
- from mat3ra.made.material import Material
5
- from mat3ra.made.utils import adjust_material_cell_to_set_gap_along_direction
6
-
7
- from ......build_components import MaterialWithBuildMetadata
8
- from ......operations.core.binary import stack
9
- from .....entities.core.two_dimensional.vacuum.builder import VacuumBuilder
10
- from .....entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
11
- from .....entities.reusable.base_builder import BaseSingleBuilder, TypeConfiguration
12
- from .configuration import StackConfiguration
13
-
14
-
15
- class StackNComponentsBuilder(BaseSingleBuilder):
16
- _ConfigurationType: Type[StackConfiguration] = StackConfiguration
17
- _StackComponentTypes = [MaterialWithBuildMetadata, VacuumConfiguration]
18
-
19
- @property
20
- def stack_component_types_conversion_map(self):
21
- return {
22
- VacuumConfiguration: VacuumBuilder,
23
- }
24
-
25
- @property
26
- def stack_component_types_conversion_pre_process_map(self):
27
- return {
28
- VacuumConfiguration: self.vacuum_configuration_set_crystal,
29
- }
30
-
31
- def vacuum_configuration_set_crystal(
32
- self, vacuum_configuration: VacuumConfiguration, stack_configuration: StackConfiguration
33
- ) -> VacuumConfiguration:
34
- # NOTE: we assume that the first component in the stack is used to define the vacuum crystal
35
- vacuum_prototype_crystal = stack_configuration.stack_components[0]
36
- vacuum_configuration.crystal = self._stack_component_to_material(vacuum_prototype_crystal, stack_configuration)
37
- return vacuum_configuration
38
-
39
- def _stack_component_to_material(
40
- self,
41
- stack_component_configuration_or_material: Any,
42
- configuration: StackConfiguration,
43
- stack_component_build_parameters: Any = None,
44
- ) -> Optional[MaterialWithBuildMetadata]:
45
- cache = getattr(self, "_stack_component_cache", None)
46
- cache_key = id(stack_component_configuration_or_material)
47
- if cache is not None and cache_key in cache:
48
- return cache[cache_key]
49
-
50
- builder = self.stack_component_types_conversion_map.get(type(stack_component_configuration_or_material))
51
- pre_process_function = self.stack_component_types_conversion_pre_process_map.get(
52
- type(stack_component_configuration_or_material), lambda x, y: x
53
- )
54
- if builder:
55
- stack_component_configuration_or_material = pre_process_function(
56
- stack_component_configuration_or_material, configuration
57
- )
58
- result = builder(build_parameters=stack_component_build_parameters).get_material(
59
- stack_component_configuration_or_material
60
- )
61
- else:
62
- result = stack_component_configuration_or_material
63
-
64
- if cache is not None:
65
- cache[cache_key] = result
66
- return result
67
-
68
- def _generate(self, configuration: TypeConfiguration) -> Material:
69
- self._stack_component_cache: Optional[dict] = {}
70
- try:
71
- materials = []
72
- for index, stack_component_config in enumerate(configuration.stack_components):
73
- material = self._stack_component_to_material(stack_component_config, configuration)
74
- gap = configuration.get_gap_by_id(index)
75
- if gap is not None:
76
- material = adjust_material_cell_to_set_gap_along_direction(material, gap, configuration.direction)
77
- materials.append(material)
78
- # Filter out None values in case some stack components are V
79
- materials = [m for m in materials if m is not None]
80
- stacked_material = stack(materials, configuration.direction or AxisEnum.z)
81
- return stacked_material
82
- finally:
83
- self._stack_component_cache = None
@@ -1,24 +0,0 @@
1
- from typing import Any, List
2
-
3
- from mat3ra.code.array_with_ids import ArrayWithIds
4
- from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
5
- from mat3ra.esse.models.materials_category_components.operations.core.combinations.stack import StackSchema
6
-
7
- from .....entities.reusable.base_builder import BaseConfigurationPydantic
8
-
9
-
10
- class StackConfiguration(StackSchema, BaseConfigurationPydantic):
11
- type: str = "StackConfiguration"
12
-
13
- stack_components: List[Any] # Configuration objects only, no Materials
14
- gaps: ArrayWithIds = ArrayWithIds.from_values([])
15
- direction: AxisEnum = AxisEnum.z
16
-
17
- def __init__(self, **data):
18
- gaps = data.get("gaps", [])
19
- if not isinstance(gaps, ArrayWithIds):
20
- data["gaps"] = ArrayWithIds.from_values(gaps)
21
- super().__init__(**data)
22
-
23
- def get_gap_by_id(self, gap_id: int) -> float:
24
- return self.gaps.get_element_value_by_index(gap_id)
@@ -1,15 +0,0 @@
1
- from .functions import (
2
- AtomicMassDependentFunctionHolder,
3
- FunctionHolder,
4
- MaxwellBoltzmannDisplacementHolder,
5
- PerturbationFunctionHolder,
6
- SineWavePerturbationFunctionHolder,
7
- )
8
-
9
- __all__ = [
10
- "AtomicMassDependentFunctionHolder",
11
- "FunctionHolder",
12
- "MaxwellBoltzmannDisplacementHolder",
13
- "PerturbationFunctionHolder",
14
- "SineWavePerturbationFunctionHolder",
15
- ]
@@ -1,5 +0,0 @@
1
- from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseBuilderParameters
2
-
3
-
4
- class PerturbationBuildParameters(BaseBuilderParameters):
5
- center_material: bool = True
@@ -1,33 +0,0 @@
1
- from typing import Any, Type
2
-
3
- from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseSingleBuilder
4
-
5
- from .......modify import translate_to_z_level, wrap_to_unit_cell
6
- from .......operations.core.unary import perturb
7
- from ...... import MaterialWithBuildMetadata
8
- from ..build_parameters import PerturbationBuildParameters
9
- from ..configuration import PerturbationConfiguration
10
-
11
-
12
- class PerturbationBuilder(BaseSingleBuilder):
13
- _ConfigurationType: Type[PerturbationConfiguration] = PerturbationConfiguration
14
- _BuildParametersType: Type[PerturbationBuildParameters] = PerturbationBuildParameters
15
- _DefaultBuildParameters: PerturbationBuildParameters = PerturbationBuildParameters()
16
- _PostProcessParametersType: Any = None
17
-
18
- def _generate(self, configuration: PerturbationConfiguration) -> MaterialWithBuildMetadata:
19
- new_material = translate_to_z_level(configuration.material, "center").clone()
20
- new_material = perturb(
21
- new_material,
22
- configuration.perturbation_function_holder,
23
- configuration.use_cartesian_coordinates,
24
- )
25
- new_material = wrap_to_unit_cell(new_material)
26
- return new_material
27
-
28
- def _update_material_name(
29
- self, material: MaterialWithBuildMetadata, configuration: PerturbationConfiguration
30
- ) -> MaterialWithBuildMetadata:
31
- perturbation_details = f"Perturbation: {configuration.perturbation_function_holder.function_str}"
32
- material.name = f"{material.name} ({perturbation_details})"
33
- return material
@@ -1,25 +0,0 @@
1
- from .......operations.core.unary import edit_cell
2
- from ...... import MaterialWithBuildMetadata
3
- from ..configuration import PerturbationConfiguration
4
- from .base import PerturbationBuilder
5
-
6
-
7
- class IsometricPerturbationBuilder(PerturbationBuilder):
8
- def _generate(self, configuration: PerturbationConfiguration) -> MaterialWithBuildMetadata:
9
- new_material = configuration.material.clone()
10
- renormalized_coordinates = [
11
- configuration.perturbation_function_holder.normalize_coordinates(coord)
12
- for coord in new_material.basis.coordinates.values
13
- ]
14
- new_material.set_coordinates(renormalized_coordinates)
15
-
16
- configuration.material = new_material
17
-
18
- new_material = super()._generate(configuration)
19
-
20
- new_lattice_vectors = [
21
- configuration.perturbation_function_holder.normalize_coordinates(vector)
22
- for vector in new_material.lattice.vector_arrays
23
- ]
24
- renormalized_material = edit_cell(new_material, new_lattice_vectors)
25
- return renormalized_material
@@ -1,24 +0,0 @@
1
- from typing import Union
2
-
3
- from mat3ra.made.material import Material
4
- from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseConfigurationPydantic
5
-
6
- from ..... import MaterialWithBuildMetadata
7
- from .functions import FunctionHolder, PerturbationFunctionHolder, SineWavePerturbationFunctionHolder
8
-
9
-
10
- class PerturbationConfiguration(BaseConfigurationPydantic):
11
- """
12
- Configuration for a geometrical perturbation.
13
-
14
- Args:
15
- material (Material): The Material object.
16
- perturbation_function_holder (PerturbationFunctionHolder): The perturbation function holder.
17
- use_cartesian_coordinates (bool): Whether to use cartesian coordinates
18
- """
19
-
20
- material: Union[Material, MaterialWithBuildMetadata]
21
- perturbation_function_holder: Union[
22
- SineWavePerturbationFunctionHolder, PerturbationFunctionHolder, FunctionHolder
23
- ] = SineWavePerturbationFunctionHolder()
24
- use_cartesian_coordinates: bool = True
@@ -1,13 +0,0 @@
1
- from .atomic_mass_dependent_function_holder import AtomicMassDependentFunctionHolder
2
- from .function_holder import FunctionHolder
3
- from .maxwell_boltzmann import MaxwellBoltzmannDisplacementHolder
4
- from .perturbation_function_holder import PerturbationFunctionHolder
5
- from .sine_wave_perturbation_function_holder import SineWavePerturbationFunctionHolder
6
-
7
- __all__ = [
8
- "AtomicMassDependentFunctionHolder",
9
- "FunctionHolder",
10
- "MaxwellBoltzmannDisplacementHolder",
11
- "PerturbationFunctionHolder",
12
- "SineWavePerturbationFunctionHolder",
13
- ]
@@ -1,32 +0,0 @@
1
- from typing import Any, List, Optional, Union
2
-
3
- import sympy as sp
4
- from mat3ra.periodic_table.helpers import get_atomic_mass_from_element
5
-
6
- from .function_holder import FunctionHolder
7
-
8
-
9
- class AtomicMassDependentFunctionHolder(FunctionHolder):
10
- variables: List[str] = ["x", "y", "z", "m"]
11
-
12
- def __init__(
13
- self,
14
- function: Union[sp.Expr, str] = sp.Symbol("f"),
15
- variables: Optional[List[str]] = None,
16
- **data: Any,
17
- ):
18
- if variables is None:
19
- expr = self._to_expr(function)
20
- vs = sorted(expr.free_symbols, key=lambda s: s.name)
21
- variables = [str(v) for v in vs] or ["x", "y", "z", "m"]
22
-
23
- super().__init__(function=function, variables=variables, **data)
24
-
25
- @staticmethod
26
- def get_atomic_mass(coordinate: List[float], material) -> float:
27
- if material is None:
28
- raise ValueError("Material is required to extract atomic mass")
29
-
30
- atom_id = material.basis.coordinates.get_element_id_by_value(coordinate)
31
- element = material.basis.elements.get_element_value_by_index(atom_id)
32
- return get_atomic_mass_from_element(element)
@@ -1,80 +0,0 @@
1
- from typing import Any, Callable, List, Optional, Union
2
-
3
- import sympy as sp
4
- from mat3ra.code.entity import InMemoryEntityPydantic
5
- from mat3ra.made.utils import AXIS_TO_INDEX_MAP
6
- from pydantic import field_serializer
7
- from sympy import parse_expr
8
-
9
-
10
- def default_function() -> sp.Expr:
11
- return sp.Symbol("f")
12
-
13
-
14
- class FunctionHolder(InMemoryEntityPydantic):
15
- variables: List[str] = ["x"]
16
- symbols: List[sp.Symbol] = sp.symbols(variables)
17
- function: sp.Expr = sp.Symbol("f")
18
- function_numeric: Callable = sp.lambdify(sp.symbols(variables), sp.Symbol("f"), modules=["numpy"])
19
- derivatives_numeric: dict = {}
20
-
21
- def __init__(self, function: Union[sp.Expr, str], variables: Optional[List[str]] = None, **data: Any):
22
- # normalize string → Expr
23
- expr = self._to_expr(function)
24
-
25
- # if no variables list given, infer from free symbols (defaults to x,y,z)
26
- if variables is None:
27
- vs = sorted(expr.free_symbols, key=lambda s: s.name)
28
- variables = [str(v) for v in vs] or ["x", "y", "z"]
29
- super().__init__(**data)
30
-
31
- self.variables = variables
32
- self.symbols = sp.symbols(variables)
33
- self.function = expr
34
-
35
- self.function_numeric = sp.lambdify(self.symbols, self.function, modules=["numpy"])
36
- self.derivatives_numeric = {
37
- var: sp.lambdify(sp.symbols(variables), sp.diff(self.function, var), modules=["numpy"])
38
- for var in self.variables
39
- }
40
-
41
- @staticmethod
42
- def _to_expr(expr_or_str: Union[sp.Expr, str]) -> sp.Expr:
43
- if isinstance(expr_or_str, sp.Expr):
44
- return expr_or_str
45
- if isinstance(expr_or_str, str):
46
- # We can swap in sympy.sympify for slightly laxer parsing,
47
- # or configure parse_expr with custom transformations.
48
- return parse_expr(expr_or_str, evaluate=True)
49
- raise TypeError(f"Expected sympy.Expr or str, got {type(expr_or_str)}")
50
-
51
- @property
52
- def function_str(self) -> str:
53
- return str(self.function)
54
-
55
- def apply_function(self, coordinate: List[float], **kwargs: Any) -> float:
56
- values = [coordinate[AXIS_TO_INDEX_MAP[var]] for var in self.variables]
57
- return self.function_numeric(*values)
58
-
59
- def calculate_derivative(self, coordinate: List[float], axis: str) -> float:
60
- if axis in self.variables:
61
- values = [coordinate[AXIS_TO_INDEX_MAP[var]] for var in self.variables]
62
- return self.derivatives_numeric[axis](*values)
63
- else:
64
- return 0
65
-
66
- @field_serializer("function")
67
- def serialize_function(self, value: sp.Expr) -> str:
68
- return str(value)
69
-
70
- @field_serializer("symbols")
71
- def serialize_symbols(self, value: List[sp.Symbol]) -> List[str]:
72
- return [str(symbol) for symbol in value]
73
-
74
- @field_serializer("function_numeric")
75
- def serialize_function_numeric(self, value: Callable) -> str:
76
- return "lambdified_function"
77
-
78
- @field_serializer("derivatives_numeric")
79
- def serialize_derivatives_numeric(self, value: dict) -> dict:
80
- return {k: "lambdified_derivative" for k, v in value.items()}
@@ -1,39 +0,0 @@
1
- from typing import Any, List, Optional
2
-
3
- import numpy as np
4
- from pydantic import Field, model_validator
5
-
6
- from .atomic_mass_dependent_function_holder import AtomicMassDependentFunctionHolder
7
-
8
- DEFAULT_DISORDER_PARAMETER = 1.0
9
-
10
-
11
- class MaxwellBoltzmannDisplacementHolder(AtomicMassDependentFunctionHolder):
12
- disorder_parameter: float = Field(
13
- default=DEFAULT_DISORDER_PARAMETER,
14
- exclude=True,
15
- description="Disorder parameter. Can be viewed as effective temperature in eV.",
16
- )
17
- random_seed: Optional[int] = Field(default=None, exclude=True)
18
- random_state: Any = Field(default=None, exclude=True)
19
- is_mass_used: bool = Field(default=True, exclude=True)
20
-
21
- @model_validator(mode="after")
22
- def setup_random_state(self):
23
- if self.random_state is None:
24
- self.random_state = np.random.RandomState(self.random_seed) if self.random_seed is not None else np.random
25
- return self
26
-
27
- def apply_function(self, coordinate, material=None) -> List[float]:
28
- if material is None:
29
- raise ValueError("MaxwellBoltzmannDisplacementHolder requires 'material' kwargs")
30
-
31
- if self.is_mass_used:
32
- mass = self.get_atomic_mass(coordinate, material)
33
- variance = self.disorder_parameter / mass
34
- else:
35
- variance = self.disorder_parameter
36
-
37
- std_dev = np.sqrt(variance)
38
- displacement = self.random_state.normal(0.0, std_dev, size=3)
39
- return displacement.tolist()