@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
package/package.json CHANGED
@@ -1,14 +1,19 @@
1
1
  {
2
2
  "name": "@mat3ra/wode",
3
- "version": "2026.5.23-0",
3
+ "version": "2026.6.5-0",
4
4
  "description": "WOrkflow DEfinitions",
5
5
  "scripts": {
6
- "test": "nyc --reporter=text mocha --recursive --bail --require @babel/register/lib --require tests/js/setup.js tests/js",
6
+ "test": "mocha --recursive --bail --require ts-node/register 'tests/js/**/*.ts'",
7
+ "test:coverage": "nyc --reporter=text --reporter=html --reporter=lcov mocha --recursive --bail tests/js/**/*.ts",
8
+ "test:coverage:html": "nyc --reporter=html mocha --recursive --bail tests/js/**/*.ts",
9
+ "test:coverage:check": "nyc --reporter=text --check-coverage mocha --recursive --bail tests/js/**/*.ts",
10
+ "test:coverage:view": "node scripts/view-coverage.js",
7
11
  "lint": "eslint src/js tests/js && prettier --write src/js tests/js",
8
12
  "lint:fix": "eslint --fix --cache src/js tests/js && prettier --write src/js tests/js",
9
- "transpile": "babel --out-dir dist/js src/js",
13
+ "transpile": "tsc -p tsconfig-transpile.json",
10
14
  "prettier": "prettier --check src/js tests/js",
11
- "prepare": "husky install || exit 0"
15
+ "prepare": "husky install || exit 0",
16
+ "generate-mixins": "ts-node scripts/generate-mixins.ts"
12
17
  },
13
18
  "repository": {
14
19
  "type": "git",
@@ -16,11 +21,9 @@
16
21
  },
17
22
  "main": "dist/js/index.js",
18
23
  "files": [
19
- "/assets",
20
- "/dist",
21
- "/src/js",
22
- ".babelrc",
23
- "build_workflows.js"
24
+ "dist",
25
+ "src/js",
26
+ ".babelrc"
24
27
  ],
25
28
  "author": "Exabyte Inc.",
26
29
  "bugs": {
@@ -29,59 +32,56 @@
29
32
  "license": "Apache-2.0",
30
33
  "homepage": "https://github.com/Exabyte-io/wode",
31
34
  "dependencies": {
32
- "@babel/cli": "7.16.0",
33
- "@babel/core": "7.16.0",
34
- "@babel/eslint-parser": "7.16.3",
35
- "@babel/plugin-proposal-class-properties": "7.16.0",
36
- "@babel/preset-env": "7.16.4",
37
- "@babel/preset-react": "7.16.7",
38
- "@babel/register": "^7.16.0",
39
- "@babel/runtime-corejs3": "7.16.8",
40
35
  "@exabyte-io/periodic-table.js": "2022.6.8-0",
41
- "crypto-js": "^4.2.0",
42
- "js-yaml": "^4.1.0",
43
- "lodash": "^4.17.21",
44
- "mixwith": "^0.1.1",
45
- "underscore": "^1.13.3",
46
- "underscore.string": "^3.3.4",
47
- "v20": "^0.1.0"
36
+ "@types/json-schema": "^7.0.15",
37
+ "@types/react-jsonschema-form": "^1.7.13",
38
+ "nunjucks": "^3.2.4",
39
+ "underscore.string": "^3.3.6"
48
40
  },
49
41
  "devDependencies": {
50
- "@mat3ra/ade": "2026.4.29-0",
51
42
  "@exabyte-io/eslint-config": "2025.5.13-0",
52
- "@mat3ra/ide": "2025.11.19-0",
53
- "@mat3ra/mode": "2026.3.4-0",
43
+ "@mat3ra/ade": "2026.5.28-0",
44
+ "@mat3ra/code": "2026.5.27-0",
45
+ "@mat3ra/esse": "2026.5.28-0",
46
+ "@mat3ra/ide": "2026.5.28-0",
47
+ "@mat3ra/made": "2026.5.28-0",
48
+ "@mat3ra/mode": "2026.5.29-1",
49
+ "@mat3ra/prode": "2026.5.28-0",
50
+ "@mat3ra/standata": "2026.5.28-0",
51
+ "@mat3ra/tsconfig": "^2024.6.3-0",
54
52
  "@mat3ra/utils": "2025.9.20-0",
55
- "@mat3ra/code": "2025.10.24-0",
56
- "@mat3ra/esse": "2026.4.4-0",
57
- "@mat3ra/made": "2025.7.15-0",
58
- "@mat3ra/standata": "^2026.5.15-0",
53
+ "@types/nunjucks": "^3.2.6",
59
54
  "chai": "^4.3.4",
60
- "eslint": "7.32.0",
61
- "eslint-config-airbnb": "19.0.2",
55
+ "eslint": "^7.32.0",
56
+ "eslint-config-airbnb": "^19.0.2",
62
57
  "eslint-config-prettier": "^8.5.0",
63
- "eslint-import-resolver-exports": "^1.0.0-beta.2",
64
- "eslint-plugin-import": "2.25.3",
65
- "eslint-plugin-jsdoc": "37.1.0",
66
- "eslint-plugin-jsx-a11y": "6.5.1",
58
+ "eslint-import-resolver-exports": "^1.0.0-beta.5",
59
+ "eslint-import-resolver-meteor": "^0.4.0",
60
+ "eslint-import-resolver-node": "^0.3.9",
61
+ "eslint-plugin-import": "^2.25.3",
62
+ "eslint-plugin-jsdoc": "^37.1.0",
63
+ "eslint-plugin-jsx-a11y": "^6.5.1",
64
+ "eslint-plugin-mui-path-imports": "0.0.15",
67
65
  "eslint-plugin-prettier": "^4.2.1",
68
- "eslint-plugin-react": "7.30.0",
69
- "eslint-plugin-simple-import-sort": "7.0.0",
66
+ "eslint-plugin-react": "^7.30.0",
67
+ "eslint-plugin-simple-import-sort": "^7.0.0",
70
68
  "husky": "^7.0.4",
71
69
  "lint-staged": "^12.1.2",
72
70
  "mocha": "^9.1.3",
73
71
  "nyc": "^15.1.0",
74
- "prettier": "^2.7.1"
72
+ "prettier": "^2.7.1",
73
+ "ts-node": "^10.9.2",
74
+ "typescript": "^5.6.6"
75
75
  },
76
76
  "peerDependencies": {
77
77
  "@mat3ra/ade": "*",
78
+ "@mat3ra/code": "*",
79
+ "@mat3ra/esse": "*",
78
80
  "@mat3ra/ide": "*",
81
+ "@mat3ra/made": "*",
79
82
  "@mat3ra/mode": "*",
80
83
  "@mat3ra/standata": "*",
81
- "@mat3ra/utils": "*",
82
- "@mat3ra/code": "*",
83
- "@mat3ra/esse": "*",
84
- "@mat3ra/made": "*"
84
+ "@mat3ra/utils": "*"
85
85
  },
86
86
  "engines": {
87
87
  "node": ">=20.0.0"
@@ -91,9 +91,21 @@
91
91
  "eslint --cache --fix",
92
92
  "prettier --write"
93
93
  ],
94
+ "src/js/**/*.ts": [
95
+ "eslint --cache --fix",
96
+ "prettier --write"
97
+ ],
94
98
  "tests/js/**/*.js": [
95
99
  "eslint --cache --fix",
96
100
  "prettier --write"
101
+ ],
102
+ "tests/js/**/*.ts": [
103
+ "eslint --cache --fix",
104
+ "prettier --write"
105
+ ],
106
+ "scripts/**/*.ts": [
107
+ "eslint --cache --fix",
108
+ "prettier --write"
97
109
  ]
98
110
  }
99
111
  }
