@mat3ra/wode 2026.5.23-0 → 2026.6.5-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 (360) hide show
  1. package/.babelrc +1 -1
  2. package/dist/js/Subworkflow.d.ts +714 -0
  3. package/dist/js/Subworkflow.js +397 -0
  4. package/dist/js/Workflow.d.ts +82 -0
  5. package/dist/js/Workflow.js +286 -0
  6. package/dist/js/WorkflowDesignerMaterial.d.ts +21 -0
  7. package/dist/js/WorkflowDesignerMaterial.js +26 -0
  8. package/dist/js/context/mixins/ApplicationContextMixin.d.ts +10 -0
  9. package/dist/js/context/mixins/ApplicationContextMixin.js +10 -17
  10. package/dist/js/context/mixins/MaterialContextMixin.d.ts +18 -0
  11. package/dist/js/context/mixins/MaterialContextMixin.js +14 -38
  12. package/dist/js/context/mixins/MaterialsContextMixin.d.ts +10 -0
  13. package/dist/js/context/mixins/MaterialsContextMixin.js +11 -17
  14. package/dist/js/context/mixins/MaterialsSetContextMixin.d.ts +14 -0
  15. package/dist/js/context/mixins/MaterialsSetContextMixin.js +21 -23
  16. package/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts +30 -0
  17. package/dist/js/context/providers/BoundaryConditionsFormDataManager.js +62 -0
  18. package/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts +42 -0
  19. package/dist/js/context/providers/CollinearMagnetizationDataManager.js +101 -0
  20. package/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts +29 -0
  21. package/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js +69 -0
  22. package/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts +20 -0
  23. package/dist/js/context/providers/Hubbard/HubbardContextProvider.js +47 -0
  24. package/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts +22 -0
  25. package/dist/js/context/providers/Hubbard/HubbardJContextManager.js +61 -0
  26. package/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts +22 -0
  27. package/dist/js/context/providers/Hubbard/HubbardUContextManager.js +57 -0
  28. package/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts +22 -0
  29. package/dist/js/context/providers/Hubbard/HubbardVContextManager.js +79 -0
  30. package/dist/js/context/providers/IonDynamicsDataManager.d.ts +27 -0
  31. package/dist/js/context/providers/IonDynamicsDataManager.js +48 -0
  32. package/dist/js/context/providers/MLSettingsDataManager.d.ts +24 -0
  33. package/dist/js/context/providers/MLSettingsDataManager.js +42 -0
  34. package/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts +23 -0
  35. package/dist/js/context/providers/MLTrainTestSplitDataManager.js +40 -0
  36. package/dist/js/context/providers/NEBFormDataManager.d.ts +23 -0
  37. package/dist/js/context/providers/NEBFormDataManager.js +39 -0
  38. package/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts +78 -0
  39. package/dist/js/context/providers/NonCollinearMagnetizationDataManager.js +181 -0
  40. package/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts +26 -0
  41. package/dist/js/context/providers/PlanewaveCutoffDataManager.js +69 -0
  42. package/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts +13 -0
  43. package/dist/js/context/providers/PointsGrid/IGridFormDataManager.js +23 -0
  44. package/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts +15 -0
  45. package/dist/js/context/providers/PointsGrid/KGridFormDataManager.js +30 -0
  46. package/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts +171 -0
  47. package/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js +270 -0
  48. package/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts +13 -0
  49. package/dist/js/context/providers/PointsGrid/QGridFormDataManager.js +23 -0
  50. package/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts +10 -0
  51. package/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.js +19 -0
  52. package/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts +9 -0
  53. package/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.js +18 -0
  54. package/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts +8 -0
  55. package/dist/js/context/providers/PointsPath/IPathFormDataManager.js +17 -0
  56. package/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts +8 -0
  57. package/dist/js/context/providers/PointsPath/KPathFormDataManager.js +17 -0
  58. package/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts +40 -0
  59. package/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js +125 -0
  60. package/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts +8 -0
  61. package/dist/js/context/providers/PointsPath/QPathFormDataManager.js +17 -0
  62. package/dist/js/context/providers/base/ContextProvider.d.ts +75 -0
  63. package/dist/js/context/providers/base/ContextProvider.js +87 -0
  64. package/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts +16 -0
  65. package/dist/js/context/providers/base/JSONSchemaDataProvider.js +17 -0
  66. package/dist/js/context/providers/base/JSONSchemaFormDataProvider.d.ts +19 -0
  67. package/dist/js/context/providers/base/JSONSchemaFormDataProvider.js +32 -0
  68. package/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts +26 -0
  69. package/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js +54 -0
  70. package/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts +78 -0
  71. package/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js +104 -0
  72. package/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts +36 -0
  73. package/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js +58 -0
  74. package/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts +36 -0
  75. package/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js +56 -0
  76. package/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts +30 -0
  77. package/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js +50 -0
  78. package/dist/js/context/providers/index.d.ts +92 -0
  79. package/dist/js/context/providers/index.js +107 -0
  80. package/dist/js/context/providers/settings.d.ts +7 -0
  81. package/dist/js/context/providers/settings.js +11 -33
  82. package/dist/js/convergence/ConvergenceParameter.d.ts +26 -0
  83. package/dist/js/convergence/ConvergenceParameter.js +13 -0
  84. package/dist/js/convergence/NonUniformKGridConvergence.d.ts +12 -0
  85. package/dist/js/convergence/NonUniformKGridConvergence.js +31 -0
  86. package/dist/js/convergence/UniformKGridConvergence.d.ts +8 -0
  87. package/dist/js/convergence/UniformKGridConvergence.js +22 -0
  88. package/dist/js/convergence/factory.d.ts +8 -0
  89. package/dist/js/convergence/factory.js +18 -0
  90. package/dist/js/enums.d.ts +62 -0
  91. package/dist/js/enums.js +66 -61
  92. package/dist/js/generated/AssertionUnitSchemaMixin.d.ts +5 -0
  93. package/dist/js/generated/AssertionUnitSchemaMixin.js +27 -0
  94. package/dist/js/generated/AssignmentUnitSchemaMixin.d.ts +5 -0
  95. package/dist/js/generated/AssignmentUnitSchemaMixin.js +33 -0
  96. package/dist/js/generated/BaseUnitSchemaMixin.d.ts +5 -0
  97. package/dist/js/generated/BaseUnitSchemaMixin.js +57 -0
  98. package/dist/js/generated/ConditionUnitSchemaMixin.d.ts +5 -0
  99. package/dist/js/generated/ConditionUnitSchemaMixin.js +51 -0
  100. package/dist/js/generated/ExecutionUnitInputSchemaMixin.d.ts +5 -0
  101. package/dist/js/generated/ExecutionUnitInputSchemaMixin.js +27 -0
  102. package/dist/js/generated/ExecutionUnitSchemaMixin.d.ts +5 -0
  103. package/dist/js/generated/ExecutionUnitSchemaMixin.js +45 -0
  104. package/dist/js/generated/IOUnitSchemaMixin.d.ts +5 -0
  105. package/dist/js/generated/IOUnitSchemaMixin.js +33 -0
  106. package/dist/js/generated/MapUnitSchemaMixin.d.ts +5 -0
  107. package/dist/js/generated/MapUnitSchemaMixin.js +27 -0
  108. package/dist/js/generated/ReduceUnitSchemaMixin.d.ts +5 -0
  109. package/dist/js/generated/ReduceUnitSchemaMixin.js +27 -0
  110. package/dist/js/generated/StatusSchemaMixin.d.ts +5 -0
  111. package/dist/js/generated/StatusSchemaMixin.js +21 -0
  112. package/dist/js/generated/SubworkflowSchemaMixin.d.ts +5 -0
  113. package/dist/js/generated/SubworkflowSchemaMixin.js +51 -0
  114. package/dist/js/generated/SubworkflowUnitSchemaMixin.d.ts +5 -0
  115. package/dist/js/generated/SubworkflowUnitSchemaMixin.js +15 -0
  116. package/dist/js/generated/WorkflowSchemaMixin.d.ts +5 -0
  117. package/dist/js/generated/WorkflowSchemaMixin.js +51 -0
  118. package/dist/js/index.d.ts +13 -0
  119. package/dist/js/index.js +66 -176
  120. package/dist/js/units/AssertionUnit.d.ts +20 -0
  121. package/dist/js/units/AssertionUnit.js +33 -0
  122. package/dist/js/units/AssignmentUnit.d.ts +17 -0
  123. package/dist/js/units/AssignmentUnit.js +35 -0
  124. package/dist/js/units/BaseUnit.d.ts +39 -0
  125. package/dist/js/units/BaseUnit.js +70 -0
  126. package/dist/js/units/ConditionUnit.d.ts +17 -0
  127. package/dist/js/units/ConditionUnit.js +37 -0
  128. package/dist/js/units/ExecutionUnit.d.ts +115 -0
  129. package/dist/js/units/ExecutionUnit.js +181 -0
  130. package/dist/js/units/ExecutionUnitInput.d.ts +22 -0
  131. package/dist/js/units/ExecutionUnitInput.js +47 -0
  132. package/dist/js/units/IOUnit.d.ts +16 -0
  133. package/dist/js/units/IOUnit.js +31 -0
  134. package/dist/js/units/MapUnit.d.ts +34 -0
  135. package/dist/js/units/MapUnit.js +46 -0
  136. package/dist/js/units/ReduceUnit.d.ts +16 -0
  137. package/dist/js/units/ReduceUnit.js +30 -0
  138. package/dist/js/units/SubworkflowUnit.d.ts +16 -0
  139. package/dist/js/units/SubworkflowUnit.js +28 -0
  140. package/dist/js/units/factory.d.ts +31 -0
  141. package/dist/js/units/factory.js +65 -47
  142. package/dist/js/units/index.d.ts +14 -0
  143. package/dist/js/units/index.js +25 -81
  144. package/dist/js/units/mixins/RuntimeItemsUILogicMixin.d.ts +26 -0
  145. package/dist/js/units/mixins/RuntimeItemsUILogicMixin.js +50 -0
  146. package/dist/js/utils/baseUnits.d.ts +2 -0
  147. package/dist/js/utils/baseUnits.js +11 -0
  148. package/dist/js/utils/index.d.ts +3 -0
  149. package/dist/js/utils/index.js +39 -0
  150. package/dist/js/utils/subworkflow.d.ts +2 -0
  151. package/dist/js/utils/subworkflow.js +29 -0
  152. package/dist/js/utils/underscoreStringSlugify.d.ts +6 -0
  153. package/dist/js/utils/underscoreStringSlugify.js +32 -0
  154. package/dist/js/utils/units.d.ts +4 -0
  155. package/dist/js/utils/units.js +16 -0
  156. package/dist/js/utils/workflow.d.ts +9 -0
  157. package/dist/js/utils/workflow.js +67 -0
  158. package/dist/js/workflows/default.d.ts +3 -0
  159. package/dist/js/workflows/default.js +43 -39
  160. package/dist/js/workflows/workflow.d.ts +4404 -0
  161. package/dist/js/workflows/workflow.js +310 -306
  162. package/package.json +56 -44
  163. package/src/js/Subworkflow.ts +532 -0
  164. package/src/js/Workflow.ts +390 -0
  165. package/src/js/context/mixins/ApplicationContextMixin.ts +21 -0
  166. package/src/js/context/mixins/MaterialContextMixin.ts +35 -0
  167. package/src/js/context/mixins/MaterialsContextMixin.ts +24 -0
  168. package/src/js/context/mixins/MaterialsSetContextMixin.ts +42 -0
  169. package/src/js/context/providers/BoundaryConditionsFormDataManager.ts +88 -0
  170. package/src/js/context/providers/CollinearMagnetizationDataManager.ts +140 -0
  171. package/src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts +93 -0
  172. package/src/js/context/providers/Hubbard/HubbardContextProvider.ts +85 -0
  173. package/src/js/context/providers/Hubbard/HubbardJContextManager.ts +82 -0
  174. package/src/js/context/providers/Hubbard/HubbardUContextManager.ts +78 -0
  175. package/src/js/context/providers/Hubbard/HubbardVContextManager.ts +100 -0
  176. package/src/js/context/providers/IonDynamicsDataManager.ts +64 -0
  177. package/src/js/context/providers/MLSettingsDataManager.ts +61 -0
  178. package/src/js/context/providers/MLTrainTestSplitDataManager.ts +59 -0
  179. package/src/js/context/providers/NEBFormDataManager.ts +57 -0
  180. package/src/js/context/providers/NonCollinearMagnetizationDataManager.ts +229 -0
  181. package/src/js/context/providers/PlanewaveCutoffDataManager.ts +110 -0
  182. package/src/js/context/providers/PointsGrid/IGridFormDataManager.ts +36 -0
  183. package/src/js/context/providers/PointsGrid/KGridFormDataManager.ts +46 -0
  184. package/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts +371 -0
  185. package/src/js/context/providers/PointsGrid/QGridFormDataManager.ts +36 -0
  186. package/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts +26 -0
  187. package/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts +24 -0
  188. package/src/js/context/providers/PointsPath/IPathFormDataManager.ts +22 -0
  189. package/src/js/context/providers/PointsPath/KPathFormDataManager.ts +22 -0
  190. package/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts +192 -0
  191. package/src/js/context/providers/PointsPath/QPathFormDataManager.ts +22 -0
  192. package/src/js/context/providers/base/ContextProvider.ts +150 -0
  193. package/src/js/context/providers/base/JSONSchemaDataProvider.ts +31 -0
  194. package/src/js/context/providers/base/JSONSchemaFormDataProvider.ts +38 -0
  195. package/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts +107 -0
  196. package/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts +178 -0
  197. package/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts +93 -0
  198. package/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts +89 -0
  199. package/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts +92 -0
  200. package/src/js/context/providers/index.ts +155 -0
  201. package/src/js/context/providers/settings.ts +13 -0
  202. package/src/js/convergence/ConvergenceParameter.ts +37 -0
  203. package/src/js/convergence/NonUniformKGridConvergence.ts +38 -0
  204. package/src/js/convergence/UniformKGridConvergence.ts +26 -0
  205. package/src/js/convergence/factory.ts +18 -0
  206. package/src/js/{enums.js → enums.ts} +27 -22
  207. package/src/js/generated/AssertionUnitSchemaMixin.ts +34 -0
  208. package/src/js/generated/AssignmentUnitSchemaMixin.ts +40 -0
  209. package/src/js/generated/BaseUnitSchemaMixin.ts +64 -0
  210. package/src/js/generated/ConditionUnitSchemaMixin.ts +58 -0
  211. package/src/js/generated/ExecutionUnitInputSchemaMixin.ts +36 -0
  212. package/src/js/generated/ExecutionUnitSchemaMixin.ts +52 -0
  213. package/src/js/generated/IOUnitSchemaMixin.ts +40 -0
  214. package/src/js/generated/MapUnitSchemaMixin.ts +34 -0
  215. package/src/js/generated/ReduceUnitSchemaMixin.ts +34 -0
  216. package/src/js/generated/StatusSchemaMixin.ts +28 -0
  217. package/src/js/generated/SubworkflowSchemaMixin.ts +58 -0
  218. package/src/js/generated/SubworkflowUnitSchemaMixin.ts +22 -0
  219. package/src/js/generated/WorkflowSchemaMixin.ts +58 -0
  220. package/src/js/index.ts +44 -0
  221. package/src/js/units/AssertionUnit.ts +49 -0
  222. package/src/js/units/AssignmentUnit.ts +49 -0
  223. package/src/js/units/BaseUnit.ts +117 -0
  224. package/src/js/units/ConditionUnit.ts +52 -0
  225. package/src/js/units/ExecutionUnit.ts +274 -0
  226. package/src/js/units/ExecutionUnitInput.ts +71 -0
  227. package/src/js/units/IOUnit.ts +43 -0
  228. package/src/js/units/MapUnit.ts +59 -0
  229. package/src/js/units/ReduceUnit.ts +46 -0
  230. package/src/js/units/SubworkflowUnit.ts +44 -0
  231. package/src/js/units/factory.ts +131 -0
  232. package/src/js/units/index.ts +27 -0
  233. package/src/js/units/mixins/RuntimeItemsUILogicMixin.ts +81 -0
  234. package/src/js/utils/baseUnits.ts +11 -0
  235. package/src/js/utils/index.ts +3 -0
  236. package/src/js/utils/units.ts +23 -0
  237. package/src/js/utils/workflow.ts +69 -0
  238. package/src/js/workflows/{default.js → default.ts} +8 -1
  239. package/build_workflows.js +0 -65
  240. package/dist/js/context/context.js +0 -49
  241. package/dist/js/context/mixins/JobContextMixin.js +0 -39
  242. package/dist/js/context/mixins/MethodDataContextMixin.js +0 -48
  243. package/dist/js/context/mixins/WorkflowContextMixin.js +0 -28
  244. package/dist/js/context/providers/BoundaryConditionsFormDataProvider.js +0 -84
  245. package/dist/js/context/providers/CollinearMagnetizationContextProvider.js +0 -96
  246. package/dist/js/context/providers/HubbardContextProviderLegacy.js +0 -68
  247. package/dist/js/context/providers/HubbardJContextProvider.js +0 -67
  248. package/dist/js/context/providers/HubbardUContextProvider.js +0 -70
  249. package/dist/js/context/providers/HubbardVContextProvider.js +0 -92
  250. package/dist/js/context/providers/IonDynamicsContextProvider.js +0 -58
  251. package/dist/js/context/providers/MLSettingsContextProvider.js +0 -51
  252. package/dist/js/context/providers/MLTrainTestSplitContextProvider.js +0 -47
  253. package/dist/js/context/providers/NEBFormDataProvider.js +0 -42
  254. package/dist/js/context/providers/NonCollinearMagnetizationContextProvider.js +0 -187
  255. package/dist/js/context/providers/PlanewaveCutoffsContextProvider.js +0 -67
  256. package/dist/js/context/providers/PointsGridFormDataProvider.js +0 -263
  257. package/dist/js/context/providers/PointsPathFormDataProvider.js +0 -147
  258. package/dist/js/context/providers/by_application/ExecutableContextProvider.js +0 -25
  259. package/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js +0 -61
  260. package/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js +0 -150
  261. package/dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js +0 -85
  262. package/dist/js/context/providers/by_application/vasp/VASPContextProvider.js +0 -65
  263. package/dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.js +0 -57
  264. package/dist/js/context/providers.js +0 -199
  265. package/dist/js/patch.js +0 -19
  266. package/dist/js/subworkflows/convergence/non_uniform_kgrid.js +0 -31
  267. package/dist/js/subworkflows/convergence/parameter.js +0 -70
  268. package/dist/js/subworkflows/convergence/uniform_kgrid.js +0 -26
  269. package/dist/js/subworkflows/convergence.js +0 -189
  270. package/dist/js/subworkflows/create.js +0 -293
  271. package/dist/js/subworkflows/dynamic/espresso/getQpointIrrep.js +0 -34
  272. package/dist/js/subworkflows/dynamic/index.js +0 -19
  273. package/dist/js/subworkflows/dynamic/surfaceEnergy.js +0 -67
  274. package/dist/js/subworkflows/index.js +0 -19
  275. package/dist/js/units/assertion.js +0 -37
  276. package/dist/js/units/assignment.js +0 -42
  277. package/dist/js/units/base.js +0 -91
  278. package/dist/js/units/builders/AssertionUnitConfigBuilder.js +0 -34
  279. package/dist/js/units/builders/AssignmentUnitConfigBuilder.js +0 -41
  280. package/dist/js/units/builders/ExecutionUnitConfigBuilder.js +0 -67
  281. package/dist/js/units/builders/IOUnitConfigBuilder.js +0 -54
  282. package/dist/js/units/builders/UnitConfigBuilder.js +0 -85
  283. package/dist/js/units/builders/index.js +0 -18
  284. package/dist/js/units/condition.js +0 -52
  285. package/dist/js/units/execution.js +0 -225
  286. package/dist/js/units/io.js +0 -148
  287. package/dist/js/units/map.js +0 -38
  288. package/dist/js/units/processing.js +0 -41
  289. package/dist/js/units/reduce.js +0 -24
  290. package/dist/js/units/subworkflow.js +0 -23
  291. package/dist/js/workflows/create.js +0 -318
  292. package/dist/js/workflows/index.js +0 -113
  293. package/dist/js/workflows/relaxation.js +0 -38
  294. package/src/js/context/context.js +0 -47
  295. package/src/js/context/mixins/ApplicationContextMixin.js +0 -19
  296. package/src/js/context/mixins/JobContextMixin.js +0 -36
  297. package/src/js/context/mixins/MaterialContextMixin.js +0 -41
  298. package/src/js/context/mixins/MaterialsContextMixin.js +0 -18
  299. package/src/js/context/mixins/MaterialsSetContextMixin.js +0 -24
  300. package/src/js/context/mixins/MethodDataContextMixin.js +0 -48
  301. package/src/js/context/mixins/WorkflowContextMixin.js +0 -25
  302. package/src/js/context/providers/BoundaryConditionsFormDataProvider.js +0 -72
  303. package/src/js/context/providers/CollinearMagnetizationContextProvider.js +0 -105
  304. package/src/js/context/providers/HubbardContextProviderLegacy.js +0 -67
  305. package/src/js/context/providers/HubbardJContextProvider.js +0 -65
  306. package/src/js/context/providers/HubbardUContextProvider.js +0 -95
  307. package/src/js/context/providers/HubbardVContextProvider.js +0 -96
  308. package/src/js/context/providers/IonDynamicsContextProvider.js +0 -44
  309. package/src/js/context/providers/MLSettingsContextProvider.js +0 -45
  310. package/src/js/context/providers/MLTrainTestSplitContextProvider.js +0 -43
  311. package/src/js/context/providers/NEBFormDataProvider.js +0 -33
  312. package/src/js/context/providers/NonCollinearMagnetizationContextProvider.js +0 -179
  313. package/src/js/context/providers/PlanewaveCutoffsContextProvider.js +0 -65
  314. package/src/js/context/providers/PointsGridFormDataProvider.js +0 -271
  315. package/src/js/context/providers/PointsPathFormDataProvider.js +0 -163
  316. package/src/js/context/providers/by_application/ExecutableContextProvider.js +0 -17
  317. package/src/js/context/providers/by_application/espresso/QENEBContextProvider.js +0 -58
  318. package/src/js/context/providers/by_application/espresso/QEPWXContextProvider.js +0 -168
  319. package/src/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js +0 -89
  320. package/src/js/context/providers/by_application/vasp/VASPContextProvider.js +0 -58
  321. package/src/js/context/providers/by_application/vasp/VASPNEBContextProvider.js +0 -48
  322. package/src/js/context/providers/settings.js +0 -38
  323. package/src/js/context/providers.js +0 -140
  324. package/src/js/index.js +0 -57
  325. package/src/js/patch.js +0 -12
  326. package/src/js/subworkflows/convergence/enums.js +0 -12
  327. package/src/js/subworkflows/convergence/factory.js +0 -15
  328. package/src/js/subworkflows/convergence/non_uniform_kgrid.js +0 -28
  329. package/src/js/subworkflows/convergence/parameter.js +0 -58
  330. package/src/js/subworkflows/convergence/uniform_kgrid.js +0 -22
  331. package/src/js/subworkflows/convergence.js +0 -196
  332. package/src/js/subworkflows/create.js +0 -220
  333. package/src/js/subworkflows/dynamic/espresso/getQpointIrrep.js +0 -35
  334. package/src/js/subworkflows/dynamic/index.js +0 -8
  335. package/src/js/subworkflows/dynamic/surfaceEnergy.js +0 -124
  336. package/src/js/subworkflows/index.js +0 -2
  337. package/src/js/subworkflows/subworkflow.js +0 -345
  338. package/src/js/units/assertion.js +0 -29
  339. package/src/js/units/assignment.js +0 -34
  340. package/src/js/units/base.js +0 -97
  341. package/src/js/units/builders/AssertionUnitConfigBuilder.js +0 -28
  342. package/src/js/units/builders/AssignmentUnitConfigBuilder.js +0 -36
  343. package/src/js/units/builders/ExecutionUnitConfigBuilder.js +0 -59
  344. package/src/js/units/builders/IOUnitConfigBuilder.js +0 -53
  345. package/src/js/units/builders/UnitConfigBuilder.js +0 -92
  346. package/src/js/units/builders/index.js +0 -15
  347. package/src/js/units/condition.js +0 -47
  348. package/src/js/units/execution.js +0 -267
  349. package/src/js/units/factory.js +0 -53
  350. package/src/js/units/index.js +0 -25
  351. package/src/js/units/io.js +0 -163
  352. package/src/js/units/map.js +0 -33
  353. package/src/js/units/processing.js +0 -39
  354. package/src/js/units/reduce.js +0 -17
  355. package/src/js/units/subworkflow.js +0 -15
  356. package/src/js/utils.js +0 -73
  357. package/src/js/workflows/create.js +0 -227
  358. package/src/js/workflows/index.js +0 -98
  359. package/src/js/workflows/relaxation.js +0 -42
  360. package/src/js/workflows/workflow.js +0 -388
