@mat3ra/wode 2026.4.9-0 → 2026.5.29-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.
- package/.babelrc +1 -1
- package/dist/js/Subworkflow.d.ts +714 -0
- package/dist/js/Subworkflow.js +397 -0
- package/dist/js/Workflow.d.ts +82 -0
- package/dist/js/Workflow.js +286 -0
- package/dist/js/WorkflowDesignerMaterial.d.ts +21 -0
- package/dist/js/WorkflowDesignerMaterial.js +26 -0
- package/dist/js/context/mixins/ApplicationContextMixin.d.ts +10 -0
- package/dist/js/context/mixins/ApplicationContextMixin.js +10 -17
- package/dist/js/context/mixins/MaterialContextMixin.d.ts +18 -0
- package/dist/js/context/mixins/MaterialContextMixin.js +14 -38
- package/dist/js/context/mixins/MaterialsContextMixin.d.ts +10 -0
- package/dist/js/context/mixins/MaterialsContextMixin.js +11 -17
- package/dist/js/context/mixins/MaterialsSetContextMixin.d.ts +14 -0
- package/dist/js/context/mixins/MaterialsSetContextMixin.js +21 -23
- package/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts +30 -0
- package/dist/js/context/providers/BoundaryConditionsFormDataManager.js +62 -0
- package/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts +42 -0
- package/dist/js/context/providers/CollinearMagnetizationDataManager.js +101 -0
- package/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts +29 -0
- package/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js +69 -0
- package/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts +20 -0
- package/dist/js/context/providers/Hubbard/HubbardContextProvider.js +47 -0
- package/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts +22 -0
- package/dist/js/context/providers/Hubbard/HubbardJContextManager.js +61 -0
- package/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts +22 -0
- package/dist/js/context/providers/Hubbard/HubbardUContextManager.js +57 -0
- package/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts +22 -0
- package/dist/js/context/providers/Hubbard/HubbardVContextManager.js +79 -0
- package/dist/js/context/providers/IonDynamicsDataManager.d.ts +27 -0
- package/dist/js/context/providers/IonDynamicsDataManager.js +48 -0
- package/dist/js/context/providers/MLSettingsDataManager.d.ts +24 -0
- package/dist/js/context/providers/MLSettingsDataManager.js +42 -0
- package/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts +23 -0
- package/dist/js/context/providers/MLTrainTestSplitDataManager.js +40 -0
- package/dist/js/context/providers/NEBFormDataManager.d.ts +23 -0
- package/dist/js/context/providers/NEBFormDataManager.js +39 -0
- package/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts +78 -0
- package/dist/js/context/providers/NonCollinearMagnetizationDataManager.js +181 -0
- package/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts +26 -0
- package/dist/js/context/providers/PlanewaveCutoffDataManager.js +69 -0
- package/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts +13 -0
- package/dist/js/context/providers/PointsGrid/IGridFormDataManager.js +23 -0
- package/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts +15 -0
- package/dist/js/context/providers/PointsGrid/KGridFormDataManager.js +30 -0
- package/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts +171 -0
- package/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js +270 -0
- package/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts +13 -0
- package/dist/js/context/providers/PointsGrid/QGridFormDataManager.js +23 -0
- package/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts +10 -0
- package/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.js +19 -0
- package/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts +9 -0
- package/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.js +18 -0
- package/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts +8 -0
- package/dist/js/context/providers/PointsPath/IPathFormDataManager.js +17 -0
- package/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts +8 -0
- package/dist/js/context/providers/PointsPath/KPathFormDataManager.js +17 -0
- package/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts +40 -0
- package/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js +125 -0
- package/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts +8 -0
- package/dist/js/context/providers/PointsPath/QPathFormDataManager.js +17 -0
- package/dist/js/context/providers/base/ContextProvider.d.ts +75 -0
- package/dist/js/context/providers/base/ContextProvider.js +87 -0
- package/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts +16 -0
- package/dist/js/context/providers/base/JSONSchemaDataProvider.js +17 -0
- package/dist/js/context/providers/base/JSONSchemaFormDataProvider.d.ts +19 -0
- package/dist/js/context/providers/base/JSONSchemaFormDataProvider.js +32 -0
- package/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts +26 -0
- package/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js +54 -0
- package/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts +78 -0
- package/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js +104 -0
- package/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts +36 -0
- package/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js +58 -0
- package/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts +36 -0
- package/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js +56 -0
- package/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts +30 -0
- package/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js +50 -0
- package/dist/js/context/providers/index.d.ts +92 -0
- package/dist/js/context/providers/index.js +107 -0
- package/dist/js/context/providers/settings.d.ts +7 -0
- package/dist/js/context/providers/settings.js +11 -33
- package/dist/js/convergence/ConvergenceParameter.d.ts +26 -0
- package/dist/js/convergence/ConvergenceParameter.js +13 -0
- package/dist/js/convergence/NonUniformKGridConvergence.d.ts +12 -0
- package/dist/js/convergence/NonUniformKGridConvergence.js +31 -0
- package/dist/js/convergence/UniformKGridConvergence.d.ts +8 -0
- package/dist/js/convergence/UniformKGridConvergence.js +22 -0
- package/dist/js/convergence/factory.d.ts +8 -0
- package/dist/js/convergence/factory.js +18 -0
- package/dist/js/enums.d.ts +62 -0
- package/dist/js/enums.js +66 -61
- package/dist/js/generated/AssertionUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/AssertionUnitSchemaMixin.js +27 -0
- package/dist/js/generated/AssignmentUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/AssignmentUnitSchemaMixin.js +33 -0
- package/dist/js/generated/BaseUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/BaseUnitSchemaMixin.js +57 -0
- package/dist/js/generated/ConditionUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/ConditionUnitSchemaMixin.js +51 -0
- package/dist/js/generated/ExecutionUnitInputSchemaMixin.d.ts +5 -0
- package/dist/js/generated/ExecutionUnitInputSchemaMixin.js +27 -0
- package/dist/js/generated/ExecutionUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/ExecutionUnitSchemaMixin.js +45 -0
- package/dist/js/generated/IOUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/IOUnitSchemaMixin.js +33 -0
- package/dist/js/generated/MapUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/MapUnitSchemaMixin.js +27 -0
- package/dist/js/generated/ReduceUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/ReduceUnitSchemaMixin.js +27 -0
- package/dist/js/generated/StatusSchemaMixin.d.ts +5 -0
- package/dist/js/generated/StatusSchemaMixin.js +21 -0
- package/dist/js/generated/SubworkflowSchemaMixin.d.ts +5 -0
- package/dist/js/generated/SubworkflowSchemaMixin.js +51 -0
- package/dist/js/generated/SubworkflowUnitSchemaMixin.d.ts +5 -0
- package/dist/js/generated/SubworkflowUnitSchemaMixin.js +15 -0
- package/dist/js/generated/WorkflowSchemaMixin.d.ts +5 -0
- package/dist/js/generated/WorkflowSchemaMixin.js +51 -0
- package/dist/js/index.d.ts +13 -0
- package/dist/js/index.js +66 -176
- package/dist/js/units/AssertionUnit.d.ts +20 -0
- package/dist/js/units/AssertionUnit.js +33 -0
- package/dist/js/units/AssignmentUnit.d.ts +17 -0
- package/dist/js/units/AssignmentUnit.js +35 -0
- package/dist/js/units/BaseUnit.d.ts +39 -0
- package/dist/js/units/BaseUnit.js +70 -0
- package/dist/js/units/ConditionUnit.d.ts +17 -0
- package/dist/js/units/ConditionUnit.js +37 -0
- package/dist/js/units/ExecutionUnit.d.ts +115 -0
- package/dist/js/units/ExecutionUnit.js +181 -0
- package/dist/js/units/ExecutionUnitInput.d.ts +22 -0
- package/dist/js/units/ExecutionUnitInput.js +47 -0
- package/dist/js/units/IOUnit.d.ts +16 -0
- package/dist/js/units/IOUnit.js +31 -0
- package/dist/js/units/MapUnit.d.ts +34 -0
- package/dist/js/units/MapUnit.js +46 -0
- package/dist/js/units/ReduceUnit.d.ts +16 -0
- package/dist/js/units/ReduceUnit.js +30 -0
- package/dist/js/units/SubworkflowUnit.d.ts +16 -0
- package/dist/js/units/SubworkflowUnit.js +28 -0
- package/dist/js/units/factory.d.ts +31 -0
- package/dist/js/units/factory.js +65 -47
- package/dist/js/units/index.d.ts +14 -0
- package/dist/js/units/index.js +25 -81
- package/dist/js/units/mixins/RuntimeItemsUILogicMixin.d.ts +26 -0
- package/dist/js/units/mixins/RuntimeItemsUILogicMixin.js +50 -0
- package/dist/js/utils/baseUnits.d.ts +2 -0
- package/dist/js/utils/baseUnits.js +11 -0
- package/dist/js/utils/index.d.ts +3 -0
- package/dist/js/utils/index.js +39 -0
- package/dist/js/utils/subworkflow.d.ts +2 -0
- package/dist/js/utils/subworkflow.js +29 -0
- package/dist/js/utils/underscoreStringSlugify.d.ts +6 -0
- package/dist/js/utils/underscoreStringSlugify.js +32 -0
- package/dist/js/utils/units.d.ts +4 -0
- package/dist/js/utils/units.js +16 -0
- package/dist/js/utils/workflow.d.ts +9 -0
- package/dist/js/utils/workflow.js +67 -0
- package/dist/js/utils.js +2 -7
- package/dist/js/workflows/default.d.ts +3 -0
- package/dist/js/workflows/default.js +43 -39
- package/dist/js/workflows/workflow.d.ts +4404 -0
- package/dist/js/workflows/workflow.js +310 -306
- package/package.json +56 -44
- package/src/js/Subworkflow.ts +532 -0
- package/src/js/Workflow.ts +390 -0
- package/src/js/context/mixins/ApplicationContextMixin.ts +21 -0
- package/src/js/context/mixins/MaterialContextMixin.ts +35 -0
- package/src/js/context/mixins/MaterialsContextMixin.ts +24 -0
- package/src/js/context/mixins/MaterialsSetContextMixin.ts +42 -0
- package/src/js/context/providers/BoundaryConditionsFormDataManager.ts +88 -0
- package/src/js/context/providers/CollinearMagnetizationDataManager.ts +140 -0
- package/src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts +93 -0
- package/src/js/context/providers/Hubbard/HubbardContextProvider.ts +85 -0
- package/src/js/context/providers/Hubbard/HubbardJContextManager.ts +82 -0
- package/src/js/context/providers/Hubbard/HubbardUContextManager.ts +78 -0
- package/src/js/context/providers/Hubbard/HubbardVContextManager.ts +100 -0
- package/src/js/context/providers/IonDynamicsDataManager.ts +64 -0
- package/src/js/context/providers/MLSettingsDataManager.ts +61 -0
- package/src/js/context/providers/MLTrainTestSplitDataManager.ts +59 -0
- package/src/js/context/providers/NEBFormDataManager.ts +57 -0
- package/src/js/context/providers/NonCollinearMagnetizationDataManager.ts +229 -0
- package/src/js/context/providers/PlanewaveCutoffDataManager.ts +110 -0
- package/src/js/context/providers/PointsGrid/IGridFormDataManager.ts +36 -0
- package/src/js/context/providers/PointsGrid/KGridFormDataManager.ts +46 -0
- package/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts +371 -0
- package/src/js/context/providers/PointsGrid/QGridFormDataManager.ts +36 -0
- package/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts +26 -0
- package/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts +24 -0
- package/src/js/context/providers/PointsPath/IPathFormDataManager.ts +22 -0
- package/src/js/context/providers/PointsPath/KPathFormDataManager.ts +22 -0
- package/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts +192 -0
- package/src/js/context/providers/PointsPath/QPathFormDataManager.ts +22 -0
- package/src/js/context/providers/base/ContextProvider.ts +150 -0
- package/src/js/context/providers/base/JSONSchemaDataProvider.ts +31 -0
- package/src/js/context/providers/base/JSONSchemaFormDataProvider.ts +38 -0
- package/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts +107 -0
- package/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts +178 -0
- package/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts +93 -0
- package/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts +89 -0
- package/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts +92 -0
- package/src/js/context/providers/index.ts +155 -0
- package/src/js/context/providers/settings.ts +13 -0
- package/src/js/convergence/ConvergenceParameter.ts +37 -0
- package/src/js/convergence/NonUniformKGridConvergence.ts +38 -0
- package/src/js/convergence/UniformKGridConvergence.ts +26 -0
- package/src/js/convergence/factory.ts +18 -0
- package/src/js/{enums.js → enums.ts} +27 -22
- package/src/js/generated/AssertionUnitSchemaMixin.ts +34 -0
- package/src/js/generated/AssignmentUnitSchemaMixin.ts +40 -0
- package/src/js/generated/BaseUnitSchemaMixin.ts +64 -0
- package/src/js/generated/ConditionUnitSchemaMixin.ts +58 -0
- package/src/js/generated/ExecutionUnitInputSchemaMixin.ts +36 -0
- package/src/js/generated/ExecutionUnitSchemaMixin.ts +52 -0
- package/src/js/generated/IOUnitSchemaMixin.ts +40 -0
- package/src/js/generated/MapUnitSchemaMixin.ts +34 -0
- package/src/js/generated/ReduceUnitSchemaMixin.ts +34 -0
- package/src/js/generated/StatusSchemaMixin.ts +28 -0
- package/src/js/generated/SubworkflowSchemaMixin.ts +58 -0
- package/src/js/generated/SubworkflowUnitSchemaMixin.ts +22 -0
- package/src/js/generated/WorkflowSchemaMixin.ts +58 -0
- package/src/js/index.ts +44 -0
- package/src/js/units/AssertionUnit.ts +49 -0
- package/src/js/units/AssignmentUnit.ts +49 -0
- package/src/js/units/BaseUnit.ts +117 -0
- package/src/js/units/ConditionUnit.ts +52 -0
- package/src/js/units/ExecutionUnit.ts +274 -0
- package/src/js/units/ExecutionUnitInput.ts +71 -0
- package/src/js/units/IOUnit.ts +43 -0
- package/src/js/units/MapUnit.ts +59 -0
- package/src/js/units/ReduceUnit.ts +46 -0
- package/src/js/units/SubworkflowUnit.ts +44 -0
- package/src/js/units/factory.ts +131 -0
- package/src/js/units/index.ts +27 -0
- package/src/js/units/mixins/RuntimeItemsUILogicMixin.ts +81 -0
- package/src/js/utils/baseUnits.ts +11 -0
- package/src/js/utils/index.ts +3 -0
- package/src/js/utils/units.ts +23 -0
- package/src/js/utils/workflow.ts +69 -0
- package/src/js/workflows/{default.js → default.ts} +8 -1
- package/build_workflows.js +0 -65
- package/dist/js/context/context.js +0 -49
- package/dist/js/context/mixins/JobContextMixin.js +0 -39
- package/dist/js/context/mixins/MethodDataContextMixin.js +0 -48
- package/dist/js/context/mixins/WorkflowContextMixin.js +0 -28
- package/dist/js/context/providers/BoundaryConditionsFormDataProvider.js +0 -84
- package/dist/js/context/providers/CollinearMagnetizationContextProvider.js +0 -96
- package/dist/js/context/providers/HubbardContextProviderLegacy.js +0 -68
- package/dist/js/context/providers/HubbardJContextProvider.js +0 -67
- package/dist/js/context/providers/HubbardUContextProvider.js +0 -70
- package/dist/js/context/providers/HubbardVContextProvider.js +0 -92
- package/dist/js/context/providers/IonDynamicsContextProvider.js +0 -58
- package/dist/js/context/providers/MLSettingsContextProvider.js +0 -51
- package/dist/js/context/providers/MLTrainTestSplitContextProvider.js +0 -47
- package/dist/js/context/providers/NEBFormDataProvider.js +0 -42
- package/dist/js/context/providers/NonCollinearMagnetizationContextProvider.js +0 -187
- package/dist/js/context/providers/PlanewaveCutoffsContextProvider.js +0 -67
- package/dist/js/context/providers/PointsGridFormDataProvider.js +0 -263
- package/dist/js/context/providers/PointsPathFormDataProvider.js +0 -147
- package/dist/js/context/providers/by_application/ExecutableContextProvider.js +0 -25
- package/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js +0 -61
- package/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js +0 -150
- package/dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js +0 -85
- package/dist/js/context/providers/by_application/vasp/VASPContextProvider.js +0 -65
- package/dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.js +0 -57
- package/dist/js/context/providers.js +0 -199
- package/dist/js/patch.js +0 -19
- package/dist/js/subworkflows/convergence/non_uniform_kgrid.js +0 -31
- package/dist/js/subworkflows/convergence/parameter.js +0 -70
- package/dist/js/subworkflows/convergence/uniform_kgrid.js +0 -26
- package/dist/js/subworkflows/convergence.js +0 -189
- package/dist/js/subworkflows/create.js +0 -293
- package/dist/js/subworkflows/dynamic/espresso/getQpointIrrep.js +0 -34
- package/dist/js/subworkflows/dynamic/index.js +0 -19
- package/dist/js/subworkflows/dynamic/surfaceEnergy.js +0 -67
- package/dist/js/subworkflows/index.js +0 -19
- package/dist/js/units/assertion.js +0 -37
- package/dist/js/units/assignment.js +0 -42
- package/dist/js/units/base.js +0 -91
- package/dist/js/units/builders/AssertionUnitConfigBuilder.js +0 -34
- package/dist/js/units/builders/AssignmentUnitConfigBuilder.js +0 -41
- package/dist/js/units/builders/ExecutionUnitConfigBuilder.js +0 -67
- package/dist/js/units/builders/IOUnitConfigBuilder.js +0 -54
- package/dist/js/units/builders/UnitConfigBuilder.js +0 -85
- package/dist/js/units/builders/index.js +0 -18
- package/dist/js/units/condition.js +0 -52
- package/dist/js/units/execution.js +0 -225
- package/dist/js/units/io.js +0 -148
- package/dist/js/units/map.js +0 -38
- package/dist/js/units/processing.js +0 -41
- package/dist/js/units/reduce.js +0 -24
- package/dist/js/units/subworkflow.js +0 -23
- package/dist/js/workflows/create.js +0 -318
- package/dist/js/workflows/index.js +0 -113
- package/dist/js/workflows/relaxation.js +0 -38
- package/src/js/context/context.js +0 -47
- package/src/js/context/mixins/ApplicationContextMixin.js +0 -19
- package/src/js/context/mixins/JobContextMixin.js +0 -36
- package/src/js/context/mixins/MaterialContextMixin.js +0 -41
- package/src/js/context/mixins/MaterialsContextMixin.js +0 -18
- package/src/js/context/mixins/MaterialsSetContextMixin.js +0 -24
- package/src/js/context/mixins/MethodDataContextMixin.js +0 -48
- package/src/js/context/mixins/WorkflowContextMixin.js +0 -25
- package/src/js/context/providers/BoundaryConditionsFormDataProvider.js +0 -72
- package/src/js/context/providers/CollinearMagnetizationContextProvider.js +0 -105
- package/src/js/context/providers/HubbardContextProviderLegacy.js +0 -67
- package/src/js/context/providers/HubbardJContextProvider.js +0 -65
- package/src/js/context/providers/HubbardUContextProvider.js +0 -95
- package/src/js/context/providers/HubbardVContextProvider.js +0 -96
- package/src/js/context/providers/IonDynamicsContextProvider.js +0 -44
- package/src/js/context/providers/MLSettingsContextProvider.js +0 -45
- package/src/js/context/providers/MLTrainTestSplitContextProvider.js +0 -43
- package/src/js/context/providers/NEBFormDataProvider.js +0 -33
- package/src/js/context/providers/NonCollinearMagnetizationContextProvider.js +0 -179
- package/src/js/context/providers/PlanewaveCutoffsContextProvider.js +0 -65
- package/src/js/context/providers/PointsGridFormDataProvider.js +0 -271
- package/src/js/context/providers/PointsPathFormDataProvider.js +0 -163
- package/src/js/context/providers/by_application/ExecutableContextProvider.js +0 -17
- package/src/js/context/providers/by_application/espresso/QENEBContextProvider.js +0 -58
- package/src/js/context/providers/by_application/espresso/QEPWXContextProvider.js +0 -168
- package/src/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js +0 -89
- package/src/js/context/providers/by_application/vasp/VASPContextProvider.js +0 -58
- package/src/js/context/providers/by_application/vasp/VASPNEBContextProvider.js +0 -48
- package/src/js/context/providers/settings.js +0 -38
- package/src/js/context/providers.js +0 -140
- package/src/js/index.js +0 -57
- package/src/js/patch.js +0 -12
- package/src/js/subworkflows/convergence/enums.js +0 -12
- package/src/js/subworkflows/convergence/factory.js +0 -15
- package/src/js/subworkflows/convergence/non_uniform_kgrid.js +0 -28
- package/src/js/subworkflows/convergence/parameter.js +0 -58
- package/src/js/subworkflows/convergence/uniform_kgrid.js +0 -22
- package/src/js/subworkflows/convergence.js +0 -196
- package/src/js/subworkflows/create.js +0 -220
- package/src/js/subworkflows/dynamic/espresso/getQpointIrrep.js +0 -35
- package/src/js/subworkflows/dynamic/index.js +0 -8
- package/src/js/subworkflows/dynamic/surfaceEnergy.js +0 -124
- package/src/js/subworkflows/index.js +0 -2
- package/src/js/subworkflows/subworkflow.js +0 -345
- package/src/js/units/assertion.js +0 -29
- package/src/js/units/assignment.js +0 -34
- package/src/js/units/base.js +0 -97
- package/src/js/units/builders/AssertionUnitConfigBuilder.js +0 -28
- package/src/js/units/builders/AssignmentUnitConfigBuilder.js +0 -36
- package/src/js/units/builders/ExecutionUnitConfigBuilder.js +0 -59
- package/src/js/units/builders/IOUnitConfigBuilder.js +0 -53
- package/src/js/units/builders/UnitConfigBuilder.js +0 -92
- package/src/js/units/builders/index.js +0 -15
- package/src/js/units/condition.js +0 -47
- package/src/js/units/execution.js +0 -267
- package/src/js/units/factory.js +0 -53
- package/src/js/units/index.js +0 -25
- package/src/js/units/io.js +0 -163
- package/src/js/units/map.js +0 -33
- package/src/js/units/processing.js +0 -39
- package/src/js/units/reduce.js +0 -17
- package/src/js/units/subworkflow.js +0 -15
- package/src/js/utils.js +0 -73
- package/src/js/workflows/create.js +0 -227
- package/src/js/workflows/index.js +0 -98
- package/src/js/workflows/relaxation.js +0 -42
- 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;
|