@@ -0,0 +1,532 @@
1
+ import { Application } from "@mat3ra/ade";
2
+ import {
3
+ type DefaultableInMemoryEntity,
4
+ type NamedInMemoryEntity,
5
+ InMemoryEntity,
6
+ } from "@mat3ra/code/dist/js/entity";
7
+ import { defaultableEntityMixin } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin";
8
+ import {
9
+ type HashedEntity,
10
+ hashedEntityMixin,
11
+ } from "@mat3ra/code/dist/js/entity/mixins/HashedEntityMixin";
12
+ import { namedEntityMixin } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin";
13
+ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface";
14
+ import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types";
15
+ import type { JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types";
16
+ import { type ComputedEntityMixin, computedEntityMixin } from "@mat3ra/ide/dist/js/compute";
17
+ import type { Material } from "@mat3ra/made";
18
+ import { type PseudopotentialMethod, Model, ModelFactory } from "@mat3ra/mode";
19
+ import type { MetaPropertyHolder } from "@mat3ra/prode";
20
+ import { ApplicationRegistry, setUnitLinks } from "@mat3ra/standata";
21
+ import { Utils } from "@mat3ra/utils";
22
+
23
+ import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin";
24
+ import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin";
25
+ import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin";
26
+ import type { AssignmentContext, ExternalContext } from "./context/providers";
27
+ import type {
28
+ JobExternalContext,
29
+ WorkflowExternalContext,
30
+ } from "./context/providers/by_application/espresso/QEPWXInputDataManager";
31
+ import { createConvergenceParameter } from "./convergence/factory";
32
+ import { UnitTag, UnitType } from "./enums";
33
+ import {
34
+ type SubworkflowSchemaMixin,
35
+ subworkflowSchemaMixin,
36
+ } from "./generated/SubworkflowSchemaMixin";
37
+ import { AssignmentUnit, ConditionUnit, SubworkflowUnit, UnitFactory } from "./units";
38
+ import type { AnySubworkflowUnit } from "./units/factory";
39
+
40
+ type ConvergenceConfig = {
41
+ parameter: "N_k" | "N_k_nonuniform";
42
+ parameterInitial: number | [number, number, number];
43
+ parameterIncrement: number;
44
+ result: string;
45
+ resultInitial: number;
46
+ condition: string;
47
+ operator: string;
48
+ tolerance: number;
49
+ maxOccurrences: number;
50
+ externalContext: SubworkflowExternalContext;
51
+ };
52
+
53
+ interface Subworkflow
54
+ extends DefaultableInMemoryEntity,
55
+ NamedInMemoryEntity,
56
+ SubworkflowSchemaMixin,
57
+ HashedEntity,
58
+ Omit<ComputedEntityMixin, "compute"> {}
59
+
60
+ type SubworkflowExternalContext = MaterialExternalContext &
61
+ MaterialsExternalContext &
62
+ MaterialsSetExternalContext &
63
+ WorkflowExternalContext &
64
+ JobExternalContext;
65
+
66
+ class Subworkflow extends InMemoryEntity implements SubworkflowSchema {
67
+ private ModelFactory: typeof ModelFactory;
68
+
69
+ private applicationInstance: Application;
70
+
71
+ unitsInstances!: AnySubworkflowUnit[];
72
+
73
+ modelInstance: Model;
74
+
75
+ properties: string[] = [];
76
+
77
+ repetition = 0;
78
+
79
+ declare static createDefault: () => Subworkflow;
80
+
81
+ declare toJSON: () => SubworkflowSchema & AnyObject;
82
+
83
+ declare _json: SubworkflowSchema & AnyObject;
84
+
85
+ static get jsonSchema() {
86
+ return JSONSchemasInterface.getSchemaById("workflow/subworkflow");
87
+ }
88
+
89
+ constructor(config: SubworkflowSchema, _ModelFactory = ModelFactory) {
90
+ super(config);
91
+ this.ModelFactory = _ModelFactory;
92
+
93
+ this.applicationInstance = new Application(this.application);
94
+ this.modelInstance = this.ModelFactory.create({
95
+ ...this.model,
96
+ application: this.application,
97
+ });
98
+ this.setUnits(this.units.map((cfg) => UnitFactory.createInSubworkflow(cfg)));
99
+ }
100
+
101
+ static get defaultConfig() {
102
+ const defaultName = "New Subworkflow";
103
+ return {
104
+ _id: Utils.uuid.getUUID(),
105
+ name: defaultName,
106
+ application: new ApplicationRegistry().getDefaultApplication(),
107
+ // TODO: confirm if `functional` is required field. If not, update ESSE schema
108
+ // `Model.defaultConfig` from @mat3ra/mode may omit `functional`; ESSE subworkflow schema requires it once schemas are registered.
109
+ model: { ...Model.defaultConfig, functional: "pbe" },
110
+ properties: [],
111
+ units: [],
112
+ };
113
+ }
114
+
115
+ setRepetition(repetition: number) {
116
+ this.repetition = repetition;
117
+ this.unitsInstances.forEach((u) => u.setRepetition(repetition));
118
+ }
119
+
120
+ getAsUnit() {
121
+ return new SubworkflowUnit({
122
+ type: UnitType.subworkflow,
123
+ _id: this.id,
124
+ name: this.name,
125
+ preProcessors: [],
126
+ postProcessors: [],
127
+ monitors: [],
128
+ results: [],
129
+ flowchartId: "",
130
+ });
131
+ }
132
+
133
+ setApplication(application: Application) {
134
+ // TODO: adjust the logic above to take into account whether units need re-rendering after version change etc.
135
+ // reset units if application name changes
136
+ const previousApplicationName = this.application.name;
137
+ this.applicationInstance = application;
138
+
139
+ if (previousApplicationName !== application.name) {
140
+ // TODO: figure out how to set a default unit per new application instead of removing all
141
+ this.setUnits([]);
142
+ } else {
143
+ // propagate new application version to all units
144
+ this.unitsInstances
145
+ .filter((unit) => unit.type === UnitType.execution)
146
+ .forEach((unit) => {
147
+ unit.setApplication({ application });
148
+ });
149
+ }
150
+
151
+ this.application = application.toJSON();
152
+
153
+ // set model to the default one for the application selected
154
+ this.setModel(
155
+ this.ModelFactory.createFromApplication({
156
+ application: this.application,
157
+ }),
158
+ );
159
+ }
160
+
161
+ setModel(model: Model) {
162
+ this.modelInstance = model;
163
+ this.model = model.toJSON();
164
+ }
165
+
166
+ private buildExternalContext(context: SubworkflowExternalContext): ExternalContext {
167
+ const subworkflowContext = this.units
168
+ .filter((u) => u.type === UnitType.assignment)
169
+ .reduce((acc, u) => {
170
+ return {
171
+ ...acc,
172
+ [u.operand]: u.value,
173
+ };
174
+ }, {} as AssignmentContext);
175
+
176
+ return {
177
+ ...context,
178
+ application: this.applicationInstance.toJSON(),
179
+ methodData: this.model.method.data,
180
+ subworkflowContext,
181
+ };
182
+ }
183
+
184
+ render(context: SubworkflowExternalContext) {
185
+ const ctx = this.buildExternalContext(context);
186
+
187
+ this.unitsInstances.forEach((u) => {
188
+ if (u.type === UnitType.execution) {
189
+ u.render(ctx);
190
+ }
191
+ });
192
+
193
+ // Keep serialized `units` in sync with instances after execution units update `input`.
194
+ this.units = this.unitsInstances.map((u) => u.toJSON());
195
+ }
196
+
197
+ /**
198
+ * TODO: reuse workflow function instead
199
+ */
200
+ addUnit(unit: AnySubworkflowUnit, index = -1) {
201
+ const { unitsInstances } = this;
202
+
203
+ if (unitsInstances.length === 0) {
204
+ this.setUnits([unit]);
205
+ } else {
206
+ if (index >= 0) {
207
+ unitsInstances.splice(index, 0, unit);
208
+ } else {
209
+ unitsInstances.push(unit);
210
+ }
211
+ this.setUnits(unitsInstances);
212
+ }
213
+ }
214
+
215
+ private setUnits(units: AnySubworkflowUnit[]) {
216
+ this.unitsInstances = setUnitLinks(units);
217
+ this.units = units.map((x) => x.toJSON());
218
+ this.properties = units.map((x) => x.resultNames).flat();
219
+ }
220
+
221
+ removeUnit(flowchartId: string) {
222
+ const previousUnit = this.unitsInstances.find((x) => x.next === flowchartId);
223
+
224
+ if (previousUnit) {
225
+ previousUnit.unsetProp("next");
226
+ }
227
+
228
+ this.setUnits(this.unitsInstances.filter((x) => x.flowchartId !== flowchartId));
229
+ }
230
+
231
+ getUnit(flowchartId: string) {
232
+ return this.unitsInstances.find((x) => x.flowchartId === flowchartId);
233
+ }
234
+
235
+ unitIndex(flowchartId: string) {
236
+ return this.units.findIndex((unit) => {
237
+ return unit.flowchartId === flowchartId;
238
+ });
239
+ }
240
+
241
+ replaceUnit(index: number, unit: AnySubworkflowUnit) {
242
+ this.unitsInstances[index] = unit;
243
+ this.setUnits([...this.unitsInstances]);
244
+ }
245
+
246
+ setIsDraft(bool: boolean) {
247
+ this.isDraft = bool;
248
+ }
249
+
250
+ get methodData() {
251
+ return this.modelInstance.Method.data;
252
+ }
253
+
254
+ /**
255
+ * @summary
256
+ * Returns object for hashing of the workflow. Meaningful fields are units, app and model.
257
+ * units must be sorted topologically before hashing (already sorted).
258
+ */
259
+ getHashObject() {
260
+ return {
261
+ application: this.applicationInstance.calculateHash(),
262
+ model: this.modelInstance.calculateHash(),
263
+ units: this.unitsInstances.map((u) => u.calculateHash()).join(),
264
+ };
265
+ }
266
+
267
+ findUnitById(id: string) {
268
+ // TODO: come back and refactor after converting flowchartId to id
269
+ return this.units.find((u) => u.flowchartId === id);
270
+ }
271
+
272
+ findUnitKeyById(id: string) {
273
+ const index = this.units.findIndex((u) => u.flowchartId === id);
274
+ return `units.${index}`;
275
+ }
276
+
277
+ private findUnitWithTag(tag: UnitTag) {
278
+ return this.units
279
+ .filter((unit) => unit.type === UnitType.assignment)
280
+ .find((unit) => unit.tags?.includes(tag));
281
+ }
282
+
283
+ get hasConvergence() {
284
+ return !!this.convergenceParam && !!this.convergenceResult;
285
+ }
286
+
287
+ get convergenceParam() {
288
+ return this.findUnitWithTag(UnitTag.hasConvergenceParam)?.operand;
289
+ }
290
+
291
+ get convergenceResult() {
292
+ return this.findUnitWithTag(UnitTag.hasConvergenceResult)?.operand;
293
+ }
294
+
295
+ convergenceSeries(scopeTrack: JobSchema["scopeTrack"]) {
296
+ if (!this.hasConvergence || !scopeTrack?.length) {
297
+ return [];
298
+ }
299
+
300
+ let prevResult: unknown;
301
+
302
+ return scopeTrack
303
+ .map((scopeItem, i) => {
304
+ return {
305
+ x: i,
306
+ // TODO: fix types
307
+ // @ts-ignore
308
+ param: scopeItem.scope?.global[this.convergenceParam],
309
+ // @ts-ignore
310
+ y: scopeItem.scope?.global[this.convergenceResult],
311
+ };
312
+ })
313
+ .filter(({ y }) => {
314
+ const changed = prevResult !== y;
315
+ prevResult = y;
316
+ return changed;
317
+ })
318
+ .map((item, i) => {
319
+ return {
320
+ x: i + 1,
321
+ param: item.param,
322
+ y: item.y,
323
+ };
324
+ });
325
+ }
326
+
327
+ updateMethodData(materials: Material[], metaProperties: MetaPropertyHolder[]) {
328
+ const method = this.modelInstance.Method as PseudopotentialMethod;
329
+ const { model } = this;
330
+ const uniqueElements = [...new Set(materials.map((m) => m.uniqueElements).flat())];
331
+ const appName = this.application.name;
332
+
333
+ const methodDataItems = metaProperties
334
+ .filter((metaProperty) => {
335
+ return (
336
+ // @ts-ignore TODO: fix types
337
+ uniqueElements.includes(metaProperty.data.element) &&
338
+ metaProperty.data.apps.includes(appName)
339
+ );
340
+ })
341
+ .map((metaProperty) => metaProperty.property);
342
+
343
+ if (method.type !== "pseudopotential" || !methodDataItems.length) {
344
+ return;
345
+ }
346
+
347
+ const filters = {
348
+ appName,
349
+ exchangeCorrelation: {
350
+ approximation: model.subtype,
351
+ functional: "functional" in model ? model.functional : undefined,
352
+ },
353
+ };
354
+
355
+ // We cycle materials in reverse order below b/c of render(),
356
+ // since the default state index is zero, the last material thus corresponds to index 0.
357
+ // Without reversing, context providers in workflow consider material as changed when any update to the workflow
358
+ // is triggered.
359
+ // TODO: figure out how to simplify or remove the need for the above
360
+ (materials || [])
361
+ .concat()
362
+ .reverse()
363
+ .forEach((material) => {
364
+ // updates methodData & overwrites method in subworkflow.model
365
+ method.updateMethodDataByApplicationAndMaterials(methodDataItems, {
366
+ elements: material.uniqueElements,
367
+ ...filters,
368
+ });
369
+
370
+ this.modelInstance.setMethod(method);
371
+ this.model = this.modelInstance.toJSON();
372
+ });
373
+
374
+ // TODO: Try if/else instead of running both
375
+ if (materials.length > 1) {
376
+ method.updateMethodDataByApplicationAndMaterials(methodDataItems, {
377
+ elements: uniqueElements,
378
+ ...filters,
379
+ });
380
+
381
+ this.modelInstance.setMethod(method);
382
+ this.model = this.modelInstance.toJSON();
383
+ }
384
+ }
385
+
386
+ addConvergence({
387
+ parameter,
388
+ parameterInitial,
389
+ parameterIncrement,
390
+ result,
391
+ resultInitial,
392
+ condition,
393
+ operator,
394
+ tolerance,
395
+ maxOccurrences,
396
+ externalContext,
397
+ }: ConvergenceConfig) {
398
+ // Find unit to converge: should contain passed result in its results list
399
+ // TODO: make user to select unit for convergence explicitly
400
+ const unitForConvergence = this.unitsInstances
401
+ .filter((x) => x.type === UnitType.execution)
402
+ .find((x) => {
403
+ return x.resultNames.find((name) => name === result);
404
+ });
405
+
406
+ if (!unitForConvergence) {
407
+ throw new Error(
408
+ `Subworkflow does not contain unit with '${result}' as extracted property.`,
409
+ );
410
+ }
411
+
412
+ // initialize parameter
413
+ const convergenceParameter = createConvergenceParameter({
414
+ name: parameter,
415
+ initialValue: parameterInitial,
416
+ increment: parameterIncrement,
417
+ });
418
+
419
+ const context = this.buildExternalContext(externalContext);
420
+
421
+ unitForConvergence.render(context, convergenceParameter);
422
+
423
+ const prevResult = "prev_result";
424
+ const iteration = "iteration";
425
+
426
+ // Assignment with result's initial value
427
+ const prevResultInit = new AssignmentUnit({
428
+ name: "init result",
429
+ head: true,
430
+ operand: prevResult,
431
+ value: resultInitial,
432
+ });
433
+
434
+ // Assignment with initial value of convergence parameter
435
+ const paramInit = new AssignmentUnit({
436
+ name: "init parameter",
437
+ operand: convergenceParameter.name,
438
+ value: convergenceParameter.initialValue,
439
+ tags: [UnitTag.hasConvergenceParam],
440
+ });
441
+
442
+ // Assignment with initial value of iteration counter
443
+ const iterInit = new AssignmentUnit({
444
+ name: "init counter",
445
+ operand: iteration,
446
+ value: 1,
447
+ });
448
+
449
+ // Assignment for storing iteration result: extracts 'result' from convergence unit scope
450
+ const storePrevResult = new AssignmentUnit({
451
+ name: "store result",
452
+ input: [
453
+ {
454
+ scope: unitForConvergence.flowchartId,
455
+ name: result,
456
+ },
457
+ ],
458
+ operand: prevResult,
459
+ value: result,
460
+ });
461
+
462
+ // Assignment for convergence param increase
463
+ const nextStep = new AssignmentUnit({
464
+ name: "update parameter",
465
+ input: convergenceParameter.useVariablesFromUnitContext(unitForConvergence.flowchartId),
466
+ operand: convergenceParameter.name,
467
+ value: convergenceParameter.increment,
468
+ next: unitForConvergence.flowchartId,
469
+ });
470
+
471
+ // Final step of convergence
472
+ const exit = new AssignmentUnit({
473
+ name: "exit",
474
+ input: [],
475
+ operand: convergenceParameter.name,
476
+ value: convergenceParameter.finalValue,
477
+ });
478
+
479
+ // Final step of convergence
480
+ const storeResult = new AssignmentUnit({
481
+ name: "update result",
482
+ input: [
483
+ {
484
+ scope: unitForConvergence.flowchartId,
485
+ name: result,
486
+ },
487
+ ],
488
+ operand: result,
489
+ value: result,
490
+ tags: [UnitTag.hasConvergenceResult],
491
+ });
492
+
493
+ // Assign next iteration value
494
+ const nextIter = new AssignmentUnit({
495
+ name: "update counter",
496
+ input: [],
497
+ operand: iteration,
498
+ value: `${iteration} + 1`,
499
+ });
500
+
501
+ // Convergence condition unit
502
+ const conditionUnit = new ConditionUnit({
503
+ name: "check convergence",
504
+ statement: `${condition} ${operator} ${tolerance}`,
505
+ then: exit.flowchartId,
506
+ else: storePrevResult.flowchartId,
507
+ maxOccurrences,
508
+ next: storePrevResult.flowchartId,
509
+ });
510
+
511
+ this.addUnit(paramInit, 0);
512
+ this.addUnit(prevResultInit, 1);
513
+ this.addUnit(iterInit, 2);
514
+ this.addUnit(storeResult);
515
+ this.addUnit(conditionUnit);
516
+ this.addUnit(storePrevResult);
517
+ this.addUnit(nextIter);
518
+ this.addUnit(nextStep);
519
+ this.addUnit(exit);
520
+
521
+ // `addUnit` adjusts the `next` field, hence the below.
522
+ nextStep.next = unitForConvergence.flowchartId;
523
+ }
524
+ }
525
+
526
+ namedEntityMixin(Subworkflow.prototype);
527
+ defaultableEntityMixin(Subworkflow);
528
+ computedEntityMixin(Subworkflow.prototype);
529
+ subworkflowSchemaMixin(Subworkflow.prototype);
530
+ hashedEntityMixin(Subworkflow.prototype);
531
+
532
+ export default Subworkflow;