@@ -0,0 +1,371 @@
1
+ import { Units } from "@mat3ra/code/dist/js/constants";
2
+ import { math as codeJSMath } from "@mat3ra/code/dist/js/math";
3
+ import type { Constructor } from "@mat3ra/code/dist/js/utils/types";
4
+ import type {
5
+ GridContextItemSchema,
6
+ PointsGridDataProviderSchema,
7
+ Vector3DSchema,
8
+ } from "@mat3ra/esse/dist/js/types";
9
+ import { type ReciprocalLattice, Made } from "@mat3ra/made";
10
+ import type { JSONSchema7 } from "json-schema";
11
+
12
+ import materialContextMixin, {
13
+ type MaterialContextMixin,
14
+ type MaterialExternalContext,
15
+ } from "../../mixins/MaterialContextMixin";
16
+ import type { JinjaExternalContext } from "../base/JSONSchemaDataProvider";
17
+ import JSONSchemaFormDataProvider from "../base/JSONSchemaFormDataProvider";
18
+ import { globalSettings } from "../settings";
19
+
20
+ type Schema = GridContextItemSchema;
21
+ type Data = PointsGridDataProviderSchema;
22
+ export type ExternalContext = JinjaExternalContext & MaterialExternalContext;
23
+
24
+ type Base = typeof JSONSchemaFormDataProvider<Schema, ExternalContext> &
25
+ Constructor<MaterialContextMixin>;
26
+
27
+ type GridMetricType = Data["gridMetricType"];
28
+
29
+ const vector = (
30
+ defaultValue: string | number | readonly number[] | readonly string[],
31
+ isStringType = false,
32
+ ) => {
33
+ const isArray = Array.isArray(defaultValue);
34
+
35
+ return {
36
+ type: "array",
37
+ items: {
38
+ type: isStringType ? "string" : "number",
39
+ ...(isArray ? {} : { default: defaultValue }),
40
+ },
41
+ minItems: 3,
42
+ maxItems: 3,
43
+ ...(isArray ? { default: defaultValue } : {}),
44
+ };
45
+ };
46
+
47
+ const defaultShift = 0;
48
+ const defaultShifts: Vector3DSchema = [defaultShift, defaultShift, defaultShift];
49
+
50
+ abstract class PointsGridFormDataProvider<
51
+ N extends Schema["name"],
52
+ > extends (JSONSchemaFormDataProvider as Base) {
53
+ abstract readonly name: N;
54
+
55
+ readonly domain = "important" as const;
56
+
57
+ readonly entityName = "unit" as const;
58
+
59
+ readonly jsonSchemaId = "context-providers-directory/points-grid-data-provider";
60
+
61
+ public dimensions!: Data["dimensions"];
62
+
63
+ public shifts!: Data["shifts"];
64
+
65
+ private reciprocalLattice!: ReciprocalLattice;
66
+
67
+ private gridMetricType!: Data["gridMetricType"];
68
+
69
+ private gridMetricValue!: number;
70
+
71
+ private preferGridMetric!: boolean;
72
+
73
+ private defaultDimensions!: Vector3DSchema;
74
+
75
+ private reciprocalVectorRatios!: Vector3DSchema;
76
+
77
+ readonly divisor: number;
78
+
79
+ protected defaultMetric!: {
80
+ type: GridMetricType;
81
+ value: number;
82
+ };
83
+
84
+ abstract readonly jsonSchema: JSONSchema7;
85
+
86
+ constructor(contextItem: Partial<Schema>, externalContext: ExternalContext, divisor: number) {
87
+ super(contextItem, externalContext);
88
+ this.divisor = divisor;
89
+ this.initMaterialContextMixin(externalContext);
90
+ this.initInstanceFields();
91
+ }
92
+
93
+ private initInstanceFields() {
94
+ this.defaultMetric = {
95
+ type: "KPPRA" as const,
96
+ value: this.getDefaultGridMetricValue("KPPRA"),
97
+ };
98
+
99
+ this.shifts = this.data?.shifts || [...defaultShifts];
100
+ this.gridMetricType = this.data?.gridMetricType || this.defaultMetric.type;
101
+ this.gridMetricValue = this.data?.gridMetricValue || this.defaultMetric.value;
102
+ this.preferGridMetric = this.data?.preferGridMetric || false;
103
+
104
+ this.reciprocalLattice = new Made.ReciprocalLattice(this.material.lattice);
105
+ this.defaultDimensions = this.calculateDimensions(
106
+ this.defaultMetric.type,
107
+ this.defaultMetric.value,
108
+ );
109
+ this.dimensions = this.data?.dimensions || this.defaultDimensions;
110
+ this.reciprocalVectorRatios = this.reciprocalLattice.reciprocalVectorRatios.map((r) =>
111
+ Number(codeJSMath.numberToPrecision(r, 3)),
112
+ ) as Vector3DSchema;
113
+ }
114
+
115
+ // TODO: move default values to be extracted from ESSE
116
+ private getDefaultGridMetricValue(metric: GridMetricType) {
117
+ switch (metric) {
118
+ case "KPPRA":
119
+ if (!globalSettings.defaultKPPRA) {
120
+ throw new Error("globalSettings.defaultKPPRA is not set");
121
+ }
122
+ return Math.floor(globalSettings.defaultKPPRA / this.divisor);
123
+ case "spacing":
124
+ return 0.3;
125
+ default:
126
+ console.error("Metric type not recognized!");
127
+ return -1;
128
+ }
129
+ }
130
+
131
+ private resolveGridMetricValue(gridMetricType: GridMetricType, gridMetricValue: number) {
132
+ const isValid = gridMetricType === "KPPRA" ? gridMetricValue >= 1 : gridMetricValue > 0;
133
+
134
+ return isValid ? gridMetricValue : this.getDefaultGridMetricValue(gridMetricType);
135
+ }
136
+
137
+ getData(): Data {
138
+ const data = super.getData();
139
+ const { preferGridMetric, gridMetricType, gridMetricValue } = data;
140
+
141
+ if (!preferGridMetric || !gridMetricType) {
142
+ return data;
143
+ }
144
+
145
+ const effectiveValue = this.resolveGridMetricValue(gridMetricType, gridMetricValue);
146
+
147
+ return {
148
+ ...data,
149
+ gridMetricValue: effectiveValue,
150
+ dimensions: this.calculateDimensions(gridMetricType, effectiveValue),
151
+ };
152
+ }
153
+
154
+ getDefaultData() {
155
+ const defaultData: Data = {
156
+ dimensions: this.defaultDimensions,
157
+ shifts: defaultShifts,
158
+ gridMetricType: this.defaultMetric.type,
159
+ gridMetricValue: this.defaultMetric.value,
160
+ preferGridMetric: false,
161
+ reciprocalVectorRatios: this.reciprocalVectorRatios,
162
+ };
163
+
164
+ if (this.material) {
165
+ const { gridMetricType, gridMetricValue } = this;
166
+ // if `data` is present and material is updated, prioritize `data` when `preferGridMetric` is not set
167
+ return this.preferGridMetric
168
+ ? {
169
+ dimensions: this.calculateDimensions(gridMetricType, gridMetricValue),
170
+ shifts: defaultShifts,
171
+ gridMetricType,
172
+ gridMetricValue,
173
+ }
174
+ : this.data || defaultData;
175
+ }
176
+
177
+ return defaultData;
178
+ }
179
+
180
+ protected get jsonSchemaPatchConfig() {
181
+ const metricDescription = {
182
+ KPPRA: `${this.name.toUpperCase()}PPRA (${this.name}pt per reciprocal atom)`, // KPPRA or QPPRA
183
+ spacing: "grid spacing",
184
+ };
185
+
186
+ const gridMetricType = this.data?.gridMetricType || this.defaultMetric.type;
187
+
188
+ return {
189
+ dimensions: vector(this.defaultDimensions, this.isUsingJinjaVariables),
190
+ shifts: vector(defaultShifts),
191
+ reciprocalVectorRatios: vector(this.reciprocalVectorRatios),
192
+ gridMetricType: { default: this.defaultMetric.type },
193
+ description: `3D grid with shifts. Default min value for ${
194
+ metricDescription[gridMetricType]
195
+ } is ${this.getDefaultGridMetricValue(gridMetricType)}.`,
196
+ required: ["dimensions", "shifts"],
197
+ dependencies: {
198
+ gridMetricType: {
199
+ oneOf: [
200
+ {
201
+ properties: {
202
+ gridMetricType: { enum: ["KPPRA"] },
203
+ gridMetricValue: {
204
+ type: "integer",
205
+ minimum: 1,
206
+ title: "Value",
207
+ default: this.gridMetricValue,
208
+ },
209
+ preferGridMetric: {
210
+ type: "boolean",
211
+ title: "prefer KPPRA",
212
+ default: this.preferGridMetric,
213
+ },
214
+ },
215
+ },
216
+ {
217
+ properties: {
218
+ gridMetricType: { enum: ["spacing"] },
219
+ gridMetricValue: {
220
+ type: "number",
221
+ exclusiveMinimum: 0,
222
+ title: "Value [1/Å]",
223
+ default: this.gridMetricValue,
224
+ },
225
+ preferGridMetric: {
226
+ type: "boolean",
227
+ title: "prefer spacing",
228
+ default: this.preferGridMetric,
229
+ },
230
+ },
231
+ },
232
+ ],
233
+ },
234
+ },
235
+ };
236
+ }
237
+
238
+ /** Prefer persisted `data` — `setData` runs before React re-inits the provider on render. */
239
+ private get preferGridMetricForUi() {
240
+ return this.data?.preferGridMetric ?? this.preferGridMetric;
241
+ }
242
+
243
+ get uiSchema() {
244
+ const preferGridMetric = this.preferGridMetricForUi;
245
+ const gridMetricValueForUi = this.data?.gridMetricValue ?? this.gridMetricValue;
246
+
247
+ const arraySubStyle = (emptyValue = 0) => {
248
+ return {
249
+ "ui:options": {
250
+ addable: false,
251
+ orderable: false,
252
+ removable: false,
253
+ },
254
+ items: {
255
+ "ui:disabled": preferGridMetric,
256
+ // TODO: extract the actual current values from context
257
+ "ui:placeholder": "1",
258
+ "ui:emptyValue": emptyValue,
259
+ "ui:label": false,
260
+ },
261
+ } as const;
262
+ };
263
+
264
+ return {
265
+ dimensions: arraySubStyle(1),
266
+ shifts: arraySubStyle(0),
267
+ gridMetricType: {
268
+ "ui:title": "Grid Metric",
269
+ },
270
+ gridMetricValue: {
271
+ "ui:disabled": !preferGridMetric,
272
+ "ui:emptyValue": gridMetricValueForUi,
273
+ "ui:placeholder": gridMetricValueForUi.toString(), // make string to prevent prop type error
274
+ },
275
+ preferGridMetric: {
276
+ "ui:emptyValue": true,
277
+ "ui:disabled": this.isUsingJinjaVariables,
278
+ },
279
+ reciprocalVectorRatios: {
280
+ "ui:title": "reciprocal vector ratios",
281
+ "ui:orderable": false,
282
+ "ui:removable": false,
283
+ "ui:readonly": true,
284
+ items: {
285
+ "ui:label": false,
286
+ },
287
+ },
288
+ };
289
+ }
290
+
291
+ private calculateDimensions(
292
+ gridMetricType: GridMetricType,
293
+ gridMetricValue: number,
294
+ // units = Units.angstrom,
295
+ ): Vector3DSchema {
296
+ switch (gridMetricType) {
297
+ case "KPPRA": {
298
+ const nAtoms = this.material ? this.material.Basis.nAtoms : 1;
299
+ return this.reciprocalLattice.getDimensionsFromPointsCount(
300
+ gridMetricValue / nAtoms,
301
+ );
302
+ }
303
+ case "spacing":
304
+ return this.reciprocalLattice.getDimensionsFromSpacing(
305
+ gridMetricValue,
306
+ Units.angstrom,
307
+ );
308
+ default:
309
+ return [1, 1, 1];
310
+ }
311
+ }
312
+
313
+ private calculateGridMetric(gridMetricType: GridMetricType, dimensions: Vector3DSchema) {
314
+ switch (gridMetricType) {
315
+ case "KPPRA": {
316
+ const nAtoms = this.material ? this.material.Basis.nAtoms : 1;
317
+ return dimensions.reduce((a, b) => a * b) * nAtoms;
318
+ }
319
+ case "spacing":
320
+ return Number(
321
+ this.reciprocalLattice
322
+ .getSpacingFromDimensions(dimensions, Units.angstrom)
323
+ .toFixed(3),
324
+ );
325
+ default:
326
+ return 1;
327
+ }
328
+ }
329
+
330
+ setData(data: Data) {
331
+ const { dimensions, gridMetricType, preferGridMetric, gridMetricValue } = data;
332
+
333
+ if (preferGridMetric !== undefined) {
334
+ this.preferGridMetric = preferGridMetric;
335
+ }
336
+ if (gridMetricType !== undefined) {
337
+ this.gridMetricType = gridMetricType;
338
+ }
339
+
340
+ if (preferGridMetric && gridMetricType) {
341
+ const effectiveValue = this.resolveGridMetricValue(gridMetricType, gridMetricValue);
342
+ this.gridMetricValue = effectiveValue;
343
+
344
+ return super.setData({
345
+ ...data,
346
+ gridMetricValue: effectiveValue,
347
+ dimensions: this.calculateDimensions(gridMetricType, effectiveValue),
348
+ });
349
+ }
350
+
351
+ if (!preferGridMetric && dimensions.every((d) => typeof d === "number")) {
352
+ const derivedMetric = this.calculateGridMetric(gridMetricType, dimensions);
353
+ this.gridMetricValue = derivedMetric;
354
+
355
+ return super.setData({
356
+ ...data,
357
+ gridMetricValue: derivedMetric,
358
+ });
359
+ }
360
+
361
+ if (gridMetricValue !== undefined) {
362
+ this.gridMetricValue = gridMetricValue;
363
+ }
364
+
365
+ return super.setData(data);
366
+ }
367
+ }
368
+
369
+ materialContextMixin(PointsGridFormDataProvider.prototype);
370
+
371
+ export default PointsGridFormDataProvider;
@@ -0,0 +1,36 @@
1
+ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface";
2
+ import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types";
3
+ import type { JSONSchema7 } from "json-schema";
4
+
5
+ import type { UnitContext } from "../base/ContextProvider";
6
+ import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider";
7
+
8
+ type Name = "qgrid";
9
+ type Schema = GridContextItemSchema;
10
+
11
+ export default class QGridFormDataManager extends PointsGridFormDataProvider<Name> {
12
+ readonly name = "qgrid" as const;
13
+
14
+ readonly jsonSchema: JSONSchema7;
15
+
16
+ constructor(contextItem: Partial<Schema>, externalContext: ExternalContext) {
17
+ super(contextItem, externalContext, 5);
18
+
19
+ const jsonSchema = JSONSchemasInterface.getPatchedSchemaById(
20
+ this.jsonSchemaId,
21
+ this.jsonSchemaPatchConfig,
22
+ );
23
+
24
+ if (!jsonSchema) {
25
+ throw new Error("Failed to get patched JSON schema");
26
+ }
27
+
28
+ this.jsonSchema = jsonSchema;
29
+ }
30
+
31
+ static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) {
32
+ const contextItem = this.findContextItem<Schema>(unitContext, "qgrid");
33
+
34
+ return new QGridFormDataManager(contextItem, externalContext);
35
+ }
36
+ }
@@ -0,0 +1,26 @@
1
+ import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types";
2
+
3
+ import type { UnitContext } from "../base/ContextProvider";
4
+ import PointsPathFormDataProvider, {
5
+ type PointsPathFormDataProviderExternalContext,
6
+ } from "./PointsPathFormDataProvider";
7
+
8
+ type Name = "explicitKPath2PIBA";
9
+ type Schema = PathContextItemSchema;
10
+
11
+ export default class ExplicitKPath2PIBAFormDataManager extends PointsPathFormDataProvider<Name> {
12
+ readonly name = "explicitKPath2PIBA" as const;
13
+
14
+ readonly is2PIBA = true;
15
+
16
+ readonly useExplicitPath = true;
17
+
18
+ static createFromUnitContext(
19
+ unitContext: UnitContext,
20
+ externalContext: PointsPathFormDataProviderExternalContext,
21
+ ) {
22
+ const contextItem = this.findContextItem<Schema>(unitContext, "explicitKPath2PIBA");
23
+
24
+ return new ExplicitKPath2PIBAFormDataManager(contextItem, externalContext);
25
+ }
26
+ }
@@ -0,0 +1,24 @@
1
+ import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types";
2
+
3
+ import type { UnitContext } from "../base/ContextProvider";
4
+ import PointsPathFormDataProvider, {
5
+ type PointsPathFormDataProviderExternalContext,
6
+ } from "./PointsPathFormDataProvider";
7
+
8
+ type Name = "explicitKPath";
9
+ type Schema = PathContextItemSchema;
10
+
11
+ export default class ExplicitKPathFormDataManager extends PointsPathFormDataProvider<Name> {
12
+ readonly name = "explicitKPath" as const;
13
+
14
+ readonly useExplicitPath = true;
15
+
16
+ static createFromUnitContext(
17
+ unitContext: UnitContext,
18
+ externalContext: PointsPathFormDataProviderExternalContext,
19
+ ) {
20
+ const contextItem = this.findContextItem<Schema>(unitContext, "explicitKPath");
21
+
22
+ return new ExplicitKPathFormDataManager(contextItem, externalContext);
23
+ }
24
+ }
@@ -0,0 +1,22 @@
1
+ import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types";
2
+
3
+ import type { UnitContext } from "../base/ContextProvider";
4
+ import PointsPathFormDataProvider, {
5
+ type PointsPathFormDataProviderExternalContext,
6
+ } from "./PointsPathFormDataProvider";
7
+
8
+ type Name = "ipath";
9
+ type Schema = PathContextItemSchema;
10
+
11
+ export default class IPathFormDataManager extends PointsPathFormDataProvider<Name> {
12
+ readonly name = "ipath" as const;
13
+
14
+ static createFromUnitContext(
15
+ unitContext: UnitContext,
16
+ externalContext: PointsPathFormDataProviderExternalContext,
17
+ ) {
18
+ const contextItem = this.findContextItem<Schema>(unitContext, "ipath");
19
+
20
+ return new IPathFormDataManager(contextItem, externalContext);
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types";
2
+
3
+ import type { UnitContext } from "../base/ContextProvider";
4
+ import PointsPathFormDataProvider, {
5
+ type PointsPathFormDataProviderExternalContext,
6
+ } from "./PointsPathFormDataProvider";
7
+
8
+ type Name = "kpath";
9
+ type Schema = PathContextItemSchema;
10
+
11
+ export default class KPathFormDataManager extends PointsPathFormDataProvider<Name> {
12
+ readonly name = "kpath" as const;
13
+
14
+ static createFromUnitContext(
15
+ unitContext: UnitContext,
16
+ externalContext: PointsPathFormDataProviderExternalContext,
17
+ ) {
18
+ const contextItem = this.findContextItem<Schema>(unitContext, "kpath");
19
+
20
+ return new KPathFormDataManager(contextItem, externalContext);
21
+ }
22
+ }
@@ -0,0 +1,192 @@
1
+ import { math as codeJSMath } from "@mat3ra/code/dist/js/math";
2
+ import type { Constructor } from "@mat3ra/code/dist/js/utils/types";
3
+ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface";
4
+ import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils";
5
+ import type {
6
+ PathContextItemSchema,
7
+ PointsPathDataProviderRenderingSchema,
8
+ PointsPathDataProviderSchema,
9
+ } from "@mat3ra/esse/dist/js/types";
10
+ import { type ReciprocalLattice, Made } from "@mat3ra/made";
11
+
12
+ import applicationContextMixin, {
13
+ type ApplicationContextMixin,
14
+ type ApplicationExternalContext,
15
+ } from "../../mixins/ApplicationContextMixin";
16
+ import materialContextMixin, {
17
+ type MaterialContextMixin,
18
+ type MaterialExternalContext,
19
+ } from "../../mixins/MaterialContextMixin";
20
+ import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider";
21
+
22
+ const defaultPoint = "Г" as const;
23
+ const defaultSteps = 10 as const;
24
+
25
+ export type PointsPathFormDataProviderData = PointsPathDataProviderSchema;
26
+ export type PointsPathFormDataProviderRenderingData = PointsPathDataProviderRenderingSchema;
27
+ export type PointsPathFormDataProviderExternalContext = JinjaExternalContext &
28
+ MaterialExternalContext &
29
+ ApplicationExternalContext;
30
+
31
+ type Data = PointsPathFormDataProviderData;
32
+ type RenderingData = PointsPathFormDataProviderRenderingData;
33
+ type RenderingDataItem = RenderingData[0];
34
+ type Schema = PathContextItemSchema;
35
+ type ExternalContext = PointsPathFormDataProviderExternalContext;
36
+
37
+ const jsonSchemaId = "context-providers-directory/points-path-data-provider";
38
+
39
+ type Base = typeof JSONSchemaDataProvider<Schema, ExternalContext, RenderingData> &
40
+ Constructor<MaterialContextMixin> &
41
+ Constructor<ApplicationContextMixin>;
42
+
43
+ abstract class MixinsContextProvider extends (JSONSchemaDataProvider as Base) {
44
+ constructor(contextItem: Partial<Schema>, externalContext: ExternalContext) {
45
+ super(contextItem, externalContext);
46
+ this.initMaterialContextMixin(externalContext);
47
+ this.initApplicationContextMixin(externalContext);
48
+ }
49
+ }
50
+
51
+ materialContextMixin(MixinsContextProvider.prototype);
52
+ applicationContextMixin(MixinsContextProvider.prototype);
53
+
54
+ abstract class PointsPathFormDataProvider<N extends Schema["name"]> extends MixinsContextProvider {
55
+ abstract name: N;
56
+
57
+ readonly domain = "important" as const;
58
+
59
+ readonly entityName = "unit" as const;
60
+
61
+ private reciprocalLattice: ReciprocalLattice;
62
+
63
+ readonly useExplicitPath: boolean;
64
+
65
+ readonly is2PIBA: boolean = false;
66
+
67
+ constructor(config: Partial<Schema>, externalContext: ExternalContext) {
68
+ super(config, externalContext);
69
+ this.reciprocalLattice = new Made.ReciprocalLattice(this.material.lattice);
70
+ this.useExplicitPath = this.application.name === "vasp";
71
+ }
72
+
73
+ getDefaultData(): Data {
74
+ return this.reciprocalLattice.defaultKpointPath as Data;
75
+ }
76
+
77
+ updateMaterialHash() {
78
+ const previousMaterialHash = this.extraData?.materialHash;
79
+
80
+ super.updateMaterialHash();
81
+
82
+ // Reset path only when the material actually changed (hash). Do not clear `isEdited` just
83
+ // because the material has no id (common default material in designers): that ran every
84
+ // render, wiped isEdited, and savePersistentContext dropped k-path/Q-path from `unit.context`.
85
+ if (previousMaterialHash && previousMaterialHash !== this.material.hash) {
86
+ this.isEdited = false;
87
+ }
88
+ }
89
+
90
+ get jsonSchema(): JSONSchema {
91
+ const jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, {
92
+ "items.properties.point": {
93
+ default: defaultPoint,
94
+ enum: this.reciprocalLattice.symmetryPoints.map((x) => x.point),
95
+ },
96
+ "items.properties.steps": {
97
+ default: defaultSteps,
98
+ },
99
+ });
100
+
101
+ if (!jsonSchema) {
102
+ throw new Error("Failed to get patched JSON schema");
103
+ }
104
+
105
+ return jsonSchema;
106
+ }
107
+
108
+ readonly uiSchemaStyled = {
109
+ items: {
110
+ point: {},
111
+ steps: {},
112
+ },
113
+ };
114
+
115
+ protected patchForRendering(data: Data): RenderingData {
116
+ return this.addCoordinates(data);
117
+ }
118
+
119
+ private addCoordinates(path: Data): RenderingData {
120
+ const rawData: RenderingDataItem[] = path.map((pathItem) => {
121
+ const point = this.reciprocalLattice.symmetryPoints.find((sp) => {
122
+ return sp.point === pathItem.point;
123
+ });
124
+ if (!point) {
125
+ throw new Error(`Point ${pathItem.point} not found in reciprocal lattice`);
126
+ }
127
+ return { ...pathItem, coordinates: point.coordinates };
128
+ });
129
+
130
+ const processedData = this.useExplicitPath ? this.convertToExplicitPath(rawData) : rawData;
131
+
132
+ const mapped = processedData.map((p) => {
133
+ const coordinates = this.is2PIBA
134
+ ? this.reciprocalLattice.getCartesianCoordinates(p.coordinates)
135
+ : p.coordinates;
136
+
137
+ return {
138
+ ...p,
139
+ coordinates: coordinates.map((c) => Number(c.toFixed(9))),
140
+ };
141
+ });
142
+
143
+ return mapped as RenderingData;
144
+ }
145
+
146
+ // Initially, path contains symmetry points with steps counts.
147
+ // This function explicitly calculates each point between symmetry points by step counts.
148
+ // eslint-disable-next-line class-methods-use-this
149
+ private convertToExplicitPath(path: RenderingDataItem[]): RenderingDataItem[] {
150
+ return path.reduce<RenderingDataItem[]>((acc, startPoint, index) => {
151
+ const nextPoint = path[index + 1];
152
+
153
+ if (!nextPoint) {
154
+ return acc;
155
+ }
156
+
157
+ const middlePoints = codeJSMath.calculateSegmentsBetweenPoints3D(
158
+ startPoint.coordinates,
159
+ nextPoint.coordinates,
160
+ startPoint.steps,
161
+ );
162
+
163
+ const steps = 1;
164
+
165
+ acc.push(
166
+ {
167
+ steps,
168
+ coordinates: startPoint.coordinates,
169
+ point: startPoint.point,
170
+ },
171
+ ...middlePoints.map((coordinates) => ({
172
+ steps,
173
+ coordinates,
174
+ point: startPoint.point,
175
+ })),
176
+ );
177
+
178
+ // nextPoint is the last point in the path
179
+ if (path.length - 2 === index) {
180
+ acc.push({
181
+ steps,
182
+ coordinates: nextPoint.coordinates,
183
+ point: nextPoint.point,
184
+ });
185
+ }
186
+
187
+ return acc;
188
+ }, []);
189
+ }
190
+ }
191
+
192
+ export default PointsPathFormDataProvider;